<?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>234877</bug_id>
          
          <creation_ts>2022-01-05 04:43:23 -0800</creation_ts>
          <short_desc>[LBSE] Rename RenderSVGShape -&gt; LegacyRenderSVGShape</short_desc>
          <delta_ts>2022-01-07 04:56:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90738</blocked>
    
    <blocked>234878</blocked>
    
    <blocked>234954</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1828245</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-05 04:43:23 -0800</bug_when>
    <thetext>Prepare to introduce RenderSVGShape for LBSE: move current RenderSVGShape.(cpp|h) code to LegacyRenderSVGShape.(cpp|h).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828247</commentid>
    <comment_count>1</comment_count>
      <attachid>448377</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-05 04:49:04 -0800</bug_when>
    <thetext>Created attachment 448377
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828249</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-05 04:55:18 -0800</bug_when>
    <thetext>I&apos;ll accidentally removed the &quot;Reviewed by NOBODY&quot; line from the ChangeLog, will fix this in the next iteration or before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828535</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-06 02:29:54 -0800</bug_when>
    <thetext>Committed r287677 (245774@trunk): &lt;https://commits.webkit.org/245774@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828536</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-06 02:30:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/87189178&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448377</attachid>
            <date>2022-01-05 04:49:04 -0800</date>
            <delta_ts>2022-01-05 07:05:06 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-234877-20220105044902.patch</filename>
            <type>text/plain</type>
            <size>115018</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTM3ZWFjOGE5Zjg2ZmU2
