<?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>221443</bug_id>
          
          <creation_ts>2021-02-04 18:24:31 -0800</creation_ts>
          <short_desc>Generalize color conversion code to reduce number of overloads required</short_desc>
          <delta_ts>2021-02-05 13:09:23 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1725906</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-04 18:24:31 -0800</bug_when>
    <thetext>&quot;Generalize color conversion code to reduce number of overloads required&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725918</commentid>
    <comment_count>1</comment_count>
      <attachid>419355</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-04 19:35:40 -0800</bug_when>
    <thetext>Created attachment 419355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725930</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-04 20:40:38 -0800</bug_when>
    <thetext>I went with a struct rather than using function template specialization because in various places I plan to use partial specialization which function template specialization does not support.

If I don&apos;t end up actually using partial specialization, I will probably simplify things a bit by replacing:

      template&lt;&gt; struct ColorConversion&lt;Output, Input&gt; {
          Output convert(const Input&amp; color) { ... }
      };

with

      template&lt;&gt; Output convertColor&lt;Output, Input&gt;(const Input&amp;);

directly. But for now, the struct gives me some freedom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726212</commentid>
    <comment_count>3</comment_count>
      <attachid>419355</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-05 11:46:01 -0800</bug_when>
    <thetext>Comment on attachment 419355
Patch

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

&gt; Source/WebCore/platform/graphics/ColorConversion.h:342
&gt; +// FIXME: Reduce total number of matrix tranforms by contatentaing the matrices

Typo in &quot;concatenating&quot;

&gt; Source/WebCore/platform/graphics/ColorConversion.h:355
&gt; +// Steps 2, 3, and 4 can be combined into one single matrix if we linearly
&gt; +// concatented the three matrices. To do this, we will have to tag which conversions
&gt; +// are matrix based, expose the matrices, add support for constexpr concatenting
&gt; +// of ColorMatrix and find a way to merge the conversions.

Will we get slightly numerically different results when we concatenate matrices instead of doing multiple transformations? (I love floating point.)

&gt; Source/WebCore/rendering/RenderTheme.cpp:1422
&gt; +    // FIXME: Consider using LCHA&lt;float&gt; rather than HSLA&lt;float&gt; for better perceptual results.

Sure seems like a great idea.

&gt; Source/WebCore/rendering/RenderTheme.cpp:1429
&gt; +    // FIXME: Consider converting back to the initial underlying color type rather than hardcoding SRGBA&lt;float&gt; here.

This one is not quite as obvious a choice. Clearly SRGBA might have insufficient gamut to cover the color. Not perfectly clear what the benefits are of preserving color space further through the pipeline. Better rendering? Better performance? Avoiding unnecessarily limited gamut or loss of precision?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726232</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-05 12:23:49 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 419355 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=419355&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorConversion.h:342
&gt; &gt; +// FIXME: Reduce total number of matrix tranforms by contatentaing the matrices
&gt; 
&gt; Typo in &quot;concatenating&quot;
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorConversion.h:355
&gt; &gt; +// Steps 2, 3, and 4 can be combined into one single matrix if we linearly
&gt; &gt; +// concatented the three matrices. To do this, we will have to tag which conversions
&gt; &gt; +// are matrix based, expose the matrices, add support for constexpr concatenting
&gt; &gt; +// of ColorMatrix and find a way to merge the conversions.
&gt; 
&gt; Will we get slightly numerically different results when we concatenate
&gt; matrices instead of doing multiple transformations? (I love floating point.)

We likely will, but in practice, our numerical results are not 100% the same as even CoreGraphics at the moment, and we use much higher precision, 32 bit-float vs the specced minimum of 16-bit float, so the actual rendered results are not in practice going to change. That said, this is something we will want to figure out and ensure we have good test coverage for.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTheme.cpp:1422
&gt; &gt; +    // FIXME: Consider using LCHA&lt;float&gt; rather than HSLA&lt;float&gt; for better perceptual results.
&gt; 
&gt; Sure seems like a great idea.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTheme.cpp:1429
&gt; &gt; +    // FIXME: Consider converting back to the initial underlying color type rather than hardcoding SRGBA&lt;float&gt; here.
&gt; 
&gt; This one is not quite as obvious a choice. Clearly SRGBA might have
&gt; insufficient gamut to cover the color. Not perfectly clear what the benefits
&gt; are of preserving color space further through the pipeline. Better
&gt; rendering? Better performance? Avoiding unnecessarily limited gamut or loss
&gt; of precision?

That&apos;s a valid point. I guess what I am really getting at here is that if we switch to LCH for the luminance change, it doesn&apos;t really make sense to clamp back down to sRGB. If say, the input was DisplayP3, and we changed the luminance a little, clamping to sRGB seems not ideal. But, it wouldn&apos;t have to be the original color space at all, we could just keep it in LCHA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726234</commentid>
    <comment_count>5</comment_count>
      <attachid>419445</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-05 12:26:56 -0800</bug_when>
    <thetext>Created attachment 419445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726244</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-05 13:08:41 -0800</bug_when>
    <thetext>Committed r272436: &lt;https://trac.webkit.org/changeset/272436&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 419445.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726246</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-05 13:09:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/74037844&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419355</attachid>
            <date>2021-02-04 19:35:40 -0800</date>
            <delta_ts>2021-02-05 12:26:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221443-20210204193539.patch</filename>
            <type>text/plain</type>
            <size>64198</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MjQwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTAyLTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBHZW5lcmFsaXplIGNvbG9yIGNvbnZl