YzY2MTBhODUzZjdmZjZiYjA1OTM2YmNmYy4uMTJkYjFjZjMwYjZmZWM1ZjhhN2EyMmU4MzQzZmNm
NTk5YTQ4OWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAyMi0wMS0wNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gUmVuYW1lIFJlbmRlclNWR1NoYXBlIC0+IExlZ2FjeVJlbmRlclNWR1NoYXBlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ4NzcKKworICAgICAg
ICBGb2xsb3dpbmcgdGhlIGVzdGFibGlzaGVkIHByb2NlZHVyZTogcmVuYW1lIFJlbmRlclNWR1No
YXBlIC0+IExlZ2FjeVJlbmRlclNWR1NoYXBlLgorICAgICAgICBJbiBhIGZvbGxvdy11cCBwYXRj
aCBSZW5kZXJTVkdTaGFwZSB3aWxsIGJlIHJlaW50cm9kdWNlZCBmb3IgTEJTRSwgaW5oZXJpdGlu
ZyBmcm9tCisgICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0IGluc3RlYWQgb2YgTGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3QuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywg
bm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3VwcG9ydHNQYXRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRoIGNvbnN0KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Ojpjb21wdXRlQWNjZXNzaWJp
bGl0eUlzSWdub3JlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U1ZH
RWxlbWVudDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNMZWdh
Y3lTVkdTaGFwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZH
U2hhcGVPckxlZ2FjeVNWR1NoYXBlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppc0dyYXBoaWNzRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9MZWdhY3lS
ZW5kZXJTVkdTaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNW
R1NoYXBlOjpMZWdhY3lSZW5kZXJTVkdTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lS
ZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeVJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlu
cyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRl
bnRGaWxsQ29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OmZpbGxDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdT
aGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6
bm9uU2NhbGluZ1N0cm9rZVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGluZ1N0cm9rZUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHU2hhcGU6OnNob3VsZEdlbmVy
YXRlTWFya2VyUG9zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRl
clNWR1NoYXBlOjpmaWxsU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1No
YXBlOjpmaWxsU3Ryb2tlTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJT
VkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHU2hhcGU6
OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1No
YXBlOjppc1BvaW50SW5GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1No
YXBlOjppc1BvaW50SW5TdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OmdldFRvdGFsTGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJl
bmRlclNWR1NoYXBlOjpnZXRQb2ludEF0TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeVJlbmRlclNWR1NoYXBlOjpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6Om1hcmtlckZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHU2hh
cGU6Om1hcmtlclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeVJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6dXBkYXRlUmVwYWlu
dEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1NoYXBlOjpz
dHJva2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdTaGFw
ZTo6aGFzU21vb3RoU3Ryb2tlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRl
clNWR1NoYXBlOjpkcmF3TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJT
VkdTaGFwZTo6Y3JlYXRlUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5k
ZXJTVkdTaGFwZTo6cHJvY2Vzc01hcmtlclBvc2l0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9MZWdhY3lSZW5kZXJTVkdTaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
UmVuZGVyU1ZHU2hhcGU6OnNldE5lZWRzU2hhcGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5UmVuZGVyU1ZHU2hhcGU6Omhhc1BhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5UmVuZGVyU1ZHU2hhcGU6OnBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5UmVuZGVyU1ZHU2hhcGU6OmNsZWFyUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lS
ZW5kZXJTVkdTaGFwZTo6aGFzTm9uU2NhbGluZ1N0cm9rZSBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmguCisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdTaGFwZTo6Z3JhcGhpY3NFbGVtZW50IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHRWxsaXBzZTo6UmVuZGVyU1ZHRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdFbGxpcHNlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0VsbGlwc2U6OmZpbGxTaGFwZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdFbGxpcHNlOjpzdHJva2VTaGFwZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdFbGxpcHNlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0VsbGlwc2U6OnNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Vs
bGlwc2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6UmVuZGVyU1ZHUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OnN0cm9rZVNoYXBlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1BhdGg6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZWN0
OjpSZW5kZXJTVkdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnJlY3RF
bGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnVwZGF0ZVNo
YXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6ZmlsbFNo
YXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnN0cm9rZVNoYXBl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1JlY3Q6OnNoYXBlRGVwZW5kZW50
U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVjdDo6c2hhcGVE
ZXBlbmRlbnRGaWxsQ29udGFpbnMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpwb3N0QXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVu
dEludG9NYXNrSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxp
bmdTdHJva2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RB
cHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBv
c3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46
OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJl
bGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0
ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3Vw
cG9ydDo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9y
dDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAg
ICogc3ZnL1NWR0dlb21ldHJ5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHZW9t
ZXRyeUVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dlb21ldHJ5RWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdHZW9tZXRyeUVsZW1lbnQ6OmlzUG9pbnRJbkZpbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHR2VvbWV0cnlFbGVtZW50Ojppc1BvaW50SW5TdHJva2UpOgorICAgICAgICAqIHN2Zy9T
VkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZCk6CisKIDIwMjItMDEtMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIE1lZGlhUmVjb3JkZXIgc2hvdWxkIHN1cHBvcnQgdGhlIGJp
dHNQZXJTZWNvbmQgb3B0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDRlYzgzOWI1M2M0OWIxMjkzMzVi
NmZiOWQzYzc5Yjc3NzU5ZjM4OWEuLjZhNjUzOTRkMjg5NjRiODUxNTJmNzA4NzZiOTE1ZGU3N2Q4
ZmJjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDY5LDYgKzI0NjksNyBAQCByZW5kZXJpbmcvc3R5
bGUvVGV4dFNpemVBZGp1c3RtZW50LmNwcAogcmVuZGVyaW5nL3N0eWxlL1dpbGxDaGFuZ2VEYXRh
LmNwcAogcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKIHJlbmRl
cmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5jcHAKK3JlbmRlcmluZy9zdmcvTGVnYWN5UmVu
ZGVyU1ZHU2hhcGUuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcAogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Vs
bGlwc2UuY3BwCkBAIC0yNDk0LDcgKzI0OTUsNiBAQCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxH
cmFkaWVudC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAotcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwCiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDg0MzcyMTI2ZDlhYWE0ZjJjNzM1NjdkNDQ5ZTgyOGU5YjQyOTA2NTkuLjZjNWMyNzUx
M2Q5OTE4NzVkYTc5NzJmNjQwNjM5NDBhNTAyMzhlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMyNzIsNyArMzI3Miw3IEBA
CiAJCUExMDRFQzVFMjIwQTNFNEUwMENCRjY3QSAvKiBKU01vY2tQYXltZW50Q29udGFjdEZpZWxk
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwNEVD
NUMyMjBBM0U0NDAwQ0JGNjdBIC8qIEpTTW9ja1BheW1lbnRDb250YWN0RmllbGRzLmggKi87IH07
CiAJCUExMDRGMjQ0MTRDNzFGN0EwMDlFMkMyMyAvKiBDYWNoZWRTVkdEb2N1bWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwNEYyNDIxNEM3MUY3
QTAwOUUyQzIzIC8qIENhY2hlZFNWR0RvY3VtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTEwQkI1ODUxNDg0RTNBNzAwQjJFODdBIC8qIFJl
bmRlclNWR1JlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEExMEJCNTgzMTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0LmggKi87IH07Ci0J
CUExMEJCNThCMTQ4NEUzQjMwMEIyRTg3QSAvKiBSZW5kZXJTVkdTaGFwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQkI1ODkxNDg0RTNCMzAwQjJF
ODdBIC8qIFJlbmRlclNWR1NoYXBlLmggKi87IH07CisJCUExMEJCNThCMTQ4NEUzQjMwMEIyRTg3
QSAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTEwQkI1ODkxNDg0RTNCMzAwQjJFODdBIC8qIExlZ2FjeVJlbmRl
clNWR1NoYXBlLmggKi87IH07CiAJCUExMERCRjQ3MThGOTIzMTcwMDBENzBDNiAvKiBMZWdhY3lQ
cmV2aWV3TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTBEQkY0NjE4RjkyMzE3MDAwRDcwQzYgLyogTGVnYWN5UHJldmlld0xvYWRl
ckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUExMERDNzZCMTQ3NDdCQUIwMDVFMjQ3MSAvKiBTdHlsZUdyaWREYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBEQzc2OTE0NzQ3QkFCMDA1
RTI0NzEgLyogU3R5bGVHcmlkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUExMEY3QzczMjczMTAwRDAwMDhGQTlBRiAvKiBNb2RhbENvbnRh
aW5lck9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMTBGN0M3MDI3MzEwMDczMDA4RkE5QUYgLyogTW9kYWxDb250YWluZXJPYnNlcnZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NjMx
LDcgKzQ2MzEsNyBAQAogCQlDREY3NDdGMTI3MEY3NjZGMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREY3NDdGMDI3MEY3NjZGMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXJJbmxpbmVzLmggKi87IH07CiAJCUNERjc0N0YzMjcwRjc2Q0YwMDhGRUVFQyAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ3RjIyNzBGNzZDRjAwOEZFRUVDIC8qIFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmggKi87IH07CiAJCUNERjc0N0Y1
MjcwRjgzQjEwMDhGRUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGNDI3MEY4M0Ix
MDA4RkVFRUMgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wSW5saW5lcy5oICovOyB9OwotCQlDREY3
NDdGNzI3MEY4NkE0MDA4RkVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGNjI3MEY4NkE0MDA4
RkVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi87IH07CisJCUNERjc0N0Y3MjcwRjg2
QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0N0Y2MjcwRjg2QTQwMDhGRUVF
QyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLzsgfTsKIAkJQ0RGNzQ3RjkyNzBG
ODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGODI3
MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMu
aCAqLzsgfTsKIAkJQ0RGNzQ3RkIyNzBGODkxQTAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNl
TWFza2VySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RGNzQ3RkEyNzBGODkxQTAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
SW5saW5lcy5oICovOyB9OwogCQlDREY3NDgzRjE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0
aW9uc1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREY3NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMzgw
LDggKzEzMzgwLDggQEAKIAkJQTEwNEYyNDIxNEM3MUY3QTAwOUUyQzIzIC8qIENhY2hlZFNWR0Rv
Y3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFNWR0RvY3Vt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMEJCNTgyMTQ4NEUzQTcwMEIy
RTg3QSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclNWR1JlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTBCQjU4MzE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUExMEJCNTg4MTQ4NEUzQjMwMEIyRTg3QSAvKiBSZW5kZXJTVkdTaGFwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdTaGFwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExMEJCNTg5MTQ4NEUzQjMwMEIyRTg3QSAv
KiBSZW5kZXJTVkdTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTVkdTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTBCQjU4ODE0ODRF
M0IzMDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyogTGVnYWN5UmVu
ZGVyU1ZHU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVu
ZGVyU1ZHU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwRDZFOTQyMTQ0
Qzk5ODAwRkREMTREIC8qIEpTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2IC8qIExlZ2FjeVByZXZpZXdMb2FkZXJD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UHJldmlld0xv
YWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBEQzc2ODE0NzQ3
QkFCMDA1RTI0NzEgLyogU3R5bGVHcmlkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHlsZUdyaWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2MjgxLDcgKzE2MjgxLDcgQEAKIAkJQ0RGNzQ3RjAyNzBGNzY2RjAwOEZFRUVDIC8q
IFJlbmRlclNWR1Jlc291cmNlTWFya2VySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RGNzQ3RjIyNzBGNzZDRjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0N0Y0MjcwRjgz
QjEwMDhGRUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclNWR0dyYWRpZW50U3RvcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQ0RGNzQ3RjYyNzBGODZBNDAwOEZFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdTaGFwZUlubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RGNzQ3RjYyNzBGODZBNDAwOEZFRUVDIC8qIExlZ2FjeVJlbmRl
clNWR1NoYXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdTaGFwZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGNzQ3RjgyNzBGODdDQjAw
OEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0N0ZBMjcwRjg5MUEwMDhGRUVFQyAvKiBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0
ODNDMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTE0LDYgKzE4OTE0LDkgQEAKIAkJCQk0
MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAq
LywKIAkJCQk0MzY3MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5j
cHAgKi8sCiAJCQkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jv
b3QuaCAqLywKKwkJCQlBMTBCQjU4ODE0ODRFM0IzMDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZH
U2hhcGUuY3BwICovLAorCQkJCUExMEJCNTg5MTQ4NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5k
ZXJTVkdTaGFwZS5oICovLAorCQkJCUNERjc0N0Y2MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lS
ZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLywKIAkJCQk0MzY3MDg4MTEyRDlDQTRBMDAwNDQyMzQg
LyogUmVuZGVyU1ZHQmxvY2suY3BwICovLAogCQkJCTQzNjcwODgyMTJEOUNBNEEwMDA0NDIzNCAv
KiBSZW5kZXJTVkdCbG9jay5oICovLAogCQkJCUNERjc0N0VBMjcwRjZEODgwMDhGRUVFQyAvKiBS
ZW5kZXJTVkdCbG9ja0lubGluZXMuaCAqLywKQEAgLTE4OTczLDkgKzE4OTc2LDYgQEAKIAkJCQk0
MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgg
Ki8sCiAJCQkJNDM2NzA4QTUxMkQ5Q0E1QzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3BwICov
LAogCQkJCTQzNjcwOEE2MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggKi8sCi0J
CQkJQTEwQkI1ODgxNDg0RTNCMzAwQjJFODdBIC8qIFJlbmRlclNWR1NoYXBlLmNwcCAqLywKLQkJ
CQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuaCAqLywKLQkJCQlD
REY3NDdGNjI3MEY4NkE0MDA4RkVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi8sCiAJ
CQkJMDg1NEIwMDYxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHQuY3BwICovLAogCQkJ
CTA4NTRCMDA3MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0LmggKi8sCiAJCQkJMDg1
NEIwMDgxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmNwcCAqLywKQEAgLTM1
OTIwLDYgKzM1OTIwLDggQEAKIAkJCQlBMTBEQkY0NzE4RjkyMzE3MDAwRDcwQzYgLyogTGVnYWN5
UHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0IxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzY3MDhFNTEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTEwQkI1OEIxNDg0RTNCMzAwQjJFODdBIC8qIExlZ2FjeVJlbmRl
clNWR1NoYXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREY3NDdGNzI3MEY4NkE0MDA4RkVFRUMg
LyogTGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENG
RjVFMTBBMTU1QTA1MDAwQTQyMzQgLyogTGVnYWN5Um9vdElubGluZUJveC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8qIExlZ2FjeVNjaGVtZVJlZ2lzdHJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMzQjFGQTBGMEU0MTYxMDA5NjkzRjYgLyogTGVnYWN5
VGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzU0LDggKzM2NzU2LDYgQEAKIAkJCQlD
REY3NDdGOTI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEUzMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcw
OEU1MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBMTBCQjU4QjE0ODRFM0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUNERjc0N0Y3MjcwRjg2QTQwMDhGRUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDE5MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5k
ZXJTVkdUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxQjEyNTVFNEU2MDBCOUNERDAg
LyogUmVuZGVyU1ZHVGV4dFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEU5MTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDg0N2RlMTZkYjYyMzAxODhmMWJiODdlZTMy
YjI2NzMxZjRlODM5ZDYuLjU0ZDcyNWM4NTkyYmFjMzMzM2RiNDRkZDRlNWVkMjllZmJmYjQ3YTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNW
R1Jvb3QuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKQEAgLTk1LDcgKzk2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCkBA
IC05MTAsNyArOTEwLDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpl
bGVtZW50UmVjdCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3Vw
cG9ydHNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIo
KSkgfHwgaXM8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKCkpOworICAgIHJldHVybiBpczxSZW5k
ZXJUZXh0PihyZW5kZXJlcigpKSB8fCBpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIo
KSk7CiB9CiAKIFBhdGggQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBhdGgoKSBj
b25zdApAQCAtOTUzLDggKzk1Myw4IEBAIFBhdGggQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
ZWxlbWVudFBhdGgoKSBjb25zdAogICAgICAgICByZXR1cm4gUGF0aFV0aWxpdGllczo6cGF0aFdp
dGhTaHJpbmtXcmFwcGVkUmVjdHMocGl4ZWxTbmFwcGVkUmVjdHMsIDApOwogICAgIH0KIAotICAg
IGlmIChpczxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZH
U2hhcGU+KCptX3JlbmRlcmVyKS5oYXNQYXRoKCkpIHsKLSAgICAgICAgUGF0aCBwYXRoID0gZG93
bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KCptX3JlbmRlcmVyKS5wYXRoKCk7CisgICAgaWYgKGlzPExl
Z2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxMZWdhY3lSZW5kZXJT
VkdTaGFwZT4oKm1fcmVuZGVyZXIpLmhhc1BhdGgoKSkgeworICAgICAgICBQYXRoIHBhdGggPSBk
b3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4oKm1fcmVuZGVyZXIpLnBhdGgoKTsKIAogICAg
ICAgICAvLyBUaGUgU1ZHIHBhdGggaXMgaW4gdGVybXMgb2YgdGhlIHBhcmVudCdzIGJvdW5kaW5n
IGJveC4gVGhlIHBhdGggbmVlZHMgdG8gYmUgb2Zmc2V0IHRvIGZyYW1lIGNvb3JkaW5hdGVzLgog
ICAgICAgICBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPExlZ2FjeVJlbmRlclNW
R1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwCmluZGV4IDBlZDc5
YWQwYTYxODNiNTE2YzM2NGQzNmVhYWU0YzY3ZWQzMGVkMGMuLjQ4OTZlMjYzMmJjMjNkNzE3ZGU1
YTliOGRhZThmZjhkNjQ3NGM3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwCkBAIC0yMzAsNyArMjMwLDcg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSBjb25zdAogCiAgICAgLy8gU1ZHIHNoYXBlcyBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IHVubGVzcyB0aGVyZSdzIGEgY29uY3JldGUgcmVhc29uIGZvciBpbmNsdXNpb24uCiAgICAgLy8g
aHR0cHM6Ly9yYXdnaXQuY29tL3czYy9hcmlhL21hc3Rlci9zdmctYWFtL3N2Zy1hYW0uaHRtbCNl
eGNsdWRlX2VsZW1lbnRzCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSkgeworICAg
IGlmIChtX3JlbmRlcmVyLT5pc1NWR1NoYXBlT3JMZWdhY3lTVkdTaGFwZSgpKSB7CiAgICAgICAg
IGlmIChjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIHx8IGVsZW1lbnQoKS0+aGFzRXZlbnRMaXN0ZW5l
cnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGF1dG8qIHN2Z1Bh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
dGhpcywgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgewpAQCAt
Mjg0LDcgKzI4NCw3IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50
OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAKICAgICBFbGVtZW50KiBzdmdFbGVtZW50
ID0gZWxlbWVudCgpOwogCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzU1ZHU2hhcGUoKSB8fCBtX3Jl
bmRlcmVyLT5pc1NWR1BhdGgoKSB8fCBtX3JlbmRlcmVyLT5pc1NWR0ltYWdlKCkgfHwgaXM8U1ZH
VXNlRWxlbWVudD4oc3ZnRWxlbWVudCkpCisgICAgaWYgKG1fcmVuZGVyZXItPmlzU1ZHU2hhcGVP
ckxlZ2FjeVNWR1NoYXBlKCkgfHwgbV9yZW5kZXJlci0+aXNTVkdQYXRoKCkgfHwgbV9yZW5kZXJl
ci0+aXNTVkdJbWFnZSgpIHx8IGlzPFNWR1VzZUVsZW1lbnQ+KHN2Z0VsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdlOwogICAgIGlmIChtX3JlbmRlcmVyLT5p
c1NWR0ZvcmVpZ25PYmplY3QoKSB8fCBpczxTVkdHRWxlbWVudD4oc3ZnRWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JvdXA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNjU4NWE4ZDNjN2RmMmFjZDQzZjU5MDRlNWRlZTQyYjhm
NWVmNThjOS4uNTBjODUxMDUxZGEyNGU1YjljZTMxNWVkZTNlNTk4MDE1M2U0NWJmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzM2LDYgKzMzNiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYXBlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNMZWdhY3lTVkdTaGFwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dFBhdGgoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RTcGFuKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTM0OCw2ICszNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
U1ZHUmVzb3VyY2VDbGlwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgYm9vbCBpc1NWR1Jvb3RPckxlZ2FjeVNWR1Jvb3QoKSBjb25zdCB7IHJldHVybiBp
c1NWR1Jvb3QoKSB8fCBpc0xlZ2FjeVNWR1Jvb3QoKTsgfQorICAgIGJvb2wgaXNTVkdTaGFwZU9y
TGVnYWN5U1ZHU2hhcGUoKSBjb25zdCB7IHJldHVybiBpc1NWR1NoYXBlKCkgfHwgaXNMZWdhY3lT
VkdTaGFwZSgpOyB9CiAgICAgYm9vbCBpc1JlbmRlck9yTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkgfHwgaXNMZWdhY3lS
ZW5kZXJTVkdNb2RlbE9iamVjdCgpOyB9CiAKICAgICAvLyBGSVhNRTogVGhvc2UgYmVsb25nIGlu
dG8gYSBTVkcgc3BlY2lmaWMgYmFzZS1jbGFzcyBmb3IgYWxsIHJlbmRlcmVycyAoc2VlIGFib3Zl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4
IDZiNjhkZWZhZGYxM2MxOTA5YjFlMjc1MmY4NGQ1OWZjODVmOGRkMjQuLjgxNWEzMzA0NDg4NWNm
NDI3NGU3NzdhMjFjNDczOWE5ODEyMTgwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTU1OCw4ICs1NTgsOCBAQCB2b2lkIHdyaXRlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIE9wdGlvblNldDxSZW5kZXJBc1Rl
eHRGbGFnPiBiZQogICAgICAgICB0cyA8PCAiXG4iOwogICAgIH07CiAKLSAgICBpZiAoaXM8UmVu
ZGVyU1ZHU2hhcGU+KG8pKSB7Ci0gICAgICAgIHdyaXRlKHRzLCBkb3duY2FzdDxSZW5kZXJTVkdT
aGFwZT4obyksIGJlaGF2aW9yKTsKKyAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KG8p
KSB7CisgICAgICAgIHdyaXRlKHRzLCBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4obyks
IGJlaGF2aW9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXM8UmVuZGVyU1ZH
R3JhZGllbnRTdG9wPihvKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcAppbmRleCBlNTMyZjA5Njlm
ZDk1MzhjYTBlYWUyOGJhYzc2YmIxZGNhMGJmYmU4Li40NTU0NzM1MWY0ZDAzZWM5NmYzYWIzMjFl
Y2Q5NjhiMWNjNWQ1YTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMTc3LDcgKzE3Nyw3
IEBAIHN0YXRpYyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYg
ciwgY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIC8vIGltYWdlLCBsaW5lLCBwYXRoLCBwb2x5Z29u
LCBwb2x5bGluZSwgcmVjdCwgdGV4dCBhbmQgdXNlLgogc3RhdGljIGJvb2wgaXNHcmFwaGljc0Vs
ZW1lbnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRl
cmVyLmlzU1ZHU2hhcGUoKSB8fCByZW5kZXJlci5pc1NWR1RleHQoKSB8fCByZW5kZXJlci5pc1NW
R0ltYWdlKCkgfHwgcmVuZGVyZXIuZWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp1c2VU
YWcpOworICAgIHJldHVybiByZW5kZXJlci5pc0xlZ2FjeVNWR1NoYXBlKCkgfHwgcmVuZGVyZXIu
aXNTVkdUZXh0KCkgfHwgcmVuZGVyZXIuaXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLmVsZW1lbnQo
KS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKTsKIH0KIAogLy8gVGhlIFNWRyBhZGRGb2N1
c1JpbmdSZWN0cygpIG1ldGhvZCBhZGRzIHJlY3RzIGluIGxvY2FsIGNvb3JkaW5hdGVzIHNvIHRo
ZSBkZWZhdWx0IGFic29sdXRlRm9jdXNSaW5nUXVhZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU1
Y2YzOGZjMWI5OGVhY2Y4YmIwZjNkODEyOGZiNWVhOTliM2U2MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwCkBA
IC0wLDAgKzEsNTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBK
ZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1NoYXBlLmgiCisKKyNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZH
U2hhcGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYXRoRGF0YS5oIgorI2luY2x1ZGUgIlNW
R1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRl
ICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
TGVnYWN5UmVuZGVyU1ZHU2hhcGUpOworCitMZWdhY3lSZW5kZXJTVkdTaGFwZTo6TGVnYWN5UmVu
ZGVyU1ZHU2hhcGUoU1ZHR3JhcGhpY3NFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0
eWxlKQorICAgIDogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92ZShz
dHlsZSkpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZShmYWxzZSkgLy8gRGVmYXVsdCBp
cyBmYWxzZSwgdGhlIGNhY2hlZCByZWN0cyBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nLgor
ICAgICwgbV9uZWVkc1NoYXBlVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2Ug
Z3JhYiBhIFBhdGggb2JqZWN0IG9uY2UgZnJvbSBTVkdHcmFwaGljc0VsZW1lbnQuCisgICAgLCBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpIC8vIERlZmF1bHQgaXMgdHJ1ZSwgc28gd2UgZ3Jh
YiBhIEFmZmluZVRyYW5zZm9ybSBvYmplY3Qgb25jZSBmcm9tIFNWR0dyYXBoaWNzRWxlbWVudC4K
K3sKK30KKworTGVnYWN5UmVuZGVyU1ZHU2hhcGU6On5MZWdhY3lSZW5kZXJTVkdTaGFwZSgpID0g
ZGVmYXVsdDsKKwordm9pZCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxl
bWVudCgpCit7CisgICAgbV9wYXRoID0gY3JlYXRlUGF0aCgpOworICAgIHByb2Nlc3NNYXJrZXJQ
b3NpdGlvbnMoKTsKKworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gY2FsY3VsYXRlT2JqZWN0Qm91
bmRpbmdCb3goKTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gY2FsY3VsYXRlU3Ryb2tlQm91
bmRpbmdCb3goKTsKK30KKworYm9vbCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNv
bnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGJlZm9y
ZSBhc3NpZ25pbmcgYSBuZXcgUGF0aCB0byBtX3BhdGguCisgICAgLy8gQnV0IHRoaXMgYnVnIGNh
biBoYXBwZW4gaWYgdGhpcyByZW5kZXJlciB3YXMgY3JlYXRlZCBhbmQgaXRzIGxheW91dCB3YXMg
bm90CisgICAgLy8gZG9uZSBiZWZvcmUgcGFpbnRpbmcuIEFzc2VydCB0aGlzIGRpZCBub3QgaGFw
cGVuIGJ1dCBkbyBub3QgY3Jhc2guCisgICAgQVNTRVJUKGhhc1BhdGgoKSk7CisgICAgcmV0dXJu
ICFoYXNQYXRoKCkgfHwgcGF0aCgpLmlzRW1wdHkoKTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJT
VkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LmZpbGxQYXRoKHBhdGgoKSk7Cit9CisKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHU2hh
cGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9wYXRoKTsKKyAgICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworCisgICAg
aWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkKKyAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxpbmdT
dHJva2VQYXRoKHVzZVBhdGgsIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSk7CisKKyAgICBj
b250ZXh0LnN0cm9rZVBhdGgoKnVzZVBhdGgpOworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1No
YXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBQb2ludENvb3JkaW5hdGVTcGFjZSBwb2ludENvb3JkaW5hdGVTcGFjZSkKK3sKKyAgICBBU1NF
UlQobV9wYXRoKTsKKworICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkgJiYgcG9pbnRDb29y
ZGluYXRlU3BhY2UgIT0gTG9jYWxDb29yZGluYXRlU3BhY2UpIHsKKyAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7
CisgICAgICAgIFBhdGgqIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0
KCksIG5vblNjYWxpbmdUcmFuc2Zvcm0pOworICAgICAgICByZXR1cm4gdXNlUGF0aC0+c3Ryb2tl
Q29udGFpbnMobm9uU2NhbGluZ1RyYW5zZm9ybS5tYXBQb2ludChwb2ludCksIFt0aGlzXSAoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0Ojph
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMocG9pbnQs
IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMp
OworICAgIH0pOworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVu
dEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmls
bFJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhdGgoKS5jb250YWlucyhwb2ludCwgZmlsbFJ1
bGUpOworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBjb25zdCBXaW5kUnVsZSBmaWxs
UnVsZSkKK3sKKyAgICBpZiAobV9maWxsQm91bmRpbmdCb3guaXNFbXB0eSgpIHx8ICFtX2ZpbGxC
b3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZH
UmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0Nv
bG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgTGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVp
cmVzU3Ryb2tlKQoreworICAgIGlmIChzdHJva2VCb3VuZGluZ0JveCgpLmlzRW1wdHkoKSB8fCAh
c3Ryb2tlQm91bmRpbmdCb3goKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYm
ICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUo
KSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBMZWdhY3lSZW5k
ZXJTVkdTaGFwZTo6bGF5b3V0KCkKK3sKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
IGxheW91dENoZWNrUG9pbnQ7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywg
U1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JTVkdSZXBhaW50RHVyaW5nTGF5b3V0KCp0aGlzKSAm
JiBzZWxmTmVlZHNMYXlvdXQoKSk7CisKKyAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSBmYWxzZTsKKworICAgIGlmIChtX25lZWRzU2hhcGVVcGRhdGUgfHwgbV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpOwor
ICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlUmVwYWlu
dEJvdW5kaW5nQm94KCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7
CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOworICAgIH0K
KworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFu
c2Zvcm0gPSBncmFwaGljc0VsZW1lbnQoKS5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAg
ICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBh
bGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBp
ZiAoZXZlckhhZExheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKQorICAgICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCgqdGhpcyk7CisKKyAgICAvLyBJZiBvdXIg
Ym91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KKyAgICBpZiAodXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cykKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRl
ckxheW91dCgpOworICAgIGNsZWFyTmVlZHNMYXlvdXQoKTsKK30KKworUGF0aCogTGVnYWN5UmVu
ZGVyU1ZHU2hhcGU6Om5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlVHJhbnNmb3JtKSBjb25zdAoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxQYXRoPiB0ZW1wUGF0aDsKKworICAgIHRlbXBQYXRoLmdldCgpID0gKnBh
dGg7CisgICAgdGVtcFBhdGguZ2V0KCkudHJhbnNmb3JtKHN0cm9rZVRyYW5zZm9ybSk7CisKKyAg
ICByZXR1cm4gJnRlbXBQYXRoLmdldCgpOworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1NoYXBl
OjpzZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlVHJh
bnNmb3JtLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIHN0
ZDo6b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gc3Ryb2tlVHJhbnNmb3JtLmlu
dmVyc2UoKTsKKyAgICBpZiAoIWludmVyc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0o
aW52ZXJzZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQWZmaW5lVHJhbnNmb3Jt
IExlZ2FjeVJlbmRlclNWR1NoYXBlOjpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZ3JhcGhpY3NFbGVtZW50KCkuZ2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJs
ZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Cit9CisKK2Jvb2wgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6
OnNob3VsZEdlbmVyYXRlTWFya2VyUG9zaXRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxl
KCkuc3ZnU3R5bGUoKS5oYXNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZ3JhcGhpY3NFbGVtZW50KCkuc3VwcG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCkg
fHwgcmVzb3VyY2VzLT5tYXJrZXJNaWQoKSB8fCByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworfQor
Cit2b2lkIExlZ2FjeVJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBHcmFwaGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCkKK3sKKyAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQgPSAmb3JpZ2luYWxDb250ZXh0OworICAgIENvbG9yIGZhbGxiYWNr
Q29sb3I7CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGZh
bGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZSgqdGhpcywgc3R5bGUsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBw
bHlUb0ZpbGwpKQorICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKCp0aGlzLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxs
LCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tS
ZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2Uo
KTsKKyAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3Ip
OworICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UoKnRoaXMs
IHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkKKyAg
ICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSgqdGhpcywg
Y29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCwgbnVsbHB0ciwgdGhp
cyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZVNoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0JiBvcmln
aW5hbENvbnRleHQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gJm9yaWdpbmFs
Q29udGV4dDsKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNv
dXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQ
YWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAg
aWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBj
b250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKQorICAgICAgICAg
ICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRl
eHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSwgbnVsbHB0ciwgdGhpcyk7
CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJT
VkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBm
YWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlm
IChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0aGlzLCBzdHlsZSwgY29udGV4dCwg
UmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkKKyAgICAgICAgICAgICAgICBm
YWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVy
U1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghc3R5bGUoKS5oYXNWaXNpYmxlU3Ry
b2tlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CisgICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2Uo
KSkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNj
YWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgaWYgKCFzZXR1cE5vblNjYWxpbmdTdHJv
a2VDb250ZXh0KG5vblNjYWxpbmdUcmFuc2Zvcm0sIHN0YXRlU2F2ZXIpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBzdHJva2VTaGFwZShzdHlsZSgpLCBjb250ZXh0KTsKK30KKwor
dm9pZCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMoUGFpbnRJbmZvJiBj
aGlsZFBhaW50SW5mbykKK3sKKyAgICBhdXRvIHBhaW50T3JkZXIgPSBSZW5kZXJTdHlsZTo6cGFp
bnRUeXBlc0ZvclBhaW50T3JkZXIoc3R5bGUoKS5wYWludE9yZGVyKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwYWludE9yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN3aXRj
aCAocGFpbnRPcmRlci5hdChpKSkgeworICAgICAgICBjYXNlIFBhaW50VHlwZTo6RmlsbDoKKyAg
ICAgICAgICAgIGZpbGxTaGFwZShzdHlsZSgpLCBjaGlsZFBhaW50SW5mby5jb250ZXh0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGFpbnRUeXBlOjpTdHJva2U6CisgICAg
ICAgICAgICBzdHJva2VTaGFwZShjaGlsZFBhaW50SW5mby5jb250ZXh0KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGFpbnRUeXBlOjpNYXJrZXJzOgorICAgICAgICAgICAg
aWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZHJhd01h
cmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0
KCkucGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpG
b3JlZ3JvdW5kCisgICAgICAgIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6
OkhpZGRlbiB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgIGlmICghU1ZH
UmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94
LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
YWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY2hpbGRQYWludEluZm8uY29udGV4dCgpKTsKKyAgICBjaGls
ZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgIGlmIChj
aGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSB7CisgICAgICAg
IFNWR1JlbmRlcmluZ0NvbnRleHQgcmVuZGVyaW5nQ29udGV4dCgqdGhpcywgY2hpbGRQYWludElu
Zm8pOworCisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0LmlzUmVuZGVyaW5nUHJlcGFyZWQo
KSkgeworICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUo
KS5zdmdTdHlsZSgpOworICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLnNoYXBlUmVuZGVyaW5nKCkg
PT0gU2hhcGVSZW5kZXJpbmc6OkNyaXNwRWRnZXMpCisgICAgICAgICAgICAgICAgY2hpbGRQYWlu
dEluZm8uY29udGV4dCgpLnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICAgICAgICAg
IGZpbGxTdHJva2VNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChzdHlsZSgpLm91dGxpbmVXaWR0aCgpKQorICAgICAgICBwYWludE91dGxpbmUoY2hp
bGRQYWludEluZm8sIEludFJlY3QoYm91bmRpbmdCb3gpKTsKK30KKworLy8gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgpIHNpbmNlIHdlIGNhbGwgcGFpbnRP
dXRsaW5lKCkKKy8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91ciBjb29yZCBzeXN0ZW0sIHJldHVy
biBsb2NhbCBjb29yZHMKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCopCit7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gTGF5b3V0
UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBpZiAoIXJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7Cit9CisKK2Jvb2wgTGVnYWN5UmVu
ZGVyU1ZHU2hhcGU6OmlzUG9pbnRJbkZpbGwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7Cisg
ICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBzdHlsZSgpLnN2Z1N0
eWxlKCkuZmlsbFJ1bGUoKSk7Cit9CisKK2Jvb2wgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OmlzUG9p
bnRJblN0cm9rZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoIXN0eWxlKCku
c3ZnU3R5bGUoKS5oYXNTdHJva2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQsIExvY2FsQ29vcmRpbmF0ZVNw
YWNlKTsKK30KKworZmxvYXQgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFsTGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGFzUGF0aCgpID8gcGF0aCgpLmxlbmd0aCgpIDogY3JlYXRl
UGF0aCgpLT5sZW5ndGgoKTsKK30KKworRmxvYXRQb2ludCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6
Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
UGF0aCgpID8gcGF0aCgpLnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpIDogY3JlYXRlUGF0aCgpLT5w
b2ludEF0TGVuZ3RoKGRpc3RhbmNlKTsKK30KKworYm9vbCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6
bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0
aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91
bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KKyAgICBpZiAoaGl0VGVzdEFjdGlv
biAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxv
YXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3Io
QWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgaWYgKCFT
VkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2Nv
cGUgaGl0VGVzdFNjb3BlKCp0aGlzKTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRS
dWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3Qs
IHN0eWxlKCkucG9pbnRlckV2ZW50cygpKTsKKyAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgp
LnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKKyAgICBpZiAoaXNWaXNpYmxl
IHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZp
bGxSdWxlID0gc3ZnU3R5bGUuZmlsbFJ1bGUoKTsKKyAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xp
cENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUuY2xpcFJ1bGUoKTsK
KyAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2Z1N0eWxlLmhhc1N0cm9r
ZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VDb250YWlucyhsb2NhbFBv
aW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5j
YW5IaXRGaWxsICYmIChzdmdTdHlsZS5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxs
KSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxS
dWxlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRCb3VuZGluZ0JveCAmJiBvYmpl
Y3RCb3VuZGluZ0JveCgpLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSkgeworICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0
VGVzdCgpLCByZXF1ZXN0LCBmbG9vcmVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpID09IEhpdFRl
c3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlckZvclR5cGUoU1ZHTWFya2VyVHlwZSB0eXBlLCBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBt
YXJrZXJNaWQsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBTdGFydE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIG1hcmtl
clN0YXJ0OworICAgIGNhc2UgTWlkTWFya2VyOgorICAgICAgICByZXR1cm4gbWFya2VyTWlkOwor
ICAgIGNhc2UgRW5kTWFya2VyOgorICAgICAgICByZXR1cm4gbWFya2VyRW5kOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitGbG9hdFJlY3Qg
TGVnYWN5UmVuZGVyU1ZHU2hhcGU6Om1hcmtlclJlY3QoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpOworCisgICAgYXV0
byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRl
cmVyKCp0aGlzKTsKKyAgICBBU1NFUlQocmVzb3VyY2VzKTsKKworICAgIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQo
KTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5t
YXJrZXJFbmQoKTsKKyAgICBBU1NFUlQobWFya2VyU3RhcnQgfHwgbWFya2VyTWlkIHx8IG1hcmtl
ckVuZCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKKyAgICB1bnNpZ25lZCBzaXplID0g
bV9tYXJrZXJQb3NpdGlvbnMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIg
PSBtYXJrZXJGb3JUeXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBt
YXJrZXJNaWQsIG1hcmtlckVuZCkpCisgICAgICAgICAgICBib3VuZGFyaWVzLnVuaXRlKG1hcmtl
ci0+bWFya2VyQm91bmRhcmllcyhtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0aW9uKG1fbWFya2Vy
UG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3NpdGlvbnNbaV0uYW5nbGUsIHN0cm9rZVdp
ZHRoKSkpOworICAgIH0KKyAgICByZXR1cm4gYm91bmRhcmllczsKK30KKworRmxvYXRSZWN0IExl
Z2FjeVJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHBhdGgoKS5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IExlZ2Fj
eVJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcGF0aCk7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94ID0gbV9m
aWxsQm91bmRpbmdCb3g7CisKKyAgICBpZiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0cm9rZSgp
KSB7CisgICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKKyAgICAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2NhbGluZ1N0cm9rZVRyYW5z
Zm9ybSgpOworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBp
bnZlcnNlID0gbm9uU2NhbGluZ1RyYW5zZm9ybS5pbnZlcnNlKCkpIHsKKyAgICAgICAgICAgICAg
ICBQYXRoKiB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgobV9wYXRoLmdldCgpLCBub25T
Y2FsaW5nVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRp
bmdSZWN0ID0gdXNlUGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDb250ZXh0Jik+IHsgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChjb250ZXh0LCBzdHlsZSgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgfSB9KTsKKyAgICAg
ICAgICAgICAgICBzdHJva2VCb3VuZGluZ1JlY3QgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChz
dHJva2VCb3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVu
aXRlKHN0cm9rZUJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShwYXRoKCkuc3Ryb2tlQm91bmRp
bmdSZWN0KEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+IHsgW3RoaXNdIChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0Ojph
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAg
ICAgICAgIH0gfSkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX21hcmtlclBvc2l0
aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKG1hcmtlclJl
Y3Qoc3Ryb2tlV2lkdGgoKSkpOworCisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OworfQor
Cit2b2lkIExlZ2FjeVJlbmRlclNWR1NoYXBlOjp1cGRhdGVSZXBhaW50Qm91bmRpbmdCb3goKQor
eworICAgIG1fcmVwYWludEJvdW5kaW5nQm94RXhjbHVkaW5nU2hhZG93ID0gc3Ryb2tlQm91bmRp
bmdCb3goKTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhS
ZXNvdXJjZXMoKnRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94RXhjbHVkaW5nU2hhZG93KTsKKwor
ICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9yZXBhaW50Qm91bmRpbmdCb3hFeGNsdWRpbmdT
aGFkb3c7Cit9CisKK2Zsb2F0IExlZ2FjeVJlbmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCgpIGNv
bnN0Cit7CisgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KCZncmFwaGljc0VsZW1l
bnQoKSk7CisgICAgcmV0dXJuIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5z
dHJva2VXaWR0aCgpKTsKK30KKworYm9vbCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6aGFzU21vb3Ro
U3Ryb2tlKCkgY29uc3QKK3sKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBz
dHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgcmV0dXJuIHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgp
LmlzRW1wdHkoKQorICAgICAgICAmJiBzdHlsZSgpLnN0cm9rZU1pdGVyTGltaXQoKSA9PSBzdHls
ZSgpLmluaXRpYWxTdHJva2VNaXRlckxpbWl0KCkKKyAgICAgICAgJiYgc3R5bGUoKS5qb2luU3R5
bGUoKSA9PSBzdHlsZSgpLmluaXRpYWxKb2luU3R5bGUoKQorICAgICAgICAmJiBzdHlsZSgpLmNh
cFN0eWxlKCkgPT0gc3R5bGUoKS5pbml0aWFsQ2FwU3R5bGUoKTsKK30KKwordm9pZCBMZWdhY3lS
ZW5kZXJTVkdTaGFwZTo6ZHJhd01hcmtlcnMoUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAg
QVNTRVJUKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpOworCisgICAgYXV0byogcmVzb3Vy
Y2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlz
KTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwor
ICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtl
ck1pZCgpOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJj
ZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAh
bWFya2VyRW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRo
aXMtPnN0cm9rZVdpZHRoKCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IG1fbWFya2VyUG9zaXRpb25z
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyID0gbWFya2VyRm9yVHlwZSht
X21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJF
bmQpKQorICAgICAgICAgICAgbWFya2VyLT5kcmF3KHBhaW50SW5mbywgbWFya2VyLT5tYXJrZXJU
cmFuc2Zvcm1hdGlvbihtX21hcmtlclBvc2l0aW9uc1tpXS5vcmlnaW4sIG1fbWFya2VyUG9zaXRp
b25zW2ldLmFuZ2xlLCBzdHJva2VXaWR0aCkpOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRy
PFBhdGg+IExlZ2FjeVJlbmRlclNWR1NoYXBlOjpjcmVhdGVQYXRoKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxQYXRoPihwYXRoRnJvbUdyYXBoaWNzRWxlbWVudCgmZ3JhcGhpY3NF
bGVtZW50KCkpKTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6cHJvY2Vzc01hcmtl
clBvc2l0aW9ucygpCit7CisgICAgbV9tYXJrZXJQb3NpdGlvbnMuY2xlYXIoKTsKKworICAgIGlm
ICghc2hvdWxkR2VuZXJhdGVNYXJrZXJQb3NpdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1fcGF0aCk7CisKKyAgICBTVkdNYXJrZXJEYXRhIG1hcmtlckRhdGEobV9tYXJr
ZXJQb3NpdGlvbnMsIFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJl
cigqdGhpcyktPm1hcmtlclJldmVyc2VTdGFydCgpKTsKKyAgICBtX3BhdGgtPmFwcGx5KFsmbWFy
a2VyRGF0YV0oY29uc3QgUGF0aEVsZW1lbnQmIHBhdGhFbGVtZW50KSB7CisgICAgICAgIFNWR01h
cmtlckRhdGE6OnVwZGF0ZUZyb21QYXRoRWxlbWVudChtYXJrZXJEYXRhLCBwYXRoRWxlbWVudCk7
CisgICAgfSk7CisgICAgbWFya2VyRGF0YS5wYXRoSXNEb25lKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZGNhMTk4MWYyMGE1ODFiMDA1MzYwMmE5OGUxNTQ3MmEzNmVjYzVmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdT
aGFwZS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyRGF0
YS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQ
YXRoOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CitjbGFzcyBTVkdHcmFwaGljc0VsZW1lbnQ7
CisKK2NsYXNzIExlZ2FjeVJlbmRlclNWR1NoYXBlIDogcHVibGljIExlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKExlZ2FjeVJlbmRlclNWR1No
YXBlKTsKK3B1YmxpYzoKKyAgICBlbnVtIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHsKKyAgICAgICAg
R2xvYmFsQ29vcmRpbmF0ZVNwYWNlLAorICAgICAgICBMb2NhbENvb3JkaW5hdGVTcGFjZQorICAg
IH07CisgICAgTGVnYWN5UmVuZGVyU1ZHU2hhcGUoU1ZHR3JhcGhpY3NFbGVtZW50JiwgUmVuZGVy
U3R5bGUmJik7CisgICAgdmlydHVhbCB+TGVnYWN5UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIGlu
bGluZSBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBoaWNzRWxlbWVudCgpIGNvbnN0OworCisgICAg
dm9pZCBzZXROZWVkc1NoYXBlVXBkYXRlKCkgeyBtX25lZWRzU2hhcGVVcGRhdGUgPSB0cnVlOyB9
CisgICAgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSBmaW5hbCB7IG1fbmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQorICAgIGJvb2wgbmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkg
ZmluYWwgeyByZXR1cm4gbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGU7IH0KKyAgICB2b2lkIHNldE5l
ZWRzVHJhbnNmb3JtVXBkYXRlKCkgZmluYWwgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmluZ0Rpc2FibGVkKCkgY29uc3QgPSAwOworCisgICAg
Ym9vbCBpc1BvaW50SW5GaWxsKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBib29sIGlzUG9pbnRJ
blN0cm9rZShjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICBmbG9hdCBnZXRUb3RhbExlbmd0aCgp
IGNvbnN0OworICAgIEZsb2F0UG9pbnQgZ2V0UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkg
Y29uc3Q7CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7
IH0KKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGgp
OworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisgICAgdm9pZCBjbGVhclBhdGgoKSB7
IG1fcGF0aCA9IG51bGxwdHI7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZWxlbWVudCgpIGNv
bnN0ID0gZGVsZXRlOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBQb2ludENvb3Jk
aW5hdGVTcGFjZSA9IEdsb2JhbENvb3JkaW5hdGVTcGFjZSk7CisgICAgdmlydHVhbCBib29sIHNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVs
ZSkgY29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGhhc1Nt
b290aFN0cm9rZSgpIGNvbnN0OworCisgICAgYm9vbCBoYXNOb25TY2FsaW5nU3Ryb2tlKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS5zdmdTdHlsZSgpLnZlY3RvckVmZmVjdCgpID09IFZlY3RvckVm
ZmVjdDo6Tm9uU2NhbGluZ1N0cm9rZTsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5n
U3Ryb2tlVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgUGF0aCogbm9uU2NhbGluZ1N0cm9rZVBhdGgo
Y29uc3QgUGF0aCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCisgICAgRmxvYXRS
ZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94
OworCitwcml2YXRlOgorICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZvciB0aGUgZmls
bCBhbmQgdGhlIHN0cm9rZQorICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
LCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlID0gV2lu
ZFJ1bGU6Ok5vblplcm8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIEZsb2F0UmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcmVwYWludEJv
dW5kaW5nQm94OyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIEFm
ZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9j
YWxUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgaXNMZWdhY3lTVkdTaGFwZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0KKworICAgIHZvaWQgbGF5b3V0KCkg
ZmluYWw7CisgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIGZp
bmFsOworICAgIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29u
c3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHBhaW50Q29udGFpbmVyID0gMCkgZmluYWw7CisKKyAgICBib29sIG5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbikgZmluYWw7CisKKyAgICBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbGxCb3VuZGlu
Z0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlT2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlU3Ryb2tlQm91
bmRpbmdCb3goKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVJlcGFpbnRCb3VuZGluZ0JveCgpOwor
CisgICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKKworICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVN
YXJrZXJQb3NpdGlvbnMoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWFya2VyUmVjdChmbG9hdCBz
dHJva2VXaWR0aCkgY29uc3Q7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhdGg+IGNyZWF0
ZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NNYXJrZXJQb3NpdGlvbnMoKTsKKworICAg
IHZvaWQgZmlsbFNoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0Jik7Cisg
ICAgdm9pZCBzdHJva2VTaGFwZShjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dCYp
OworICAgIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBmaWxs
U3Ryb2tlTWFya2VycyhQYWludEluZm8mKTsKKyAgICB2b2lkIGRyYXdNYXJrZXJzKFBhaW50SW5m
byYpOworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAg
ICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3hFeGNsdWRpbmdTaGFkb3c7CisKKyAgICBi
b29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsKKyAgICBib29sIG1fbmVlZHNTaGFwZVVw
ZGF0ZSA6IDE7CisgICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKKworICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRo
PiBtX3BhdGg7CisgICAgVmVjdG9yPE1hcmtlclBvc2l0aW9uPiBtX21hcmtlclBvc2l0aW9uczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19S
RU5ERVJfT0JKRUNUKExlZ2FjeVJlbmRlclNWR1NoYXBlLCBpc0xlZ2FjeVNWR1NoYXBlKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR1No
YXBlSW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJT
VkdTaGFwZUlubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmJiNTQ0MzhkYzc2MzRmZWUxNmEzZWVhMjk3
MjZmY2UwMDJhZjFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9MZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaApAQCAtMCwwICsxLDM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5o
IgorI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2lubGluZSBTVkdHcmFwaGljc0VsZW1lbnQmIExlZ2FjeVJlbmRlclNWR1NoYXBlOjpncmFw
aGljc0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBkb3duY2FzdDxTVkdHcmFwaGljc0Vs
ZW1lbnQ+KExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0OjplbGVtZW50KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0VsbGlwc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdFbGxpcHNlLmNwcAppbmRleCA3ZGFjZjNhZGYyNTUxMGFiZGZhZDcyYjk5MWYzZDE4
OWFiY2JmNmJiLi4zNjU2OWIxOTkxYjdhOTRhZTgyOTkxNWU3ZjE5ODJhNjdiNzM3M2Q2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRWxsaXBzZS5jcHAK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdFbGxpcHNlLmgiCiAKLSNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZUlubGluZXMuaCIKKyNpbmNs
dWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
U1ZHRWxsaXBzZUVsZW1lbnQuaCIKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR0VsbGlwc2UpOwogCiBSZW5k
ZXJTVkdFbGxpcHNlOjpSZW5kZXJTVkdFbGxpcHNlKFNWR0dyYXBoaWNzRWxlbWVudCYgZWxlbWVu
dCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlclNWR1NoYXBlKGVsZW1lbnQsIFdU
Rk1vdmUoc3R5bGUpKQorICAgIDogTGVnYWN5UmVuZGVyU1ZHU2hhcGUoZWxlbWVudCwgV1RGTW92
ZShzdHlsZSkpCiAgICAgLCBtX3VzZVBhdGhGYWxsYmFjayhmYWxzZSkKIHsKIH0KQEAgLTYxLDgg
KzYxLDggQEAgdm9pZCBSZW5kZXJTVkdFbGxpcHNlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkgewotICAg
ICAgICAvLyBGYWxsYmFjayB0byBSZW5kZXJTVkdTaGFwZSBpZiBzaGFwZSBoYXMgYSBub24tc2Nh
bGluZyBzdHJva2UuCi0gICAgICAgIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVt
ZW50KCk7CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIExlZ2FjeVJlbmRlclNWR1NoYXBlIGlmIHNo
YXBlIGhhcyBhIG5vbi1zY2FsaW5nIHN0cm9rZS4KKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHU2hh
cGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbV91c2VQYXRoRmFsbGJhY2sg
PSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTksNyArOTksNyBAQCB2b2lkIFJl
bmRlclNWR0VsbGlwc2U6OmNhbGN1bGF0ZVJhZGlpQW5kQ2VudGVyKCkKIHZvaWQgUmVuZGVyU1ZH
RWxsaXBzZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBpZiAobV91c2VQYXRoRmFsbGJhY2spIHsKLSAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OmZpbGxT
aGFwZShjb250ZXh0KTsKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShj
b250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjb250ZXh0LmZpbGxFbGxpcHNl
KG1fZmlsbEJvdW5kaW5nQm94KTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFJlbmRlclNWR0Vs
bGlwc2U6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBp
ZiAoIXN0eWxlKCkuaGFzVmlzaWJsZVN0cm9rZSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KG1fdXNlUGF0aEZhbGxiYWNrKSB7Ci0gICAgICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFw
ZShjb250ZXh0KTsKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNv
bnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBz
ZShtX2ZpbGxCb3VuZGluZ0JveCk7CkBAIC0xMTksMTEgKzExOSwxMSBAQCB2b2lkIFJlbmRlclNW
R0VsbGlwc2U6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIGJv
b2wgUmVuZGVyU1ZHRWxsaXBzZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgUG9pbnRDb29yZGluYXRlU3BhY2UgcG9pbnRDb29yZGluYXRlU3Bh
Y2UpCiB7CiAgICAgLy8gVGhlIG9wdGltaXplZCBjb250YWlucyBjb2RlIGJlbG93IGRvZXMgbm90
IHN1cHBvcnQgbm9uLXNtb290aCBzdHJva2VzIHNvIHdlIG5lZWQKLSAgICAvLyB0byBmYWxsIGJh
Y2sgdG8gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMgaW4gdGhl
c2UgY2FzZXMuCisgICAgLy8gdG8gZmFsbCBiYWNrIHRvIExlZ2FjeVJlbmRlclNWR1NoYXBlOjpz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zIGluIHRoZXNlIGNhc2VzLgogICAgIGlmIChtX3Vz
ZVBhdGhGYWxsYmFjayB8fCAhaGFzU21vb3RoU3Ryb2tlKCkpIHsKICAgICAgICAgaWYgKCFoYXNQ
YXRoKCkpCi0gICAgICAgICAgICBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxlbWVu
dCgpOwotICAgICAgICByZXR1cm4gUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tl
Q29udGFpbnMocG9pbnQsIHBvaW50Q29vcmRpbmF0ZVNwYWNlKTsKKyAgICAgICAgICAgIExlZ2Fj
eVJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CisgICAgICAgIHJldHVy
biBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2lu
dCwgcG9pbnRDb29yZGluYXRlU3BhY2UpOwogICAgIH0KIAogICAgIGZsb2F0IGhhbGZTdHJva2VX
aWR0aCA9IHN0cm9rZVdpZHRoKCkgLyAyOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgUmVuZGVy
U1ZHRWxsaXBzZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgUG9pCiBib29sIFJlbmRlclNWR0VsbGlwc2U6OnNoYXBlRGVwZW5kZW50RmlsbENv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSkg
Y29uc3QKIHsKICAgICBpZiAobV91c2VQYXRoRmFsbGJhY2spCi0gICAgICAgIHJldHVybiBSZW5k
ZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsK
KyAgICAgICAgcmV0dXJuIExlZ2FjeVJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxD
b250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwogCiAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSBGbG9h
dFBvaW50KG1fY2VudGVyLngoKSAtIHBvaW50LngoKSwgbV9jZW50ZXIueSgpIC0gcG9pbnQueSgp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdF
bGxpcHNlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2Uu
aAppbmRleCA1NTZhMzU0NDI0MjQ1ZTY1MDcwZGZhZjVlNWY1NGYzMzdlYjFhMGVkLi44ODUzMGRj
MWU3YWQ0YmQ0NTAzYTVjNWM2NjE2ODhlMjQyZTJmYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0VsbGlwc2UuaApAQCAtMjYsMTEgKzI2LDExIEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKyNpbmNsdWRlICJM
ZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJl
bmRlclNWR0VsbGlwc2UgZmluYWwgOiBwdWJsaWMgUmVuZGVyU1ZHU2hhcGUgeworY2xhc3MgUmVu
ZGVyU1ZHRWxsaXBzZSBmaW5hbCA6IHB1YmxpYyBMZWdhY3lSZW5kZXJTVkdTaGFwZSB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJTVkdFbGxpcHNlKTsKIHB1YmxpYzoKICAgICBS
ZW5kZXJTVkdFbGxpcHNlKFNWR0dyYXBoaWNzRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwpAQCAt
NDAsNyArNDAsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyU1ZHRWxsaXBzZSI7IH0KIAogICAgIHZvaWQgdXBk
YXRlU2hhcGVGcm9tRWxlbWVudCgpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNlUGF0aEZhbGxiYWNrID8gUmVuZGVyU1ZHU2hhcGU6Omlz
RW1wdHkoKSA6IG1fZmlsbEJvdW5kaW5nQm94LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNlUGF0aEZhbGxiYWNrID8gTGVnYWN5UmVu
ZGVyU1ZHU2hhcGU6OmlzRW1wdHkoKSA6IG1fZmlsbEJvdW5kaW5nQm94LmlzRW1wdHkoKTsgfQog
ICAgIGJvb2wgaXNSZW5kZXJpbmdEaXNhYmxlZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc3Ry
b2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCBlMDEwYzljNTQxYjdk
ZGQzMGY5NmIzNjJmNjExYjY0MzcwNjRhZDI3Li43ZWQ1MzdjOTI3OTM3NzBmNDQ4OGFlMjlkZjQw
NzI3ZDdlYjFhM2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1BhdGgpOwogCiBSZW5kZXJTVkdQYXRoOjpS
ZW5kZXJTVkdQYXRoKFNWR0dyYXBoaWNzRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBz
dHlsZSkKLSAgICA6IFJlbmRlclNWR1NoYXBlKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQorICAg
IDogTGVnYWN5UmVuZGVyU1ZHU2hhcGUoZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiB7CiB9CiAK
QEAgLTQ2LDcgKzQ2LDcgQEAgUmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKSA9IGRlZmF1
bHQ7CiAKIHZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpCiB7Ci0g
ICAgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKKyAgICBMZWdhY3lS
ZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpOwogICAgIHVwZGF0ZVplcm9M
ZW5ndGhTdWJwYXRocygpOwogCiAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGNhbGN1bGF0ZVVw
ZGF0ZWRTdHJva2VCb3VuZGluZ0JveCgpOwpAQCAtODEsNyArODEsNyBAQCB2b2lkIFJlbmRlclNW
R1BhdGg6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBp
ZiAoIXN0eWxlKCkuaGFzVmlzaWJsZVN0cm9rZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoY29udGV4dCk7CisgICAgTGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOwogCiAgICAgaWYgKG1femVyb0xlbmd0aExpbmVj
YXBMb2NhdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiAKIGJvb2wgUmVuZGVyU1ZHUGF0aDo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUG9pbnRDb29yZGluYXRlU3BhY2UgcG9pbnRD
b29yZGluYXRlU3BhY2UpCiB7Ci0gICAgaWYgKFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVu
dFN0cm9rZUNvbnRhaW5zKHBvaW50LCBwb2ludENvb3JkaW5hdGVTcGFjZSkpCisgICAgaWYgKExl
Z2FjeVJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50LCBw
b2ludENvb3JkaW5hdGVTcGFjZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCmluZGV4
IGNmZTNlMTk5M2E0NDY1MzU2NmNlMjk4YjlkYTVmMTE0NDYyN2VkZDkuLjZhYzJhZDliOWU5ZGQy
OTU5YWVmYzRmNzlhYzk4ZTE2MzgxMGEwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5oCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNW
R1NoYXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyU1ZHUGF0aCBm
aW5hbCA6IHB1YmxpYyBSZW5kZXJTVkdTaGFwZSB7CitjbGFzcyBSZW5kZXJTVkdQYXRoIGZpbmFs
IDogcHVibGljIExlZ2FjeVJlbmRlclNWR1NoYXBlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKFJlbmRlclNWR1BhdGgpOwogcHVibGljOgogICAgIFJlbmRlclNWR1BhdGgoU1ZHR3JhcGhp
Y3NFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZWN0LmNwcAppbmRleCA5MDE4NzJiZjA1ZTMyNTQ5NjNiMzA5NWEwNzQy
OTY2ZTFiMGIxMjczLi5hYWZiYWFiN2Y2NTAwNTllYjU2NTQ4NzM3ZTg1Y2VlNGQzMjQxZGI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKQEAg
LTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
ZWN0LmgiCiAKLSNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZUlubGluZXMuaCIKKyNpbmNsdWRlICJM
ZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhl
bHBlcnMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0zNyw3ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChS
ZW5kZXJTVkdSZWN0KTsKIAogUmVuZGVyU1ZHUmVjdDo6UmVuZGVyU1ZHUmVjdChTVkdSZWN0RWxl
bWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlclNWR1NoYXBl
KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQorICAgIDogTGVnYWN5UmVuZGVyU1ZHU2hhcGUoZWxl
bWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX3VzZVBhdGhGYWxsYmFjayhmYWxzZSkKIHsK
IH0KQEAgLTQ2LDcgKzQ2LDcgQEAgUmVuZGVyU1ZHUmVjdDo6flJlbmRlclNWR1JlY3QoKSA9IGRl
ZmF1bHQ7CiAKIFNWR1JlY3RFbGVtZW50JiBSZW5kZXJTVkdSZWN0OjpyZWN0RWxlbWVudCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFNWR1JlY3RFbGVtZW50PihSZW5kZXJTVkdTaGFw
ZTo6Z3JhcGhpY3NFbGVtZW50KCkpOworICAgIHJldHVybiBkb3duY2FzdDxTVkdSZWN0RWxlbWVu
dD4oTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCgpKTsKIH0KIAogdm9pZCBS
ZW5kZXJTVkdSZWN0Ojp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKQEAgLTY3LDggKzY3LDggQEAg
dm9pZCBSZW5kZXJTVkdSZWN0Ojp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHJlY3RFbGVtZW50KCkucngoKS52YWx1ZShsZW5ndGhDb250ZXh0KSA+
IDAgfHwgcmVjdEVsZW1lbnQoKS5yeSgpLnZhbHVlKGxlbmd0aENvbnRleHQpID4gMCB8fCBoYXNO
b25TY2FsaW5nU3Ryb2tlKCkpIHsKLSAgICAgICAgLy8gRmFsbCBiYWNrIHRvIFJlbmRlclNWR1No
YXBlCi0gICAgICAgIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7Cisg
ICAgICAgIC8vIEZhbGwgYmFjayB0byBMZWdhY3lSZW5kZXJTVkdTaGFwZQorICAgICAgICBMZWdh
Y3lSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpOwogICAgICAgICBtX3Vz
ZVBhdGhGYWxsYmFjayA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDAsNyAr
MTAwLDcgQEAgdm9pZCBSZW5kZXJTVkdSZWN0Ojp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKIHZv
aWQgUmVuZGVyU1ZHUmVjdDo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBpZiAobV91c2VQYXRoRmFsbGJhY2spIHsKLSAgICAgICAgUmVuZGVyU1ZHU2hh
cGU6OmZpbGxTaGFwZShjb250ZXh0KTsKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OmZp
bGxTaGFwZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI2LDcgKzEy
Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVjdDo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV91c2VQYXRoRmFsbGJh
Y2spIHsKLSAgICAgICAgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnRleHQpOworICAg
ICAgICBMZWdhY3lSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoY29udGV4dCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTEzNiwxMSArMTM2LDExIEBAIHZvaWQgUmVuZGVyU1ZHUmVj
dDo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogYm9vbCBSZW5k
ZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBQb2ludENvb3JkaW5hdGVTcGFjZSBwb2ludENvb3JkaW5hdGVTcGFjZSkKIHsKICAg
ICAvLyBUaGUgb3B0aW1pemVkIGNvbnRhaW5zIGNvZGUgYmVsb3cgZG9lcyBub3Qgc3VwcG9ydCBu
b24tc21vb3RoIHN0cm9rZXMgc28gd2UgbmVlZAotICAgIC8vIHRvIGZhbGwgYmFjayB0byBSZW5k
ZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyBpbiB0aGVzZSBjYXNlcy4K
KyAgICAvLyB0byBmYWxsIGJhY2sgdG8gTGVnYWN5UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMgaW4gdGhlc2UgY2FzZXMuCiAgICAgaWYgKG1fdXNlUGF0aEZhbGxi
YWNrIHx8ICFoYXNTbW9vdGhTdHJva2UoKSkgewogICAgICAgICBpZiAoIWhhc1BhdGgoKSkKLSAg
ICAgICAgICAgIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7Ci0gICAg
ICAgIHJldHVybiBSZW5kZXJTVkdTaGFwZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhw
b2ludCwgcG9pbnRDb29yZGluYXRlU3BhY2UpOworICAgICAgICAgICAgTGVnYWN5UmVuZGVyU1ZH
U2hhcGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIExlZ2FjeVJl
bmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50LCBwb2ludENv
b3JkaW5hdGVTcGFjZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fb3V0ZXJTdHJva2VSZWN0LmNv
bnRhaW5zKHBvaW50LCBGbG9hdFJlY3Q6Okluc2lkZU9yT25TdHJva2UpICYmICFtX2lubmVyU3Ry
b2tlUmVjdC5jb250YWlucyhwb2ludCwgRmxvYXRSZWN0OjpJbnNpZGVCdXROb3RPblN0cm9rZSk7
CkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZWN0OjpzaGFwZURlcGVuZGVudFN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQb2ludEMKIGJvb2wgUmVuZGVy
U1ZHUmVjdDo6c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlKSBjb25zdAogewogICAgIGlmIChtX3VzZVBhdGhG
YWxsYmFjaykKLSAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZp
bGxDb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworICAgICAgICByZXR1cm4gTGVnYWN5UmVuZGVy
U1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7CiAg
ICAgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApp
bmRleCA0ZmY1MjE4YTE1MzNlNWNkMWVlMTQ0ZTg4YmE1NzMyMjBkOTRkNWZmLi43ZTczY2RjOTc3
ZmE2Njg0MDk1OWJlMWNlNDM3MmM2ZTBlOWE5MzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5k
ZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyU1ZHUmVjdCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJTVkdT
aGFwZSB7CitjbGFzcyBSZW5kZXJTVkdSZWN0IGZpbmFsIDogcHVibGljIExlZ2FjeVJlbmRlclNW
R1NoYXBlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR1JlY3QpOwogcHVi
bGljOgogICAgIFJlbmRlclNWR1JlY3QoU1ZHUmVjdEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR1JlY3QiOyB9CiAKICAgICB2b2lkIHVw
ZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3VzZVBhdGhGYWxsYmFjayA/IFJlbmRlclNWR1NoYXBlOjpp
c0VtcHR5KCkgOiBtX2ZpbGxCb3VuZGluZ0JveC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZVBhdGhGYWxsYmFjayA/IExlZ2FjeVJl
bmRlclNWR1NoYXBlOjppc0VtcHR5KCkgOiBtX2ZpbGxCb3VuZGluZ0JveC5pc0VtcHR5KCk7IH0K
ICAgICBib29sIGlzUmVuZGVyaW5nRGlzYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lk
IGZpbGxTaGFwZShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHN0
cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IDZmY2Y4Y2Q5
MzdhYzE2Yzg3ZDdiMDllOTg4ZDZkY2YzMzU5NGQ3YjMuLmQyMmE4NGIyNzJkNDY4ZjlkMDEzNjFh
YTVhMGIyMWM0ZWFjNDdkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmgKQEAgLTE5LDcgKzE5LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFs
aWRhdGlvbiA9IHRydWUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNl
dDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hh
cGUqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwg
Y29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKikgeyB9CiAgICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSA9IDA7
CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25z
dCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggZTMxMjE3NTM4ZmJkMjM2ODgwZmZhNzI2Mjlj
NThmYWMzMWVlMmIyNC4uNWY2MGFlZjViOTAzMjViMDFhMGQ4YWNjOTBiODNmNGMyOGYxMDg5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoSW1hZ2VCdWZmZXImIG1hc2tJ
bWFnZUJ1CiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IHNoYXBlcywgcGF0aHMgYW5kIHRl
eHRzIGFyZSBhbGxvd2VkIGZvciBjbGlwcGluZy4KLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNT
VkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCisgICAgICAgIGlmICghcmVuZGVy
ZXItPmlzU1ZHU2hhcGVPckxlZ2FjeVNWR1NoYXBlKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1hc2tDb250ZXh0LnNldEZpbGxS
dWxlKG5ld0NsaXBSdWxlKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCiAgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlm
ICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZSgpICYmICFyZW5kZXJl
ci0+aXNTVkdUZXh0KCkgJiYgIWNoaWxkTm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFn
KSkKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdTaGFwZU9yTGVnYWN5U1ZHU2hhcGUoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpICYmICFjaGlsZE5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnVzZVRhZykpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZS5kaXNw
bGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUgfHwgc3R5bGUudmlzaWJpbGl0eSgpICE9IFZpc2li
aWxpdHk6OlZpc2libGUpCkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5k
aW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIo
KTsKICAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFyZW5kZXJlcikK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBl
KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhY2hpbGROb2RlLT5oYXNUYWdOYW1lKFNW
R05hbWVzOjp1c2VUYWcpKQorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1NoYXBlT3JMZWdh
Y3lTVkdTaGFwZSgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIWNoaWxkTm9kZS0+aGFz
VGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIEludFBvaW50IGhpdFBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAppbmRleCA3YTgwMGIw
YTU2ODIzMDA0NjcxNWIxM2Q3OGU5MzI5ZTM1MmEwM2ZlLi4zZjE3ODk2NGZhOGNkOTI5MTNmOTA5
NjQyOTgxYTA0ZTIyODUwN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMjQyLDcgKzI0
Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnNob3VsZFRyYW5zZm9ybU9u
VGV4dFBhaW50aW5nKGNvbnN0IFJlbmRlckVsZW1lCiAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBi
ZWxvbmcgaGVyZS4KIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6
dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3JtKQogewotICAgIGlmICghb2JqZWN0LT5p
c1NWR1NoYXBlKCkpCisgICAgaWYgKCFvYmplY3QtPmlzU1ZHU2hhcGVPckxlZ2FjeVNWR1NoYXBl
KCkpCiAgICAgICAgIHJldHVybiByZXNvdXJjZVRyYW5zZm9ybTsKIAogICAgIFNWR0dyYXBoaWNz
RWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4ob2JqZWN0LT5u
b2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBlYzVhYWMxMzBhZTRlN2RiYjFiMjgyOWEzMTA0
NzU0NDZmZDQwNGMzLi5hNDYyYmJkZTgzYTY5Y2FjODAxNzdmNTk3ZjlkNzA2MzNiNjgwZTczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1v
ZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJTVkdTaGFwZSopCit2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9k
ZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUq
KQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlTW9k
ZSwgIXJlc291cmNlTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggMDE4NTM4YWM5ZmE1MmVjYjkxYTVl
NWY2NWM1Mzk4MTViMmE3MmJmYS4uZWEyY2MzMTU1MDM0ZTRiNjcxMDNiNDdlMDkyZGFmNDlkNjMx
ZDhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbiA9IHRydWUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8
UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJT
VkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGlj
c0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgq
LCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92ZXJyaWRlOwogCiAgICAgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwCmluZGV4IDgwM2ZiNGMwMDA3ZmEwY2NjYWU5N2E1ZWM0NTRlYTYwZDg4
ZDBlNjUuLjBkNGIwMjA1NWMyNzk1MjljOTEyYjlmNjVhOTdiNzcyN2JkNzZmOWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9k
ZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQordm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNW
R1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBMZWdh
Y3lSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFT
U0VSVCghcmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4IDkwYjcy
ZmJmNzc3MTFmMTNlZGMyMzQ3MjA1MjRjMDBmYmJiMzhiMzIuLmVlNmJkY2ZhZDY4ZjhlZTMwZmUz
YjhmYTNlN2ZjZTkwNjIyODZhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50Jiwg
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgZmluYWw7CiAKICAgICBib29sIGFwcGx5
UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250
ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+KSBmaW5hbDsKLSAgICB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0
aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJT
VkdTaGFwZSopIGZpbmFsOworICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwg
Y29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKikgZmluYWw7CiAgICAgRmxv
YXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JikgZmluYWwgeyBy
ZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4
IGIzNmEzOWY0NWU2ZmIwOGViOTYzMjFhNGViYzU4ZWM5OGZlYWE1OWYuLjJkNmY4OTBmYzQ0YmNl
YWFhZGI5MmFjNjNiODU0N2YxN2YxZTg0YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTIwMSw3
ICsyMDEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVy
U1ZHU2hhcGUqIHNoYXBlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBh
dGgsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29u
dGV4dCk7CiAgICAgQVNTRVJUKCFyZXNvdXJjZU1vZGUuaXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
CmluZGV4IGMxNDZjMGQxNjJhNmY4MTk5NDA5MWZlYTE5OTk4YzQxNjhlNTFmZGQuLjk1OTZmMmFm
ZDIyYWU5MDFlN2RhZTk1YTAyNTI1YTdkZGQxN2VlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaApAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVy
RWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpIG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYs
IEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhp
Y3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRo
KiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUqKSBvdmVycmlkZTsKKyAgICB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRl
clNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFw
ZSopIG92ZXJyaWRlOwogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJl
bmRlck9iamVjdCYpIG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAgICBSZW5k
ZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
UGF0dGVyblJlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCmluZGV4IGE3YWFj
NGFlODZkZGYzYzQ5Yzc4Yzc2OWZlZDFmM2NmY2M3OWFjYWUuLjEwOTViYjUxNmMwNmExNjU0MTJh
ZmZlNzJlYjgxNzk0ZGJhYWJhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAgLTY3LDcg
KzY3LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRl
clNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
T3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRo
KiBwYXRoLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSogc2hhcGUpCiB7CiAgICAgQVNTRVJU
KGNvbnRleHQpOwogICAgIEFTU0VSVCghcmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaAppbmRleCA3NjM2ZDc0ZmY0NjE3ZjJiZmY3MzAxYmI5ODBlODEwNGI0YjRiNDQy
Li43ZjFiNzQ2ODJlMmQzYmQzZTM5NGQ2OTNjMDc5YjUyYTlhODU5NDUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmgKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBib29sID0gdHJ1ZSkgb3ZlcnJpZGUgeyB9CiAKICAg
ICBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwg
R3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGlj
c0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgq
LCBjb25zdCBSZW5kZXJTVkdTaGFwZSopIG92ZXJyaWRlOworICAgIHZvaWQgcG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVy
U1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBl
Kikgb3ZlcnJpZGU7CiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVu
ZGVyT2JqZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIFJlbmRl
clNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBT
b2xpZENvbG9yUmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Q4
NDBhZjJhNjQ0NWExYWMwYmU5ODJjN2M1ZDUyMjU3YzA1YWNlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTExICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVh
ZEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
cGUuaCIKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5o
IgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIu
aCIKLSNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlSW5saW5lcy5oIgotI2luY2x1ZGUgIlNWR1Bh
dGhEYXRhLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlNW
R1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCi0jaW5jbHVkZSAi
U1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNp
bmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdTaGFwZSk7Ci0KLVJlbmRlclNWR1NoYXBl
OjpSZW5kZXJTVkdTaGFwZShTVkdHcmFwaGljc0VsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxl
JiYgc3R5bGUpCi0gICAgOiBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdChlbGVtZW50LCBXVEZN
b3ZlKHN0eWxlKSkKLSAgICAsIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKGZhbHNlKSAvLyBEZWZh
dWx0IGlzIGZhbHNlLCB0aGUgY2FjaGVkIHJlY3RzIGFyZSBlbXB0eSBmcm9tIHRoZSBiZWdpbm5p
bmcuCi0gICAgLCBtX25lZWRzU2hhcGVVcGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBz
byB3ZSBncmFiIGEgUGF0aCBvYmplY3Qgb25jZSBmcm9tIFNWR0dyYXBoaWNzRWxlbWVudC4KLSAg
ICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkgLy8gRGVmYXVsdCBpcyB0cnVlLCBzbyB3
ZSBncmFiIGEgQWZmaW5lVHJhbnNmb3JtIG9iamVjdCBvbmNlIGZyb20gU1ZHR3JhcGhpY3NFbGVt
ZW50LgotewotfQotCi1SZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkgPSBkZWZhdWx0
OwotCi12b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKLXsKLSAg
ICBtX3BhdGggPSBjcmVhdGVQYXRoKCk7Ci0gICAgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOwot
Ci0gICAgbV9maWxsQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpOwot
ICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgpOwot
fQotCi1ib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QKLXsKLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgYmVmb3JlIGFzc2lnbmluZyBhIG5ldyBQ
YXRoIHRvIG1fcGF0aC4KLSAgICAvLyBCdXQgdGhpcyBidWcgY2FuIGhhcHBlbiBpZiB0aGlzIHJl
bmRlcmVyIHdhcyBjcmVhdGVkIGFuZCBpdHMgbGF5b3V0IHdhcyBub3QKLSAgICAvLyBkb25lIGJl
Zm9yZSBwYWludGluZy4gQXNzZXJ0IHRoaXMgZGlkIG5vdCBoYXBwZW4gYnV0IGRvIG5vdCBjcmFz
aC4KLSAgICBBU1NFUlQoaGFzUGF0aCgpKTsKLSAgICByZXR1cm4gIWhhc1BhdGgoKSB8fCBwYXRo
KCkuaXNFbXB0eSgpOwotfQotCi12b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCgp
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIEFTU0VSVChtX3BhdGgpOwotICAgIFBhdGgqIHVzZVBh
dGggPSBtX3BhdGguZ2V0KCk7Ci0KLSAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKQotICAg
ICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybSgpKTsKLQotICAgIGNvbnRleHQuc3Ryb2tlUGF0aCgqdXNlUGF0aCk7Ci19
Ci0KLWJvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHBvaW50Q29vcmRpbmF0
ZVNwYWNlKQotewotICAgIEFTU0VSVChtX3BhdGgpOwotCi0gICAgaWYgKGhhc05vblNjYWxpbmdT
dHJva2UoKSAmJiBwb2ludENvb3JkaW5hdGVTcGFjZSAhPSBMb2NhbENvb3JkaW5hdGVTcGFjZSkg
ewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxp
bmdTdHJva2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdT
dHJva2VQYXRoKG1fcGF0aC5nZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7Ci0gICAgICAgIHJl
dHVybiB1c2VQYXRoLT5zdHJva2VDb250YWlucyhub25TY2FsaW5nVHJhbnNmb3JtLm1hcFBvaW50
KHBvaW50KSwgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAg
IFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5
bGUoKSwgKnRoaXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wYXRoLT5z
dHJva2VDb250YWlucyhwb2ludCwgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsK
LSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250
ZXh0LCBzdHlsZSgpLCAqdGhpcyk7Ci0gICAgfSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHU2hhcGU6
OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBXaW5kUnVsZSBmaWxsUnVsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gcGF0aCgpLmNvbnRhaW5z
KHBvaW50LCBmaWxsUnVsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRS
dWxlIGZpbGxSdWxlKQotewotICAgIGlmIChtX2ZpbGxCb3VuZGluZ0JveC5pc0VtcHR5KCkgfHwg
IW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNGaWxsICYmICFS
ZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoKnRoaXMsIHN0eWxlKCksIGZh
bGxiYWNrQ29sb3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc2hhcGVE
ZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKLX0KLQotYm9vbCBSZW5kZXJT
VkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVx
dWlyZXNTdHJva2UpCi17Ci0gICAgaWYgKHN0cm9rZUJvdW5kaW5nQm94KCkuaXNFbXB0eSgpIHx8
ICFzdHJva2VCb3VuZGluZ0JveCgpLmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAocmVxdWlyZXNTdHJva2Ug
JiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOwotfQotCi12b2lkIFJlbmRlclNW
R1NoYXBlOjpsYXlvdXQoKQotewotICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5
b3V0Q2hlY2tQb2ludDsKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBTVkdS
ZW5kZXJTdXBwb3J0OjpjaGVja0ZvclNWR1JlcGFpbnREdXJpbmdMYXlvdXQoKnRoaXMpICYmIHNl
bGZOZWVkc0xheW91dCgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFy
ZW50cyA9IGZhbHNlOwotCi0gICAgaWYgKG1fbmVlZHNTaGFwZVVwZGF0ZSB8fCBtX25lZWRzQm91
bmRhcmllc1VwZGF0ZSkgewotICAgICAgICB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7Ci0gICAg
ICAgIG1fbmVlZHNTaGFwZVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVSZXBhaW50Qm91
bmRpbmdCb3goKTsKLSAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBmYWxzZTsKLSAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUpIHsKLSAgICAgICAgbV9sb2NhbFRyYW5zZm9y
bSA9IGdyYXBoaWNzRWxlbWVudCgpLmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCBy
ZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmIChl
dmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCi0gICAgICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0aGlzKTsKLQotICAgIC8vIElmIG91ciBib3Vu
ZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlmICh1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzSW5QYXJlbnRzKQotICAgICAgICBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0
TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5
b3V0KCk7Ci0gICAgY2xlYXJOZWVkc0xheW91dCgpOwotfQotCi1QYXRoKiBSZW5kZXJTVkdTaGFw
ZTo6bm9uU2NhbGluZ1N0cm9rZVBhdGgoY29uc3QgUGF0aCogcGF0aCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBzdHJva2VUcmFuc2Zvcm0pIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFBhdGg+IHRlbXBQYXRoOwotCi0gICAgdGVtcFBhdGguZ2V0KCkgPSAqcGF0aDsKLSAgICB0
ZW1wUGF0aC5nZXQoKS50cmFuc2Zvcm0oc3Ryb2tlVHJhbnNmb3JtKTsKLQotICAgIHJldHVybiAm
dGVtcFBhdGguZ2V0KCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHU2hhcGU6OnNldHVwTm9uU2NhbGlu
Z1N0cm9rZUNvbnRleHQoQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VUcmFuc2Zvcm0sIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXImIHN0YXRlU2F2ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxBZmZp
bmVUcmFuc2Zvcm0+IGludmVyc2UgPSBzdHJva2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGlm
ICghaW52ZXJzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGVTYXZlci5zYXZl
KCk7Ci0gICAgc3RhdGVTYXZlci5jb250ZXh0KCktPmNvbmNhdENUTShpbnZlcnNlLnZhbHVlKCkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHU2hhcGU6
Om5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBncmFwaGlj
c0VsZW1lbnQoKS5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRl
KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkR2VuZXJhdGVNYXJrZXJQb3NpdGlv
bnMoKSBjb25zdAotewotICAgIGlmICghc3R5bGUoKS5zdmdTdHlsZSgpLmhhc01hcmtlcnMoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFncmFwaGljc0VsZW1lbnQoKS5zdXBw
b3J0c01hcmtlcnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byogcmVzb3Vy
Y2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlz
KTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHJlc291cmNlcy0+bWFya2VyU3RhcnQoKSB8fCByZXNvdXJjZXMtPm1hcmtlck1pZCgpIHx8
IHJlc291cmNlcy0+bWFya2VyRW5kKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxT
aGFwZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdyYXBoaWNzQ29udGV4dCYgb3JpZ2luYWxD
b250ZXh0KQotewotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9ICZvcmlnaW5hbENvbnRl
eHQ7Ci0gICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKCp0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgaWYgKGZpbGxQ
YWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0aGlzLCBzdHlsZSwgY29udGV4dCwgUmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpCi0gICAgICAgICAgICBmaWxsUGFpbnRp
bmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQsIFJlbmRlclNWR1Jl
c291cmNlTW9kZTo6QXBwbHlUb0ZpbGwsIG51bGxwdHIsIHRoaXMpOwotICAgICAgICBlbHNlIGlm
IChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJl
ZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+
c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7Ci0gICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJj
ZS0+YXBwbHlSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNl
TW9kZTo6QXBwbHlUb0ZpbGwpKQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKCp0aGlzLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFw
cGx5VG9GaWxsLCBudWxscHRyLCB0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBS
ZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmFw
aGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQgPSAmb3JpZ2luYWxDb250ZXh0OwotICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZH
UmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBmYWxsYmFja0Nv
bG9yKSkgewotICAgICAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJj
ZSgqdGhpcywgc3R5bGUsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0
cm9rZSkpCi0gICAgICAgICAgICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tl
LCBudWxscHRyLCB0aGlzKTsKLSAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tS
ZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2Uo
KTsKLSAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3Ip
OwotICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UoKnRoaXMs
IHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKQot
ICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKCp0aGlz
LCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UsIG51bGxwdHIs
IHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJv
a2VTaGFwZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFzdHlsZSgpLmhh
c1Zpc2libGVTdHJva2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGZhbHNlKTsKLSAgICBpZiAoaGFzTm9uU2Nh
bGluZ1N0cm9rZSgpKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNm
b3JtID0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpOwotICAgICAgICBpZiAoIXNldHVwTm9u
U2NhbGluZ1N0cm9rZUNvbnRleHQobm9uU2NhbGluZ1RyYW5zZm9ybSwgc3RhdGVTYXZlcikpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN0cm9rZVNoYXBlKHN0eWxlKCksIGNvbnRl
eHQpOwotfQotCi12b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU3Ryb2tlTWFya2VycyhQYWludElu
Zm8mIGNoaWxkUGFpbnRJbmZvKQotewotICAgIGF1dG8gcGFpbnRPcmRlciA9IFJlbmRlclN0eWxl
OjpwYWludFR5cGVzRm9yUGFpbnRPcmRlcihzdHlsZSgpLnBhaW50T3JkZXIoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhaW50T3JkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
c3dpdGNoIChwYWludE9yZGVyLmF0KGkpKSB7Ci0gICAgICAgIGNhc2UgUGFpbnRUeXBlOjpGaWxs
OgotICAgICAgICAgICAgZmlsbFNoYXBlKHN0eWxlKCksIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYWludFR5cGU6OlN0cm9rZToK
LSAgICAgICAgICAgIHN0cm9rZVNoYXBlKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYWludFR5cGU6Ok1hcmtlcnM6Ci0gICAgICAg
ICAgICBpZiAoIW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBk
cmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JikKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQo
KS5wYWludGluZ0Rpc2FibGVkKCkgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZv
cmVncm91bmQKLSAgICAgICAgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
SGlkZGVuIHx8IGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdS
ZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gs
IG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBh
aW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOwotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjaGlsZFBhaW50SW5mby5jb250ZXh0KCkpOwotICAgIGNoaWxk
UGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgaWYgKGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQpIHsKLSAgICAgICAg
U1ZHUmVuZGVyaW5nQ29udGV4dCByZW5kZXJpbmdDb250ZXh0KCp0aGlzLCBjaGlsZFBhaW50SW5m
byk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQuaXNSZW5kZXJpbmdQcmVwYXJlZCgp
KSB7Ci0gICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgp
LnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICBpZiAoc3ZnU3R5bGUuc2hhcGVSZW5kZXJpbmcoKSA9
PSBTaGFwZVJlbmRlcmluZzo6Q3Jpc3BFZGdlcykKLSAgICAgICAgICAgICAgICBjaGlsZFBhaW50
SW5mby5jb250ZXh0KCkuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLQotICAgICAgICAgICAg
ZmlsbFN0cm9rZU1hcmtlcnMoY2hpbGRQYWludEluZm8pOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKHN0eWxlKCkub3V0bGluZVdpZHRoKCkpCi0gICAgICAgIHBhaW50T3V0bGluZShjaGls
ZFBhaW50SW5mbywgSW50UmVjdChib3VuZGluZ0JveCkpOwotfQotCi0vLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2FsbCBwYWludE91
dGxpbmUoKQotLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3RlbSwgcmV0dXJu
IGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdTaGFwZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KikKLXsKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBMYXlvdXRSZWN0KHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIGlmICghcmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdTaGFwZTo6
aXNQb2ludEluRmlsbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gc2hh
cGVEZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIHN0eWxlKCkuc3ZnU3R5bGUoKS5maWxsUnVs
ZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNQb2ludEluU3Ryb2tlKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQotewotICAgIGlmICghc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0cm9r
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRT
dHJva2VDb250YWlucyhwb2ludCwgTG9jYWxDb29yZGluYXRlU3BhY2UpOwotfQotCi1mbG9hdCBS
ZW5kZXJTVkdTaGFwZTo6Z2V0VG90YWxMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBoYXNQ
YXRoKCkgPyBwYXRoKCkubGVuZ3RoKCkgOiBjcmVhdGVQYXRoKCktPmxlbmd0aCgpOwotfQotCi1G
bG9hdFBvaW50IFJlbmRlclNWR1NoYXBlOjpnZXRQb2ludEF0TGVuZ3RoKGZsb2F0IGRpc3RhbmNl
KSBjb25zdAotewotICAgIHJldHVybiBoYXNQYXRoKCkgPyBwYXRoKCkucG9pbnRBdExlbmd0aChk
aXN0YW5jZSkgOiBjcmVhdGVQYXRoKCktPnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpOwotfQotCi1i
b29sIFJlbmRlclNWR1NoYXBlOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICAvLyBXZSBvbmx5
IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVuLgot
ICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBtX2xvY2FsVHJhbnNmb3Jt
LmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBh
cmVudCk7Ci0KLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEo
KnRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTVkdIaXRU
ZXN0Q3ljbGVEZXRlY3Rpb25TY29wZSBoaXRUZXN0U2NvcGUoKnRoaXMpOwotCi0gICAgUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhf
SElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wg
aXNWaXNpYmxlID0gKHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUp
OwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0gICAg
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsK
LSAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS5maWxsUnVsZSgpOwotICAgICAg
ICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQotICAgICAgICAgICAgZmlsbFJ1bGUgPSBz
dmdTdHlsZS5jbGlwUnVsZSgpOwotICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAm
JiAoc3ZnU3R5bGUuaGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpICYmIHN0
cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQotICAgICAg
ICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN2Z1N0eWxlLmhhc0ZpbGwoKSB8fCAh
aGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxl
cy5yZXF1aXJlRmlsbCwgZmlsbFJ1bGUpKQotICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhp
dEJvdW5kaW5nQm94ICYmIG9iamVjdEJvdW5kaW5nQm94KCkuY29udGFpbnMobG9jYWxQb2ludCkp
KSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgTGF5b3V0UG9pbnQo
bG9jYWxQb2ludCkpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRU
ZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGZsb29yZWRMYXlvdXRQb2ludChs
b2NhbFBvaW50KSkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3Rh
dGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRm9yVHlwZShTVkdNYXJr
ZXJUeXBlIHR5cGUsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCwgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1h
cmtlckVuZCkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFN0YXJ0TWFya2VyOgot
ICAgICAgICByZXR1cm4gbWFya2VyU3RhcnQ7Ci0gICAgY2FzZSBNaWRNYXJrZXI6Ci0gICAgICAg
IHJldHVybiBtYXJrZXJNaWQ7Ci0gICAgY2FzZSBFbmRNYXJrZXI6Ci0gICAgICAgIHJldHVybiBt
YXJrZXJFbmQ7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6bWFya2VyUmVjdChmbG9hdCBzdHJv
a2VXaWR0aCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHko
KSk7Ci0KLSAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVz
b3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMpOwotICAgIEFTU0VSVChyZXNvdXJjZXMpOwotCi0gICAg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJT
dGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJj
ZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQg
PSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIEFTU0VSVChtYXJrZXJTdGFydCB8fCBtYXJr
ZXJNaWQgfHwgbWFya2VyRW5kKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwotICAgIHVu
c2lnbmVkIHNpemUgPSBtX21hcmtlclBvc2l0aW9ucy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIG1hcmtlciA9IG1hcmtlckZvclR5cGUobV9tYXJrZXJQb3NpdGlvbnNbaV0udHlwZSwg
bWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kKSkKLSAgICAgICAgICAgIGJvdW5kYXJp
ZXMudW5pdGUobWFya2VyLT5tYXJrZXJCb3VuZGFyaWVzKG1hcmtlci0+bWFya2VyVHJhbnNmb3Jt
YXRpb24obV9tYXJrZXJQb3NpdGlvbnNbaV0ub3JpZ2luLCBtX21hcmtlclBvc2l0aW9uc1tpXS5h
bmdsZSwgc3Ryb2tlV2lkdGgpKSk7Ci0gICAgfQotICAgIHJldHVybiBib3VuZGFyaWVzOwotfQot
Ci1GbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcGF0aCgpLmJvdW5kaW5nUmVjdCgpOwotfQotCi1GbG9hdFJl
Y3QgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9wYXRoKTsKLSAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3ggPSBt
X2ZpbGxCb3VuZGluZ0JveDsKLQotICAgIGlmIChzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzU3Ryb2tl
KCkpIHsKLSAgICAgICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkgewotICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJh
bnNmb3JtKCk7Ci0gICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+
IGludmVyc2UgPSBub25TY2FsaW5nVHJhbnNmb3JtLmludmVyc2UoKSkgewotICAgICAgICAgICAg
ICAgIFBhdGgqIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0KCksIG5v
blNjYWxpbmdUcmFuc2Zvcm0pOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ1JlY3QgPSB1c2VQYXRoLT5zdHJva2VCb3VuZGluZ1JlY3QoRnVuY3Rpb248dm9pZChHcmFw
aGljc0NvbnRleHQmKT4geyBbdGhpc10gKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAg
ICAgICAgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKLSAgICAgICAgICAgICAgICB9fSk7Ci0gICAg
ICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdSZWN0ID0gaW52ZXJzZS52YWx1ZSgpLm1hcFJlY3Qo
c3Ryb2tlQm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51
bml0ZShzdHJva2VCb3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUocGF0aCgpLnN0cm9rZUJvdW5k
aW5nUmVjdChGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiB7IFt0aGlzXSAoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6
YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSgpLCAqdGhpcyk7Ci0gICAg
ICAgICAgICB9fSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX21hcmtlclBvc2l0
aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKG1hcmtlclJl
Y3Qoc3Ryb2tlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OwotfQot
Ci12b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVSZXBhaW50Qm91bmRpbmdCb3goKQotewotICAg
IG1fcmVwYWludEJvdW5kaW5nQm94RXhjbHVkaW5nU2hhZG93ID0gc3Ryb2tlQm91bmRpbmdCb3go
KTsKLSAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJj
ZXMoKnRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94RXhjbHVkaW5nU2hhZG93KTsKLQotICAgIG1f
cmVwYWludEJvdW5kaW5nQm94ID0gbV9yZXBhaW50Qm91bmRpbmdCb3hFeGNsdWRpbmdTaGFkb3c7
Ci19Ci0KLWZsb2F0IFJlbmRlclNWR1NoYXBlOjpzdHJva2VXaWR0aCgpIGNvbnN0Ci17Ci0gICAg
U1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KCZncmFwaGljc0VsZW1lbnQoKSk7Ci0gICAg
cmV0dXJuIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5zdHJva2VXaWR0aCgp
KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdTaGFwZTo6aGFzU21vb3RoU3Ryb2tlKCkgY29uc3QKLXsK
LSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7
Ci0gICAgcmV0dXJuIHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpLmlzRW1wdHkoKQotICAgICAg
ICAmJiBzdHlsZSgpLnN0cm9rZU1pdGVyTGltaXQoKSA9PSBzdHlsZSgpLmluaXRpYWxTdHJva2VN
aXRlckxpbWl0KCkKLSAgICAgICAgJiYgc3R5bGUoKS5qb2luU3R5bGUoKSA9PSBzdHlsZSgpLmlu
aXRpYWxKb2luU3R5bGUoKQotICAgICAgICAmJiBzdHlsZSgpLmNhcFN0eWxlKCkgPT0gc3R5bGUo
KS5pbml0aWFsQ2FwU3R5bGUoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdTaGFwZTo6ZHJhd01hcmtl
cnMoUGFpbnRJbmZvJiBwYWludEluZm8pCi17Ci0gICAgQVNTRVJUKCFtX21hcmtlclBvc2l0aW9u
cy5pc0VtcHR5KCkpOwotCi0gICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKTsKLSAgICBpZiAoIXJlc291cmNlcykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0
YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwotICAgIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOwotICAgIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwotICAgIGlm
ICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7Ci0gICAg
dW5zaWduZWQgc2l6ZSA9IG1fbWFya2VyUG9zaXRpb25zLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWFya2VyID0gbWFya2VyRm9yVHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBl
LCBtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQpKQotICAgICAgICAgICAgbWFya2Vy
LT5kcmF3KHBhaW50SW5mbywgbWFya2VyLT5tYXJrZXJUcmFuc2Zvcm1hdGlvbihtX21hcmtlclBv
c2l0aW9uc1tpXS5vcmlnaW4sIG1fbWFya2VyUG9zaXRpb25zW2ldLmFuZ2xlLCBzdHJva2VXaWR0
aCkpOwotICAgIH0KLX0KLQotc3RkOjp1bmlxdWVfcHRyPFBhdGg+IFJlbmRlclNWR1NoYXBlOjpj
cmVhdGVQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxQYXRoPihwYXRoRnJv
bUdyYXBoaWNzRWxlbWVudCgmZ3JhcGhpY3NFbGVtZW50KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdTaGFwZTo6cHJvY2Vzc01hcmtlclBvc2l0aW9ucygpCi17Ci0gICAgbV9tYXJrZXJQb3NpdGlv
bnMuY2xlYXIoKTsKLQotICAgIGlmICghc2hvdWxkR2VuZXJhdGVNYXJrZXJQb3NpdGlvbnMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcGF0aCk7Ci0KLSAgICBTVkdNYXJrZXJE
YXRhIG1hcmtlckRhdGEobV9tYXJrZXJQb3NpdGlvbnMsIFNWR1Jlc291cmNlc0NhY2hlOjpjYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyktPm1hcmtlclJldmVyc2VTdGFydCgpKTsKLSAg
ICBtX3BhdGgtPmFwcGx5KFsmbWFya2VyRGF0YV0oY29uc3QgUGF0aEVsZW1lbnQmIHBhdGhFbGVt
ZW50KSB7Ci0gICAgICAgIFNWR01hcmtlckRhdGE6OnVwZGF0ZUZyb21QYXRoRWxlbWVudChtYXJr
ZXJEYXRhLCBwYXRoRWxlbWVudCk7Ci0gICAgfSk7Ci0gICAgbWFya2VyRGF0YS5wYXRoSXNEb25l
KCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIzOWM1MjFhZGUzYjBkNmQyZTQ5
MDBlMzYyMjRhNTFiYjVmNTk1Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5j
LgotICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlNWR01h
cmtlckRhdGEuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyOwotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwotY2xhc3MgUmVu
ZGVyU1ZHUGF0aDsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlOwotY2xhc3MgU1ZHR3JhcGhpY3NF
bGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdTaGFwZSA6IHB1YmxpYyBMZWdhY3lSZW5kZXJTVkdN
b2RlbE9iamVjdCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJTVkdTaGFwZSk7
Ci1wdWJsaWM6Ci0gICAgZW51bSBQb2ludENvb3JkaW5hdGVTcGFjZSB7Ci0gICAgICAgIEdsb2Jh
bENvb3JkaW5hdGVTcGFjZSwKLSAgICAgICAgTG9jYWxDb29yZGluYXRlU3BhY2UKLSAgICB9Owot
ICAgIFJlbmRlclNWR1NoYXBlKFNWR0dyYXBoaWNzRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwot
ICAgIHZpcnR1YWwgflJlbmRlclNWR1NoYXBlKCk7Ci0KLSAgICBpbmxpbmUgU1ZHR3JhcGhpY3NF
bGVtZW50JiBncmFwaGljc0VsZW1lbnQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0TmVlZHNTaGFw
ZVVwZGF0ZSgpIHsgbV9uZWVkc1NoYXBlVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0TmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKCkgZmluYWwgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRy
dWU7IH0KLSAgICBib29sIG5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIGZpbmFsIHsgcmV0dXJuIG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlOyB9Ci0gICAgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0
ZSgpIGZpbmFsIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNSZW5kZXJpbmdEaXNhYmxlZCgpIGNvbnN0ID0gMDsKLQotICAgIGJvb2wgaXNQb2ludEluRmls
bChjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgYm9vbCBpc1BvaW50SW5TdHJva2UoY29uc3QgRmxv
YXRQb2ludCYpOwotCi0gICAgZmxvYXQgZ2V0VG90YWxMZW5ndGgoKSBjb25zdDsKLSAgICBGbG9h
dFBvaW50IGdldFBvaW50QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpIGNvbnN0OwotCi0gICAgYm9v
bCBoYXNQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9Ci0gICAgUGF0aCYgcGF0
aCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wYXRoKTsKLSAgICAgICAgcmV0dXJu
ICptX3BhdGg7Ci0gICAgfQotICAgIHZvaWQgY2xlYXJQYXRoKCkgeyBtX3BhdGggPSBudWxscHRy
OyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKLQot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCBi
b29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgUG9pbnRDb29yZGluYXRlU3BhY2UgPSBHbG9i
YWxDb29yZGluYXRlU3BhY2UpOwotICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OwotICAgIGZs
b2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTbW9vdGhTdHJva2UoKSBjb25z
dDsKLQotICAgIGJvb2wgaGFzTm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCkuc3ZnU3R5bGUoKS52ZWN0b3JFZmZlY3QoKSA9PSBWZWN0b3JFZmZlY3Q6Ok5vblNjYWxpbmdT
dHJva2U7IH0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgp
IGNvbnN0OwotICAgIFBhdGgqIG5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBhdGgqLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKLQotICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGlu
Z0JveDsKLSAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKLQotcHJpdmF0ZToKLSAg
ICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UK
LSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0Zp
bGwgPSB0cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSA9IFdpbmRSdWxlOjpOb25aZXJvKTsK
LSAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVz
U3Ryb2tlID0gdHJ1ZSk7Ci0KLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQotICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0K
LSAgICBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
Ym9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAg
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVy
U1ZHU2hhcGUiOyB9Ci0KLSAgICB2b2lkIGxheW91dCgpIGZpbmFsOwotICAgIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5lciA9
IDApIGZpbmFsOwotCi0gICAgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhp
dFRlc3RBY3Rpb24pIGZpbmFsOwotCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KLSAgICBGbG9hdFJlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5n
Qm94OyB9Ci0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7
Ci0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7Ci0gICAg
dm9pZCB1cGRhdGVSZXBhaW50Qm91bmRpbmdCb3goKTsKLQotICAgIGJvb2wgc2V0dXBOb25TY2Fs
aW5nU3Ryb2tlQ29udGV4dChBZmZpbmVUcmFuc2Zvcm0mLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyJik7Ci0KLSAgICBib29sIHNob3VsZEdlbmVyYXRlTWFya2VyUG9zaXRpb25zKCkgY29uc3Q7
Ci0gICAgRmxvYXRSZWN0IG1hcmtlclJlY3QoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwotICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRoPiBjcmVhdGVQYXRoKCkgY29uc3Q7Ci0gICAgdm9p
ZCBwcm9jZXNzTWFya2VyUG9zaXRpb25zKCk7Ci0KLSAgICB2b2lkIGZpbGxTaGFwZShjb25zdCBS
ZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZvaWQgc3Ryb2tlU2hhcGUoY29u
c3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQmKTsKLSAgICB2b2lkIHN0cm9rZVNoYXBl
KEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZvaWQgZmlsbFN0cm9rZU1hcmtlcnMoUGFpbnRJbmZv
Jik7Ci0gICAgdm9pZCBkcmF3TWFya2VycyhQYWludEluZm8mKTsKLQotcHJpdmF0ZToKLSAgICBG
bG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJv
dW5kaW5nQm94RXhjbHVkaW5nU2hhZG93OwotCi0gICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA6IDE7Ci0gICAgYm9vbCBtX25lZWRzU2hhcGVVcGRhdGUgOiAxOwotICAgIGJvb2wgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRy
YW5zZm9ybTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGF0aD4gbV9wYXRoOwotICAgIFZlY3RvcjxN
YXJrZXJQb3NpdGlvbj4gbV9tYXJrZXJQb3NpdGlvbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJTVkdT
aGFwZSwgaXNTVkdTaGFwZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZUlubGluZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI2ZTcyNmI0ZWYyZDA1YTAwYzlmN2Y3ZjZiMDViMWIwNDA5ODlhNzUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZUlubGluZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCi0jaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotaW5saW5lIFNWR0dyYXBoaWNzRWxlbWVudCYgUmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNz
RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVu
dD4oTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmVsZW1lbnQoKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwCmluZGV4IDhmNTIzNjBjYTZhMWNmNmE5ZDJmM2M3ZDc5NTNkZWFiNGJk
MmNkZjUuLmYyMDIwZDY3ZmRjYWRjYmU3ZDMwNmRhNzFjYjdkMmJmZWFmOWYxNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAt
MzY1LDcgKzM2NSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QKIHsKICAgICBBU1NFUlQobV9w
YWludGluZ1Jlc291cmNlKTsKIAotICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UocGFyZW50KCktPnJlbmRlcmVyKCksIGNvbnRleHQsIHBhaW50aW5nUmVzb3VyY2VNb2Rl
KCksIHBhdGgsIC8qUmVuZGVyU1ZHU2hhcGUqLyBudWxscHRyKTsKKyAgICBtX3BhaW50aW5nUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudCgpLT5yZW5kZXJlcigpLCBjb250ZXh0LCBw
YWludGluZ1Jlc291cmNlTW9kZSgpLCBwYXRoLCAvKkxlZ2FjeVJlbmRlclNWR1NoYXBlKi8gbnVs
bHB0cik7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggYWI1
NjI2NjhiNDBkYTgwN2FkYmMyOWQxODU2MDQzZTM2YWU3NDRlMy4uZjlkNDdlMTQzOGU3ZDcwMDI2
YTAzOWY0YjEyYmY2ODJlOTk5YzQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBTVkdS
ZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJF
bGVtZW50JiBjb250YWkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIERvbid0
IGluY2x1ZGUgZWxlbWVudHMgaW4gdGhlIHVuaW9uIHRoYXQgZG8gbm90IHJlbmRlci4KLSAgICAg
ICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihjdXJyZW50KSAmJiBkb3duY2FzdDxSZW5kZXJTVkdT
aGFwZT4oY3VycmVudCkuaXNSZW5kZXJpbmdEaXNhYmxlZCgpKQorICAgICAgICBpZiAoaXM8TGVn
YWN5UmVuZGVyU1ZHU2hhcGU+KGN1cnJlbnQpICYmIGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1No
YXBlPihjdXJyZW50KS5pc1JlbmRlcmluZ0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IGN1cnJlbnQu
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpOwpAQCAtMjYyLDkgKzI2Miw5IEBAIHZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVuZGVyRWxlbWVudCYgc3RhcnQsIGJvb2wgc2Vs
Zk5lZWRzTGF5b3V0CiAgICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBpcyBmYWxz
ZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0
aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwogICAgICAgICAgICAgYXV0byYgZWxlbWVu
dCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpjaGlsZC5ub2RlKCkpOwogICAgICAgICAgICAgaWYg
KGVsZW1lbnQuaGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVu
IHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0
ZWxsIHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAotICAgICAg
ICAgICAgICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpKQotICAgICAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpLnNldE5lZWRzU2hhcGVVcGRhdGUo
KTsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3
aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBMZWdhY3lSZW5kZXJTVkdTaGFwZSB0
byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAorICAgICAgICAgICAgICAgIGlmIChpczxMZWdhY3lS
ZW5kZXJTVkdTaGFwZT4oY2hpbGQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxMZWdh
Y3lSZW5kZXJTVkdTaGFwZT4oY2hpbGQpLnNldE5lZWRzU2hhcGVVcGRhdGUoKTsKICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJTVkdUZXh0PihjaGlsZCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgYXV0byYgc3ZnVGV4dCA9IGRvd25jYXN0PFJlbmRlclNWR1RleHQ+KGNoaWxkKTsK
ICAgICAgICAgICAgICAgICAgICAgc3ZnVGV4dC5zZXROZWVkc1RleHRNZXRyaWNzVXBkYXRlKCk7
CkBAIC00ODAsMTAgKzQ4MCwxMyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IDE7CiAKICAgICAgICAgaWYgKGlzPFNWR0dlb21ldHJ5RWxlbWVu
dD4oZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZW5kZXJlci5pc1NWR1NoYXBlKCkp
OworICAgICAgICAgICAgQVNTRVJUKHJlbmRlcmVyLmlzU1ZHU2hhcGVPckxlZ2FjeVNWR1NoYXBl
KCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IEEgdmFsdWUgb2YgemVybyBpcyB2YWxpZC4gTmVl
ZCB0byBkaWZmZXJlbnRpYXRlIHRoaXMgY2FzZSBmcm9tIGJlaW5nIHVuc3BlY2lmaWVkLgotICAg
ICAgICAgICAgaWYgKGZsb2F0IHBhdGhMZW5ndGggPSBkb3duY2FzdDxTVkdHZW9tZXRyeUVsZW1l
bnQ+KGVsZW1lbnQpLT5wYXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2NhbGVGYWN0b3Ig
PSBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLmdldFRvdGFsTGVuZ3RoKCkgLyBw
YXRoTGVuZ3RoOworICAgICAgICAgICAgaWYgKGZsb2F0IHBhdGhMZW5ndGggPSBkb3duY2FzdDxT
VkdHZW9tZXRyeUVsZW1lbnQ+KGVsZW1lbnQpLT5wYXRoTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKSkKKyAgICAgICAgICAg
ICAgICAgICAgc2NhbGVGYWN0b3IgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVu
ZGVyZXIpLmdldFRvdGFsTGVuZ3RoKCkgLyBwYXRoTGVuZ3RoOworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHU2hhcGUKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChhdXRvJiBkYXNoIDogZGFzaGVzKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcAppbmRleCBiNGRmNzgyMzY0Y2ZhYTE5NzgyZmJkMmEwYjk2NjY3YTQ1ZDI3NTg3Li5jOTk1
YWUzMWJjNmYxMzQ1YTRiMWM0ZDA5NGI3MTc4ODIxYzI3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJHcmFw
aGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUg
IkxlZ2FjeVJlbmRlclNWR1NoYXBlSW5saW5lcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKQEAgLTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZUlu
bGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgpAQCAtMTgxLDEx
ICsxODEsMTEgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywg
InRyYW5zZm9ybSIsIHJlbmRlcmVyLmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3RE
ZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5nIiwgc3R5bGUuaW1hZ2VSZW5kZXJpbmcoKSwgUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKTsKICAgICB3cml0ZUlmTm90RGVmYXVs
dCh0cywgIm9wYWNpdHkiLCBzdHlsZS5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3Bh
Y2l0eSgpKTsKLSAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKSkgewotICAgICAg
ICBjb25zdCBhdXRvJiBzaGFwZSA9IGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPihyZW5kZXJlcik7
CisgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpIHsKKyAgICAgICAg
Y29uc3QgYXV0byYgc2hhcGUgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVy
ZXIpOwogCiAgICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpz
dHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSks
IHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJv
a2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGUmPihzaGFw
ZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgICAgICBUZXh0U3Ry
ZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IiA8PCBz
OwogICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBzdHJva2VQYWludGlu
Z1Jlc291cmNlKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKICAgICAgICAgICAg
IHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSksIHNoYXBlLnN0eWxlKCks
IGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2Uo
Y29uc3RfY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwg
ZmFsbGJhY2tDb2xvcikpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIp
OwogICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IiA8PCBzOwogICAgICAgICAgICAgd3JpdGVT
VkdQYWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7CkBAIC0yNTAsNyAr
MjUwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyRWxlbWVudCYgcmUKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJT
VkdTaGFwZSYgc2hhcGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUmIHNoYXBlKQogewogICAgIHdyaXRlUG9z
aXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwogCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCB3cml0
ZVNWR0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIE9w
dGlvblNldDxSZW5kZXIKICAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGJlaGF2aW9yKTsK
IH0KIAotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNo
YXBlLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmVoYXZpb3IpCit2b2lkIHdyaXRlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSYgc2hhcGUsIE9wdGlvblNl
dDxSZW5kZXJBc1RleHRGbGFnPiBiZWhhdmlvcikKIHsKICAgICB3cml0ZVN0YW5kYXJkUHJlZml4
KHRzLCBzaGFwZSwgYmVoYXZpb3IpOwogICAgIHRzIDw8IHNoYXBlIDw8ICJcbiI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4
IDQyYmI4YTYwMDQ0YjgzMjUxY2M5YmFkMDMzODljZGRiNTE4NzZjNGEuLjdhYzNmY2VjOGQzN2U3
NTQ1MTUwOGFkNGM1ZjJkYzJiZTE4ZTI3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNz
IENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgTGVnYWN5
UmVuZGVyU1ZHUm9vdDsKK2NsYXNzIExlZ2FjeVJlbmRlclNWR1NoYXBlOwogY2xhc3MgTm9kZTsK
IGNsYXNzIFJlbmRlckltYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDQsNyArNDUsNiBA
QCBjbGFzcyBSZW5kZXJTVkdJbWFnZTsKIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CiBjbGFz
cyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7Ci1jbGFz
cyBSZW5kZXJTVkdTaGFwZTsKIGNsYXNzIFJlbmRlclNWR1RleHQ7CiBjbGFzcyBTVkdVbml0VHlw
ZXM7CiAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCB3cml0ZShXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBMZWdhY3lSZW5kZXJTVkdSb290JiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEYKICNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKIHZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyU1ZHUm9vdCYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiAjZW5k
aWYKLXZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBP
cHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwordm9pZCB3cml0ZShXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFn
Pik7CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJl
bmRlclNWR0dyYWRpZW50U3RvcCYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lk
IHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXImLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwogdm9p
ZCB3cml0ZVNWR0NvbnRhaW5lcihXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdDb250
YWluZXImLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0dlb21ldHJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2VvbWV0cnlFbGVtZW50LmNwcAppbmRleCBkNWVlMGM4ODgzODMwOWY4MzdjMmI1NzJiZWIw
YzljZTYyNDAyNDgyLi45YzY4ZDRlNzQ0NmMxODYwYTUwNjE4YTBjZTMwYTZjMTkyNTYyZjdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcApAQCAtMjQsOCArMjQs
OCBAQAogI2luY2x1ZGUgIlNWR0dlb21ldHJ5RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRE9NUG9p
bnQuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJT
VkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTQ4LDcgKzQ4LDcgQEAgZmxvYXQgU1ZHR2VvbWV0cnlF
bGVtZW50OjpnZXRUb3RhbExlbmd0aCgpIGNvbnN0CiB7CiAgICAgZG9jdW1lbnQoKS51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGF1dG8qIHJlbmRlcmVyID0g
ZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHRoaXMtPnJlbmRlcmVyKCkpOworICAgIGF1dG8qIHJl
bmRlcmVyID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHRoaXMtPnJlbmRlcmVyKCkp
OwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC01OSw3ICs1OSw3
IEBAIEV4Y2VwdGlvbk9yPFJlZjxTVkdQb2ludD4+IFNWR0dlb21ldHJ5RWxlbWVudDo6Z2V0UG9p
bnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVy
ZXIgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CiAg
ICAgCiAgICAgLy8gU3BlYzogSWYgY3VycmVudCBlbGVtZW50IGlzIGEgbm9uLXJlbmRlcmVkIGVs
ZW1lbnQsIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yLgogICAgIGlmICghcmVuZGVyZXIpCkBA
IC03Niw3ICs3Niw3IEBAIGJvb2wgU1ZHR2VvbWV0cnlFbGVtZW50Ojppc1BvaW50SW5GaWxsKERP
TVBvaW50SW5pdCYmIHBvaW50SW5pdCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2Fz
dDxSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVyZXIg
PSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04OCw3ICs4OCw3IEBA
IGJvb2wgU1ZHR2VvbWV0cnlFbGVtZW50Ojppc1BvaW50SW5TdHJva2UoRE9NUG9pbnRJbml0JiYg
cG9pbnRJbml0KQogewogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAKLSAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlclNWR1No
YXBlPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PExl
Z2FjeVJlbmRlclNWR1NoYXBlPih0aGlzLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwCmluZGV4IGE0MmVhZTU0YTBlMGYxY2Y3ZjEyNTM3M2Q3NWUwYWI1YWMyYWVmMmMuLjEyZWZm
NDNkNWY1YjJlMjg1MzMwZjBlMGY5ZDBjMDg5MmZmMjcwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFNWR0xpbmVFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgICAg
ICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAgICAgICAgdXBkYXRl
UmVsYXRpdmVMZW5ndGhzSW5mb3JtYXRpb24oKTsKIAotICAgICAgICBpZiAoYXV0byogcmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSkpIHsKKyAgICAg
ICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHRo
aXMtPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNTaGFwZVVw
ZGF0ZSgpOwogICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQ
YXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcmVuZGVyZXIpOwogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="474227"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>