cnNpb24gY29kZSB0byByZWR1Y2UgbnVtYmVyIG9mIG92ZXJsb2FkcyByZXF1aXJlZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNDQzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBvdmVybG9h
ZGVkIG5hbWVkIGNvbnZlcnNpb24gZnVuY3Rpb25zIChlLmcuIHRvU1JHQkEoKSwgdG9MYWIoKSwg
ZXRjLikKKyAgICAgICAgd2l0aCB0ZW1wbGF0ZSBzcGVjaWFsaXppb24gb2YgYSBuZXcgQ29sb3JD
b252ZXJzaW9uIHN0cnVjdDoKKyAgICAgICAgCisgICAgICAgICAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBDb2xvckNvbnZlcnNpb248T3V0cHV0LCBJbnB1dD4geworICAgICAgICAgICAgICAgIE91dHB1
dCBjb252ZXJ0KGNvbnN0IElucHV0JiBjb2xvcikgeyAuLi4gfQorICAgICAgICAgICAgfTsKKwor
ICAgICAgICB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgYSBuZXcgZ2VuZXJpYyBjb252ZXJ0Q29sb3I8
Q29sb3JUeXBlPigpIGZ1bmN0aW9uLgorCisgICAgICAgIFRoaXMgYWxsb3dzIGZvciBhIGZldyBp
bXByb3ZlbWVudHM6CisgICAgICAgICAgLSBSZW1vdmVzIHRoZSBuZWVkIGZvciBlYWNoIGNvbG9y
IHR5cGUgdG8gZGVmaW5lIGFuIGlkZW50aXR5IGNvbnZlcnNpb24uCisgICAgICAgICAgLSBSZW1v
dmVzIHRoZSBuZWVkIGZvciBlYWNoIGNvbG9yIHR5cGUgdG8gZGVmaW5lIGFuIGdlbmVyaWMgY29u
dmVyc2lvbi4KKyAgICAgICAgICAtIEFsbG93cyBpbnRlZ3JhdGlvbiB3aXRoIGNvbXBvbmVudCB0
eXBlIGNvbnZlcnNpb24gc28gYSBjYWxsIGxpa2UKKyAgICAgICAgICAKKyAgICAgICAgICAgICAg
Y29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEpKQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYW4gbm93IGJlIHdyaXR0ZW4ganVzdCBhcworICAgICAgICAgICAgCisgICAg
ICAgICAgICAgIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYSkKKyAgICAgICAgCisg
ICAgICAgIFRoaXMgYWxzbyBwcm92aWRlcyBhIHBhdGggZm9yd2FyZCBmb3IgbW9yZSBvcHRpbWl6
YXRpb25zIC8gc2ltcGxpZmljYXRpb25zCisgICAgICAgIHNpbmNlIHdlIGNhbiBub3cgcmVhc29u
IGFib3V0IGNvbnZlcnNpb24gYmFzZWQgcHVyZWx5IG9uIHR5cGVzLgorCisgICAgICAgICogY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhTTFBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhXQlBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUxhYlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpwYXJzZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgU3dp
dGNoIHRvIGNvbnZlcnRDb2xvcjw+IGFuZCByZXBsYWNlIHNvbWUgdW5uZWNlc3NhcnkgdHlwZSB3
aXRoIGF1dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgIEFkb3B0IENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PD4gYW5kIGNvbnZlcnRDb2xvcjw+
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICBBZG9w
dCBjb252ZXJ0Q29sb3I8Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yVHlwZUxvc3N5IGNvbnN0KToKKyAgICAgICAgQWRkIGdl
bmVyaWMgY29udmVyc2lvbiBmdW5jdGlvbiB0b0NvbG9yVHlwZUxvc3N5PD4oKSBhbmQgcmUtaW1w
bGVtZW50CisgICAgICAgIHRvU1JHQkFMb3NzeTw+KCkgdXNpbmcgaXQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oOgorICAgICAgICBSZXBsYWNlIGZ1bmN0aW9uIG92
ZXJsb2FkcyB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIHRoZSBuZXcgQ29sb3JDb252
ZXJzaW9uCisgICAgICAgIHN0cnVjdC4gUmVwbGFjZSBpZGVudGl0eSBmdW5jdGlvbnMgYW5kIGZh
bGxiYWNrIGZ1bmN0aW9ucyB3aXRoIGEgc2luZ2xlIG5vbi1zcGVjaWFsaXplZAorICAgICAgICBD
b2xvckNvbnZlcnNpb24gd2hpY2ggdXNlcyBjb25zdGV4cHIgdG8gaGFuZGxlIHRoZSBpZGVudGl0
eSBjYXNlLCBjb252ZXJzaW9uIHRvL2Zyb20KKyAgICAgICAgU1JHQkE8dWludDhfdD4gKHRoZSBv
bmx5IG5vbi1mbG9hdCBjb2xvcikgYW5kIHRoZSBmYWxsYmFjayBjYXNlLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bHVtaW5hbmNlKToKKyAgICAgICAgQWRvcHQgY29udmVydENvbG9yPD4uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5k
QW5kQ2xhbXBUb1NSR0JBTG9zc3kpOgorICAgICAgICAoV2ViQ29yZTo6bGVha0NHQ29sb3IpOgor
ICAgICAgICBBZG9wdCBjb252ZXJ0Q29sb3I8Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpkcmF3TGlnaHRpbmcpOgorICAgICAgICBBZG9wdCB0b0NvbG9yVHlwZUxvc3N5PD4uCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAgICAgIEFkb3B0
IENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PD4gYW5kIGNvbnZlcnRDb2xvcjw+LgorCiAyMDIxLTAy
LTA0ICBKdWxpYW4gR29uemFsZXogIDxqdWxpYW5fYV9nb256YWxlekBhcHBsZS5jb20+CiAKICAg
ICAgICAgTnVsbCBkZXJlZmVyZW5jZSBpbiBEb2N1bWVudExvYWRlcjo6Y29tbWl0RGF0YSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
MSw3ICs3MDEsNyBAQCBzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgCiBz
dGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlUmdi
IHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVSZ2JhKTsKLSAgICBDU1NQ
YXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGF1dG8g
YXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKICAgICBib29sIGlzUGVyY2VudGFnZSA9
IGZhbHNlOwogICAgIGRvdWJsZSBjb2xvclBhcmFtZXRlcjsKQEAgLTc3Miw3ICs3NzIsNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiBzdGF0aWMgQ29sb3IgcGFy
c2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2Rl
IGNzc1BhcnNlck1vZGUpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVIc2wgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUhz
bGEpOwotICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5n
ZSk7CisgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAogICAgIGRvdWJs
ZSBodWVBbmdsZUluRGVncmVlczsKICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJh
dyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVy
b1F1aXJrOjpGb3JiaWQpKQpAQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhT
TFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEo
SFNMQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
Ml0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKKyAgICByZXR1cm4gY29udmVydENv
bG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CiB9
CiAKIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFyc2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQpAQCAtODMyLDcgKzgzMiw3IEBAIHN0YXRpYyBPcHRpb25hbDxmbG9h
dD4gcGFyc2VPcHRpb25hbEFscGgKIHN0YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFtZXRlcnMoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsK
ICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUh3Yik7Ci0g
ICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAg
ICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCiAgICAgZG91YmxlIGh1ZUFu
Z2xlSW5EZWdyZWVzOwogICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KGFyZ3Ms
IGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6
OkZvcmJpZCkpCkBAIC04ODUsMTMgKzg4NSwxMyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJh
bWV0ZXJzKENTU1BhcnNlCiAgICAgbm9tYWxpemVkV2hpdGVuZXNzIC89IDEwMC4wOwogICAgIG5v
bWFsaXplZEJsYWNrbmVzcyAvPSAxMDAuMDsKIAotICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8
dWludDhfdD4+KHRvU1JHQkEoSFdCQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFs
aXplZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihub21hbGl6ZWRXaGl0ZW5lc3MpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obm9tYWxpemVkQmxhY2tuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBo
YSkgfSkpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8Zmxv
YXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9h
dD4obm9tYWxpemVkV2hpdGVuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXplZEJsYWNr
bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOwogfQogCiBzdGF0aWMgQ29sb3Ig
cGFyc2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlTGFiKTsKLSAgICBDU1NQ
YXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGF1dG8g
YXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKICAgICBhdXRvIGxpZ2h0bmVzcyA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAgIGlmICghbGlnaHRuZXNz
KQpAQCAtOTE4LDcgKzkxOCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NT
UGFyc2UKIHN0YXRpYyBDb2xvciBwYXJzZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxjaCk7Ci0gICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAgICBhdXRvIGFyZ3MgPSBj
b25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCiAgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVy
Y2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKQEAgLTk0
Nyw3ICs5NDcsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlCiAg
ICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4g
dG9MYWIoTENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRp
Y19jYXN0PGZsb2F0PigqY2hyb21hVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oaHVlQW5nbGVJ
bkRlZ3JlZXMpLCAqYWxwaGEgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+
PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KCpjaHJvbWFWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihodWVBbmdsZUluRGVn
cmVlcyksICphbHBoYSB9KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgpAQCAt
MTAzNCw3ICsxMDM0LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBh
cgogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVDb2xvcik7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3Vt
ZUZ1bmN0aW9uKHJhbmdlKTsKKyAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2Up
OwogCiAgICAgQ29sb3IgY29sb3I7CiAgICAgc3dpdGNoIChhcmdzLnBlZWsoKS5pZCgpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShy
ZXZpc2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5NSwxMyArNTk1LDE2IEBAIE5TQXJyYXkgKkRh
dGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBoc2xhID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8Zmxv
YXQ+IHJhdGhlciB0aGFuIEhTTEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRz
LgorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZv
cmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhlIHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBh
bmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNvIHRoZSBjb2xvciB3aWxsIGFwcGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywg
c2luY2Ugb25seSBvbmUgY29sb3IgY2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGhzbGEubGlnaHRuZXNzID0gMC41ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhz
bGEuYWxwaGEgKj0gMC4zOGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGlu
ZUNvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENv
bnNpZGVyIGNvbnZlcnRpbmcgYmFjayB0byB0aGUgaW5pdGlhbCB1bmRlcmx5aW5nIGNvbG9yIHR5
cGUgcmF0aGVyIHRoYW4gaGFyZGNvZGluZyBTUkdCQTx1aW50OF90PiBoZXJlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1
aW50OF90Pj4oaHNsYSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50
Y29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRp
b25Gb3JDU1ModW5kZXJsaW5lQ29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI3MjQwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0
OSw3IEBAIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2EKICAgICAgICAg
aWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCiAgICAgICAgICAg
ICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3Is
IGFscGhhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JX
aXRoT3ZlcnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CisgICAg
ICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb252ZXJ0Q29s
b3I8U1JHQkE8ZmxvYXQ+Pih1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CiAgICAgfSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24g
MjcyNDAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA2LDggKzEwNiwxNCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5j
dG9yJiYpIGNvbnN0OwogCi0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3Jz
cGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+
IHRvU1JHQkFMb3NzeSgpIGNvbnN0OworICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRoZSB1bmRl
cmx5aW5nIGNvbG9yIGludG8gQ29sb3JUeXBlLCBwb3RlbnRpYWxseSBsb3NzaWx5IGlmIHRoZSBn
YW11dAorICAgIC8vIG9yIHByZWNpc2lvbiBvZiBDb2xvclR5cGUgaXMgc21hbGxlciB0aGFuIHRo
ZSBjdXJyZW50IHVuZGVybHlpbmcgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSB0b0NvbG9yVHlwZUxvc3N5KCkgY29uc3Q7CisKKyAgICAvLyBUaGlzIHdp
bGwgY29udmVydCB0aGUgdW5kZXJseWluZyBjb2xvciBpbnRvIHNSR0IsIHBvdGVudGlhbGx5IGxv
c3NpbHkgaWYgdGhlIGdhbXV0CisgICAgLy8gb3IgcHJlY2lzaW9uIG9mIHNSR0IgaXMgc21hbGxl
ciB0aGFuIHRoZSBjdXJyZW50IHVuZGVybHlpbmcgdHlwZS4gVGhpcyBpcyBhIGNvbnZlbmllbmNl
CisgICAgLy8gd3JhcHBlciBhcm91bmQgdG9Db2xvclR5cGVMb3NzeTw+KCkuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QgeyByZXR1cm4gdG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxUPj4oKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpw
YWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21w
b25lbnRzKCkgY29uc3Q7CiAKQEAgLTMyMSwyMiArMzI3LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8KICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0lubGluZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gU1JHQkE8VD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBDb2xvcjo6dG9Db2xvclR5cGVMb3NzeSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6bWFrZVZpc2l0b3IoCi0g
ICAgICAgIFtdIChjb25zdCBTUkdCQTx1aW50OF90PiYgY29sb3IpIHsKLSAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvbG9yOwotICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxU
LCBmbG9hdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+
KGNvbG9yKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0g
ICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQotICAg
ICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoY29s
b3IpKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+
KQotICAgICAgICAgICAgICAgIHJldHVybiB0b1NSR0JBKGNvbG9yKTsKLSAgICAgICAgfQotICAg
ICkpOworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5k
ZXJseWluZ0NvbG9yKSB7CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29sb3I8Q29sb3JUeXBlPih1
bmRlcmx5aW5nQ29sb3IpOworICAgIH0pOwogfQogCiBpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVy
dGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
Y3BwCShyZXZpc2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNzIgKzE1OSw3MiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2ZlckZ1bmN0aW9uLCB0eXBlCiAKIC8vIEE5OFJHQiA8
LT4gTGluZWFyQTk4UkdCIGNvbnZlcnNpb25zLgogCi1MaW5lYXJBOThSR0I8ZmxvYXQ+IHRvTGlu
ZWFyQTk4UkdCKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorTGluZWFyQTk4UkdCPGZsb2F0
PiBDb2xvckNvbnZlcnNpb248TGluZWFyQTk4UkdCPGZsb2F0PiwgQTk4UkdCPGZsb2F0Pj46OmNv
bnZlcnQoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRvTGluZWFy
PEE5OFJHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFt
cGVkPj4oY29sb3IpOwogfQogCi1BOThSR0I8ZmxvYXQ+IHRvQTk4UkdCKGNvbnN0IExpbmVhckE5
OFJHQjxmbG9hdD4mIGNvbG9yKQorQTk4UkdCPGZsb2F0PiBDb2xvckNvbnZlcnNpb248QTk4UkdC
PGZsb2F0PiwgTGluZWFyQTk4UkdCPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgTGluZWFyQTk4UkdC
PGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRvR2FtbWFFbmNvZGVkPEE5OFJHQlRyYW5z
ZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4oY29sb3Ip
OwogfQogCiAvLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9ucy4KIAot
TGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8
ZmxvYXQ+JiBjb2xvcikKK0xpbmVhckRpc3BsYXlQMzxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExp
bmVhckRpc3BsYXlQMzxmbG9hdD4sIERpc3BsYXlQMzxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IERp
c3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0xpbmVhcjxTUkdCVHJhbnNm
ZXJGdW5jdGlvbjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pihjb2xvcik7
CiB9CiAKLURpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAz
PGZsb2F0PiYgY29sb3IpCitEaXNwbGF5UDM8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxEaXNwbGF5
UDM8ZmxvYXQ+LCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJE
aXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9HYW1tYUVuY29kZWQ8U1JH
QlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4o
Y29sb3IpOwogfQogCiAvLyBFeHRlbmRlZFNSR0JBIDwtPiBMaW5lYXJFeHRlbmRlZFNSR0JBIGNv
bnZlcnNpb25zLgogCi1MaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiB0b0xpbmVhckV4dGVuZGVk
U1JHQkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mIGNvbG9yKQorTGluZWFyRXh0ZW5kZWRT
UkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+LCBF
eHRlbmRlZFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4m
IGNvbG9yKQogewogICAgIHJldHVybiB0b0xpbmVhcjxTUkdCVHJhbnNmZXJGdW5jdGlvbjxmbG9h
dCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+KGNvbG9yKTsKIH0KIAotRXh0ZW5k
ZWRTUkdCQTxmbG9hdD4gdG9FeHRlbmRlZFNSR0JBKGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8
ZmxvYXQ+JiBjb2xvcikKK0V4dGVuZGVkU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxFeHRl
bmRlZFNSR0JBPGZsb2F0PiwgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNv
bnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9H
YW1tYUVuY29kZWQ8U1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25N
b2RlOjpVbmNsYW1wZWQ+Pihjb2xvcik7CiB9CiAKIC8vIFByb1Bob3RvUkdCIDwtPiBMaW5lYXJQ
cm9QaG90b1JHQiBjb252ZXJzaW9ucy4KIAotTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IHRvTGlu
ZWFyUHJvUGhvdG9SR0IoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhclBy
b1Bob3RvUkdCPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+
LCBQcm9QaG90b1JHQjxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYg
Y29sb3IpCiB7CiAgICAgcmV0dXJuIHRvTGluZWFyPFByb1Bob3RvUkdCVHJhbnNmZXJGdW5jdGlv
bjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pihjb2xvcik7CiB9CiAKLVBy
b1Bob3RvUkdCPGZsb2F0PiB0b1Byb1Bob3RvUkdCKGNvbnN0IExpbmVhclByb1Bob3RvUkdCPGZs
b2F0PiYgY29sb3IpCitQcm9QaG90b1JHQjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFByb1Bob3Rv
UkdCPGZsb2F0PiwgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMaW5l
YXJQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0dhbW1hRW5jb2Rl
ZDxQcm9QaG90b1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2Rl
OjpDbGFtcGVkPj4oY29sb3IpOwogfQogCiAvLyBSZWMyMDIwIDwtPiBMaW5lYXJSZWMyMDIwIGNv
bnZlcnNpb25zLgogCi1MaW5lYXJSZWMyMDIwPGZsb2F0PiB0b0xpbmVhclJlYzIwMjAoY29uc3Qg
UmVjMjAyMDxmbG9hdD4mIGNvbG9yKQorTGluZWFyUmVjMjAyMDxmbG9hdD4gQ29sb3JDb252ZXJz
aW9uPExpbmVhclJlYzIwMjA8ZmxvYXQ+LCBSZWMyMDIwPGZsb2F0Pj46OmNvbnZlcnQoY29uc3Qg
UmVjMjAyMDxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0xpbmVhcjxSZWMyMDIwVHJh
bnNmZXJGdW5jdGlvbjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pihjb2xv
cik7CiB9CiAKLVJlYzIwMjA8ZmxvYXQ+IHRvUmVjMjAyMChjb25zdCBMaW5lYXJSZWMyMDIwPGZs
b2F0PiYgY29sb3IpCitSZWMyMDIwPGZsb2F0PiBDb2xvckNvbnZlcnNpb248UmVjMjAyMDxmbG9h
dD4sIExpbmVhclJlYzIwMjA8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJSZWMyMDIwPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRvR2FtbWFFbmNvZGVkPFJlYzIwMjBUcmFuc2Zl
ckZ1bmN0aW9uPGZsb2F0LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+KGNvbG9yKTsK
IH0KIAogLy8gU1JHQkEgPC0+IExpbmVhclNSR0JBIGNvbnZlcnNpb25zLgogCi1MaW5lYXJTUkdC
QTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorTGluZWFy
U1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMaW5lYXJTUkdCQTxmbG9hdD4sIFNSR0JBPGZs
b2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4g
dG9MaW5lYXI8U1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2Rl
OjpDbGFtcGVkPj4oY29sb3IpOwogfQogCi1TUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mIGNvbG9yKQorU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdC
QTxmbG9hdD4sIExpbmVhclNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgTGluZWFyU1JHQkE8
ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9HYW1tYUVuY29kZWQ8U1JHQlRyYW5zZmVy
RnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4oY29sb3IpOwog
fQpAQCAtMjMzLDcyICsyMzMsNzIgQEAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgTGluZWFy
U1JHQkE8ZgogCiAvLyAtIExpbmVhckE5OFJHQiBtYXRyaXggY29udmVyc2lvbnMuCiAKLUxpbmVh
ckE5OFJHQjxmbG9hdD4gdG9MaW5lYXJBOThSR0IoY29uc3QgTGluZWFyQTk4UkdCPGZsb2F0Pjo6
UmVmZXJlbmNlWFlaJiBjb2xvcikKK0xpbmVhckE5OFJHQjxmbG9hdD4gQ29sb3JDb252ZXJzaW9u
PExpbmVhckE5OFJHQjxmbG9hdD4sIExpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWj46
OmNvbnZlcnQoY29uc3QgTGluZWFyQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikK
IHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxMaW5l
YXJBOThSR0I8ZmxvYXQ+Pih4eXpUb0xpbmVhckE5OFJHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotTGluZWFyQTk4UkdC
PGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJBOThSR0I8ZmxvYXQ+JiBj
b2xvcikKK0xpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBDb2xvckNvbnZlcnNpb248
TGluZWFyQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5lYXJBOThSR0I8ZmxvYXQ+Pjo6
Y29udmVydChjb25zdCBMaW5lYXJBOThSR0I8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxMaW5lYXJBOThSR0I8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVo+KGxpbmVhckE5OFJHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAtIExpbmVhckRp
c3BsYXlQMyBtYXRyaXggY29udmVyc2lvbnMuCiAKLUxpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9M
aW5lYXJEaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFla
JiBjb2xvcikKK0xpbmVhckRpc3BsYXlQMzxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExpbmVhckRp
c3BsYXlQMzxmbG9hdD4sIExpbmVhckRpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWj46OmNv
bnZlcnQoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikK
IHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+Pih4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeC50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotTGluZWFy
RGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5
UDM8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhckRpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiBD
b2xvckNvbnZlcnNpb248TGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+
JiBjb2xvcikKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYTxMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGxpbmVhckRpc3BsYXlQ
M1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKSkpOwogfQogCiAvLyAtIExpbmVhckV4dGVuZGVkU1JHQkEgbWF0cml4IGNvbnZlcnNp
b25zLgogCi1MaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiB0b0xpbmVhckV4dGVuZGVkU1JHQkEo
Y29uc3QgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCitM
aW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGluZWFyRXh0ZW5kZWRT
UkdCQTxmbG9hdD4sIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpj
b252ZXJ0KGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNv
bG9yKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhh
PExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKLUxp
bmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IExpbmVh
ckV4dGVuZGVkU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVosIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25z
dCBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8TGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9h
dD46OlJlZmVyZW5jZVhZWj4obGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAtIExpbmVhclBy
b1Bob3RvUkdCIG1hdHJpeCBjb252ZXJzaW9ucy4KIAotTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+
IHRvTGluZWFyUHJvUGhvdG9SR0IoY29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVomIGNvbG9yKQorTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IENvbG9yQ29udmVyc2lv
bjxMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4sIExpbmVhclByb1Bob3RvUkdCPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVy
ZW5jZVhZWiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
RXhjZXB0QWxwaGE8TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pih4eXpUb0xpbmVhclByb1Bob3Rv
UkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOwogfQogCi1MaW5lYXJQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZ
WkEoY29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhclByb1Bob3Rv
UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxMaW5lYXJQcm9QaG90b1JH
QjxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pjo6Y29udmVy
dChjb25zdCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiBt
YWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPExpbmVhclByb1Bob3RvUkdCPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaPihsaW5lYXJQcm9QaG90b1JHQlRvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAt
IExpbmVhclJlYzIwMjAgbWF0cml4IGNvbnZlcnNpb25zLgogCi1MaW5lYXJSZWMyMDIwPGZsb2F0
PiB0b0xpbmVhclJlYzIwMjAoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZ
WiYgY29sb3IpCitMaW5lYXJSZWMyMDIwPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGluZWFyUmVj
MjAyMDxmbG9hdD4sIExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpjb252ZXJ0
KGNvbnN0IExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQogewogICAg
IHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPExpbmVhclJlYzIw
MjA8ZmxvYXQ+Pih4eXpUb0xpbmVhclJlYzIwMjBNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKLUxpbmVhclJlYzIwMjA8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IExpbmVhclJlYzIwMjA8ZmxvYXQ+JiBjb2xv
cikKK0xpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPExp
bmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhclJlYzIwMjA8ZmxvYXQ+Pjo6
Y29udmVydChjb25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJu
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8TGluZWFyUmVjMjAyMDxmbG9h
dD46OlJlZmVyZW5jZVhZWj4obGluZWFyUmVjMjAyMFRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29s
b3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAtIExpbmVh
clNSR0JBIG1hdHJpeCBjb252ZXJzaW9ucy4KIAotTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFy
U1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorTGlu
ZWFyU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMaW5lYXJTUkdCQTxmbG9hdD4sIExpbmVh
clNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBMaW5lYXJTUkdCQTxm
bG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8TGluZWFyU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNS
R0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29s
b3IpKSk7CiB9CiAKLUxpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25z
dCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQorTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVogQ29sb3JDb252ZXJzaW9uPExpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBM
aW5lYXJTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8
TGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGxpbmVhclNSR0JUb1hZWk1hdHJpeC50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0K
QEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgY2FsY3Vs
YXRlCiAgICAgcmV0dXJuIHsgaHVlLCBtaW4sIG1heCwgY2hyb21hIH07CiB9CiAKLUhTTEE8Zmxv
YXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorSFNMQTxmbG9hdD4gQ29sb3JD
b252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JB
PGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1j
b2xvci00LyNoc2wtdG8tcmdiCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3I7CkBA
IC0zNTQsNyArMzU0LDcgQEAgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNSR0JBPGZsb2F0PiYg
YwogICAgIHJldHVybiB7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9OwogfQog
Ci1TUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCitTUkdCQTxm
bG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFNMQTxmbG9hdD4+Ojpjb252ZXJ0
KGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CkBAIC0zOTcsNyArMzk3LDcgQEAgU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIAogCiAvLyBNQVJLOiBIV0IgY29udmVyc2lv
bnMuCiAKLUhXQkE8ZmxvYXQ+IHRvSFdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorSFdC
QTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252
ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1jb2xvci00LyNyZ2ItdG8taHdiCiAgICAgYXV0byBbaHVlLCBtaW4sIG1h
eCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1ZShjb2xvcik7CkBAIC00MDcsNyArNDA3LDcgQEAg
SFdCQTxmbG9hdD4gdG9IV0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYgYwogICAgIHJldHVybiB7IGh1
ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CiB9CiAKLVNSR0JBPGZsb2F0
PiB0b1NSR0JBKGNvbnN0IEhXQkE8ZmxvYXQ+JiBjb2xvcikKK1NSR0JBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIV0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgSFdCQTxm
bG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29s
b3ItNC8jaHdiLXRvLXJnYgogICAgIGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFs
cGhhXSA9IGNvbG9yOwpAQCAtNDE1LDcgKzQxNSw3IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNv
bnN0IEhXQkE8ZmxvYXQ+JiAKICAgICBpZiAod2hpdGVuZXNzICsgYmxhY2tuZXNzID09IDEuMGYp
CiAgICAgICAgIHJldHVybiB7IHdoaXRlbmVzcywgd2hpdGVuZXNzLCB3aGl0ZW5lc3MsIGFscGhh
IH07CiAKLSAgICAvLyBUaGlzIGlzIHRoZSBodWVUb1JHQiBmdW5jdGlvbiBpbiB0b1NSR0JBKGNv
bnN0IEhTTEEmKSB3aXRoIHRlbXAxID09IDAKKyAgICAvLyBUaGlzIGlzIHRoZSBodWVUb1JHQiBm
dW5jdGlvbiBpbiBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb25zdCBIU0xBJikgd2l0aCB0
ZW1wMSA9PSAwCiAgICAgLy8gYW5kIHRlbXAyID09IDEgc3RyZW5ndGggcmVkdWNlZCB0aHJvdWdo
IGl0LgogICAgIGF1dG8gaHVlVG9SR0IgPSBbXShmbG9hdCBodWUpIHsKICAgICAgICAgaWYgKGh1
ZSA8IDEuMGYpCkBAIC00NTYsNyArNDU2LDcgQEAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBMQUJl
ID0gMjE2LjBmIC8gMgogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBMQUJrID0gMjQzODkuMGYgLyAy
Ny4wZjsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1ZXNbXSA9IHsgMC45NjQy
MmYsIDEuMGYsIDAuODI1MjFmIH07CiAKLUxhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEo
Y29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCitMYWI8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JD
b252ZXJzaW9uPExhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGFiPGZsb2F0Pj46OmNvbnZlcnQo
Y29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgZmxvYXQgZjEgPSAoY29sb3IubGlnaHRu
ZXNzICsgMTYuMGYpIC8gMTE2LjBmOwogICAgIGZsb2F0IGYwID0gZjEgKyAoY29sb3IuYSAvIDUw
MC4wZik7CkBAIC00ODYsNyArNDg2LDcgQEAgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFla
QShjb25zdCBMYQogICAgIHJldHVybiB7IHgsIHksIHosIGNvbG9yLmFscGhhIH07CiB9CiAKLUxh
YjxmbG9hdD4gdG9MYWIoY29uc3QgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKK0xh
YjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExhYjxmbG9hdD4sIExhYjxmbG9hdD46OlJlZmVyZW5j
ZVhZWj46OmNvbnZlcnQoY29uc3QgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKIHsK
ICAgICBmbG9hdCB4ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwogICAgIGZsb2F0IHkg
PSBjb2xvci55IC8gRDUwV2hpdGVWYWx1ZXNbMV07CkBAIC01MTAsNyArNTEwLDcgQEAgTGFiPGZs
b2F0PiB0b0xhYihjb25zdCBMYWI8ZmxvYXQ+OjpSZWZlcgogCiAvLyBNQVJLOiBMQ0ggY29udmVy
c2lvbnMuCiAKLUxDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKK0xD
SEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMQ0hBPGZsb2F0PiwgTGFiPGZsb2F0Pj46OmNvbnZl
cnQoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy1jb2xvci00LyNsYWItdG8tbGNoCiAgICAgZmxvYXQgaHVlID0gcmFkMmRlZyhhdGFu
Mihjb2xvci5iLCBjb2xvci5hKSk7CkBAIC01MjMsNyArNTIzLDcgQEAgTENIQTxmbG9hdD4gdG9M
Q0hBKGNvbnN0IExhYjxmbG9hdD4mIGNvbAogICAgIH07CiB9CiAKLUxhYjxmbG9hdD4gdG9MYWIo
Y29uc3QgTENIQTxmbG9hdD4mIGNvbG9yKQorTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGFi
PGZsb2F0PiwgTENIQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvcikK
IHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI2xjaC10by1sYWIK
ICAgICBmbG9hdCBodWVBbmdsZVJhZGlhbnMgPSBkZWcycmFkKGNvbG9yLmh1ZSk7CkBAIC01NDAs
MTEwICs1NDAsMTEwIEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgTENIQTxmbG9hdD4mIGNvbG8K
IAogLy8gLSBBOThSR0IgY29tYmluYXRpb24gZnVuY3Rpb25zLgogCi1BOThSR0I8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorQTk4UkdCPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxBOThSR0I8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVosIEE5OFJHQjxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9y
KQogewotICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJBOThSR0IoY29sb3IpKTsKKyAgICByZXR1
cm4gY29udmVydENvbG9yPEE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVydENvbG9y
PExpbmVhckE5OFJHQjxmbG9hdD4+KGNvbG9yKSk7CiB9CiAKLUE5OFJHQjxmbG9hdD4gdG9BOThS
R0IoY29uc3QgQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKK0E5OFJHQjxmbG9h
dD4gQ29sb3JDb252ZXJzaW9uPEE5OFJHQjxmbG9hdD4sIEE5OFJHQjxmbG9hdD46OlJlZmVyZW5j
ZVhZWj46OmNvbnZlcnQoY29uc3QgQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikK
IHsKLSAgICByZXR1cm4gdG9BOThSR0IodG9MaW5lYXJBOThSR0IoY29sb3IpKTsKKyAgICByZXR1
cm4gY29udmVydENvbG9yPEE5OFJHQjxmbG9hdD4+KGNvbnZlcnRDb2xvcjxMaW5lYXJBOThSR0I8
ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIERpc3BsYXlQMyBjb21iaW5hdGlvbiBmdW5jdGlv
bnMuCiAKLURpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgRGlzcGxh
eVAzPGZsb2F0PiYgY29sb3IpCitEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JD
b252ZXJzaW9uPERpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiwgRGlzcGxheVAzPGZsb2F0
Pj46OmNvbnZlcnQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJu
IHRvWFlaQSh0b0xpbmVhckRpc3BsYXlQMyhjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29s
b3I8RGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPihjb252ZXJ0Q29sb3I8TGluZWFyRGlz
cGxheVAzPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQ
Myhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorRGlzcGxheVAz
PGZsb2F0PiBDb2xvckNvbnZlcnNpb248RGlzcGxheVAzPGZsb2F0PiwgRGlzcGxheVAzPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVomIGNvbG9yKQogewotICAgIHJldHVybiB0b0Rpc3BsYXlQMyh0b0xpbmVhckRpc3BsYXlQ
Myhjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0Pj4oY29u
dmVydENvbG9yPExpbmVhckRpc3BsYXlQMzxmbG9hdD4+KGNvbG9yKSk7CiB9CiAKIC8vIC0gRXh0
ZW5kZWRTUkdCIGNvbWJpbmF0aW9uIGZ1bmN0aW9ucy4KIAotRXh0ZW5kZWRTUkdCQTxmbG9hdD46
OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mIGNvbG9yKQor
RXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiBDb2xvckNvbnZlcnNpb248RXh0ZW5k
ZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiwgRXh0ZW5kZWRTUkdCQTxmbG9hdD4+Ojpjb252
ZXJ0KGNvbnN0IEV4dGVuZGVkU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICByZXR1cm4gdG9Y
WVpBKHRvTGluZWFyRXh0ZW5kZWRTUkdCQShjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29s
b3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVydENvbG9yPExpbmVh
ckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikpOwogfQogCi1FeHRlbmRlZFNSR0JBPGZsb2F0
PiB0b0V4dGVuZGVkU1JHQkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZ
WiYgY29sb3IpCitFeHRlbmRlZFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248RXh0ZW5kZWRT
UkdCQTxmbG9hdD4sIEV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpjb252ZXJ0
KGNvbnN0IEV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQogewotICAg
IHJldHVybiB0b0V4dGVuZGVkU1JHQkEodG9MaW5lYXJFeHRlbmRlZFNSR0JBKGNvbG9yKSk7Cisg
ICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29udmVydENvbG9y
PExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIEhTTEEgY29t
YmluYXRpb24gZnVuY3Rpb25zLgogCi1IU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShj
b25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCitIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9y
Q29udmVyc2lvbjxIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBIU0xBPGZsb2F0Pj46OmNvbnZl
cnQoY29uc3QgSFNMQTxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiB0b1hZWkEodG9TUkdC
QShjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD46OlJlZmVyZW5j
ZVhZWj4oY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotSFNMQTxmbG9h
dD4gdG9IU0xBKGNvbnN0IEhTTEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorSFNMQTxm
bG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBIU0xBPGZsb2F0Pjo6UmVmZXJlbmNl
WFlaPjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKIHsK
LSAgICByZXR1cm4gdG9IU0xBKHRvU1JHQkEoY29sb3IpKTsKKyAgICByZXR1cm4gY29udmVydENv
bG9yPEhTTEE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb2xvcikpOwogfQog
CiAvLyAtIEhXQkEgY29tYmluYXRpb24gZnVuY3Rpb25zLgogCi1IV0JBPGZsb2F0Pjo6UmVmZXJl
bmNlWFlaIHRvWFlaQShjb25zdCBIV0JBPGZsb2F0PiYgY29sb3IpCitIV0JBPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBIV0JB
PGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgSFdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVy
biB0b1hZWkEodG9TUkdCQShjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8SFdCQTxm
bG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsK
IH0KIAotSFdCQTxmbG9hdD4gdG9IV0JBKGNvbnN0IEhXQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVom
IGNvbG9yKQorSFdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBIV0JBPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBIV0JBPGZsb2F0Pjo6UmVmZXJlbmNl
WFlaJiBjb2xvcikKIHsKLSAgICByZXR1cm4gdG9IV0JBKHRvU1JHQkEoY29sb3IpKTsKKyAgICBy
ZXR1cm4gY29udmVydENvbG9yPEhXQkE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+
Pihjb2xvcikpOwogfQogCiAvLyAtIExDSEEgY29tYmluYXRpb24gZnVuY3Rpb25zLgogCi1MQ0hB
PGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMQ0hBPGZsb2F0PiYgY29sb3IpCitM
Q0hBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxMQ0hBPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaLCBMQ0hBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9y
KQogewotICAgIHJldHVybiB0b1hZWkEodG9MYWIoY29sb3IpKTsKKyAgICByZXR1cm4gY29udmVy
dENvbG9yPExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+
Pihjb2xvcikpOwogfQogCi1MQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTENIQTxmbG9hdD46OlJl
ZmVyZW5jZVhZWiYgY29sb3IpCitMQ0hBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TENIQTxmbG9h
dD4sIExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpjb252ZXJ0KGNvbnN0IExDSEE8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVomIGNvbG9yKQogewotICAgIHJldHVybiB0b0xDSEEodG9MYWIoY29sb3Ip
KTsKKyAgICByZXR1cm4gY29udmVydENvbG9yPExDSEE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8TGFi
PGZsb2F0Pj4oY29sb3IpKTsKIH0KIAogLy8gLSBQcm9QaG90b1JHQiBjb21iaW5hdGlvbiBmdW5j
dGlvbnMuCiAKLVByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBQ
cm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQorUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVogQ29sb3JDb252ZXJzaW9uPFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBQcm9Q
aG90b1JHQjxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYgY29sb3Ip
CiB7Ci0gICAgcmV0dXJuIHRvWFlaQSh0b0xpbmVhclByb1Bob3RvUkdCKGNvbG9yKSk7CisgICAg
cmV0dXJuIGNvbnZlcnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29u
dmVydENvbG9yPExpbmVhclByb1Bob3RvUkdCPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotUHJvUGhv
dG9SR0I8ZmxvYXQ+IHRvUHJvUGhvdG9SR0IoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVomIGNvbG9yKQorUHJvUGhvdG9SR0I8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxQcm9Q
aG90b1JHQjxmbG9hdD4sIFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVy
dChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7Ci0gICAg
cmV0dXJuIHRvUHJvUGhvdG9SR0IodG9MaW5lYXJQcm9QaG90b1JHQihjb2xvcikpOworICAgIHJl
dHVybiBjb252ZXJ0Q29sb3I8UHJvUGhvdG9SR0I8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8TGluZWFy
UHJvUGhvdG9SR0I8ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIFJlYzIwMjAgY29tYmluYXRp
b24gZnVuY3Rpb25zLgogCi1SZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25z
dCBSZWMyMDIwPGZsb2F0PiYgY29sb3IpCitSZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENv
bG9yQ29udmVyc2lvbjxSZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBSZWMyMDIwPGZsb2F0
Pj46OmNvbnZlcnQoY29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiB0
b1hZWkEodG9MaW5lYXJSZWMyMDIwKGNvbG9yKSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxS
ZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPihjb252ZXJ0Q29sb3I8TGluZWFyUmVjMjAyMDxm
bG9hdD4+KGNvbG9yKSk7CiB9CiAKLVJlYzIwMjA8ZmxvYXQ+IHRvUmVjMjAyMChjb25zdCBSZWMy
MDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKK1JlYzIwMjA8ZmxvYXQ+IENvbG9yQ29u
dmVyc2lvbjxSZWMyMDIwPGZsb2F0PiwgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZWj46OmNv
bnZlcnQoY29uc3QgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7Ci0gICAg
cmV0dXJuIHRvUmVjMjAyMCh0b0xpbmVhclJlYzIwMjAoY29sb3IpKTsKKyAgICByZXR1cm4gY29u
dmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8TGluZWFyUmVjMjAyMDxmbG9h
dD4+KGNvbG9yKSk7CiB9CiAKIC8vIC0gU1JHQiBjb21iaW5hdGlvbiBmdW5jdGlvbnMuCiAKLVNS
R0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQorU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaLCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0
PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHRvWFlaQSh0b0xpbmVhclNSR0JBKGNvbG9yKSk7Cisg
ICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVy
dENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotU1JHQkE8ZmxvYXQ+IHRv
U1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorU1JHQkE8Zmxv
YXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNl
WFlaPjo6Y29udmVydChjb25zdCBTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7
Ci0gICAgcmV0dXJuIHRvU1JHQkEodG9MaW5lYXJTUkdCQShjb2xvcikpOworICAgIHJldHVybiBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+
Pihjb2xvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNp
b24gMjcyNDAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyNCArMjYsMjc5IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEFsbCBjb2xvciB0eXBlcyBtdXN0IGF0IGxl
YXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIHRoZWly
IHJlZmVyZW5jZSBYWVogY29sb3Igc3BhY2UKIC8vCi0vLyAgICBgQ29sb3JUeXBlYDxmbG9hdD46
OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgYENvbG9yVHlwZWA8ZmxvYXQ+Jik7Ci0vLyAgICBg
Q29sb3JUeXBlYDxmbG9hdD4gdG9gQ29sb3JUeXBlYChjb25zdCBgQ29sb3JUeXBlYDxmbG9hdD46
OlJlZmVyZW5jZVhZWiYpOwotLy8KLS8vIGFzIHdlbGwgYXMgYW4gaWRlbnRpdHkgY29udmVyc2lv
bgotLy8KLS8vICAgIGNvbnN0ZXhwciBgQ29sb3JUeXBlYDxmbG9hdD4gdG9gQ29sb3JUeXBlYChj
b25zdCBgQ29sb3JUeXBlYDxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQotLy8KLS8v
IGFuZCBhIGdlbmVyaWMgY29udmVyc2lvbiB1dGlsaXppbmcgYSBjb252ZXJzaW9uIHRvIHRoZSBy
ZWZlcmVuY2UgWFlaIGNvbG9yIHNwYWNlIGFuZCBhIGNocm9tYXRpYwotLy8gYWRhcGF0YXRpb24g
aWYgdGhlIHdoaXRlIHBvaW50cyBkaWZmZXIKLS8vCi0vLyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBgQ29sb3JUeXBlYDxmbG9hdD4gdG9gQ29sb3JUeXBlYChjb25zdCBUJiBjb2xvcikKKy8vICAg
IHRlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxgQ29sb3JUeXBlYDxmbG9hdD46OlJl
ZmVyZW5jZVhZWiwgYENvbG9yVHlwZWA8ZmxvYXQ+PiB7CisvLyAgICAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGBDb2xvclR5cGVgPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3Qg
YENvbG9yVHlwZWA8ZmxvYXQ+Jik7CisvLyAgICB9OworLy8gICAgCisvLyAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBDb2xvckNvbnZlcnNpb248YENvbG9yVHlwZWA8ZmxvYXQ+LCBgQ29sb3JUeXBlYDxm
bG9hdD46OlJlZmVyZW5jZVhZWj4geworLy8gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBg
Q29sb3JUeXBlYDxmbG9hdD4gY29udmVydChjb25zdCBgQ29sb3JUeXBlYDxmbG9hdD46OlJlZmVy
ZW5jZVhZWiYpOworLy8gICAgfTsKIC8vCiAvLyBBbnkgYWRkaXRpb25hbCBjb252ZXJzaW9ucyBj
YW4gYmUgdGhvdWdodCBvZiBhcyBvcHRpbWl6YXRpb25zLCBzaG9ydGN1dHRpbmcgdW5uZWNlc3Nh
cnkgc3RlcHMsIHRob3VnaAogLy8gc29tZSBtYXkgYmUgaW50ZWdyYWwgdG8gdGhlIGJhc2UgY29u
dmVyc2lvbi4KIAogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0PiBz
dHJ1Y3QgQ29sb3JDb252ZXJzaW9uOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVu
YW1lIElucHV0PiBpbmxpbmUgT3V0cHV0IGNvbnZlcnRDb2xvcihjb25zdCBJbnB1dCYgY29sb3Ip
Cit7CisgICAgcmV0dXJuIENvbG9yQ29udmVyc2lvbjxPdXRwdXQsIElucHV0Pjo6Y29udmVydChj
b2xvcik7Cit9CisKKwogLy8gQTk4UkdCCi1XRUJDT1JFX0VYUE9SVCBBOThSR0I8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IEE5OFJHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JU
IEE5OFJHQjxmbG9hdD4gdG9BOThSR0IoY29uc3QgQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFla
Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248QTk4UkdCPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaLCBBOThSR0I8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEE5
OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IEE5OFJHQjxmbG9hdD4mKTsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxBOThSR0I8ZmxvYXQ+LCBB
OThSR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
QTk4UkdCPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiYp
OworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJBOThSR0I8ZmxvYXQ+
IHRvTGluZWFyQTk4UkdCKGNvbnN0IEE5OFJHQjxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0
IENvbG9yQ29udmVyc2lvbjxMaW5lYXJBOThSR0I8ZmxvYXQ+LCBBOThSR0I8ZmxvYXQ+PiB7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhckE5OFJHQjxmbG9hdD4gY29udmVydChjb25z
dCBBOThSR0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIERpc3BsYXlQMwotV0VCQ09SRV9FWFBPUlQg
RGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBEaXNwbGF5UDM8Zmxv
YXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0
IERpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29s
b3JDb252ZXJzaW9uPERpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiwgRGlzcGxheVAzPGZs
b2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVogY29udmVydChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248RGlzcGxheVAzPGZsb2F0PiwgRGlzcGxheVAzPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIERpc3BsYXlQ
MzxmbG9hdD4gY29udmVydChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsK
K307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0
PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyRGlzcGxheVAzPGZsb2F0PiwgRGlzcGxheVAz
PGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJEaXNwbGF5UDM8Zmxv
YXQ+IGNvbnZlcnQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworfTsKKwogCiAvLyBFeHRlbmRl
ZFNSR0JBCi1XRUJDT1JFX0VYUE9SVCBFeHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFla
IHRvWFlaQShjb25zdCBFeHRlbmRlZFNSR0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgRXh0
ZW5kZWRTUkdCQTxmbG9hdD4gdG9FeHRlbmRlZFNSR0JBKGNvbnN0IEV4dGVuZGVkU1JHQkE8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxF
eHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBFeHRlbmRlZFNSR0JBPGZsb2F0Pj4g
eworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJl
bmNlWFlaIGNvbnZlcnQoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxFeHRlbmRlZFNSR0JBPGZsb2F0PiwgRXh0ZW5k
ZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBFeHRlbmRlZFNSR0JBPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEV4dGVuZGVkU1JHQkE8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGlu
ZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4gdG9MaW5lYXJFeHRlbmRlZFNSR0JBKGNvbnN0IEV4dGVu
ZGVkU1JHQkE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGlu
ZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4sIEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+IGNvbnZlcnQoY29u
c3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mKTsKK307CisKIAogLy8gSFNMQQotV0VCQ09SRV9FWFBP
UlQgSFNMQTxmbG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgSFNMQTxmbG9hdD4mKTsK
LVdFQkNPUkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBIU0xBPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD46OlJlZmVyZW5jZVhZWiwgSFNMQTxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgSFNMQTxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IEhTTEE8ZmxvYXQ+Jik7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9hdD4sIEhT
TEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSFNM
QTxmbG9hdD4gY29udmVydChjb25zdCBIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJik7Cit9Owor
CiAvLyBBZGRpdGlvbnMKLVdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0
IEhTTEE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248U1JHQkE8
ZmxvYXQ+LCBIU0xBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTUkdCQTxm
bG9hdD4gY29udmVydChjb25zdCBIU0xBPGZsb2F0PiYpOworfTsKKwogCiAvLyBIV0JBCi1XRUJD
T1JFX0VYUE9SVCBIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBIV0JBPGZs
b2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgSFdCQTxmbG9hdD4gdG9IV0JBKGNvbnN0IEhXQkE8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxI
V0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBIV0JBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3QgSFdCQTxm
bG9hdD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxIV0JBPGZs
b2F0PiwgSFdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBIV0JBPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEhXQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVom
KTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JH
QkEoY29uc3QgSFdCQTxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lv
bjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFNSR0JBPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEhXQkE8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIExD
SEEKLVdFQkNPUkVfRVhQT1JUIExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0
IExDSEE8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3Qg
TENIQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252
ZXJzaW9uPExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExDSEE8ZmxvYXQ+PiB7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogY29udmVydChjb25z
dCBMQ0hBPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9u
PExDSEE8ZmxvYXQ+LCBMQ0hBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIExDSEE8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTENIQTxmbG9hdD46OlJlZmVy
ZW5jZVhZWiYpOworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+
IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZl
cnNpb248TGFiPGZsb2F0PiwgTENIQTxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgTGFiPGZsb2F0PiBjb252ZXJ0KGNvbnN0IExDSEE8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIExh
YgotV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBM
YWI8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExhYjxm
bG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9u
PExhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGFiPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBMYWI8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogY29udmVydChjb25zdCBMYWI8Zmxv
YXQ+Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGFiPGZsb2F0
PiwgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IExhYjxmbG9hdD4gY29udmVydChjb25zdCBMYWI8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307
CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hBKGNvbnN0
IExhYjxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMQ0hBPGZs
b2F0PiwgTGFiPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMQ0hBPGZsb2F0
PiBjb252ZXJ0KGNvbnN0IExhYjxmbG9hdD4mKTsKK307CisKIAogLy8gTGluZWFyQTk4UkdCCi1X
RUJDT1JFX0VYUE9SVCBMaW5lYXJBOThSR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNv
bnN0IExpbmVhckE5OFJHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIExpbmVhckE5OFJHQjxm
bG9hdD4gdG9MaW5lYXJBOThSR0IoY29uc3QgTGluZWFyQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNl
WFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyQTk4UkdCPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5lYXJBOThSR0I8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIExpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0KGNv
bnN0IExpbmVhckE5OFJHQjxmbG9hdD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9y
Q29udmVyc2lvbjxMaW5lYXJBOThSR0I8ZmxvYXQ+LCBMaW5lYXJBOThSR0I8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyQTk4UkdCPGZsb2F0
PiBjb252ZXJ0KGNvbnN0IExpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOworfTsK
KwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBBOThSR0I8ZmxvYXQ+IHRvQTk4UkdCKGNv
bnN0IExpbmVhckE5OFJHQjxmbG9hdD4mIGNvbG9yKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9y
Q29udmVyc2lvbjxBOThSR0I8ZmxvYXQ+LCBMaW5lYXJBOThSR0I8ZmxvYXQ+PiB7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIEE5OFJHQjxmbG9hdD4gY29udmVydChjb25zdCBMaW5lYXJBOThS
R0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIExpbmVhckRpc3BsYXlQMwotV0VCQ09SRV9FWFBPUlQg
TGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJE
aXNwbGF5UDM8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+
IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5j
ZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhckRpc3BsYXlQ
MzxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGluZWFyRGlzcGxheVAzPGZsb2F0Pj4geworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVog
Y29udmVydChjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyRGlzcGxheVAzPGZsb2F0PiwgTGluZWFyRGlz
cGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IExpbmVhckRpc3BsYXlQMzxmbG9hdD4gY29udmVydChjb25zdCBMaW5lYXJEaXNwbGF5UDM8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQg
RGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+
Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248RGlzcGxheVAzPGZsb2F0Piwg
TGluZWFyRGlzcGxheVAzPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBEaXNw
bGF5UDM8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOworfTsK
KwogCiAvLyBMaW5lYXJFeHRlbmRlZFNSR0JBCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJFeHRlbmRl
ZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJFeHRlbmRlZFNS
R0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4g
dG9MaW5lYXJFeHRlbmRlZFNSR0JBKGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5lYXJF
eHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5lYXJFeHRlbmRlZFNSR0JBPGZs
b2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJFeHRlbmRlZFNSR0JBPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3QgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9h
dD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5lYXJFeHRl
bmRlZFNSR0JBPGZsb2F0PiwgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZ
Wj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0
PiBjb252ZXJ0KGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVom
KTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgRXh0ZW5kZWRTUkdCQTxmbG9h
dD4gdG9FeHRlbmRlZFNSR0JBKGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Jik7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248RXh0ZW5kZWRTUkdCQTxmbG9hdD4sIExp
bmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEV4
dGVuZGVkU1JHQkE8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9h
dD4mKTsKK307CisKIAogLy8gTGluZWFyUHJvUGhvdG9SR0IKLVdFQkNPUkVfRVhQT1JUIExpbmVh
clByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJQcm9Q
aG90b1JHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIExpbmVhclByb1Bob3RvUkdCPGZsb2F0
PiB0b0xpbmVhclByb1Bob3RvUkdCKGNvbnN0IExpbmVhclByb1Bob3RvUkdCPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyUHJv
UGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhclByb1Bob3RvUkdCPGZsb2F0Pj4g
eworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD46OlJl
ZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IExpbmVhclByb1Bob3RvUkdCPGZsb2F0PiYpOworfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclByb1Bob3RvUkdCPGZs
b2F0PiwgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IGNvbnZlcnQoY29uc3Qg
TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKIC8vIEFkZGl0
aW9ucwotV0VCQ09SRV9FWFBPUlQgUHJvUGhvdG9SR0I8ZmxvYXQ+IHRvUHJvUGhvdG9SR0IoY29u
c3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNv
bnZlcnNpb248UHJvUGhvdG9SR0I8ZmxvYXQ+LCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4+IHsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUHJvUGhvdG9SR0I8ZmxvYXQ+IGNvbnZlcnQoY29u
c3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIExpbmVhclJlYzIwMjAK
LVdFQkNPUkVfRVhQT1JUIExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpB
KGNvbnN0IExpbmVhclJlYzIwMjA8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMaW5lYXJSZWMy
MDIwPGZsb2F0PiB0b0xpbmVhclJlYzIwMjAoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD46OlJl
ZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclJl
YzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhclJlYzIwMjA8ZmxvYXQ+PiB7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVog
Y29udmVydChjb25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclJlYzIwMjA8ZmxvYXQ+LCBMaW5lYXJSZWMyMDIw
PGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVh
clJlYzIwMjA8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD46OlJlZmVy
ZW5jZVhZWiYpOworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBSZWMyMDIwPGZs
b2F0PiB0b1JlYzIwMjAoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD4mKTsKK3RlbXBsYXRlPD4g
c3RydWN0IENvbG9yQ29udmVyc2lvbjxSZWMyMDIwPGZsb2F0PiwgTGluZWFyUmVjMjAyMDxmbG9h
dD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVjMjAyMDxmbG9hdD4gY29udmVydChj
b25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYpOworfTsKKwogCiAvLyBMaW5lYXJTUkdCQQotV0VC
Q09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+
IHRvTGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsK
K3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5lYXJTUkdCQTxmbG9hdD46OlJl
ZmVyZW5jZVhZWiwgTGluZWFyU1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIExpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248
TGluZWFyU1JHQkE8ZmxvYXQ+LCBMaW5lYXJTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4gewor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJTUkdCQTxmbG9hdD4gY29udmVydChjb25z
dCBMaW5lYXJTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOworfTsKKwogLy8gQWRkaXRpb25z
Ci1XRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxm
bG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4s
IExpbmVhclNSR0JBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTUkdCQTxm
bG9hdD4gY29udmVydChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK307CisKIAogLy8gUHJv
UGhvdG9SR0IKLVdFQkNPUkVfRVhQT1JUIFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFla
IHRvWFlaQShjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIFByb1Bo
b3RvUkdCPGZsb2F0PiB0b1Byb1Bob3RvUkdCKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248UHJvUGhvdG9S
R0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIFByb1Bob3RvUkdCPGZsb2F0Pj4geworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0
KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29s
b3JDb252ZXJzaW9uPFByb1Bob3RvUkdCPGZsb2F0PiwgUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUHJvUGhvdG9SR0I8ZmxvYXQ+
IGNvbnZlcnQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisK
IC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IHRv
TGluZWFyUHJvUGhvdG9SR0IoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+LCBQcm9QaG90
b1JHQjxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyUHJvUGhvdG9S
R0I8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8v
IFJlYzIwMjAKLVdFQkNPUkVfRVhQT1JUIFJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9Y
WVpBKGNvbnN0IFJlYzIwMjA8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBSZWMyMDIwPGZsb2F0
PiB0b1JlYzIwMjAoY29uc3QgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPFJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVos
IFJlYzIwMjA8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlYzIwMjA8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVogY29udmVydChjb25zdCBSZWMyMDIwPGZsb2F0PiYpOworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPFJlYzIwMjA8ZmxvYXQ+LCBSZWMyMDIw
PGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlYzIw
MjA8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwor
fTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJSZWMyMDIwPGZsb2F0PiB0
b0xpbmVhclJlYzIwMjAoY29uc3QgUmVjMjAyMDxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0
IENvbG9yQ29udmVyc2lvbjxMaW5lYXJSZWMyMDIwPGZsb2F0PiwgUmVjMjAyMDxmbG9hdD4+IHsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyUmVjMjAyMDxmbG9hdD4gY29udmVydChj
b25zdCBSZWMyMDIwPGZsb2F0PiYpOworfTsKKwogCiAvLyBTUkdCQQotV0VCQ09SRV9FWFBPUlQg
U1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwot
V0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVomKTsKLS8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGluZWFyU1JHQkE8
ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9S
VCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9S
VCBIV0JBPGZsb2F0PiB0b0hXQkEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIFNSR0JBPGZs
b2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTUkdCQTxmbG9hdD46OlJlZmVyZW5j
ZVhZWiBjb252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0PiwgU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU1JHQkE8ZmxvYXQ+IGNvbnZlcnQoY29u
c3QgU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKKy8vIEFkZGl0aW9ucwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclNSR0JBPGZsb2F0PiwgU1JHQkE8
ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhclNSR0JBPGZsb2F0PiBj
b252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29s
b3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgSFNMQTxmbG9hdD4gY29udmVydChjb25zdCBTUkdCQTxmbG9hdD4mKTsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxIV0JBPGZsb2F0PiwgU1JHQkE8
ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEhXQkE8ZmxvYXQ+IGNvbnZlcnQo
Y29uc3QgU1JHQkE8ZmxvYXQ+Jik7Cit9OworCiAKIAogLy8gQ2hyb21hdGljIEFkYXB0YXRpb24g
Y29udmVyc2lvbnMuCkBAIC0xNjIsMTExICszMTcsNTggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
V2hpdGVQb2ludCBpbnB1dFdoaQogICAgICAgICByZXR1cm4gY29udmVydEZyb21ENTBXaGl0ZVBv
aW50VG9ENjVXaGl0ZVBvaW50KGNvbG9yKTsKIH0KIAotCi0vLyBJZGVudGl0eSBjb252ZXJzaW9u
cyAodXNlZnVsIGZvciBnZW5lcmljIGNvbnRleHRzKS4KLQotY29uc3RleHByIEE5OFJHQjxmbG9h
dD4gdG9BOThSR0IoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9
Ci1jb25zdGV4cHIgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8
ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KLWNvbnN0ZXhwciBFeHRlbmRlZFNSR0JB
PGZsb2F0PiB0b0V4dGVuZGVkU1JHQkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mIGNvbG9y
KSB7IHJldHVybiBjb2xvcjsgfQotY29uc3RleHByIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBI
U0xBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgSFdCQTxmbG9h
dD4gdG9IV0JBKGNvbnN0IEhXQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KLWNv
bnN0ZXhwciBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yKSB7IHJl
dHVybiBjb2xvcjsgfQotY29uc3RleHByIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgTGFiPGZsb2F0
PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgTGluZWFyQTk4UkdCPGZsb2F0
PiB0b0xpbmVhckE5OFJHQihjb25zdCBMaW5lYXJBOThSR0I8ZmxvYXQ+JiBjb2xvcikgeyByZXR1
cm4gY29sb3I7IH0KLWNvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlz
cGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xv
cjsgfQotY29uc3RleHByIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+IHRvTGluZWFyRXh0ZW5k
ZWRTUkdCQShjb25zdCBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJu
IGNvbG9yOyB9Ci1jb25zdGV4cHIgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IHRvTGluZWFyUmVj
MjAyMChjb25zdCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xv
cjsgfQotY29uc3RleHByIExpbmVhclJlYzIwMjA8ZmxvYXQ+IHRvTGluZWFyUmVjMjAyMChjb25z
dCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4
cHIgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8Zmxv
YXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KLWNvbnN0ZXhwciBQcm9QaG90b1JHQjxmbG9h
dD4gdG9Qcm9QaG90b1JHQihjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKSB7IHJldHVy
biBjb2xvcjsgfQotY29uc3RleHByIFJlYzIwMjA8ZmxvYXQ+IHRvUmVjMjAyMChjb25zdCBSZWMy
MDIwPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0K
LXRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIFhZWkE8ZmxvYXQsIFc+IHRvWFlaQShj
b25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci0KLQogLy8gRmFs
bGJhY2sgY29udmVyc2lvbnMuCiAKLS8vIEFsbCB0eXBlcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBh
IGNvbnZlcnNpb24gdG8gdGhlaXIgcmVmZXJlbmNlIFhZWiBzcGFjZSwgc28gdGhlc2UgYXJlIGd1
YXJhbnRlZWQKLS8vIHRvIHdvcmsgaWYgYW5vdGhlciBvdmVybG9hZCBpcyBub3QgYWxyZWFkeSBw
cm92aWRlZC4KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gQTk4UkdCPGZsb2F0PiB0b0E5OFJHQihj
b25zdCBUJiBjb2xvcikKLXsKLSAgICByZXR1cm4gdG9BOThSR0IocGVyZm9ybUNob21hdGljQWRh
cGF0YXRpb248QTk4UkdCPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQorLy8gQWxsIHR5cGVz
IGFyZSByZXF1aXJlZCB0byBoYXZlIGEgY29udmVyc2lvbiB0byB0aGVpciByZWZlcmVuY2UgWFla
IHNwYWNlLCBzbyB0aGlzIGlzIGd1YXJhbnRlZWQKKy8vIHRvIHdvcmsgaWYgYW5vdGhlciBzcGVj
aWFsaXphdGlvbiBpcyBub3QgYWxyZWFkeSBwcm92aWRlZC4KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBUJiBjb2xvcikKLXsKLSAgICBy
ZXR1cm4gdG9EaXNwbGF5UDMocGVyZm9ybUNob21hdGljQWRhcGF0YXRpb248RGlzcGxheVAzPGZs
b2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeHRlbmRl
ZFNSR0JBPGZsb2F0PiB0b0V4dGVuZGVkU1JHQkEoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0
dXJuIHRvRXh0ZW5kZWRTUkdCQShwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxFeHRlbmRlZFNS
R0JBPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBI
U0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRvSFNMQShw
ZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxIU0xBPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIV0JBPGZsb2F0PiB0b0hXQkEoY29uc3QgVCYgY29s
b3IpCi17Ci0gICAgcmV0dXJuIHRvSFdCQShwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxIV0JB
PGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMQ0hB
PGZsb2F0PiB0b0xDSEEoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRvTENIQShwZXJm
b3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMQ0hBPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IFQmIGNvbG9yKQot
ewotICAgIHJldHVybiB0b0xhYihwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMYWI8ZmxvYXQ+
Pih0b1hZWkEoY29sb3IpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhckE5OFJH
QjxmbG9hdD4gdG9MaW5lYXJBOThSR0IoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRv
TGluZWFyQTk4UkdCKHBlcmZvcm1DaG9tYXRpY0FkYXBhdGF0aW9uPExpbmVhckE5OFJHQjxmbG9h
dD4+KHRvWFlaQShjb2xvcikpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyRGlz
cGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBUJiBjb2xvcikKLXsKLSAgICBy
ZXR1cm4gdG9MaW5lYXJEaXNwbGF5UDMocGVyZm9ybUNob21hdGljQWRhcGF0YXRpb248TGluZWFy
RGlzcGxheVAzPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiB0b0xpbmVhckV4dGVuZGVkU1JHQkEoY29u
c3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRvTGluZWFyRXh0ZW5kZWRTUkdCQShwZXJmb3Jt
Q2hvbWF0aWNBZGFwYXRhdGlvbjxMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0Pj4odG9YWVpBKGNv
bG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJQcm9QaG90b1JHQjxmbG9h
dD4gdG9MaW5lYXJQcm9QaG90b1JHQihjb25zdCBUJiBjb2xvcikKLXsKLSAgICByZXR1cm4gdG9M
aW5lYXJQcm9QaG90b1JHQihwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMaW5lYXJQcm9QaG90
b1JHQjxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
TGluZWFyUmVjMjAyMDxmbG9hdD4gdG9MaW5lYXJSZWMyMDIwKGNvbnN0IFQmIGNvbG9yKQotewot
ICAgIHJldHVybiB0b0xpbmVhclJlYzIwMjAocGVyZm9ybUNob21hdGljQWRhcGF0YXRpb248TGlu
ZWFyUmVjMjAyMDxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgVCYgY29sb3IpCi17
Ci0gICAgcmV0dXJuIHRvTGluZWFyU1JHQkEocGVyZm9ybUNob21hdGljQWRhcGF0YXRpb248TGlu
ZWFyU1JHQkE8ZmxvYXQ+Pih0b1hZWkEoY29sb3IpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFByb1Bob3RvUkdCPGZsb2F0PiB0b1Byb1Bob3RvUkdCKGNvbnN0IFQmIGNvbG9yKQotewot
ICAgIHJldHVybiB0b1Byb1Bob3RvUkdCKHBlcmZvcm1DaG9tYXRpY0FkYXBhdGF0aW9uPFByb1Bo
b3RvUkdCPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBSZWMyMDIwPGZsb2F0PiB0b1JlYzIwMjAoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJu
IHRvUmVjMjAyMChwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxSZWMyMDIwPGZsb2F0Pj4odG9Y
WVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxmbG9hdD4gdG9T
UkdCQShjb25zdCBUJiBjb2xvcikKLXsKLSAgICByZXR1cm4gdG9TUkdCQShwZXJmb3JtQ2hvbWF0
aWNBZGFwYXRhdGlvbjxTUkdCQTxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KKy8vIEZJWE1F
OiBSYXRoZXIgdGhhbiBhbHdheXMgY29udmVydGluZyB0aHJvdWdoIHJlZmVyZW5jZSBYWVogY29s
b3Igc3BhY2UKKy8vIHdlIHNob3VsZCBpbnN0ZWFkIHN3aXRjaCB0byBjb21wdXRpbmcgdGhlIGxl
YXN0IGNvbW1vbiByZWZlcmVuY2UgYW5jZXN0b3IKKy8vIHR5cGUgd2hlcmUgZWFjaCBjb2xvciB0
eXBlIGRlZmluZXMgaXRzIHJlZmVyZW5jZSB0eXBlIGFzIHRoZSBjb2xvciBpdCBuZWVkcworLy8g
dG8gZ2V0IG9uZSBzdGVwIGNsb3NlciB0byB0aGUgcmVmZXJlbmNlIFhZWiBjb2xvciBzcGFjZS4g
Rm9yIGluc3RhbmNlLAorLy8gdGhlIHJlZmVyZW5jZSB0eXBlIG9mIFNSR0JBIGlzIExpbmVhclNS
R0JBLCBhbmQgdGhlIHJlZmVyZW5jZSB0eXBlIG9mIExDSEEKKy8vIGlzIExhYi4gVG9nZXRoZXIs
IHRoZSBjb2xvciB0eXBlcyBtYWtlIGEgdHJlZSB3aXRoIFhZWiBhdCB0aGUgcm9vdC4gVGhlCisv
LyBjb252ZXJzaW9uIHNob3VsZCBlbmQgdXAgbG9va2luZyBzb21ldGhpbmcgbGlrZToKKy8vCisv
LyAgIHVzaW5nIExDQSA9IExlYXN0Q29tbW9uQW5jZXN0b3I8T3V0cHV0LCBJbnB1dD46OlR5cGU7
CisvLyAgIHJldHVybiBjb252ZXJ0Q29sb3I8T3V0cHV0Pihjb252ZXJ0Q29sb3I8TENBPihjb2xv
cikpOworLy8KKy8vIEFuIGV4YW1wbGUgb2Ygd2hlcmUgdGhpcyB3b3VsZCBiZSBtb3JlIGVmZmlj
aWVudCBpcyB3aGVuIGNvbnZlcnRpbmcgZnJvbQorLy8gSFNMQTxmbG9hdD4gdG8gSFdCQTxmbG9h
dD4uIExDQSBmb3IgdGhpcyBwYWlyIGlzIFNSR0JBPGZsb2F0PiBzbyBjb252ZXJzaW9uCisvLyB0
aHJvdWdoIFhZWiBpcyB3YXN0ZWZ1bC4gVGhpcyBtb2RlbCB3b3VsZCBhbHNvIGFsbG93IHVzIHRv
IHJlbW92ZSB0aGUKKy8vIGNvbWJpbmF0aW9uIGNvbnZlcnNpb25zLCByZWR1Y2luZyB0aGUgbnVt
YmVyIG9mIHRoaW5ncyBlYWNoIG5ldyBjb2xvciB0eXBlCisvLyByZXF1aXJlcy4KKy8vCisvLyBG
SVhNRTogUmVkdWNlIHRvdGFsIG51bWJlciBvZiBtYXRyaXggdHJhbmZvcm1zIGJ5IGNvbnRhdGVu
dGFpbmcgdGhlIG1hdHJpY2VzCisvLyBvZiBzZXF1ZW50aWFsIG1hdHJpeCB0cmFuc2Zvcm1zIGF0
IGNvbXBpbGUgdGltZS4gVGFrZSB0aGUgY29udmVyc2lvbiBmcm9tCisvLyBQcm9QaG90b1JHQjxm
bG9hdD4gdG8gU1JHQkE8ZmxvYXQ+IGFzIGFuIGV4YW1wbGU6CisvLworLy8gICAxLiBQcm9QaG90
b1JHQjxmbG9hdD4gLT4gTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+ICAgICAgICAgICAgICAgICAg
KHRyYW5zZmVyIGZ1bmN0aW9uIHRyYW5zZm9ybSwgbm90IG1hdHJpeCkKKy8vICAgMi4gTGluZWFy
UHJvUGhvdG9SR0I8ZmxvYXQ+IC0+IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gICAgICAg
IE1BVFJJWCBUUkFOU0ZPUk0KKy8vICAgMy4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiAt
PiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+ICAgIE1BVFJJWCBUUkFOU0ZPUk0KKy8vICAg
NC4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiAtPiBMaW5lYXJTUkdCQTxmbG9hdD4gICAg
ICAgICAgICAgIE1BVFJJWCBUUkFOU0ZPUk0KKy8vICAgNS4gTGluZWFyU1JHQkE8ZmxvYXQ+IC0+
IFNSR0JBPGZsb2F0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmFuc2ZlciBmdW5j
dGlvbiB0cmFuc2Zvcm0sIG5vdCBtYXRyaXgpCisvLworLy8gU3RlcHMgMiwgMywgYW5kIDQgY2Fu
IGJlIGNvbWJpbmVkIGludG8gb25lIHNpbmdsZSBtYXRyaXggaWYgd2UgbGluZWFybHkKKy8vIGNv
bmNhdGVudGVkIHRoZSB0aHJlZSBtYXRyaWNlcy4gVG8gZG8gdGhpcywgd2Ugd2lsbCBoYXZlIHRv
IHRhZyB3aGljaCBjb252ZXJzaW9ucworLy8gYXJlIG1hdHJpeCBiYXNlZCwgZXhwb3NlIHRoZSBt
YXRyaWNlcywgYWRkIHN1cHBvcnQgZm9yIGNvbnN0ZXhwciBjb25jYXRlbnRpbmcKKy8vIG9mIENv
bG9yTWF0cml4IGFuZCBmaW5kIGEgd2F5IHRvIG1lcmdlIHRoZSBjb252ZXJzaW9ucy4KKwordGVt
cGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dD4gc3RydWN0IENvbG9yQ29udmVy
c2lvbiB7CisgICAgc3RhdGljIE91dHB1dCBjb252ZXJ0KGNvbnN0IElucHV0JiBjb2xvcikKKyAg
ICB7CisgICAgICAgIGlmIGNvbnN0ZXhwcihzdGQ6OmlzX3NhbWVfdjxPdXRwdXQsIElucHV0PikK
KyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PHR5cGVuYW1lIElucHV0OjpDb21wb25lbnRUeXBlLCB1aW50OF90PikKKyAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0Q29sb3I8T3V0cHV0Pihjb252ZXJ0VG88U1JHQkE8Zmxv
YXQ+Pihjb2xvcikpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8
dHlwZW5hbWUgT3V0cHV0OjpDb21wb25lbnRUeXBlLCB1aW50OF90PikKKyAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+
KGNvbG9yKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byB4eXoxID0gY29udmVy
dENvbG9yPHR5cGVuYW1lIElucHV0OjpSZWZlcmVuY2VYWVo+KGNvbG9yKTsKKyAgICAgICAgICAg
IGF1dG8geHl6MiA9IHBlcmZvcm1DaG9tYXRpY0FkYXBhdGF0aW9uPE91dHB1dD4oeHl6MSk7Cisg
ICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91dHB1dD4oeHl6Mik7CisgICAgICAgIH0K
KyAgICB9Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lv
biAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBmbG9hdCBsaWdodG5l
c3MoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvCiAKIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdC
QTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQg
b2YgdG9YWVpBKHRvTGluZWFyU1JHQkEoY29sb3IpKS55CisgICAgLy8gTk9URTogVGhpcyBpcyB0
aGUgZXF1aXZhbGVudCBvZiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1
Pj4oY29sb3IpLnkKICAgICAvLyBGSU1YRTogSWYgd2UgY2FuIGdlbmVyYWxpemUgQ29sb3JNYXRy
aXggYSBiaXQgbW9yZSwgaXQgbWlnaHQgYmUgbmljZSB0byB3cml0ZSB0aGlzIGFzOgotICAgIC8v
ICAgICAgcmV0dXJuIHRvTGluZWFyU1JHQkEoY29sb3IpICogbGluZWFyU1JHQlRvWFlaTWF0cml4
LnJvdygxKTsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEoY29sb3IpOwor
ICAgIC8vICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+KGNvbG9y
KSAqIGxpbmVhclNSR0JUb1hZWk1hdHJpeC5yb3coMSk7CisgICAgYXV0byBbciwgZywgYiwgYV0g
PSBjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+Pihjb2xvcik7CiAgICAgcmV0dXJuIDAu
MjEyNmYgKiByICsgMC43MTUyZiAqIGcgKyAwLjA3MjJmICogYjsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9u
IDI3MjQwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdC
QTx1aW50OF90Pj4gcm91bmRBbmQKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyByLCBnLCBi
LCBhIH0pOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBIHsg
ciwgZywgYiwgYSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkBAIC0x
MDgsNyArMTA4LDcgQEAgc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwog
ICAgIC8vIG1vcmUgZXhwbGljaXQuCiAgICAgaWYgKGNvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
U1JHQiAmJiBjZ0NvbG9yU3BhY2UgPT0gc1JHQkNvbG9yU3BhY2VSZWYoKSkgewogICAgICAgICBh
dXRvIGNvbG9yQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29t
cG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gdG9FeHRlbmRlZFNSR0JBKGNvbG9yKTsKKyAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvckNvbnZlcnRlZFRvRXh0ZW5k
ZWRTUkdCQSk7CiAgICAgICAgIGNnQ29sb3JTcGFjZSA9IGV4dGVuZGVkU1JHQkNvbG9yU3BhY2VS
ZWYoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjcyNDAyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDA1LDcgKzQwNSw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVp
bnQ4Q2xhbXAKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKICAg
ICAKICAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJH
QikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGlu
Z0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8TGluZWFyU1JHQkE8ZmxvYXQ+Pigp
OwogICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9
IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI3MjQwMikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MTksMTMgKzE0MTksMTUgQEAgY29uc3RleHByIGZsb2F0IGRhdGVQbGFjZWhvbGRl
ckNvbG9yTGlnaAogCiBDb2xvciBSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4dENvbG9y
KGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNv
bnN0CiB7Ci0gICAgYXV0byBoc2xhID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3k8Zmxv
YXQ+KCkpOworICAgIC8vIEZJWE1FOiBDb25zaWRlciB1c2luZyBMQ0hBPGZsb2F0PiByYXRoZXIg
dGhhbiBIU0xBPGZsb2F0PiBmb3IgYmV0dGVyIHBlcmNlcHR1YWwgcmVzdWx0cy4KKyAgICBhdXRv
IGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKICAgICBp
ZiAodGV4dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQog
ICAgICAgICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0Fk
anVzdG1lbnRGYWN0b3IgKiAoMS4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCiAgICAg
ICAgIGhzbGEubGlnaHRuZXNzICo9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0
bWVudEZhY3RvcjsKIAotICAgIHJldHVybiB0b1NSR0JBKGhzbGEpOworICAgIC8vIEZJWE1FOiBD
b25zaWRlciBjb252ZXJ0aW5nIGJhY2sgdG8gdGhlIGluaXRpYWwgdW5kZXJseWluZyBjb2xvciB0
eXBlIHJhdGhlciB0aGFuIGhhcmRjb2RpbmcgU1JHQkE8ZmxvYXQ+IGhlcmUuCisgICAgcmV0dXJu
IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGhzbGEpOwogfQogCiB2b2lkIFJlbmRlclRoZW1l
OjpzZXRDdXN0b21Gb2N1c1JpbmdDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzI0
MDIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAyMS0wMi0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgR2Vu
ZXJhbGl6ZSBjb2xvciBjb252ZXJzaW9uIGNvZGUgdG8gcmVkdWNlIG51bWJlciBvZiBvdmVybG9h
ZHMgcmVxdWlyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVwZGF0ZSB0ZXN0cyB0byB1c2UgY29u
dmVydENvbG9yPD4uCisKIDIwMjEtMDItMDQgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtidWlsZC53ZWJraXQub3JnXSBVcGRhdGUgZGFzaGJvYXJkIGxp
bmtzIGZvciBsYXlvdXQgdGVzdCByZXN1bHRzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzI0MDIpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0g
Y29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKIAogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOwpAQCAtNDYsNyArNDYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0
ZSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogICAgIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0
VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAg
ICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNTQsNyArNTQs
NyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAgICBDb2xvciBjb2xvciA9IENv
bG9yOjpibGFjazsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxv
c3N5PEhTTEE8ZmxvYXQ+PigpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5o
dWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC02
Miw3ICs2Miw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogCiAgICAgRVhQRUNUX0ZM
T0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1
dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEo
aHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxT
UkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJp
cHBlZENvbG9yKTsKIH0KIApAQCAtNzAsNyArNzAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9S
ZWQpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6cmVkOwogCi0gICAgYXV0byBoc2xhQ29s
b3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIGhzbGFD
b2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CiAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfUmVkKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88
U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBF
WFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtODYsNyArODYsNyBA
QCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9y
OjpncmVlbjsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5
PEhTTEE8ZmxvYXQ+PigpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFD
b2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7
CkBAIC05NCw3ICs5NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAot
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRv
U1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRD
b2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTAyLDcgKzEwMiw3IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Ymx1ZTsKIAotICAgIGF1
dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAg
YXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2NjksIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMTAsNyArMTEwLDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJp
cHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikp
OworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhf
dD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkK
IHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBoc2xh
Q29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBo
c2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMjYsNyArMTI2LDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfRGFya0dyYXkpCiAgICAgCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYUNv
bG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
MTM0LDcgKzEzNCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3Ig
Y29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CkBAIC0xNDIsNyArMTQyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKIAogICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pih0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252
ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9MaWdodEdyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRH
cmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNM
QTxmbG9hdD4+KCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE1OCw3ICsx
NTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQSho
c2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydENvbG9yPFNS
R0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlw
cGVkQ29sb3IpOwogfQogCg==
</data>
<flag name="review"
          id="437562"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419445</attachid>
            <date>2021-02-05 12:26:56 -0800</date>
            <delta_ts>2021-02-05 13:08:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221443-20210204193539.patch</filename>
            <type>text/plain</type>
            <size>64440</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MjQwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTAyLTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBHZW5lcmFsaXplIGNvbG9yIGNvbnZl
cnNpb24gY29kZSB0byByZWR1Y2UgbnVtYmVyIG9mIG92ZXJsb2FkcyByZXF1aXJlZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNDQzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgUmVwbGFjZSBvdmVybG9hZGVk
IG5hbWVkIGNvbnZlcnNpb24gZnVuY3Rpb25zIChlLmcuIHRvU1JHQkEoKSwgdG9MYWIoKSwgZXRj
LikKKyAgICAgICAgd2l0aCB0ZW1wbGF0ZSBzcGVjaWFsaXppb24gb2YgYSBuZXcgQ29sb3JDb252
ZXJzaW9uIHN0cnVjdDoKKyAgICAgICAgCisgICAgICAgICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2xvckNvbnZlcnNpb248T3V0cHV0LCBJbnB1dD4geworICAgICAgICAgICAgICAgIE91dHB1dCBj
b252ZXJ0KGNvbnN0IElucHV0JiBjb2xvcikgeyAuLi4gfQorICAgICAgICAgICAgfTsKKworICAg
ICAgICB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgYSBuZXcgZ2VuZXJpYyBjb252ZXJ0Q29sb3I8Q29s
b3JUeXBlPigpIGZ1bmN0aW9uLgorCisgICAgICAgIFRoaXMgYWxsb3dzIGZvciBhIGZldyBpbXBy
b3ZlbWVudHM6CisgICAgICAgICAgLSBSZW1vdmVzIHRoZSBuZWVkIGZvciBlYWNoIGNvbG9yIHR5
cGUgdG8gZGVmaW5lIGFuIGlkZW50aXR5IGNvbnZlcnNpb24uCisgICAgICAgICAgLSBSZW1vdmVz
IHRoZSBuZWVkIGZvciBlYWNoIGNvbG9yIHR5cGUgdG8gZGVmaW5lIGFuIGdlbmVyaWMgY29udmVy
c2lvbi4KKyAgICAgICAgICAtIEFsbG93cyBpbnRlZ3JhdGlvbiB3aXRoIGNvbXBvbmVudCB0eXBl
IGNvbnZlcnNpb24gc28gYSBjYWxsIGxpa2UKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEpKQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYW4gbm93IGJlIHdyaXR0ZW4ganVzdCBhcworICAgICAgICAgICAgCisgICAgICAg
ICAgICAgIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYSkKKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYWxzbyBwcm92aWRlcyBhIHBhdGggZm9yd2FyZCBmb3IgbW9yZSBvcHRpbWl6YXRp
b25zIC8gc2ltcGxpZmljYXRpb25zCisgICAgICAgIHNpbmNlIHdlIGNhbiBub3cgcmVhc29uIGFi
b3V0IGNvbnZlcnNpb24gYmFzZWQgcHVyZWx5IG9uIHR5cGVzLgorCisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhTTFBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhXQlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUxh
YlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpwYXJzZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgU3dpdGNo
IHRvIGNvbnZlcnRDb2xvcjw+IGFuZCByZXBsYWNlIHNvbWUgdW5uZWNlc3NhcnkgdHlwZSB3aXRo
IGF1dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAg
ICAgIEFkb3B0IENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PD4gYW5kIGNvbnZlcnRDb2xvcjw+Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICBBZG9wdCBj
b252ZXJ0Q29sb3I8Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b0NvbG9yVHlwZUxvc3N5IGNvbnN0KToKKyAgICAgICAgQWRkIGdlbmVy
aWMgY29udmVyc2lvbiBmdW5jdGlvbiB0b0NvbG9yVHlwZUxvc3N5PD4oKSBhbmQgcmUtaW1wbGVt
ZW50CisgICAgICAgIHRvU1JHQkFMb3NzeTw+KCkgdXNpbmcgaXQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oOgorICAgICAgICBSZXBsYWNlIGZ1bmN0aW9uIG92ZXJs
b2FkcyB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIHRoZSBuZXcgQ29sb3JDb252ZXJz
aW9uCisgICAgICAgIHN0cnVjdC4gUmVwbGFjZSBpZGVudGl0eSBmdW5jdGlvbnMgYW5kIGZhbGxi
YWNrIGZ1bmN0aW9ucyB3aXRoIGEgc2luZ2xlIG5vbi1zcGVjaWFsaXplZAorICAgICAgICBDb2xv
ckNvbnZlcnNpb24gd2hpY2ggdXNlcyBjb25zdGV4cHIgdG8gaGFuZGxlIHRoZSBpZGVudGl0eSBj
YXNlLCBjb252ZXJzaW9uIHRvL2Zyb20KKyAgICAgICAgU1JHQkE8dWludDhfdD4gKHRoZSBvbmx5
IG5vbi1mbG9hdCBjb2xvcikgYW5kIHRoZSBmYWxsYmFjayBjYXNlLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bHVt
aW5hbmNlKToKKyAgICAgICAgQWRvcHQgY29udmVydENvbG9yPD4uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kQW5k
Q2xhbXBUb1NSR0JBTG9zc3kpOgorICAgICAgICAoV2ViQ29yZTo6bGVha0NHQ29sb3IpOgorICAg
ICAgICBBZG9wdCBjb252ZXJ0Q29sb3I8Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOgorICAgICAgICBBZG9wdCB0b0NvbG9yVHlwZUxvc3N5PD4uCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAgICAgIEFkb3B0IENv
bG9yOjp0b0NvbG9yVHlwZUxvc3N5PD4gYW5kIGNvbnZlcnRDb2xvcjw+LgorCiAyMDIxLTAyLTA0
ICBKdWxpYW4gR29uemFsZXogIDxqdWxpYW5fYV9nb256YWxlekBhcHBsZS5jb20+CiAKICAgICAg
ICAgTnVsbCBkZXJlZmVyZW5jZSBpbiBEb2N1bWVudExvYWRlcjo6Y29tbWl0RGF0YSgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMSw3
ICs3MDEsNyBAQCBzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgCiBzdGF0
aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQog
ewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlUmdiIHx8
IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVSZ2JhKTsKLSAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGF1dG8gYXJn
cyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKICAgICBib29sIGlzUGVyY2VudGFnZSA9IGZh
bHNlOwogICAgIGRvdWJsZSBjb2xvclBhcmFtZXRlcjsKQEAgLTc3Miw3ICs3NzIsNyBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiBzdGF0aWMgQ29sb3IgcGFyc2VI
U0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0g
Q1NTVmFsdWVIc2wgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUhzbGEp
OwotICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7
CisgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAogICAgIGRvdWJsZSBo
dWVBbmdsZUluRGVncmVlczsKICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhh
cmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQpKQpAQCAtODE1LDcgKzgxNSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBh
cmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoSFNM
QTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKKyAgICByZXR1cm4gY29udmVydENvbG9y
PFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFy
cmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CiB9CiAK
IHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFyc2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQpAQCAtODMyLDcgKzgzMiw3IEBAIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4g
cGFyc2VPcHRpb25hbEFscGgKIHN0YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFtZXRlcnMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUh3Yik7Ci0gICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAgICBh
dXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCiAgICAgZG91YmxlIGh1ZUFuZ2xl
SW5EZWdyZWVzOwogICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KGFyZ3MsIGNz
c1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZv
cmJpZCkpCkBAIC04ODUsMTMgKzg4NSwxMyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJhbWV0
ZXJzKENTU1BhcnNlCiAgICAgbm9tYWxpemVkV2hpdGVuZXNzIC89IDEwMC4wOwogICAgIG5vbWFs
aXplZEJsYWNrbmVzcyAvPSAxMDAuMDsKIAotICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KHRvU1JHQkEoSFdCQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXpl
ZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihub21hbGl6ZWRXaGl0ZW5lc3MpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4obm9tYWxpemVkQmxhY2tuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkg
fSkpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bm9tYWxpemVkV2hpdGVuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXplZEJsYWNrbmVz
cyksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlTGFiKTsKLSAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGF1dG8gYXJn
cyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKICAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAgIGlmICghbGlnaHRuZXNzKQpA
QCAtOTE4LDcgKzkxOCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NTUGFy
c2UKIHN0YXRpYyBDb2xvciBwYXJzZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxjaCk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5S
YW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAgICBhdXRvIGFyZ3MgPSBjb25z
dW1lRnVuY3Rpb24ocmFuZ2UpOwogCiAgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2Vu
dFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKQEAgLTk0Nyw3
ICs5NDcsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAg
aWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gdG9M
YWIoTENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRpY19j
YXN0PGZsb2F0PigqY2hyb21hVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oaHVlQW5nbGVJbkRl
Z3JlZXMpLCAqYWxwaGEgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihM
Q0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KCpjaHJvbWFWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihodWVBbmdsZUluRGVncmVl
cyksICphbHBoYSB9KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgpAQCAtMTAz
NCw3ICsxMDM0LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcgog
c3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0g
Q1NTVmFsdWVDb2xvcik7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1
bmN0aW9uKHJhbmdlKTsKKyAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwog
CiAgICAgQ29sb3IgY29sb3I7CiAgICAgc3dpdGNoIChhcmdzLnBlZWsoKS5pZCgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZp
c2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5NSwxMyArNTk1LDE2IEBAIE5TQXJyYXkgKkRhdGFE
ZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5
bGUpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBoc2xhID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8ZmxvYXQ+
IHJhdGhlciB0aGFuIEhTTEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRzIGFu
ZCB0byBhdm9pZCBjbGFtcGluZyB0byBzUkdCIGdhbXV0LCB3aGljaCBpcyB3aGF0IEhTTEEgZG9l
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
b3JjZSB0aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwg
YW5kIG11bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzbyB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMs
IHNpbmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAg
ICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDAuNWY7CiAgICAgICAgICAgICAgICAgICAgICAgICBo
c2xhLmFscGhhICo9IDAuMzhmOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxp
bmVDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciBrZWVwaW5nIGNvbG9yIGluIExDSEEgKGlmIHRoYXQgY2hhbmdlIGlzIG1hZGUpIG9y
IGNvbnZlcnRpbmcgYmFjayB0byB0aGUgaW5pdGlhbCB1bmRlcmx5aW5nIGNvbG9yIHR5cGUgdG8g
YXZvaWQgdW5uZWNlc3NhcmlseSBjbGFtcGluZyBjb2xvcnMgb3V0c2lkZSBvZiBzUkdCLgorICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRDb2xvcjxT
UkdCQTx1aW50OF90Pj4oaHNsYSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVD
dXJyZW50Y29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHNlcmlh
bGl6YXRpb25Gb3JDU1ModW5kZXJsaW5lQ29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI3MjQwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
LDcgKzE0OSw3IEBAIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2EKICAg
ICAgICAgaWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCiAgICAg
ICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5n
Q29sb3IsIGFscGhhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGludmVydGVk
Q29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7
CisgICAgICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb252
ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pih1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CiAgICAgfSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2
aXNpb24gMjcyNDAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDggKzEwNiwxNCBAQCBwdWJsaWM6CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlw
ZShGdW5jdG9yJiYpIGNvbnN0OwogCi0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0Ig
Y29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNS
R0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OworICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gQ29sb3JUeXBlLCBwb3RlbnRpYWxseSBsb3NzaWx5IGlm
IHRoZSBnYW11dAorICAgIC8vIG9yIHByZWNpc2lvbiBvZiBDb2xvclR5cGUgaXMgc21hbGxlciB0
aGFuIHRoZSBjdXJyZW50IHVuZGVybHlpbmcgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IENvbG9yVHlwZSB0b0NvbG9yVHlwZUxvc3N5KCkgY29uc3Q7CisKKyAgICAvLyBU
aGlzIHdpbGwgY29udmVydCB0aGUgdW5kZXJseWluZyBjb2xvciBpbnRvIHNSR0IsIHBvdGVudGlh
bGx5IGxvc3NpbHkgaWYgdGhlIGdhbXV0CisgICAgLy8gb3IgcHJlY2lzaW9uIG9mIHNSR0IgaXMg
c21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHVuZGVybHlpbmcgdHlwZS4gVGhpcyBpcyBhIGNvbnZl
bmllbmNlCisgICAgLy8gd3JhcHBlciBhcm91bmQgdG9Db2xvclR5cGVMb3NzeTw+KCkuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QgeyByZXR1
cm4gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxUPj4oKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VB
bmRDb21wb25lbnRzKCkgY29uc3Q7CiAKQEAgLTMyMSwyMiArMzI3LDExIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8KICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3Rk
Ojpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0lubGluZSgpKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBDb2xvcjo6dG9Db2xvclR5cGVMb3NzeSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFdURjo6bWFrZVZpc2l0
b3IoCi0gICAgICAgIFtdIChjb25zdCBTUkdCQTx1aW50OF90PiYgY29sb3IpIHsKLSAgICAgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbG9yOwotICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTxm
bG9hdD4+KGNvbG9yKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNvbnN0IGF1dG8mIGNvbG9y
KSB7Ci0gICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+
KQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoY29sb3IpKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwg
ZmxvYXQ+KQotICAgICAgICAgICAgICAgIHJldHVybiB0b1NSR0JBKGNvbG9yKTsKLSAgICAgICAg
fQotICAgICkpOworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0
byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29sb3I8Q29sb3JU
eXBlPih1bmRlcmx5aW5nQ29sb3IpOworICAgIH0pOwogfQogCiBpbmxpbmUgQ29sb3IgQ29sb3I6
OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZl
cnNpb24uY3BwCShyZXZpc2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNzIgKzE1
OSw3MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2ZlckZ1bmN0aW9uLCB0eXBlCiAKIC8vIEE5
OFJHQiA8LT4gTGluZWFyQTk4UkdCIGNvbnZlcnNpb25zLgogCi1MaW5lYXJBOThSR0I8ZmxvYXQ+
IHRvTGluZWFyQTk4UkdCKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorTGluZWFyQTk4UkdC
PGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGluZWFyQTk4UkdCPGZsb2F0PiwgQTk4UkdCPGZsb2F0
Pj46OmNvbnZlcnQoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRv
TGluZWFyPEE5OFJHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2Rl
OjpDbGFtcGVkPj4oY29sb3IpOwogfQogCi1BOThSR0I8ZmxvYXQ+IHRvQTk4UkdCKGNvbnN0IExp
bmVhckE5OFJHQjxmbG9hdD4mIGNvbG9yKQorQTk4UkdCPGZsb2F0PiBDb2xvckNvbnZlcnNpb248
QTk4UkdCPGZsb2F0PiwgTGluZWFyQTk4UkdCPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgTGluZWFy
QTk4UkdCPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRvR2FtbWFFbmNvZGVkPEE5OFJH
QlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4o
Y29sb3IpOwogfQogCiAvLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9u
cy4KIAotTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNw
bGF5UDM8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhckRpc3BsYXlQMzxmbG9hdD4gQ29sb3JDb252ZXJz
aW9uPExpbmVhckRpc3BsYXlQMzxmbG9hdD4sIERpc3BsYXlQMzxmbG9hdD4+Ojpjb252ZXJ0KGNv
bnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0xpbmVhcjxTUkdC
VHJhbnNmZXJGdW5jdGlvbjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pihj
b2xvcik7CiB9CiAKLURpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFyRGlz
cGxheVAzPGZsb2F0PiYgY29sb3IpCitEaXNwbGF5UDM8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxE
aXNwbGF5UDM8ZmxvYXQ+LCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBM
aW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9HYW1tYUVuY29k
ZWQ8U1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFt
cGVkPj4oY29sb3IpOwogfQogCiAvLyBFeHRlbmRlZFNSR0JBIDwtPiBMaW5lYXJFeHRlbmRlZFNS
R0JBIGNvbnZlcnNpb25zLgogCi1MaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiB0b0xpbmVhckV4
dGVuZGVkU1JHQkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mIGNvbG9yKQorTGluZWFyRXh0
ZW5kZWRTUkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExpbmVhckV4dGVuZGVkU1JHQkE8Zmxv
YXQ+LCBFeHRlbmRlZFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgRXh0ZW5kZWRTUkdCQTxm
bG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0xpbmVhcjxTUkdCVHJhbnNmZXJGdW5jdGlv
bjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+KGNvbG9yKTsKIH0KIAot
RXh0ZW5kZWRTUkdCQTxmbG9hdD4gdG9FeHRlbmRlZFNSR0JBKGNvbnN0IExpbmVhckV4dGVuZGVk
U1JHQkE8ZmxvYXQ+JiBjb2xvcikKK0V4dGVuZGVkU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lv
bjxFeHRlbmRlZFNSR0JBPGZsb2F0PiwgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4+Ojpjb252
ZXJ0KGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1
cm4gdG9HYW1tYUVuY29kZWQ8U1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVu
Y3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pihjb2xvcik7CiB9CiAKIC8vIFByb1Bob3RvUkdCIDwtPiBM
aW5lYXJQcm9QaG90b1JHQiBjb252ZXJzaW9ucy4KIAotTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+
IHRvTGluZWFyUHJvUGhvdG9SR0IoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+JiBjb2xvcikKK0xp
bmVhclByb1Bob3RvUkdCPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGluZWFyUHJvUGhvdG9SR0I8
ZmxvYXQ+LCBQcm9QaG90b1JHQjxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFByb1Bob3RvUkdCPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRvTGluZWFyPFByb1Bob3RvUkdCVHJhbnNmZXJG
dW5jdGlvbjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pihjb2xvcik7CiB9
CiAKLVByb1Bob3RvUkdCPGZsb2F0PiB0b1Byb1Bob3RvUkdCKGNvbnN0IExpbmVhclByb1Bob3Rv
UkdCPGZsb2F0PiYgY29sb3IpCitQcm9QaG90b1JHQjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFBy
b1Bob3RvUkdCPGZsb2F0PiwgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pjo6Y29udmVydChjb25z
dCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0dhbW1h
RW5jb2RlZDxQcm9QaG90b1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rp
b25Nb2RlOjpDbGFtcGVkPj4oY29sb3IpOwogfQogCiAvLyBSZWMyMDIwIDwtPiBMaW5lYXJSZWMy
MDIwIGNvbnZlcnNpb25zLgogCi1MaW5lYXJSZWMyMDIwPGZsb2F0PiB0b0xpbmVhclJlYzIwMjAo
Y29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yKQorTGluZWFyUmVjMjAyMDxmbG9hdD4gQ29sb3JD
b252ZXJzaW9uPExpbmVhclJlYzIwMjA8ZmxvYXQ+LCBSZWMyMDIwPGZsb2F0Pj46OmNvbnZlcnQo
Y29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b0xpbmVhcjxSZWMy
MDIwVHJhbnNmZXJGdW5jdGlvbjxmbG9hdCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+
Pihjb2xvcik7CiB9CiAKLVJlYzIwMjA8ZmxvYXQ+IHRvUmVjMjAyMChjb25zdCBMaW5lYXJSZWMy
MDIwPGZsb2F0PiYgY29sb3IpCitSZWMyMDIwPGZsb2F0PiBDb2xvckNvbnZlcnNpb248UmVjMjAy
MDxmbG9hdD4sIExpbmVhclJlYzIwMjA8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJSZWMy
MDIwPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRvR2FtbWFFbmNvZGVkPFJlYzIwMjBU
cmFuc2ZlckZ1bmN0aW9uPGZsb2F0LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+KGNv
bG9yKTsKIH0KIAogLy8gU1JHQkEgPC0+IExpbmVhclNSR0JBIGNvbnZlcnNpb25zLgogCi1MaW5l
YXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQor
TGluZWFyU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMaW5lYXJTUkdCQTxmbG9hdD4sIFNS
R0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBy
ZXR1cm4gdG9MaW5lYXI8U1JHQlRyYW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rp
b25Nb2RlOjpDbGFtcGVkPj4oY29sb3IpOwogfQogCi1TUkdCQTxmbG9hdD4gdG9TUkdCQShjb25z
dCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQorU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lv
bjxTUkdCQTxmbG9hdD4sIExpbmVhclNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9HYW1tYUVuY29kZWQ8U1JHQlRy
YW5zZmVyRnVuY3Rpb248ZmxvYXQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4oY29s
b3IpOwogfQpAQCAtMjMzLDcyICsyMzMsNzIgQEAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3Qg
TGluZWFyU1JHQkE8ZgogCiAvLyAtIExpbmVhckE5OFJHQiBtYXRyaXggY29udmVyc2lvbnMuCiAK
LUxpbmVhckE5OFJHQjxmbG9hdD4gdG9MaW5lYXJBOThSR0IoY29uc3QgTGluZWFyQTk4UkdCPGZs
b2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKK0xpbmVhckE5OFJHQjxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPExpbmVhckE5OFJHQjxmbG9hdD4sIExpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5j
ZVhZWj46OmNvbnZlcnQoY29uc3QgTGluZWFyQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBj
b2xvcikKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTxMaW5lYXJBOThSR0I8ZmxvYXQ+Pih4eXpUb0xpbmVhckE5OFJHQk1hdHJpeC50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAotTGluZWFy
QTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJBOThSR0I8Zmxv
YXQ+JiBjb2xvcikKK0xpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBDb2xvckNvbnZl
cnNpb248TGluZWFyQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5lYXJBOThSR0I8Zmxv
YXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJBOThSR0I8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBy
ZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxMaW5lYXJBOThSR0I8
ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGxpbmVhckE5OFJHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVk
Q29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAtIExp
bmVhckRpc3BsYXlQMyBtYXRyaXggY29udmVyc2lvbnMuCiAKLUxpbmVhckRpc3BsYXlQMzxmbG9h
dD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJl
bmNlWFlaJiBjb2xvcikKK0xpbmVhckRpc3BsYXlQMzxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExp
bmVhckRpc3BsYXlQMzxmbG9hdD4sIExpbmVhckRpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZ
Wj46OmNvbnZlcnQoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBj
b2xvcikKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTxMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Pih4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAot
TGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJE
aXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhckRpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5j
ZVhZWiBDb2xvckNvbnZlcnNpb248TGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFla
LCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJEaXNwbGF5UDM8
ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdF
eGNlcHRBbHBoYTxMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGxpbmVhckRp
c3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAtIExpbmVhckV4dGVuZGVkU1JHQkEgbWF0cml4IGNv
bnZlcnNpb25zLgogCi1MaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiB0b0xpbmVhckV4dGVuZGVk
U1JHQkEoY29uc3QgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29s
b3IpCitMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGluZWFyRXh0
ZW5kZWRTUkdCQTxmbG9hdD4sIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVo+Ojpjb252ZXJ0KGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVomIGNvbG9yKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhPExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9
CiAKLUxpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0
IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhckV4dGVuZGVkU1JHQkE8
ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPExpbmVhckV4dGVuZGVkU1JHQkE8
ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pjo6Y29udmVy
dChjb25zdCBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJu
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8TGluZWFyRXh0ZW5kZWRTUkdC
QTxmbG9hdD46OlJlZmVyZW5jZVhZWj4obGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVk
Q29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAtIExp
bmVhclByb1Bob3RvUkdCIG1hdHJpeCBjb252ZXJzaW9ucy4KIAotTGluZWFyUHJvUGhvdG9SR0I8
ZmxvYXQ+IHRvTGluZWFyUHJvUGhvdG9SR0IoY29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IENvbG9yQ29u
dmVyc2lvbjxMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4sIExpbmVhclByb1Bob3RvUkdCPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD46
OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0Ns
YW1waW5nRXhjZXB0QWxwaGE8TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pih4eXpUb0xpbmVhclBy
b1Bob3RvUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOwogfQogCi1MaW5lYXJQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZ
WiB0b1hZWkEoY29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+JiBjb2xvcikKK0xpbmVhclBy
b1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxMaW5lYXJQcm9Q
aG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pjo6
Y29udmVydChjb25zdCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPExpbmVhclByb1Bob3Rv
UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPihsaW5lYXJQcm9QaG90b1JHQlRvWFlaTWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQog
CiAvLyAtIExpbmVhclJlYzIwMjAgbWF0cml4IGNvbnZlcnNpb25zLgogCi1MaW5lYXJSZWMyMDIw
PGZsb2F0PiB0b0xpbmVhclJlYzIwMjAoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD46OlJlZmVy
ZW5jZVhZWiYgY29sb3IpCitMaW5lYXJSZWMyMDIwPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TGlu
ZWFyUmVjMjAyMDxmbG9hdD4sIExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpj
b252ZXJ0KGNvbnN0IExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQog
ewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPExpbmVh
clJlYzIwMjA8ZmxvYXQ+Pih4eXpUb0xpbmVhclJlYzIwMjBNYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKLUxpbmVhclJlYzIw
MjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IExpbmVhclJlYzIwMjA8ZmxvYXQ+
JiBjb2xvcikKK0xpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JDb252ZXJz
aW9uPExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhclJlYzIwMjA8Zmxv
YXQ+Pjo6Y29udmVydChjb25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYgY29sb3IpCiB7CiAgICAg
cmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8TGluZWFyUmVjMjAy
MDxmbG9hdD46OlJlZmVyZW5jZVhZWj4obGluZWFyUmVjMjAyMFRvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiAvLyAt
IExpbmVhclNSR0JBIG1hdHJpeCBjb252ZXJzaW9ucy4KIAotTGluZWFyU1JHQkE8ZmxvYXQ+IHRv
TGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9y
KQorTGluZWFyU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMaW5lYXJTUkdCQTxmbG9hdD4s
IExpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8TGluZWFyU1JHQkE8ZmxvYXQ+Pih4eXpUb0xp
bmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKSk7CiB9CiAKLUxpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFla
QShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQorTGluZWFyU1JHQkE8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPExpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNl
WFlaLCBMaW5lYXJTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0
PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8TGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGxpbmVhclNSR0JUb1hZWk1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
KTsKIH0KQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQg
Y2FsY3VsYXRlCiAgICAgcmV0dXJuIHsgaHVlLCBtaW4sIG1heCwgY2hyb21hIH07CiB9CiAKLUhT
TEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorSFNMQTxmbG9hdD4g
Q29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0
IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3Jn
L2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29s
b3I7CkBAIC0zNTQsNyArMzU0LDcgQEAgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNSR0JBPGZs
b2F0PiYgYwogICAgIHJldHVybiB7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9
OwogfQogCi1TUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCitT
UkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFNMQTxmbG9hdD4+Ojpj
b252ZXJ0KGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKICAgICBhdXRvIFtodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CkBAIC0zOTcsNyArMzk3LDcgQEAgU1JH
QkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIAogCiAvLyBNQVJLOiBIV0IgY29u
dmVyc2lvbnMuCiAKLUhXQkE8ZmxvYXQ+IHRvSFdCQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQorSFdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+
Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNyZ2ItdG8taHdiCiAgICAgYXV0byBbaHVlLCBt
aW4sIG1heCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1ZShjb2xvcik7CkBAIC00MDcsNyArNDA3
LDcgQEAgSFdCQTxmbG9hdD4gdG9IV0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYgYwogICAgIHJldHVy
biB7IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CiB9CiAKLVNSR0JB
PGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhXQkE8ZmxvYXQ+JiBjb2xvcikKK1NSR0JBPGZsb2F0PiBD
b2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIV0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3Qg
SFdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9j
c3MtY29sb3ItNC8jaHdiLXRvLXJnYgogICAgIGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25l
c3MsIGFscGhhXSA9IGNvbG9yOwpAQCAtNDE1LDcgKzQxNSw3IEBAIFNSR0JBPGZsb2F0PiB0b1NS
R0JBKGNvbnN0IEhXQkE8ZmxvYXQ+JiAKICAgICBpZiAod2hpdGVuZXNzICsgYmxhY2tuZXNzID09
IDEuMGYpCiAgICAgICAgIHJldHVybiB7IHdoaXRlbmVzcywgd2hpdGVuZXNzLCB3aGl0ZW5lc3Ms
IGFscGhhIH07CiAKLSAgICAvLyBUaGlzIGlzIHRoZSBodWVUb1JHQiBmdW5jdGlvbiBpbiB0b1NS
R0JBKGNvbnN0IEhTTEEmKSB3aXRoIHRlbXAxID09IDAKKyAgICAvLyBUaGlzIGlzIHRoZSBodWVU
b1JHQiBmdW5jdGlvbiBpbiBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb25zdCBIU0xBJikg
d2l0aCB0ZW1wMSA9PSAwCiAgICAgLy8gYW5kIHRlbXAyID09IDEgc3RyZW5ndGggcmVkdWNlZCB0
aHJvdWdoIGl0LgogICAgIGF1dG8gaHVlVG9SR0IgPSBbXShmbG9hdCBodWUpIHsKICAgICAgICAg
aWYgKGh1ZSA8IDEuMGYpCkBAIC00NTYsNyArNDU2LDcgQEAgc3RhdGljIGNvbnN0ZXhwciBmbG9h
dCBMQUJlID0gMjE2LjBmIC8gMgogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBMQUJrID0gMjQzODku
MGYgLyAyNy4wZjsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1ZXNbXSA9IHsg
MC45NjQyMmYsIDEuMGYsIDAuODI1MjFmIH07CiAKLUxhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiB0
b1hZWkEoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCitMYWI8ZmxvYXQ+OjpSZWZlcmVuY2VYWVog
Q29sb3JDb252ZXJzaW9uPExhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGFiPGZsb2F0Pj46OmNv
bnZlcnQoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgZmxvYXQgZjEgPSAoY29sb3Iu
bGlnaHRuZXNzICsgMTYuMGYpIC8gMTE2LjBmOwogICAgIGZsb2F0IGYwID0gZjEgKyAoY29sb3Iu
YSAvIDUwMC4wZik7CkBAIC00ODYsNyArNDg2LDcgQEAgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFla
IHRvWFlaQShjb25zdCBMYQogICAgIHJldHVybiB7IHgsIHksIHosIGNvbG9yLmFscGhhIH07CiB9
CiAKLUxhYjxmbG9hdD4gdG9MYWIoY29uc3QgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xv
cikKK0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExhYjxmbG9hdD4sIExhYjxmbG9hdD46OlJl
ZmVyZW5jZVhZWj46OmNvbnZlcnQoY29uc3QgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xv
cikKIHsKICAgICBmbG9hdCB4ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwogICAgIGZs
b2F0IHkgPSBjb2xvci55IC8gRDUwV2hpdGVWYWx1ZXNbMV07CkBAIC01MTAsNyArNTEwLDcgQEAg
TGFiPGZsb2F0PiB0b0xhYihjb25zdCBMYWI8ZmxvYXQ+OjpSZWZlcgogCiAvLyBNQVJLOiBMQ0gg
Y29udmVyc2lvbnMuCiAKLUxDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+JiBjb2xv
cikKK0xDSEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMQ0hBPGZsb2F0PiwgTGFiPGZsb2F0Pj46
OmNvbnZlcnQoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL2Nzcy1jb2xvci00LyNsYWItdG8tbGNoCiAgICAgZmxvYXQgaHVlID0gcmFkMmRl
ZyhhdGFuMihjb2xvci5iLCBjb2xvci5hKSk7CkBAIC01MjMsNyArNTIzLDcgQEAgTENIQTxmbG9h
dD4gdG9MQ0hBKGNvbnN0IExhYjxmbG9hdD4mIGNvbAogICAgIH07CiB9CiAKLUxhYjxmbG9hdD4g
dG9MYWIoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yKQorTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNp
b248TGFiPGZsb2F0PiwgTENIQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IExDSEE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI2xjaC10
by1sYWIKICAgICBmbG9hdCBodWVBbmdsZVJhZGlhbnMgPSBkZWcycmFkKGNvbG9yLmh1ZSk7CkBA
IC01NDAsMTEwICs1NDAsMTEwIEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgTENIQTxmbG9hdD4m
IGNvbG8KIAogLy8gLSBBOThSR0IgY29tYmluYXRpb24gZnVuY3Rpb25zLgogCi1BOThSR0I8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IEE5OFJHQjxmbG9hdD4mIGNvbG9yKQorQTk4
UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxBOThSR0I8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVosIEE5OFJHQjxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IEE5OFJHQjxmbG9hdD4m
IGNvbG9yKQogewotICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJBOThSR0IoY29sb3IpKTsKKyAg
ICByZXR1cm4gY29udmVydENvbG9yPEE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVy
dENvbG9yPExpbmVhckE5OFJHQjxmbG9hdD4+KGNvbG9yKSk7CiB9CiAKLUE5OFJHQjxmbG9hdD4g
dG9BOThSR0IoY29uc3QgQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKK0E5OFJH
QjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEE5OFJHQjxmbG9hdD4sIEE5OFJHQjxmbG9hdD46OlJl
ZmVyZW5jZVhZWj46OmNvbnZlcnQoY29uc3QgQTk4UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBj
b2xvcikKIHsKLSAgICByZXR1cm4gdG9BOThSR0IodG9MaW5lYXJBOThSR0IoY29sb3IpKTsKKyAg
ICByZXR1cm4gY29udmVydENvbG9yPEE5OFJHQjxmbG9hdD4+KGNvbnZlcnRDb2xvcjxMaW5lYXJB
OThSR0I8ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIERpc3BsYXlQMyBjb21iaW5hdGlvbiBm
dW5jdGlvbnMuCiAKLURpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3Qg
RGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCitEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVog
Q29sb3JDb252ZXJzaW9uPERpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiwgRGlzcGxheVAz
PGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAg
cmV0dXJuIHRvWFlaQSh0b0xpbmVhckRpc3BsYXlQMyhjb2xvcikpOworICAgIHJldHVybiBjb252
ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPihjb252ZXJ0Q29sb3I8TGlu
ZWFyRGlzcGxheVAzPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotRGlzcGxheVAzPGZsb2F0PiB0b0Rp
c3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorRGlz
cGxheVAzPGZsb2F0PiBDb2xvckNvbnZlcnNpb248RGlzcGxheVAzPGZsb2F0PiwgRGlzcGxheVAz
PGZsb2F0Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+OjpS
ZWZlcmVuY2VYWVomIGNvbG9yKQogewotICAgIHJldHVybiB0b0Rpc3BsYXlQMyh0b0xpbmVhckRp
c3BsYXlQMyhjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oY29udmVydENvbG9yPExpbmVhckRpc3BsYXlQMzxmbG9hdD4+KGNvbG9yKSk7CiB9CiAKIC8v
IC0gRXh0ZW5kZWRTUkdCIGNvbWJpbmF0aW9uIGZ1bmN0aW9ucy4KIAotRXh0ZW5kZWRTUkdCQTxm
bG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mIGNv
bG9yKQorRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiBDb2xvckNvbnZlcnNpb248
RXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiwgRXh0ZW5kZWRTUkdCQTxmbG9hdD4+
Ojpjb252ZXJ0KGNvbnN0IEV4dGVuZGVkU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICByZXR1
cm4gdG9YWVpBKHRvTGluZWFyRXh0ZW5kZWRTUkdCQShjb2xvcikpOworICAgIHJldHVybiBjb252
ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVydENvbG9y
PExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikpOwogfQogCi1FeHRlbmRlZFNSR0JB
PGZsb2F0PiB0b0V4dGVuZGVkU1JHQkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVy
ZW5jZVhZWiYgY29sb3IpCitFeHRlbmRlZFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248RXh0
ZW5kZWRTUkdCQTxmbG9hdD4sIEV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpj
b252ZXJ0KGNvbnN0IEV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQog
ewotICAgIHJldHVybiB0b0V4dGVuZGVkU1JHQkEodG9MaW5lYXJFeHRlbmRlZFNSR0JBKGNvbG9y
KSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29udmVy
dENvbG9yPExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIEhT
TEEgY29tYmluYXRpb24gZnVuY3Rpb25zLgogCi1IU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRv
WFlaQShjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCitIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFla
IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBIU0xBPGZsb2F0Pj46
OmNvbnZlcnQoY29uc3QgSFNMQTxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiB0b1hZWkEo
dG9TUkdCQShjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD46OlJl
ZmVyZW5jZVhZWj4oY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotSFNM
QTxmbG9hdD4gdG9IU0xBKGNvbnN0IEhTTEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQor
SFNMQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBIU0xBPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xv
cikKIHsKLSAgICByZXR1cm4gdG9IU0xBKHRvU1JHQkEoY29sb3IpKTsKKyAgICByZXR1cm4gY29u
dmVydENvbG9yPEhTTEE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb2xvcikp
OwogfQogCiAvLyAtIEhXQkEgY29tYmluYXRpb24gZnVuY3Rpb25zLgogCi1IV0JBPGZsb2F0Pjo6
UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBIV0JBPGZsb2F0PiYgY29sb3IpCitIV0JBPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFla
LCBIV0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgSFdCQTxmbG9hdD4mIGNvbG9yKQogewotICAg
IHJldHVybiB0b1hZWkEodG9TUkdCQShjb2xvcikpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8
SFdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4oY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29s
b3IpKTsKIH0KIAotSFdCQTxmbG9hdD4gdG9IV0JBKGNvbnN0IEhXQkE8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVomIGNvbG9yKQorSFdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBI
V0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBIV0JBPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaJiBjb2xvcikKIHsKLSAgICByZXR1cm4gdG9IV0JBKHRvU1JHQkEoY29sb3IpKTsK
KyAgICByZXR1cm4gY29udmVydENvbG9yPEhXQkE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8U1JHQkE8
ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIExDSEEgY29tYmluYXRpb24gZnVuY3Rpb25zLgog
Ci1MQ0hBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMQ0hBPGZsb2F0PiYgY29s
b3IpCitMQ0hBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIENvbG9yQ29udmVyc2lvbjxMQ0hBPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaLCBMQ0hBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgTENIQTxmbG9hdD4m
IGNvbG9yKQogewotICAgIHJldHVybiB0b1hZWkEodG9MYWIoY29sb3IpKTsKKyAgICByZXR1cm4g
Y29udmVydENvbG9yPExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+KGNvbnZlcnRDb2xvcjxMYWI8
ZmxvYXQ+Pihjb2xvcikpOwogfQogCi1MQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTENIQTxmbG9h
dD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCitMQ0hBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248TENI
QTxmbG9hdD4sIExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+Ojpjb252ZXJ0KGNvbnN0IExDSEE8
ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQogewotICAgIHJldHVybiB0b0xDSEEodG9MYWIo
Y29sb3IpKTsKKyAgICByZXR1cm4gY29udmVydENvbG9yPExDSEE8ZmxvYXQ+Pihjb252ZXJ0Q29s
b3I8TGFiPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAogLy8gLSBQcm9QaG90b1JHQiBjb21iaW5hdGlv
biBmdW5jdGlvbnMuCiAKLVByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShj
b25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKQorUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFla
LCBQcm9QaG90b1JHQjxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYg
Y29sb3IpCiB7Ci0gICAgcmV0dXJuIHRvWFlaQSh0b0xpbmVhclByb1Bob3RvUkdCKGNvbG9yKSk7
CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZ
Wj4oY29udmVydENvbG9yPExpbmVhclByb1Bob3RvUkdCPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAot
UHJvUGhvdG9SR0I8ZmxvYXQ+IHRvUHJvUGhvdG9SR0IoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorUHJvUGhvdG9SR0I8ZmxvYXQ+IENvbG9yQ29udmVyc2lv
bjxQcm9QaG90b1JHQjxmbG9hdD4sIFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPjo6
Y29udmVydChjb25zdCBQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7
Ci0gICAgcmV0dXJuIHRvUHJvUGhvdG9SR0IodG9MaW5lYXJQcm9QaG90b1JHQihjb2xvcikpOwor
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8UHJvUGhvdG9SR0I8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8
TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Pihjb2xvcikpOwogfQogCiAvLyAtIFJlYzIwMjAgY29t
YmluYXRpb24gZnVuY3Rpb25zLgogCi1SZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFla
QShjb25zdCBSZWMyMDIwPGZsb2F0PiYgY29sb3IpCitSZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNl
WFlaIENvbG9yQ29udmVyc2lvbjxSZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBSZWMyMDIw
PGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgUmVjMjAyMDxmbG9hdD4mIGNvbG9yKQogewotICAgIHJl
dHVybiB0b1hZWkEodG9MaW5lYXJSZWMyMDIwKGNvbG9yKSk7CisgICAgcmV0dXJuIGNvbnZlcnRD
b2xvcjxSZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPihjb252ZXJ0Q29sb3I8TGluZWFyUmVj
MjAyMDxmbG9hdD4+KGNvbG9yKSk7CiB9CiAKLVJlYzIwMjA8ZmxvYXQ+IHRvUmVjMjAyMChjb25z
dCBSZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJiBjb2xvcikKK1JlYzIwMjA8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxSZWMyMDIwPGZsb2F0PiwgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZ
Wj46OmNvbnZlcnQoY29uc3QgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29sb3IpCiB7
Ci0gICAgcmV0dXJuIHRvUmVjMjAyMCh0b0xpbmVhclJlYzIwMjAoY29sb3IpKTsKKyAgICByZXR1
cm4gY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8TGluZWFyUmVjMjAy
MDxmbG9hdD4+KGNvbG9yKSk7CiB9CiAKIC8vIC0gU1JHQiBjb21iaW5hdGlvbiBmdW5jdGlvbnMu
CiAKLVNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yKQorU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogQ29sb3JDb252ZXJzaW9uPFNSR0JB
PGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JB
PGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHRvWFlaQSh0b0xpbmVhclNSR0JBKGNvbG9y
KSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4o
Y29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKIH0KIAotU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomIGNvbG9yKQorU1JH
QkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIFNSR0JBPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaPjo6Y29udmVydChjb25zdCBTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYgY29s
b3IpCiB7Ci0gICAgcmV0dXJuIHRvU1JHQkEodG9MaW5lYXJTUkdCQShjb2xvcikpOworICAgIHJl
dHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8
ZmxvYXQ+Pihjb2xvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAko
cmV2aXNpb24gMjcyNDAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyNCArMjYsMjc5IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxp
dGllcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEFsbCBjb2xvciB0eXBlcyBtdXN0
IGF0IGxlYXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9t
IHRoZWlyIHJlZmVyZW5jZSBYWVogY29sb3Igc3BhY2UKIC8vCi0vLyAgICBgQ29sb3JUeXBlYDxm
bG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgYENvbG9yVHlwZWA8ZmxvYXQ+Jik7Ci0v
LyAgICBgQ29sb3JUeXBlYDxmbG9hdD4gdG9gQ29sb3JUeXBlYChjb25zdCBgQ29sb3JUeXBlYDxm
bG9hdD46OlJlZmVyZW5jZVhZWiYpOwotLy8KLS8vIGFzIHdlbGwgYXMgYW4gaWRlbnRpdHkgY29u
dmVyc2lvbgotLy8KLS8vICAgIGNvbnN0ZXhwciBgQ29sb3JUeXBlYDxmbG9hdD4gdG9gQ29sb3JU
eXBlYChjb25zdCBgQ29sb3JUeXBlYDxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQot
Ly8KLS8vIGFuZCBhIGdlbmVyaWMgY29udmVyc2lvbiB1dGlsaXppbmcgYSBjb252ZXJzaW9uIHRv
IHRoZSByZWZlcmVuY2UgWFlaIGNvbG9yIHNwYWNlIGFuZCBhIGNocm9tYXRpYwotLy8gYWRhcGF0
YXRpb24gaWYgdGhlIHdoaXRlIHBvaW50cyBkaWZmZXIKLS8vCi0vLyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBgQ29sb3JUeXBlYDxmbG9hdD4gdG9gQ29sb3JUeXBlYChjb25zdCBUJiBjb2xvcikK
Ky8vICAgIHRlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxgQ29sb3JUeXBlYDxmbG9h
dD46OlJlZmVyZW5jZVhZWiwgYENvbG9yVHlwZWA8ZmxvYXQ+PiB7CisvLyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIGBDb2xvclR5cGVgPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQo
Y29uc3QgYENvbG9yVHlwZWA8ZmxvYXQ+Jik7CisvLyAgICB9OworLy8gICAgCisvLyAgICB0ZW1w
bGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248YENvbG9yVHlwZWA8ZmxvYXQ+LCBgQ29sb3JU
eXBlYDxmbG9hdD46OlJlZmVyZW5jZVhZWj4geworLy8gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBgQ29sb3JUeXBlYDxmbG9hdD4gY29udmVydChjb25zdCBgQ29sb3JUeXBlYDxmbG9hdD46
OlJlZmVyZW5jZVhZWiYpOworLy8gICAgfTsKIC8vCiAvLyBBbnkgYWRkaXRpb25hbCBjb252ZXJz
aW9ucyBjYW4gYmUgdGhvdWdodCBvZiBhcyBvcHRpbWl6YXRpb25zLCBzaG9ydGN1dHRpbmcgdW5u
ZWNlc3Nhcnkgc3RlcHMsIHRob3VnaAogLy8gc29tZSBtYXkgYmUgaW50ZWdyYWwgdG8gdGhlIGJh
c2UgY29udmVyc2lvbi4KIAogCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElu
cHV0PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQs
IHR5cGVuYW1lIElucHV0PiBpbmxpbmUgT3V0cHV0IGNvbnZlcnRDb2xvcihjb25zdCBJbnB1dCYg
Y29sb3IpCit7CisgICAgcmV0dXJuIENvbG9yQ29udmVyc2lvbjxPdXRwdXQsIElucHV0Pjo6Y29u
dmVydChjb2xvcik7Cit9CisKKwogLy8gQTk4UkdCCi1XRUJDT1JFX0VYUE9SVCBBOThSR0I8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IEE5OFJHQjxmbG9hdD4mKTsKLVdFQkNPUkVf
RVhQT1JUIEE5OFJHQjxmbG9hdD4gdG9BOThSR0IoY29uc3QgQTk4UkdCPGZsb2F0Pjo6UmVmZXJl
bmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248QTk4UkdCPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaLCBBOThSR0I8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIEE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IEE5OFJHQjxmbG9h
dD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxBOThSR0I8Zmxv
YXQ+LCBBOThSR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgQTk4UkdCPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEE5OFJHQjxmbG9hdD46OlJlZmVyZW5j
ZVhZWiYpOworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJBOThSR0I8
ZmxvYXQ+IHRvTGluZWFyQTk4UkdCKGNvbnN0IEE5OFJHQjxmbG9hdD4mKTsKK3RlbXBsYXRlPD4g
c3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5lYXJBOThSR0I8ZmxvYXQ+LCBBOThSR0I8ZmxvYXQ+
PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhckE5OFJHQjxmbG9hdD4gY29udmVy
dChjb25zdCBBOThSR0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIERpc3BsYXlQMwotV0VCQ09SRV9F
WFBPUlQgRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBEaXNwbGF5
UDM8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAz
KGNvbnN0IERpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29sb3JDb252ZXJzaW9uPERpc3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiwgRGlzcGxh
eVAzPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBEaXNwbGF5UDM8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVogY29udmVydChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248RGlzcGxheVAzPGZsb2F0PiwgRGlzcGxh
eVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIERp
c3BsYXlQMzxmbG9hdD4gY29udmVydChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAz
PGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyRGlzcGxheVAzPGZsb2F0PiwgRGlz
cGxheVAzPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJEaXNwbGF5
UDM8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOworfTsKKwogCiAvLyBF
eHRlbmRlZFNSR0JBCi1XRUJDT1JFX0VYUE9SVCBFeHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJl
bmNlWFlaIHRvWFlaQShjb25zdCBFeHRlbmRlZFNSR0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBP
UlQgRXh0ZW5kZWRTUkdCQTxmbG9hdD4gdG9FeHRlbmRlZFNSR0JBKGNvbnN0IEV4dGVuZGVkU1JH
QkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVy
c2lvbjxFeHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBFeHRlbmRlZFNSR0JBPGZs
b2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeHRlbmRlZFNSR0JBPGZsb2F0Pjo6
UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mKTsKK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxFeHRlbmRlZFNSR0JBPGZsb2F0Piwg
RXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4geworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBFeHRlbmRlZFNSR0JBPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEV4dGVuZGVkU1JHQkE8
ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBP
UlQgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4gdG9MaW5lYXJFeHRlbmRlZFNSR0JBKGNvbnN0
IEV4dGVuZGVkU1JHQkE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNp
b248TGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD4sIEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PiB7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+IGNvbnZl
cnQoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4mKTsKK307CisKIAogLy8gSFNMQQotV0VCQ09S
RV9FWFBPUlQgSFNMQTxmbG9hdD46OlJlZmVyZW5jZVhZWiB0b1hZWkEoY29uc3QgSFNMQTxmbG9h
dD4mKTsKLVdFQkNPUkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBIU0xBPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248SFNM
QTxmbG9hdD46OlJlZmVyZW5jZVhZWiwgSFNMQTxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgSFNMQTxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IEhTTEE8Zmxv
YXQ+Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD4sIEhTTEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgSFNMQTxmbG9hdD4gY29udmVydChjb25zdCBIU0xBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaJik7
Cit9OworCiAvLyBBZGRpdGlvbnMKLVdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IEhTTEE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248
U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBT
UkdCQTxmbG9hdD4gY29udmVydChjb25zdCBIU0xBPGZsb2F0PiYpOworfTsKKwogCiAvLyBIV0JB
Ci1XRUJDT1JFX0VYUE9SVCBIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBI
V0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgSFdCQTxmbG9hdD4gdG9IV0JBKGNvbnN0IEhX
QkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVy
c2lvbjxIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBIV0JBPGZsb2F0Pj4geworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBIV0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3Qg
SFdCQTxmbG9hdD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxI
V0JBPGZsb2F0PiwgSFdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWj4geworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBIV0JBPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEhXQkE8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+
IHRvU1JHQkEoY29uc3QgSFdCQTxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29u
dmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFNSR0JBPGZsb2F0PiBjb252ZXJ0KGNvbnN0IEhXQkE8ZmxvYXQ+Jik7Cit9OworCiAK
IC8vIExDSEEKLVdFQkNPUkVfRVhQT1JUIExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpB
KGNvbnN0IExDSEE8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEo
Y29uc3QgTENIQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29s
b3JDb252ZXJzaW9uPExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExDSEE8ZmxvYXQ+PiB7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExDSEE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogY29udmVy
dChjb25zdCBMQ0hBPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252
ZXJzaW9uPExDSEE8ZmxvYXQ+LCBMQ0hBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIExDSEE8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTENIQTxmbG9hdD46
OlJlZmVyZW5jZVhZWiYpOworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBMYWI8
ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xv
ckNvbnZlcnNpb248TGFiPGZsb2F0PiwgTENIQTxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgTGFiPGZsb2F0PiBjb252ZXJ0KGNvbnN0IExDSEE8ZmxvYXQ+Jik7Cit9OworCiAK
IC8vIExhYgotV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShj
b25zdCBMYWI8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0
IExhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252
ZXJzaW9uPExhYjxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGFiPGZsb2F0Pj4geworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBMYWI8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogY29udmVydChjb25zdCBM
YWI8ZmxvYXQ+Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGFi
PGZsb2F0PiwgTGFiPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIExhYjxmbG9hdD4gY29udmVydChjb25zdCBMYWI8ZmxvYXQ+OjpSZWZlcmVuY2VYWVom
KTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hB
KGNvbnN0IExhYjxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxM
Q0hBPGZsb2F0PiwgTGFiPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMQ0hB
PGZsb2F0PiBjb252ZXJ0KGNvbnN0IExhYjxmbG9hdD4mKTsKK307CisKIAogLy8gTGluZWFyQTk4
UkdCCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJBOThSR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9Y
WVpBKGNvbnN0IExpbmVhckE5OFJHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIExpbmVhckE5
OFJHQjxmbG9hdD4gdG9MaW5lYXJBOThSR0IoY29uc3QgTGluZWFyQTk4UkdCPGZsb2F0Pjo6UmVm
ZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyQTk4
UkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5lYXJBOThSR0I8ZmxvYXQ+PiB7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIExpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBjb252
ZXJ0KGNvbnN0IExpbmVhckE5OFJHQjxmbG9hdD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbG9yQ29udmVyc2lvbjxMaW5lYXJBOThSR0I8ZmxvYXQ+LCBMaW5lYXJBOThSR0I8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyQTk4UkdC
PGZsb2F0PiBjb252ZXJ0KGNvbnN0IExpbmVhckE5OFJHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiYp
OworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBBOThSR0I8ZmxvYXQ+IHRvQTk4
UkdCKGNvbnN0IExpbmVhckE5OFJHQjxmbG9hdD4mIGNvbG9yKTsKK3RlbXBsYXRlPD4gc3RydWN0
IENvbG9yQ29udmVyc2lvbjxBOThSR0I8ZmxvYXQ+LCBMaW5lYXJBOThSR0I8ZmxvYXQ+PiB7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEE5OFJHQjxmbG9hdD4gY29udmVydChjb25zdCBMaW5l
YXJBOThSR0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIExpbmVhckRpc3BsYXlQMwotV0VCQ09SRV9F
WFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBM
aW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMaW5lYXJEaXNwbGF5UDM8
ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD46OlJl
ZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhckRp
c3BsYXlQMzxmbG9hdD46OlJlZmVyZW5jZVhZWiwgTGluZWFyRGlzcGxheVAzPGZsb2F0Pj4gewor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVogY29udmVydChjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyRGlzcGxheVAzPGZsb2F0PiwgTGlu
ZWFyRGlzcGxheVAzPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gY29udmVydChjb25zdCBMaW5lYXJEaXNwbGF5
UDM8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9F
WFBPUlQgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8
ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248RGlzcGxheVAzPGZs
b2F0PiwgTGluZWFyRGlzcGxheVAzPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBEaXNwbGF5UDM8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYp
OworfTsKKwogCiAvLyBMaW5lYXJFeHRlbmRlZFNSR0JBCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJF
eHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5lYXJFeHRl
bmRlZFNSR0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgTGluZWFyRXh0ZW5kZWRTUkdCQTxm
bG9hdD4gdG9MaW5lYXJFeHRlbmRlZFNSR0JBKGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxM
aW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaLCBMaW5lYXJFeHRlbmRlZFNS
R0JBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJFeHRlbmRlZFNS
R0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3QgTGluZWFyRXh0ZW5kZWRTUkdC
QTxmbG9hdD4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5l
YXJFeHRlbmRlZFNSR0JBPGZsb2F0PiwgTGluZWFyRXh0ZW5kZWRTUkdCQTxmbG9hdD46OlJlZmVy
ZW5jZVhZWj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJFeHRlbmRlZFNSR0JB
PGZsb2F0PiBjb252ZXJ0KGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVomKTsKK307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgRXh0ZW5kZWRTUkdC
QTxmbG9hdD4gdG9FeHRlbmRlZFNSR0JBKGNvbnN0IExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+
Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248RXh0ZW5kZWRTUkdCQTxmbG9h
dD4sIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIEV4dGVuZGVkU1JHQkE8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTGluZWFyRXh0ZW5kZWRTUkdC
QTxmbG9hdD4mKTsKK307CisKIAogLy8gTGluZWFyUHJvUGhvdG9SR0IKLVdFQkNPUkVfRVhQT1JU
IExpbmVhclByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIHRvWFlaQShjb25zdCBMaW5l
YXJQcm9QaG90b1JHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JUIExpbmVhclByb1Bob3RvUkdC
PGZsb2F0PiB0b0xpbmVhclByb1Bob3RvUkdCKGNvbnN0IExpbmVhclByb1Bob3RvUkdCPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGlu
ZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhclByb1Bob3RvUkdCPGZs
b2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJQcm9QaG90b1JHQjxmbG9h
dD46OlJlZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IExpbmVhclByb1Bob3RvUkdCPGZsb2F0PiYp
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclByb1Bob3Rv
UkdCPGZsb2F0PiwgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVo+IHsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IGNvbnZlcnQo
Y29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKIC8v
IEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgUHJvUGhvdG9SR0I8ZmxvYXQ+IHRvUHJvUGhvdG9S
R0IoY29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2xvckNvbnZlcnNpb248UHJvUGhvdG9SR0I8ZmxvYXQ+LCBMaW5lYXJQcm9QaG90b1JHQjxmbG9h
dD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUHJvUGhvdG9SR0I8ZmxvYXQ+IGNvbnZl
cnQoY29uc3QgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit9OworCiAKIC8vIExpbmVhclJl
YzIwMjAKLVdFQkNPUkVfRVhQT1JUIExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVog
dG9YWVpBKGNvbnN0IExpbmVhclJlYzIwMjA8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBMaW5l
YXJSZWMyMDIwPGZsb2F0PiB0b0xpbmVhclJlYzIwMjAoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9h
dD46OlJlZmVyZW5jZVhZWiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExp
bmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIExpbmVhclJlYzIwMjA8ZmxvYXQ+PiB7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhclJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVogY29udmVydChjb25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYpOworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclJlYzIwMjA8ZmxvYXQ+LCBMaW5lYXJS
ZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IExpbmVhclJlYzIwMjA8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD46
OlJlZmVyZW5jZVhZWiYpOworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBSZWMy
MDIwPGZsb2F0PiB0b1JlYzIwMjAoY29uc3QgTGluZWFyUmVjMjAyMDxmbG9hdD4mKTsKK3RlbXBs
YXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxSZWMyMDIwPGZsb2F0PiwgTGluZWFyUmVjMjAy
MDxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVjMjAyMDxmbG9hdD4gY29u
dmVydChjb25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYpOworfTsKKwogCiAvLyBMaW5lYXJTUkdC
QQotV0VCQ09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpB
KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwotV0VCQ09SRV9FWFBPUlQgTGluZWFyU1JHQkE8
ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVomKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5lYXJTUkdCQTxmbG9h
dD46OlJlZmVyZW5jZVhZWiwgTGluZWFyU1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIExpbmVhclNSR0JBPGZsb2F0Pjo6UmVmZXJlbmNlWFlaIGNvbnZlcnQoY29uc3Qg
TGluZWFyU1JHQkE8ZmxvYXQ+Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZl
cnNpb248TGluZWFyU1JHQkE8ZmxvYXQ+LCBMaW5lYXJTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZ
Wj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBMaW5lYXJTUkdCQTxmbG9hdD4gY29udmVy
dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOworfTsKKwogLy8gQWRk
aXRpb25zCi1XRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD4mKTsKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxTUkdCQTxm
bG9hdD4sIExpbmVhclNSR0JBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBT
UkdCQTxmbG9hdD4gY29udmVydChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK307CisKIAog
Ly8gUHJvUGhvdG9SR0IKLVdFQkNPUkVfRVhQT1JUIFByb1Bob3RvUkdCPGZsb2F0Pjo6UmVmZXJl
bmNlWFlaIHRvWFlaQShjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mKTsKLVdFQkNPUkVfRVhQT1JU
IFByb1Bob3RvUkdCPGZsb2F0PiB0b1Byb1Bob3RvUkdCKGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0
Pjo6UmVmZXJlbmNlWFlaJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248UHJv
UGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIFByb1Bob3RvUkdCPGZsb2F0Pj4geworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQcm9QaG90b1JHQjxmbG9hdD46OlJlZmVyZW5jZVhZWiBj
b252ZXJ0KGNvbnN0IFByb1Bob3RvUkdCPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29sb3JDb252ZXJzaW9uPFByb1Bob3RvUkdCPGZsb2F0PiwgUHJvUGhvdG9SR0I8ZmxvYXQ+
OjpSZWZlcmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUHJvUGhvdG9SR0I8
ZmxvYXQ+IGNvbnZlcnQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsK
K307CisKIC8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGluZWFyUHJvUGhvdG9SR0I8Zmxv
YXQ+IHRvTGluZWFyUHJvUGhvdG9SR0IoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+LCBQ
cm9QaG90b1JHQjxmbG9hdD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyUHJv
UGhvdG9SR0I8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgUHJvUGhvdG9SR0I8ZmxvYXQ+Jik7Cit9Owor
CiAKIC8vIFJlYzIwMjAKLVdFQkNPUkVfRVhQT1JUIFJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVuY2VY
WVogdG9YWVpBKGNvbnN0IFJlYzIwMjA8ZmxvYXQ+Jik7Ci1XRUJDT1JFX0VYUE9SVCBSZWMyMDIw
PGZsb2F0PiB0b1JlYzIwMjAoY29uc3QgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZWiYpOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPFJlYzIwMjA8ZmxvYXQ+OjpSZWZlcmVu
Y2VYWVosIFJlYzIwMjA8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlYzIw
MjA8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogY29udmVydChjb25zdCBSZWMyMDIwPGZsb2F0PiYpOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPFJlYzIwMjA8ZmxvYXQ+LCBS
ZWMyMDIwPGZsb2F0Pjo6UmVmZXJlbmNlWFlaPiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlYzIwMjA8ZmxvYXQ+IGNvbnZlcnQoY29uc3QgUmVjMjAyMDxmbG9hdD46OlJlZmVyZW5jZVhZ
WiYpOworfTsKKwogLy8gQWRkaXRpb25zCi1XRUJDT1JFX0VYUE9SVCBMaW5lYXJSZWMyMDIwPGZs
b2F0PiB0b0xpbmVhclJlYzIwMjAoY29uc3QgUmVjMjAyMDxmbG9hdD4mKTsKK3RlbXBsYXRlPD4g
c3RydWN0IENvbG9yQ29udmVyc2lvbjxMaW5lYXJSZWMyMDIwPGZsb2F0PiwgUmVjMjAyMDxmbG9h
dD4+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGluZWFyUmVjMjAyMDxmbG9hdD4gY29u
dmVydChjb25zdCBSZWMyMDIwPGZsb2F0PiYpOworfTsKKwogCiAvLyBTUkdCQQotV0VCQ09SRV9F
WFBPUlQgU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVogdG9YWVpBKGNvbnN0IFNSR0JBPGZsb2F0
PiYpOwotV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8Zmxv
YXQ+OjpSZWZlcmVuY2VYWVomKTsKLS8vIEFkZGl0aW9ucwotV0VCQ09SRV9FWFBPUlQgTGluZWFy
U1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci1XRUJDT1JF
X0VYUE9SVCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci1XRUJDT1JF
X0VYUE9SVCBIV0JBPGZsb2F0PiB0b0hXQkEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVosIFNS
R0JBPGZsb2F0Pj4geworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTUkdCQTxmbG9hdD46OlJl
ZmVyZW5jZVhZWiBjb252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0PiwgU1JHQkE8ZmxvYXQ+OjpSZWZl
cmVuY2VYWVo+IHsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU1JHQkE8ZmxvYXQ+IGNvbnZl
cnQoY29uc3QgU1JHQkE8ZmxvYXQ+OjpSZWZlcmVuY2VYWVomKTsKK307CisKKy8vIEFkZGl0aW9u
cwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29sb3JDb252ZXJzaW9uPExpbmVhclNSR0JBPGZsb2F0Piwg
U1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExpbmVhclNSR0JBPGZs
b2F0PiBjb252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+IHsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgSFNMQTxmbG9hdD4gY29udmVydChjb25zdCBTUkdCQTxmbG9hdD4m
KTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbG9yQ29udmVyc2lvbjxIV0JBPGZsb2F0Piwg
U1JHQkE8ZmxvYXQ+PiB7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEhXQkE8ZmxvYXQ+IGNv
bnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Cit9OworCiAKIAogLy8gQ2hyb21hdGljIEFkYXB0
YXRpb24gY29udmVyc2lvbnMuCkBAIC0xNjIsMTExICszMTcsNTggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgV2hpdGVQb2ludCBpbnB1dFdoaQogICAgICAgICByZXR1cm4gY29udmVydEZyb21ENTBX
aGl0ZVBvaW50VG9ENjVXaGl0ZVBvaW50KGNvbG9yKTsKIH0KIAotCi0vLyBJZGVudGl0eSBjb252
ZXJzaW9ucyAodXNlZnVsIGZvciBnZW5lcmljIGNvbnRleHRzKS4KLQotY29uc3RleHByIEE5OFJH
QjxmbG9hdD4gdG9BOThSR0IoY29uc3QgQTk4UkdCPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNv
bG9yOyB9Ci1jb25zdGV4cHIgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBEaXNw
bGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KLWNvbnN0ZXhwciBFeHRlbmRl
ZFNSR0JBPGZsb2F0PiB0b0V4dGVuZGVkU1JHQkEoY29uc3QgRXh0ZW5kZWRTUkdCQTxmbG9hdD4m
IGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQotY29uc3RleHByIEhTTEE8ZmxvYXQ+IHRvSFNMQShj
b25zdCBIU0xBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgSFdC
QTxmbG9hdD4gdG9IV0JBKGNvbnN0IEhXQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7
IH0KLWNvbnN0ZXhwciBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9y
KSB7IHJldHVybiBjb2xvcjsgfQotY29uc3RleHByIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgTGFi
PGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgTGluZWFyQTk4UkdC
PGZsb2F0PiB0b0xpbmVhckE5OFJHQihjb25zdCBMaW5lYXJBOThSR0I8ZmxvYXQ+JiBjb2xvcikg
eyByZXR1cm4gY29sb3I7IH0KLWNvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGlu
ZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVy
biBjb2xvcjsgfQotY29uc3RleHByIExpbmVhckV4dGVuZGVkU1JHQkE8ZmxvYXQ+IHRvTGluZWFy
RXh0ZW5kZWRTUkdCQShjb25zdCBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiYgY29sb3IpIHsg
cmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IHRvTGlu
ZWFyUmVjMjAyMChjb25zdCBMaW5lYXJQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKSB7IHJldHVy
biBjb2xvcjsgfQotY29uc3RleHByIExpbmVhclJlYzIwMjA8ZmxvYXQ+IHRvTGluZWFyUmVjMjAy
MChjb25zdCBMaW5lYXJSZWMyMDIwPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1j
b25zdGV4cHIgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JH
QkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KLWNvbnN0ZXhwciBQcm9QaG90b1JH
QjxmbG9hdD4gdG9Qcm9QaG90b1JHQihjb25zdCBQcm9QaG90b1JHQjxmbG9hdD4mIGNvbG9yKSB7
IHJldHVybiBjb2xvcjsgfQotY29uc3RleHByIFJlYzIwMjA8ZmxvYXQ+IHRvUmVjMjAyMChjb25z
dCBSZWMyMDIwPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci1jb25zdGV4cHIgU1JH
QkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29s
b3I7IH0KLXRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIFhZWkE8ZmxvYXQsIFc+IHRv
WFlaQShjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Ci0KLQog
Ly8gRmFsbGJhY2sgY29udmVyc2lvbnMuCiAKLS8vIEFsbCB0eXBlcyBhcmUgcmVxdWlyZWQgdG8g
aGF2ZSBhIGNvbnZlcnNpb24gdG8gdGhlaXIgcmVmZXJlbmNlIFhZWiBzcGFjZSwgc28gdGhlc2Ug
YXJlIGd1YXJhbnRlZWQKLS8vIHRvIHdvcmsgaWYgYW5vdGhlciBvdmVybG9hZCBpcyBub3QgYWxy
ZWFkeSBwcm92aWRlZC4KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gQTk4UkdCPGZsb2F0PiB0b0E5
OFJHQihjb25zdCBUJiBjb2xvcikKLXsKLSAgICByZXR1cm4gdG9BOThSR0IocGVyZm9ybUNob21h
dGljQWRhcGF0YXRpb248QTk4UkdCPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQorLy8gQWxs
IHR5cGVzIGFyZSByZXF1aXJlZCB0byBoYXZlIGEgY29udmVyc2lvbiB0byB0aGVpciByZWZlcmVu
Y2UgWFlaIHNwYWNlLCBzbyB0aGlzIGlzIGd1YXJhbnRlZWQKKy8vIHRvIHdvcmsgaWYgYW5vdGhl
ciBzcGVjaWFsaXphdGlvbiBpcyBub3QgYWxyZWFkeSBwcm92aWRlZC4KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBUJiBjb2xvcikKLXsK
LSAgICByZXR1cm4gdG9EaXNwbGF5UDMocGVyZm9ybUNob21hdGljQWRhcGF0YXRpb248RGlzcGxh
eVAzPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBF
eHRlbmRlZFNSR0JBPGZsb2F0PiB0b0V4dGVuZGVkU1JHQkEoY29uc3QgVCYgY29sb3IpCi17Ci0g
ICAgcmV0dXJuIHRvRXh0ZW5kZWRTUkdCQShwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxFeHRl
bmRlZFNSR0JBPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRv
SFNMQShwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxIU0xBPGZsb2F0Pj4odG9YWVpBKGNvbG9y
KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIV0JBPGZsb2F0PiB0b0hXQkEoY29uc3Qg
VCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRvSFdCQShwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlv
bjxIV0JBPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRvTENI
QShwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMQ0hBPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IFQmIGNv
bG9yKQotewotICAgIHJldHVybiB0b0xhYihwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMYWI8
ZmxvYXQ+Pih0b1hZWkEoY29sb3IpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVh
ckE5OFJHQjxmbG9hdD4gdG9MaW5lYXJBOThSR0IoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0
dXJuIHRvTGluZWFyQTk4UkdCKHBlcmZvcm1DaG9tYXRpY0FkYXBhdGF0aW9uPExpbmVhckE5OFJH
QjxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gTGlu
ZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBUJiBjb2xvcikKLXsK
LSAgICByZXR1cm4gdG9MaW5lYXJEaXNwbGF5UDMocGVyZm9ybUNob21hdGljQWRhcGF0YXRpb248
TGluZWFyRGlzcGxheVAzPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0PiB0b0xpbmVhckV4dGVuZGVkU1JH
QkEoY29uc3QgVCYgY29sb3IpCi17Ci0gICAgcmV0dXJuIHRvTGluZWFyRXh0ZW5kZWRTUkdCQShw
ZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMaW5lYXJFeHRlbmRlZFNSR0JBPGZsb2F0Pj4odG9Y
WVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJQcm9QaG90b1JH
QjxmbG9hdD4gdG9MaW5lYXJQcm9QaG90b1JHQihjb25zdCBUJiBjb2xvcikKLXsKLSAgICByZXR1
cm4gdG9MaW5lYXJQcm9QaG90b1JHQihwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxMaW5lYXJQ
cm9QaG90b1JHQjxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gTGluZWFyUmVjMjAyMDxmbG9hdD4gdG9MaW5lYXJSZWMyMDIwKGNvbnN0IFQmIGNvbG9y
KQotewotICAgIHJldHVybiB0b0xpbmVhclJlYzIwMjAocGVyZm9ybUNob21hdGljQWRhcGF0YXRp
b248TGluZWFyUmVjMjAyMDxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgVCYgY29s
b3IpCi17Ci0gICAgcmV0dXJuIHRvTGluZWFyU1JHQkEocGVyZm9ybUNob21hdGljQWRhcGF0YXRp
b248TGluZWFyU1JHQkE8ZmxvYXQ+Pih0b1hZWkEoY29sb3IpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFByb1Bob3RvUkdCPGZsb2F0PiB0b1Byb1Bob3RvUkdCKGNvbnN0IFQmIGNvbG9y
KQotewotICAgIHJldHVybiB0b1Byb1Bob3RvUkdCKHBlcmZvcm1DaG9tYXRpY0FkYXBhdGF0aW9u
PFByb1Bob3RvUkdCPGZsb2F0Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBSZWMyMDIwPGZsb2F0PiB0b1JlYzIwMjAoY29uc3QgVCYgY29sb3IpCi17Ci0gICAg
cmV0dXJuIHRvUmVjMjAyMChwZXJmb3JtQ2hvbWF0aWNBZGFwYXRhdGlvbjxSZWMyMDIwPGZsb2F0
Pj4odG9YWVpBKGNvbG9yKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxmbG9h
dD4gdG9TUkdCQShjb25zdCBUJiBjb2xvcikKLXsKLSAgICByZXR1cm4gdG9TUkdCQShwZXJmb3Jt
Q2hvbWF0aWNBZGFwYXRhdGlvbjxTUkdCQTxmbG9hdD4+KHRvWFlaQShjb2xvcikpKTsKLX0KKy8v
IEZJWE1FOiBSYXRoZXIgdGhhbiBhbHdheXMgY29udmVydGluZyB0aHJvdWdoIHJlZmVyZW5jZSBY
WVogY29sb3Igc3BhY2UKKy8vIHdlIHNob3VsZCBpbnN0ZWFkIHN3aXRjaCB0byBjb21wdXRpbmcg
dGhlIGxlYXN0IGNvbW1vbiByZWZlcmVuY2UgYW5jZXN0b3IKKy8vIHR5cGUgd2hlcmUgZWFjaCBj
b2xvciB0eXBlIGRlZmluZXMgaXRzIHJlZmVyZW5jZSB0eXBlIGFzIHRoZSBjb2xvciBpdCBuZWVk
cworLy8gdG8gZ2V0IG9uZSBzdGVwIGNsb3NlciB0byB0aGUgcmVmZXJlbmNlIFhZWiBjb2xvciBz
cGFjZS4gRm9yIGluc3RhbmNlLAorLy8gdGhlIHJlZmVyZW5jZSB0eXBlIG9mIFNSR0JBIGlzIExp
bmVhclNSR0JBLCBhbmQgdGhlIHJlZmVyZW5jZSB0eXBlIG9mIExDSEEKKy8vIGlzIExhYi4gVG9n
ZXRoZXIsIHRoZSBjb2xvciB0eXBlcyBtYWtlIGEgdHJlZSB3aXRoIFhZWiBhdCB0aGUgcm9vdC4g
VGhlCisvLyBjb252ZXJzaW9uIHNob3VsZCBlbmQgdXAgbG9va2luZyBzb21ldGhpbmcgbGlrZToK
Ky8vCisvLyAgIHVzaW5nIExDQSA9IExlYXN0Q29tbW9uQW5jZXN0b3I8T3V0cHV0LCBJbnB1dD46
OlR5cGU7CisvLyAgIHJldHVybiBjb252ZXJ0Q29sb3I8T3V0cHV0Pihjb252ZXJ0Q29sb3I8TENB
Pihjb2xvcikpOworLy8KKy8vIEFuIGV4YW1wbGUgb2Ygd2hlcmUgdGhpcyB3b3VsZCBiZSBtb3Jl
IGVmZmljaWVudCBpcyB3aGVuIGNvbnZlcnRpbmcgZnJvbQorLy8gSFNMQTxmbG9hdD4gdG8gSFdC
QTxmbG9hdD4uIExDQSBmb3IgdGhpcyBwYWlyIGlzIFNSR0JBPGZsb2F0PiBzbyBjb252ZXJzaW9u
CisvLyB0aHJvdWdoIFhZWiBpcyB3YXN0ZWZ1bC4gVGhpcyBtb2RlbCB3b3VsZCBhbHNvIGFsbG93
IHVzIHRvIHJlbW92ZSB0aGUKKy8vIGNvbWJpbmF0aW9uIGNvbnZlcnNpb25zLCByZWR1Y2luZyB0
aGUgbnVtYmVyIG9mIHRoaW5ncyBlYWNoIG5ldyBjb2xvciB0eXBlCisvLyByZXF1aXJlcy4KKy8v
CisvLyBGSVhNRTogUmVkdWNlIHRvdGFsIG51bWJlciBvZiBtYXRyaXggdHJhbmZvcm1zIGJ5IGNv
bmNhdGVuYXRpbmcgdGhlIG1hdHJpY2VzCisvLyBvZiBzZXF1ZW50aWFsIG1hdHJpeCB0cmFuc2Zv
cm1zIGF0IGNvbXBpbGUgdGltZS4gVGFrZSB0aGUgY29udmVyc2lvbiBmcm9tCisvLyBQcm9QaG90
b1JHQjxmbG9hdD4gdG8gU1JHQkE8ZmxvYXQ+IGFzIGFuIGV4YW1wbGU6CisvLworLy8gICAxLiBQ
cm9QaG90b1JHQjxmbG9hdD4gLT4gTGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+ICAgICAgICAgICAg
ICAgICAgKHRyYW5zZmVyIGZ1bmN0aW9uIHRyYW5zZm9ybSwgbm90IG1hdHJpeCkKKy8vICAgMi4g
TGluZWFyUHJvUGhvdG9SR0I8ZmxvYXQ+IC0+IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4g
ICAgICAgIE1BVFJJWCBUUkFOU0ZPUk0KKy8vICAgMy4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDUwPiAtPiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+ICAgIE1BVFJJWCBUUkFOU0ZPUk0K
Ky8vICAgNC4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiAtPiBMaW5lYXJTUkdCQTxmbG9h
dD4gICAgICAgICAgICAgIE1BVFJJWCBUUkFOU0ZPUk0KKy8vICAgNS4gTGluZWFyU1JHQkE8Zmxv
YXQ+IC0+IFNSR0JBPGZsb2F0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmFuc2Zl
ciBmdW5jdGlvbiB0cmFuc2Zvcm0sIG5vdCBtYXRyaXgpCisvLworLy8gU3RlcHMgMiwgMywgYW5k
IDQgY2FuIGJlIGNvbWJpbmVkIGludG8gb25lIHNpbmdsZSBtYXRyaXggaWYgd2UgbGluZWFybHkK
Ky8vIGNvbmNhdGVudGVkIHRoZSB0aHJlZSBtYXRyaWNlcy4gVG8gZG8gdGhpcywgd2Ugd2lsbCBo
YXZlIHRvIHRhZyB3aGljaCBjb252ZXJzaW9ucworLy8gYXJlIG1hdHJpeCBiYXNlZCwgZXhwb3Nl
IHRoZSBtYXRyaWNlcywgYWRkIHN1cHBvcnQgZm9yIGNvbnN0ZXhwciBjb25jYXRlbnRpbmcKKy8v
IG9mIENvbG9yTWF0cml4IGFuZCBmaW5kIGEgd2F5IHRvIG1lcmdlIHRoZSBjb252ZXJzaW9ucy4K
KwordGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dD4gc3RydWN0IENvbG9y
Q29udmVyc2lvbiB7CisgICAgc3RhdGljIE91dHB1dCBjb252ZXJ0KGNvbnN0IElucHV0JiBjb2xv
cikKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwcihzdGQ6OmlzX3NhbWVfdjxPdXRwdXQsIElu
cHV0PikKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIElucHV0OjpDb21wb25lbnRUeXBlLCB1aW50OF90
PikKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0Q29sb3I8T3V0cHV0Pihjb252ZXJ0VG88U1JH
QkE8ZmxvYXQ+Pihjb2xvcikpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8dHlwZW5hbWUgT3V0cHV0OjpDb21wb25lbnRUeXBlLCB1aW50OF90PikKKyAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbnZlcnRDb2xvcjxTUkdCQTxm
bG9hdD4+KGNvbG9yKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byB4eXoxID0g
Y29udmVydENvbG9yPHR5cGVuYW1lIElucHV0OjpSZWZlcmVuY2VYWVo+KGNvbG9yKTsKKyAgICAg
ICAgICAgIGF1dG8geHl6MiA9IHBlcmZvcm1DaG9tYXRpY0FkYXBhdGF0aW9uPE91dHB1dD4oeHl6
MSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91dHB1dD4oeHl6Mik7CisgICAg
ICAgIH0KKyAgICB9Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyNzI0MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBmbG9hdCBs
aWdodG5lc3MoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvCiAKIGZsb2F0IGx1bWluYW5jZShjb25z
dCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIE5PVEU6IFRoaXMgaXMgdGhlIGVxdWl2
YWxlbnQgb2YgdG9YWVpBKHRvTGluZWFyU1JHQkEoY29sb3IpKS55CisgICAgLy8gTk9URTogVGhp
cyBpcyB0aGUgZXF1aXZhbGVudCBvZiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2lu
dDo6RDY1Pj4oY29sb3IpLnkKICAgICAvLyBGSU1YRTogSWYgd2UgY2FuIGdlbmVyYWxpemUgQ29s
b3JNYXRyaXggYSBiaXQgbW9yZSwgaXQgbWlnaHQgYmUgbmljZSB0byB3cml0ZSB0aGlzIGFzOgot
ICAgIC8vICAgICAgcmV0dXJuIHRvTGluZWFyU1JHQkEoY29sb3IpICogbGluZWFyU1JHQlRvWFla
TWF0cml4LnJvdygxKTsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEoY29s
b3IpOworICAgIC8vICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGNvbG9yKSAqIGxpbmVhclNSR0JUb1hZWk1hdHJpeC5yb3coMSk7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+Pihjb2xvcik7CiAgICAgcmV0
dXJuIDAuMjEyNmYgKiByICsgMC43MTUyZiAqIGcgKyAwLjA3MjJmICogYjsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJl
dmlzaW9uIDI3MjQwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBPcHRpb25h
bDxTUkdCQTx1aW50OF90Pj4gcm91bmRBbmQKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBy
LCBnLCBiLCBhIH0pOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNS
R0JBIHsgciwgZywgYiwgYSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3Ip
CkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3Qg
Q29sbwogICAgIC8vIG1vcmUgZXhwbGljaXQuCiAgICAgaWYgKGNvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6U1JHQiAmJiBjZ0NvbG9yU3BhY2UgPT0gc1JHQkNvbG9yU3BhY2VSZWYoKSkgewogICAg
ICAgICBhdXRvIGNvbG9yQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBID0gY2FsbFdpdGhDb2xvclR5
cGUoY29tcG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdG9FeHRlbmRlZFNSR0JBKGNvbG9yKTsKKyAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSk7
CiAgICAgICAgIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvckNvbnZlcnRlZFRv
RXh0ZW5kZWRTUkdCQSk7CiAgICAgICAgIGNnQ29sb3JTcGFjZSA9IGV4dGVuZGVkU1JHQkNvbG9y
U3BhY2VSZWYoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjcyNDAyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDA1LDcgKzQwNSw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0
aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKICAgICAKICAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6Okxp
bmVhclJHQikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9s
aWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8TGluZWFyU1JHQkE8Zmxv
YXQ+PigpOwogICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZl
Y3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKICAgICB9IGVsc2UgewogICAgICAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI3
MjQwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MTksMTMgKzE0MTksMTUgQEAgY29uc3RleHByIGZsb2F0IGRhdGVQbGFj
ZWhvbGRlckNvbG9yTGlnaAogCiBDb2xvciBSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4
dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IpIGNvbnN0CiB7Ci0gICAgYXV0byBoc2xhID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCkpOworICAgIC8vIEZJWE1FOiBDb25zaWRlciB1c2luZyBMQ0hBPGZsb2F0PiBy
YXRoZXIgdGhhbiBIU0xBPGZsb2F0PiBmb3IgYmV0dGVyIHBlcmNlcHR1YWwgcmVzdWx0cyBhbmQg
dG8gYXZvaWQgY2xhbXBpbmcgdG8gc1JHQiBnYW11dCwgd2hpY2ggaXMgd2hhdCBIU0xBIGRvZXMu
CisgICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+
KCk7CiAgICAgaWYgKHRleHRDb2xvci5sdW1pbmFuY2UoKSA8IGJhY2tncm91bmRDb2xvci5sdW1p
bmFuY2UoKSkKICAgICAgICAgaHNsYS5saWdodG5lc3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JM
aWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICogKDEuMGYgLSBoc2xhLmxpZ2h0bmVzcyk7CiAgICAg
ZWxzZQogICAgICAgICBoc2xhLmxpZ2h0bmVzcyAqPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0
bmVzc0FkanVzdG1lbnRGYWN0b3I7CiAKLSAgICByZXR1cm4gdG9TUkdCQShoc2xhKTsKKyAgICAv
LyBGSVhNRTogQ29uc2lkZXIga2VlcGluZyBjb2xvciBpbiBMQ0hBIChpZiB0aGF0IGNoYW5nZSBp
cyBtYWRlKSBvciBjb252ZXJ0aW5nIGJhY2sgdG8gdGhlIGluaXRpYWwgdW5kZXJseWluZyBjb2xv
ciB0eXBlIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgY2xhbXBpbmcgY29sb3JzIG91dHNpZGUgb2Yg
c1JHQi4KKyAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaHNsYSk7CiB9CiAK
IHZvaWQgUmVuZGVyVGhlbWU6OnNldEN1c3RvbUZvY3VzUmluZ0NvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3MjQwMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTAyLTA0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBHZW5lcmFsaXplIGNvbG9yIGNvbnZlcnNpb24gY29kZSB0byByZWR1Y2Ug
bnVtYmVyIG9mIG92ZXJsb2FkcyByZXF1aXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0
cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRl
c3RzIHRvIHVzZSBjb252ZXJ0Q29sb3I8Pi4KKwogMjAyMS0wMi0wNCAgQWFrYXNoIEphaW4gIDxh
YWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2J1aWxkLndlYmtpdC5vcmddIFVwZGF0
ZSBkYXNoYm9hcmQgbGlua3MgZm9yIGxheW91dCB0ZXN0IHJlc3VsdHMKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9u
IDI3MjQwMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9XaGl0ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0
byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9F
USgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC00Niw3ICs0Niw3IEBAIFRFU1QoQ29sb3Is
IFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5l
c3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Piho
c2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENv
bG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEo
Y29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTYyLDcgKzYyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5l
c3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50
OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
Y29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpyZWQ7CiAKLSAg
ICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwor
ICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4o
KTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNzgsNyArNzgsNyBAQCBURVNU
KENvbG9yLCBSR0JUb0hTTF9SZWQpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xv
ciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBh
dXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xh
Q29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBA
IC04Niw3ICs4Niw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9y
IGNvbG9yID0gQ29sb3I6OmdyZWVuOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC4z
MzMzMzMzNCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKQEAgLTk0LDcgKzk0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3Jl
ZW4pCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5s
aWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdC
QTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVD
VF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMDIsNyArMTAyLDcgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpi
bHVlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNM
QTxmbG9hdD4+KCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHNsYUNvbG9y
Lmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAg
LTExMCw3ICsxMTAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xv
cjxTUkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0RhcmtHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmRhcmtHcmF5OwogCi0g
ICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
KyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+
KCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29s
b3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVp
bnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29s
b3IpOwogfQogCkBAIC0xMzQsNyArMTM0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkK
IHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIGhzbGFDb2xv
ciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9HcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88
U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBF
WFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTUwLDcgKzE1MCw3
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9
IENvbG9yOjpsaWdodEdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24p
OwpAQCAtMTU4LDcgKzE1OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAog
ICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVz
cyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4
X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>