<?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>234798</bug_id>
          
          <creation_ts>2022-01-02 11:11:13 -0800</creation_ts>
          <short_desc>Add resolved/unresolved color type accessors to require users to be explicit about whether they will handle missing/none color components</short_desc>
          <delta_ts>2022-01-03 10:58:16 -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>Platform</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>233526</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1827526</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 11:11:13 -0800</bug_when>
    <thetext>As a precursor to 233526 ([CSS Color 4] Add support for &quot;Missing&quot;/&quot;none&quot; color components), which will require allowing color types to have components with NaN values to indicate missing and powerless components, we should use the type system to require users who want to access components to declare whether they will handle those values, or want the existing behavior (and the behavior used for rendering) where those components are converted to 0.

To do this, color types will no longer expose their components publicly, but rather, will only allow access to them via new subclasses, ResolvedColorType&lt;ColorType&gt; and UnresolvedColorType&lt;ColorType&gt; (the former doing the conversion to 0, the later doing nothing). Theses subclasses will expose the components publicly (via using directives). 

This will require call sites to change from:

auto [r, g, b, alpha] = myColorType;

to:

auto [r, g, b, alpha] = myColorType.resolved();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827533</commentid>
    <comment_count>1</comment_count>
      <attachid>448182</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 12:10:27 -0800</bug_when>
    <thetext>Created attachment 448182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827538</commentid>
    <comment_count>2</comment_count>
      <attachid>448184</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 12:28:49 -0800</bug_when>
    <thetext>Created attachment 448184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827543</commentid>
    <comment_count>3</comment_count>
      <attachid>448186</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 14:46:02 -0800</bug_when>
    <thetext>Created attachment 448186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827569</commentid>
    <comment_count>4</comment_count>
      <attachid>448191</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 17:11:33 -0800</bug_when>
    <thetext>Created attachment 448191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827577</commentid>
    <comment_count>5</comment_count>
      <attachid>448194</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 17:47:52 -0800</bug_when>
    <thetext>Created attachment 448194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827585</commentid>
    <comment_count>6</comment_count>
      <attachid>448197</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 18:02:47 -0800</bug_when>
    <thetext>Created attachment 448197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827595</commentid>
    <comment_count>7</comment_count>
      <attachid>448199</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 18:40:18 -0800</bug_when>
    <thetext>Created attachment 448199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827600</commentid>
    <comment_count>8</comment_count>
      <attachid>448201</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 19:34:23 -0800</bug_when>
    <thetext>Created attachment 448201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827614</commentid>
    <comment_count>9</comment_count>
      <attachid>448202</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-02 21:00:09 -0800</bug_when>
    <thetext>Created attachment 448202
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827771</commentid>
    <comment_count>10</comment_count>
      <attachid>448202</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-01-03 09:11:57 -0800</bug_when>
    <thetext>Comment on attachment 448202
Patch

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

&gt; Source/WebCore/ChangeLog:33
&gt; +        opertunity to replace all its uses with the generic toColorTypeLossy&lt;SRGBA&lt;&gt;&gt;.

spelling &quot;opertunity&quot;

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:95
&gt; +        auto [r, g, b, a] = bgColor.toColorTypeLossy&lt;SRGBA&lt;uint8_t&gt;&gt;().resolved();

There is a lot of this. Could we have a template-free shortcut for this apparently common case with a sensible name that hints the proper use?

One should be able to write WebKit code without becoming a color space expert or mindlessly copy-pasting.

&gt; Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp:827
&gt; -                auto [r, g, b, a] = bgColor.toSRGBALossy&lt;uint8_t&gt;();
&gt; +                auto [r, g, b, a] = bgColor..toColorTypeLossy&lt;SRGBA&lt;uint8_t&gt;&gt;().resolved();

what&apos;s up with those double ..?

&gt; Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp:833
&gt; +                auto [r, g, b, a] = fgColor..toColorTypeLossy&lt;SRGBA&lt;uint8_t&gt;&gt;().resolved();

here too

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1534
&gt; +    auto originColorAsSRGB = originColor.toColorTypeLossy&lt;SRGBA&lt;float&gt;&gt;().resolved();

Similarly maybe this could have a shortcut?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827778</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-03 09:58:13 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #10)
&gt; Comment on attachment 448202 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=448202&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:33
&gt; &gt; +        opertunity to replace all its uses with the generic toColorTypeLossy&lt;SRGBA&lt;&gt;&gt;.
&gt; 
&gt; spelling &quot;opertunity&quot;

Always taking &quot;opertunities&quot; to innovate in the spelling game.

&gt; 
&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:95
&gt; &gt; +        auto [r, g, b, a] = bgColor.toColorTypeLossy&lt;SRGBA&lt;uint8_t&gt;&gt;().resolved();
&gt; 
&gt; There is a lot of this. Could we have a template-free shortcut for this
&gt; apparently common case with a sensible name that hints the proper use?
&gt; 
&gt; One should be able to write WebKit code without becoming a color space
&gt; expert or mindlessly copy-pasting.

Heh, I removed the shortcut I had because I didn&apos;t think it was useful, but I don&apos;t think the shortcut really resolved this problem. The old one was:

   &apos;color.toSRGBALossy&lt;&gt;()&apos;

What I have found so far is that making these very explicit has made it much less likely for people to make mistakes with the color code (or at the very least, made it easy to notice when things are being done incorrectly after the fact). 

For the most part, you almost never need to access color channels directly like this, and when you do, you really need to know which color space you want it in.

I would love to figure out ways to simplify these things, but so far I haven&apos;t found any silver bullets. The main way I have been trying to make it easier for people is by removing the needs for accessing the color channels directly by having shared utilities for the common uses (interpolation, contrasting, etc.). Its certainly something we should continue to improve.


&gt; 
&gt; &gt; Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp:827
&gt; &gt; -                auto [r, g, b, a] = bgColor.toSRGBALossy&lt;uint8_t&gt;();
&gt; &gt; +                auto [r, g, b, a] = bgColor..toColorTypeLossy&lt;SRGBA&lt;uint8_t&gt;&gt;().resolved();
&gt; 
&gt; what&apos;s up with those double ..?
&gt; 
&gt; &gt; Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp:833
&gt; &gt; +                auto [r, g, b, a] = fgColor..toColorTypeLossy&lt;SRGBA&lt;uint8_t&gt;&gt;().resolved();
&gt; 
&gt; here too

They are what we call in the industry...bugs :). I guess those files don&apos;t get compiled in any of the EWS bots. Will fix.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1534
&gt; &gt; +    auto originColorAsSRGB = originColor.toColorTypeLossy&lt;SRGBA&lt;float&gt;&gt;().resolved();
&gt; 
&gt; Similarly maybe this could have a shortcut?

One tiny shortcut would be to have resolved and unresolved versions of toColorTypeLossy (e.g. toResolvedColorTypeLossy and toUnresolvedColorTypeLossy) which do the call after for you, but I am not sure that really helps.


Thanks for the review. I will continue looking into ways to make this simpler. 

I would also love to try and do a little more education in this area, so that more people can become more comfortable with it. The concepts aren&apos;t too tricky once they are explained, but finding good resources to learn them was harder than it should have been. Maybe one thing I could do is make one of those pages like we have for RefPtr on it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827779</commentid>
    <comment_count>12</comment_count>
      <attachid>448248</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-03 09:59:54 -0800</bug_when>
    <thetext>Created attachment 448248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827792</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-03 10:57:28 -0800</bug_when>
    <thetext>Committed r287552 (245687@main): &lt;https://commits.webkit.org/245687@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448248.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827793</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-03 10:58:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/87069742&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448182</attachid>
            <date>2022-01-02 12:10:27 -0800</date>
            <delta_ts>2022-01-02 12:44:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved.diff</filename>
            <type>text/plain</type>
            <size>155807</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBPbmUgdHJpY2t5IHRoaW5nIGhhdmluZyBhIG1v
cmUgY29tcGxleCBoaWVyYXJjaHkgb2YgY29sb3IgdHlwZXMgaXMgdGhhdCBnZW5lcmljIGZ1bmN0
aW9ucyBwYXJhbWV0ZXJpemVkCisgICAgICAgIG9uIHRoZSBpbnB1dCBjb2xvciB0eXBlIGNhbiBu
byBsb25nZXIgYXNzdW1lIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzIHdpbGwgYmUgdGhlIHNh
bWUgKGZvciBpbnN0YW5jZSwKKyAgICAgICAgaWYgeW91IGNhbGwgY29sb3JXaXRoT3ZlcnJpZGRl
bkFscGhhKCkgd2l0aCBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+IGl0IHdpbGwgbm90
IG5lY2Vzc2FyaWx5IAorICAgICAgICByZXR1cm4gYSBSZXNvbHZlZENvbG9yVHlwZTxMYWI8Zmxv
YXQ+Pikgc28gYSBmZXcgZ2VuZXJpYyBmdW5jdGlvbnMgaGF2ZSBoYWQgdGhlaXIgZXhwbGljaXQg
cmV0dXJuIHR5cGVzCisgICAgICAgIHJlcGxhY2VkIHdpdGggZGVkdWNlZCAoYXV0bykgcmV0dXJu
IHR5cGVzIHRvIGF2b2lkIHRoaXMgKGFkZGl0aW9uYWxseSwgYSBDYW5vbmljYWxDb2xvclR5cGU8
PiB0eXBlIHRyYWl0CisgICAgICAgIHdhcyBhZGRlZCBpZiBvbmUgbmVlZHMgdG8gYmUgc3BlY2lm
aWMgZm9yIHNvbWV0aGluZyBsaWtlIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHB1cnBvc2VzKS4g
CisKKyAgICAgICAgU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIGFkZCBtaXNzaW5nIC8gcG93ZXJs
ZXNzIGNvbXBvbmVudHMgeWV0LCB0aGVyZSBpcyBubyBhY3R1YWwgYmVoYXZpb3IgY2hhbmdlLCBi
dXQKKyAgICAgICAgdGhpcyBsYXlzIHRoZSBmb3VuZGF0aW9uIGZvciBhZGRpbmcgdGhhdCBpbiBh
IGZvbGxvdyB1cC4KKworICAgICAgICBBcyB0aGlzIGNoYW5nZSB3YXMgYWxyZWFkeSB0b3VjaGlu
ZyBtb3N0IHVzZXMgb2YgdGhlIHRvU1JHQkFMb3NzeTw+IGZ1bmN0aW9uIG9uIENvbG9yLCBJIGFs
c28gdG9vayB0aGUKKyAgICAgICAgb3BlcnR1bml0eSB0byByZXBsYWNlIGFsbCBpdHMgdXNlcyB3
aXRoIHRoZSBnZW5lcmljIHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2
ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjp1bnJlc29sdmVkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6cmVzb2x2ZUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
bHZlZENvbG9yVHlwZTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2
ZWRDb2xvclR5cGU6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2
ZWRDb2xvclR5cGU6OlJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29s
dmVkQ29sb3JUeXBlOjpyZXNvbHZlKToKKyAgICAgICAgKFdlYkNvcmU6OlVucmVzb2x2ZWRDb2xv
clR5cGU6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENv
bG9yVHlwZTo6VW5yZXNvbHZlZENvbG9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjphc0NvbG9y
Q29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAgICAgICBBZGRzIFJlc29s
dmVkQ29sb3JUeXBlIGFuZCBVbnJlc29sdmVkQ29sb3JUeXBlIGdlbmVyaWMgdHlwZXMuIFRoZXkg
Ym90aCBpbmhlcml0IGZyb20KKyAgICAgICAgdGhlIGhlbHBlciB0eXBlIEV4cG9zZWRDb2xvclR5
cGUgd2hpY2ggaXMgc3BlY2lhbGl6ZWQgZm9yIGVhY2ggY29sb3IgbW9kZWwgYW5kIGRvZXMKKyAg
ICAgICAgdGhlIHdvcmsgb2YgZXhwb3NpbmcgdGhlIGNvbXBvbmVudHMgdmlhIHB1YmxpYyAndXNp
bmcgQ29sb3JUeXBlOjpjb21wb25lbnROYW1lJy4gVGhlc2UKKyAgICAgICAgdHlwZXMgYWxzbyBo
YXZlIG92ZXJyaWRlcyBvZiB0aGUgbmV3IHJlc29sdmVkKCkvdW5yZXNvbHZlZCgpIG1lbWJlciBm
dW5jdGlvbnMgb24gY29sb3IKKyAgICAgICAgdHlwZXMgKHdlbGwsIG9ubHkgdW5yZXNvbHZlZCgp
IGZvciBVbnJlc29sdmVkQ29sb3JUeXBlKSB0byBhbGxvdyBnZW5lcmljIGNvZGUgdG8gbm90Cisg
ICAgICAgIGNhcmUgYWJvdXQgd2hldGhlciBpdCBhbHJlYWR5IGhhcyByZXNvbHZlZCBvciB1bnJl
c29sdmVkIGNvbG9yIHR5cGUsIGFuZCBqdXN0IHVzZSB0aGUKKyAgICAgICAgYWNjZXNzb3IgaXQg
d2FudHMgd2l0aG91dCB3b3JyeWluZyBhYm91dCBkdXBsaWNhdGVkIHJlc29sdXRpb24uCisgICAg
ICAgIAorICAgICAgICBTaW5jZSBhc0NvbG9yQ29tcG9uZW50cygpIGNhbiBvbmx5IGJlIGNhbGxl
ZCB3aXRoIGV4cG9zZWQgY29sb3IgdHlwZXMsIHRob3NlIGZ1bmN0aW9ucworICAgICAgICBoYXZl
IGJlZW4gbW92ZWQgaGVyZSBmcm9tIENvbG9yVHlwZXMuaCB0byBtYWtlIHRoZWlyIHJlbGF0aW9u
c2hpcCBtb3JlIGNsZWFyLiBXZSBhbHNvCisgICAgICAgIHJlZHVjZWQgdGhlIG51bWJlciBvZiB0
aGVzZSBvdmVybG9hZHMgYXMgd2Ugbm93IGp1c3QgaGF2ZSBvbmUgcGVyIGNvbG9yIG1vZGVsICh3
ZSBwcmV2aW91c2x5CisgICAgICAgIGhhZCBvbmUgcGVyIGNvbG9yIHR5cGUpLgorCisgICAgICAg
IEFsc28gdG9vayB0aGUgb3BlcnR1bml0eSB0byBtZXJnZSBFeHRlbmRlZFJHQk1vZGVsIGFuZCBS
R0JNb2RlbCBpbnRvIGEgc2luZ2xlIHR5cGUKKyAgICAgICAgcGFyYW1ldGVyaXplZCBieSBhbiBS
R0JCb3VuZGVkbmVzcyBlbnVtLiBUaGlzIGFsbG93ZWQgZmV3ZXIgRXhwb3NlZENvbG9yVHlwZSBz
cGVjaWFsaXphdGlvbnMKKyAgICAgICAgYW5kIGFzQ29sb3JDb21wb25lbnRzKCkgb3ZlcmxvYWRz
IChhbmQgdG8gcmVtb3ZlIHNvbWUgdXNlcyBvZiBVc2VzRXh0ZW5kZWRSR0JNb2RlbDw+KS4KKwor
ICAgICAgICBPbmUgdW5mb3J0dW5hdGUgc2lkZSBlZmZlY3Qgb2YgdGhlIG1vcmUgY29tcGxleCB0
eXBlIGhpZXJhcmNoeSBpcyB0aGF0IHdlIG5vIGxvbmdlciBnZXQKKyAgICAgICAgZGVzdHJ1Y3R1
cmluZyBmb3IgZnJlZSwgc28gdG8gYWRkIHRoYXQgYmFjaywgYSBnZW5lcmljIGdldDw+IG92ZXJs
b2FkIGlzIGFkZGVkIGFzIHdlbGwKKyAgICAgICAgYXMgdGhlIHJlcXVpcmVkIHN0ZDo6dHVwbGVf
c2l6ZS9zdGQ6OnR1cGxlX2VsZW1lbnQgc3BlY2lhbGl6YXRpb25zIG9mIFJlc29sdmVkQ29sb3JU
eXBlCisgICAgICAgIGFuZCBVbnJlc29sdmVkQ29sb3JUeXBlICh0aGUgbW9zdCBkZXJpdmVkIGNs
YXNzIG11c3QgYmUgdXNlZCBmb3Igc3BlY2lhbGl6YXRpb25zLCBzbworICAgICAgICBhIHNpbmds
ZSBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0aW9uIHdhcyBub3QgcG9zc2libGUpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUZyb21Db21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nRXhjZXB0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6YXNzZXJ0SW5SYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcldpdGhBbHBoYUhlbHBlcjo6Y29sb3JXaXRoQWxwaGFCeXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
UkdCQVR5cGU6OnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkFUeXBlOjp1
bnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjo6cmVzb2x2ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGFiOjp1bnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxDSEE6OnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxDSEE6OnVu
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6T0tMYWI6OnJlc29sdmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9LTGFiOjp1bnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok9LTENIQTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6T0tM
Q0hBOjp1bnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhTTEE6OnJlc29sdmVk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhTTEE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SFdCQTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFdCQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpYWVpBOjpyZXNvbHZl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpYWVpBOjp1bnJlc29sdmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhY2tlZENvbG9yOjpSR0JBOjpSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhY2tlZENvbG9yOjpBUkdCOjpBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgTWFrZXMgdGhlIGNvbXBvbmVudCBtZW1lYmVy
cyBvZiBlYWNoIGNvbG9yIHR5cGUgcHJvdGVjdGVkLCBzbyB0aGF0IG9ubHkKKyAgICAgICAgdGhl
IFJlc29sdmVkQ29sb3JUeXBlIGFuZCBVbnJlc29sdmVkQ29sb3JUeXBlIGRlcml2ZWQgdHlwZXMg
Y2FuIGFjY2VzcworICAgICAgICBhbmQgcmUtZXhwb3NlIHRoZW0uIFRvIGFjY2VzcyB0aG9zZSwg
cmVzb2x2ZWQoKSBhbmQgdW5yZXNvbHZlZCgpIG1lbWJlcgorICAgICAgICBmdW5jdGlvbnMgd2Vy
ZSBhZGRlZCB0byBtYWtlIGl0IGVhc3ksIGJ1dCBleHBsaWNpdC4KKworICAgICAgICBBbHNvIGFk
ZGVkIGEgbmV3IHR5cGUgdHJhaXQgaGVscGVyLCBDYW5vbmljYWxDb2xvclR5cGU8PiB3aGljaCB3
aWxsIHJldHVybgorICAgICAgICB0aGUgYmFzZS9jYW5vbmljYWwgbmFtZSBmb3IgYSBjb2xvciB0
eXBlLiBGb3IgZXhhbXBsZToKKyAgICAgICAgCisgICAgICAgICAgICAgQ2Fub25pY2FsQ29sb3JU
eXBlPFNSR0JBPGZsb2F0Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAgICAgICAgQ2Fub25pY2Fs
Q29sb3JUeXBlPFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPGZsb2F0Pj4+ID09IFNSR0JBPGZsb2F0
PgorICAgICAgICAgICAgIENhbm9uaWNhbENvbG9yVHlwZTxVbnJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPGZsb2F0Pj4+ID09IFNSR0JBPGZsb2F0PgorCisgICAgICAgIFRoaXMgbWFrZXMgaXQgZWFz
aWVyIGZvciBnZW5lcmljIGNvZGUgdG8gbm90IGNhcmUgd2hldGhlciBpdCBpcyBwYXJhbXRlcml6
ZWQgdXNlZAorICAgICAgICB0aGUgYmFzZS9jYW5vbmljYWwgdHlwZSBvciBvbmUgb2YgdGhlIGRl
cml2ZWQgb25lcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaDoK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRh
cmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5lc3MgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRS
ZXNvbHZlZENvbG9yQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
dG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1Zpc2li
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhQnl0ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFBc0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphc0lubGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
dG9TUkdCQUxvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgQWRkIHJlc29sdXRpb24gd2hl
cmUgbmVlZGVkLCBidXQga2VlcCB0aGUgY29tcG9uZW50cyB1bnJlc29sdmVkIGZvciBzdG9yYWdl
IGluIAorICAgICAgICB0aGUgT3V0T2ZMaW5lQ29tcG9uZW50cyBvYmplY3QuIEFsc28gdXBkYXRl
cyBzb21lIG5hbWVzIG9mIGZ1bmN0aW9ucyB0aGF0IHJldHVybgorICAgICAgICBDb2xvckNvbXBv
bmVudHMgdGhhdCB0aGV5IGV4cGxpY2l0bHkgcmV0dXJuIHJlc29sdmVkIGNvbG9yIGNvbXBvbmVu
dHMuIElmIG5lZWQKKyAgICAgICAgdmFyaWFudHMgdGhhdCByZXR1cm4gdW5yZXNvbHZlZCBjb21w
b25lbnRzLCB3ZSBjYW4gYWRkIHRoZW0gYXMgbmVjZXNzYXJ5IHNpbmNlCisgICAgICAgIHRoZSBz
dG9yYWdlIHJlbWFpbnMgdW5yZXNvbHZlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQ29tcG9uZW50cy5oOgorICAgICAgICBBZGQgb3BlcmF0b3IvPShUKSB0byBtYWtlIHNv
bWUgY29kZSBpbiBQYWdlQ29sb3JTYW1wbGVyLmNwcCBtdWNoIHNpbXBsZXIuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAg
ICAgICBTd2l0Y2ggdG8gdG9Db2xvclR5cGVMb3NzeS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhD
b3JlT2JqZWN0Ojp2YWx1ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3Np
YmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6dGV4dEF0dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdW
YWx1ZV0pOgorICAgICAgICAqIGNzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oOgorICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZVJHQlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJl
bGF0aXZlSFNMUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZl
TENIUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlQ29sb3JGdW5jdGlv
bkZvclhZWlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6bWl4Q29sb3JDb21wb25lbnRzVXNpbmdDb2xvckludGVycG9sYXRpb25NZXRob2QpOgorICAg
ICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kU291
cmNlT3Zlcik6CisgICAgICAgIChXZWJDb3JlOjpibGVuZFdpdGhXaGl0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BvbGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9SZWN0YW5ndWxhckZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlSFNM
SHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkhX
QkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpMYWI8ZmxvYXQ+Pjo6Y29u
dmVydCk6CisgICAgICAgIChXZWJDb3JlOjpXaGl0ZVBvaW50OjpENTA+Pjo6Y29udmVydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPS0xhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OldoaXRlUG9pbnQ6OkQ2NT4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZl
cnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRD
b2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29udmVyc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJzaW9uOjpoYW5k
bGVUb0Zsb2F0Q29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246
OmhhbmRsZVRvQnl0ZUNvbnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJz
aW9uOjp0b0xpbmVhckVuY29kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJzaW9u
Ojp0b0dhbW1hRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRv
RXh0ZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJzaW9uOjp0b0JvdW5kZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJzaW9uOjpoYW5kbGVNYXRyaXhDb252ZXJz
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9sYXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1bWluYW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6
cmVsYXRpdmVMdW1pbmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6dW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRGbG9vcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckNTUyk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emF0aW9uRm9ySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6aW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEpOgorICAgICAgICAo
V2ViQ29yZTo6aXNCbGFjayk6CisgICAgICAgIChXZWJDb3JlOjppc1doaXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW06
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZyb21WYWx1
ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2V0U291cmNlUkdCQUZyb21Db2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRDb2xvclN0b3BSR0JB
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENvcm5lckNvbG9yUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
VG9DR0NvbXBhdGlibGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNHQ29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VHcmFkaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6OlNoYWRpbmc6OnNo
YWRpbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudFJlbmRlcmVyQ0c6Om1h
a2VTaGFkaW5nIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2Zp
bHRlcnMvRkVMaWdodGluZ05FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlOZW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRy
YW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0Zp
bHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50
c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JH
dGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpwcmVwYXJlRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6Y2xlYXJDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1Jf
RiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1Jf
NEYgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpjcmVhdGVCcnVzaCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xvcldpdGhHbG9i
YWxBbHBoYSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpkYXRlUGxhY2Vob2xkZXJUZXh0Q29sb3IgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uOjphbmltYXRlKToKKyAgICAgICAgQWRkIGNh
bGxzIHRvIHJlc29sdmVkKCkgdG8gYWNjZXNzIGNvbXBvbmVudHMuIFNvbWUgb2YgdGhlc2UgKHBh
cnRpY3VsYXJsbHkgaW4gc2VyaWFsaXphdGlvbiwgY29udmVyc2lvbiBhbmQKKyAgICAgICAgaW50
ZXJwb2xhdGlvbiByZWxhdGVkIGNhbGxzKSB3aWxsIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIHVz
ZSB1bnJlc29sdmVkKCkgZXZlbnR1YWxseSwgYnV0IGZpcnN0IHRoZXkgd2lsbAorICAgICAgICBu
ZWVkIHRvIGhhbmRsZSB0aGUgTmFOIGNhc2UgcHJvcGVybHkuCisKKyAgICAgICAgKiBwYWdlL1Bh
Z2VDb2xvclNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JEaWZmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmF2ZXJhZ2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3ApOgorICAgICAgICBSZXdvcmsgY29kZSBhIGJpdCB0byB1
c2UgbW9kZXJuIFdlYktpdCBpZGlvbXMgKHN0ZDo6YXJyYXksIFNwYW4sIENvbG9yQ29tcG9uZW50
cykuCisKIDIwMjEtMTItMjkgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtMRkNdW0lGQ10gQ29sbGFwc2VkIHRyYWlsaW5nIHdoaXRlc3BhY2UgbWF5IGludHJvZHVj
ZSBzdHJheSBpbmxpbmUgYm94CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NzcsNyArMTk3Nyw3IEBAIFNSR0JBPHVpbnQ4X3Q+
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlKCkgYwogICAgIGlmICghaXM8SFRN
TElucHV0RWxlbWVudD4obm9kZSgpKSkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkp
LnZhbHVlQXNDb2xvcigpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdElu
dGVyZmFjZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4
NSw3ICsxNTg1LDcgQEAgaW5saW5lIEFYQ29yZU9iamVjdDo6QVhWYWx1ZSBBWENvcmVPYmplY3Q6
OnZhbHVlKCkKICAgICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoKTsKIAogICAgIGlmIChpc0NvbG9y
V2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+
Pihjb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydENvbG9yPFNSR0JB
PGZsb2F0Pj4oY29sb3JWYWx1ZSgpKS5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4gbWFrZVN0
cmluZygicmdiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5y
ZWQsIDYsIEtlZXBUcmFpbGluZ1plcm9zKSwgIiAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4
ZWRQcmVjaXNpb24oY29sb3IuZ3JlZW4sIDYsIEtlZXBUcmFpbGluZ1plcm9zKSwgIiAiLCBTdHJp
bmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNpb24oY29sb3IuYmx1ZSwgNiwgS2VlcFRyYWls
aW5nWmVyb3MpLCAiIDEiKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsMTQgKzkyLDE0IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0
ZVNldEZvckFjY2Vzc2liaWxpdAogCiAgICAgQ29sb3IgYmdDb2xvciA9IHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmIChiZ0Nv
bG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAg
IGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAg
ICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJp
YnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAg
ICB9CiAKICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICBidWZmZXIucmVzZXQoZ19zdHJkdXBfcHJp
bnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRy
aWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlPYmplY3RUZXh0QXRzcGkuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MjQsMTMgKzgyNCwxMyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OlRleHRBdHRyaWJ1dGVzIEFjY2Vzc2liaWxpdHkKIAogICAgICAgICAgICAgYXV0byBiZ0Nv
bG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICAgICAgICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSAmJiBiZ0NvbG9yLmlzVmlz
aWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci4udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgp
OwogICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJiZy1jb2xvciJfcywgbWFr
ZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBhdXRvIGZnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcik7CiAgICAgICAgICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkgJiYgZmdDb2xvci5pc1Zp
c2libGUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGZnQ29sb3IuLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKICAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgiZmctY29sb3IiX3MsIG1h
a2VTdHJpbmcociwgJywnLCBnLCAnLCcsIGIpKTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3UKICAgICAgICAg
cmV0dXJuIG5pbDsKIAogICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwo
KSkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKS5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNv
bG9yLmJsdWVdOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsNyArODAxLDcg
QEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sIHZh
CiAKIFNSR0JBPHVpbnQ4X3Q+IEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFsdWUoKSBjb25zdAog
ewotICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByZXR1cm4gY29sb3JBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKTsKIH0KIAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3Np
YmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Ig
ZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlCiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFs
dWUmIGJsdWUoKSB7IHJldHVybiBtX2JsdWU7IH0KICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZSYgYWxwaGEoKSB7IHJldHVybiBtX2FscGhhOyB9CiAKLSAgICBTUkdCQTx1aW50OF90
PiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBSZXNvbHZlZENvbG9yVHlw
ZTxTUkdCQTx1aW50OF90Pj4gY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXBy
ZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0
aW9uJiBvd25lciwgTnVtYmVyVHlwZSBudW1iZXIpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIERl
cHJlY2F0ZWRDU1NPTVJHQkNvbG9yIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZQogICAgIH0KIAog
ICAgIERlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBj
b25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogbV9jb2xvcihjb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKSkKKyAgICAgICAgOiBtX2NvbG9yKGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKSkKICAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVy
KG93bmVyLCBtX2NvbG9yLnJlZCkpCiAgICAgICAgICwgbV9ncmVlbihjcmVhdGVXcmFwcGVyKG93
bmVyLCBtX2NvbG9yLmdyZWVuKSkKICAgICAgICAgLCBtX2JsdWUoY3JlYXRlV3JhcHBlcihvd25l
ciwgbV9jb2xvci5ibHVlKSkKQEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlCiAgICAgewogICAgIH0KIAotICAgIFNS
R0JBPHVpbnQ4X3Q+IG1fY29sb3I7CisgICAgUmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8dWludDhf
dD4+IG1fY29sb3I7CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX3Jl
ZDsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fZ3JlZW47CiAgICAg
UmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzEsNyArMTUzMSw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tl
bgogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgYXV0byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc1NSR0IgPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAg
Q1NTQ2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZVIsIENT
U1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc1NSR0IucmVkICogMTAwLjAg
fSwKQEAgLTE2NTksNyArMTY1OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzSFNMID0gb3JpZ2lu
Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNv
bG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJl
c29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAg
ICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIU0wuaHVl
IH0sCkBAIC0xNzczLDcgKzE3NzMsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhXQlBh
cmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAgICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hXQiA9IG9yaWdp
bkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFdCQTxmbG9hdD4+KCk7CisgICAgYXV0byBvcmlnaW5D
b2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgQ1NTQ2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAg
ICAgeyBDU1NWYWx1ZUgsIENTU1VuaXRUeXBlOjpDU1NfREVHLCBvcmlnaW5Db2xvckFzSFdCLmh1
ZSB9LApAQCAtMTg0OSw3ICsxODQ5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMYWJQ
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMYWIgPSBvcmln
aW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNv
bG9yQXNMYWIgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNv
bHZlZCgpOwogCiAgICAgQ1NTQ2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAg
eyBDU1NWYWx1ZUwsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xh
Yi5saWdodG5lc3MgfSwKQEAgLTE5MjksNyArMTkyOSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJl
bGF0aXZlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAgIGlmICghb3JpZ2luQ29sb3Iu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFz
TENIID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzTENIID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5
cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7
CiAgICAgICAgIHsgQ1NTVmFsdWVMLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdp
bkNvbG9yQXNMQ0gubGlnaHRuZXNzIH0sCkBAIC0yMDA3LDcgKzIwMDcsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXYKIAogICAgIGNvbnN1
bWVJZGVudFJhdyhhcmdzKTsKIAotICAgIGF1dG8gb3JpZ2luQ29sb3JBc0NvbG9yVHlwZSA9IG9y
aWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2lu
Q29sb3JBc0NvbG9yVHlwZSA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBl
PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewog
ICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5D
b2xvckFzQ29sb3JUeXBlLnJlZCAqIDEwMC4wIH0sCkBAIC0yMDY4LDcgKzIwNjgsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXYKIAogICAg
IGNvbnN1bWVJZGVudFJhdyhhcmdzKTsKIAotICAgIGF1dG8gb3JpZ2luQ29sb3JBc1hZWiA9IG9y
aWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2lu
Q29sb3JBc1hZWiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJl
c29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAg
ICB7IENTU1ZhbHVlWCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIsIG9yaWdpbkNvbG9yQXNYWVou
eCB9LApAQCAtMjQ0OSw3ICsyNDQ5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJwb2xhdGlv
bk1ldGhvZD4gc3RhdGljIENvbG9yIG1pCiAgICAgYXV0byBjb252ZXJ0ZWRDb2xvcjIgPSBjb2xv
cjIudGVtcGxhdGUgdG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCk7CiAKICAgICAvLyAyLiBD
b2xvcnMgYXJlIHRoZW4gaW50ZXJwb2xhdGVkIGluIHRoZSBzcGVjaWZpZWQgY29sb3Igc3BhY2Us
IGFzIGRlc2NyaWJlZCBpbiBDU1MgQ29sb3IgNCDCp+KArzEzIEludGVycG9sYXRpb24uIFsuLi5d
Ci0gICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApOworICAgIGF1dG8gbWl4ZWRDb2xvciA9IGludGVy
cG9sYXRlQ29sb3JDb21wb25lbnRzPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQ+KGludGVycG9sYXRpb25NZXRob2QsIGNvbnZlcnRlZENvbG9yMSwgbWl4UGVyY2VudGFnZXMu
cDEgLyAxMDAuMCwgY29udmVydGVkQ29sb3IyLCBtaXhQZXJjZW50YWdlcy5wMiAvIDEwMC4wKS5y
ZXNvbHZlZCgpOwogCiAgICAgLy8gMy4gSWYgYW4gYWxwaGEgbXVsdGlwbGllciB3YXMgcHJvZHVj
ZWQgZHVyaW5nIHBlcmNlbnRhZ2Ugbm9ybWFsaXphdGlvbiwgdGhlIGFscGhhIGNvbXBvbmVudCBv
ZiB0aGUgaW50ZXJwb2xhdGVkIHJlc3VsdAogICAgIC8vICAgIGlzIG11bHRpcGxpZWQgYnkgdGhl
IGFscGhhIG11bHRpcGxpZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwNSw3ICs2
MDUsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShjb25z
dCBTaW0KICAgICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4dENvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFuIEhTTEE8Zmxv
YXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBjbGFtcGluZyB0
byBzUkdCIGdhbXV0LCB3aGljaCBpcyB3aGF0IEhTTEEgZG9lcy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+
PigpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNvbG9yIHRv
IHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJr
IGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUsMjcgKzEzNSwyNSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxMYWI8Zmxv
YXQ+PiBzYW1wbGVDb2xvcihEb2N1bWVudCYKICAgICByZXR1cm4gY29udmVydENvbG9yPExhYjxm
bG9hdD4+KFNSR0JBPHVpbnQ4X3Q+IHsgc25hcHNob3REYXRhWzJdLCBzbmFwc2hvdERhdGFbMV0s
IHNuYXBzaG90RGF0YVswXSwgc25hcHNob3REYXRhWzNdIH0pOwogfQogCi1zdGF0aWMgZG91Ymxl
IGNvbG9yRGlmZmVyZW5jZShMYWI8ZmxvYXQ+JiBsaHMsIExhYjxmbG9hdD4mIHJocykKK3N0YXRp
YyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKGNvbnN0IExhYjxmbG9hdD4mIGxocywgY29uc3QgTGFi
PGZsb2F0PiYgcmhzKQogewotICAgIHJldHVybiBzcXJ0KHBvdyhyaHMubGlnaHRuZXNzIC0gbGhz
LmxpZ2h0bmVzcywgMikgKyBwb3cocmhzLmEgLSBsaHMuYSwgMikgKyBwb3cocmhzLmIgLSBsaHMu
YiwgMikpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgYSBmb3JtYWwgY29sb3IgZGlm
ZmVyZW5jZSBtZXRyaWMgKGRlbHRhRTIwMDAsIGRlbHRhRU9LKSBhcyB0aGlzIGN1cnJlbnQgb25l
IGlzIG5vdCBwZXJjZXB0dWFsbHkgdW5pZm9ybSAoc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL0NvbG9yX2RpZmZlcmVuY2UpLgorCisgICAgYXV0byByZXNvbHZlZExlZnRIYW5kU2lk
ZSA9IGxocy5yZXNvbHZlZCgpOworICAgIGF1dG8gcmVzb2x2ZWRSaWdodEhhbmRTaWRlID0gcmhz
LnJlc29sdmVkKCk7CisKKyAgICByZXR1cm4gc3FydChwb3cocmVzb2x2ZWRSaWdodEhhbmRTaWRl
LmxpZ2h0bmVzcyAtIHJlc29sdmVkTGVmdEhhbmRTaWRlLmxpZ2h0bmVzcywgMikgKyBwb3cocmVz
b2x2ZWRSaWdodEhhbmRTaWRlLmEgLSByZXNvbHZlZExlZnRIYW5kU2lkZS5hLCAyKSArIHBvdyhy
ZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYiAtIHJlc29sdmVkTGVmdEhhbmRTaWRlLmIsIDIpKTsKIH0K
IAotc3RhdGljIExhYjxmbG9hdD4gYXZlcmFnZUNvbG9yKExhYjxmbG9hdD4gY29sb3JzW10sIHNp
emVfdCBjb3VudCkKK3N0YXRpYyBMYWI8ZmxvYXQ+IGF2ZXJhZ2VDb2xvcihTcGFuPExhYjxmbG9h
dD4+IGNvbG9ycykKIHsKLSAgICBmbG9hdCB0b3RhbExpZ2h0bmVzcyA9IDA7Ci0gICAgZmxvYXQg
dG90YWxBID0gMDsKLSAgICBmbG9hdCB0b3RhbEIgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB0b3RhbExpZ2h0bmVzcyArPSBjb2xvcnNbaV0u
bGlnaHRuZXNzOwotICAgICAgICB0b3RhbEEgKz0gY29sb3JzW2ldLmE7Ci0gICAgICAgIHRvdGFs
QiArPSBjb2xvcnNbaV0uYjsKLSAgICB9Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgdG90YWxMaWdo
dG5lc3MgLyBjb3VudCwKLSAgICAgICAgdG90YWxBIC8gY291bnQsCi0gICAgICAgIHRvdGFsQiAv
IGNvdW50LAotICAgICAgICAxLAotICAgIH07CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCAz
PiB0b3RhbHMgeyAwLjBmLCAwLjBmLCAwLjBmIH07CisgICAgZm9yIChhdXRvIGNvbG9yIDogY29s
b3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQo
KSkuc3Vic2V0PDAsIDM+KCk7CisgICAgCisgICAgdG90YWxzIC89IGNvbG9ycy5zaXplKCk7CisK
KyAgICByZXR1cm4geyB0b3RhbHNbMF0sIHRvdGFsc1sxXSwgdG90YWxzWzJdLCAxLjBmIH07CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IFBhZ2VDb2xvclNhbXBsZXI6OnNhbXBsZVRvcChQYWdl
JiBwYWdlKQpAQCAtMTg4LDExICsxODYsMTEgQEAgc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNv
bG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBhZ2UmCiAgICAgLy8gRGVjcmVhc2UgdGhlIHdpZHRoIGJ5
IG9uZSBwaXhlbCBzbyB0aGF0IHRoZSBsYXN0IHNhbXBsZSBpcyB3aXRoaW4gYm91bmRzIGFuZCBu
b3Qgb2ZmLWJ5LW9uZS4KICAgICBhdXRvIGZyYW1lV2lkdGggPSBmcmFtZVZpZXctPmNvbnRlbnRz
V2lkdGgoKSAtIDE7CiAKLSAgICBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGF1dG8gbnVtU2FtcGxlcyA9IDU7CiAgICAgc2l6ZV90IG5vbk1hdGNo
aW5nQ29sb3JJbmRleCA9IG51bVNhbXBsZXM7CiAKLSAgICBMYWI8ZmxvYXQ+IHNhbXBsZXNbbnVt
U2FtcGxlc107Ci0gICAgZG91YmxlIGRpZmZlcmVuY2VzW251bVNhbXBsZXMgLSAxXTsKKyAgICBz
dGQ6OmFycmF5PExhYjxmbG9hdD4sIG51bVNhbXBsZXM+IHNhbXBsZXM7CisgICAgc3RkOjphcnJh
eTxkb3VibGUsIG51bVNhbXBsZXMgLSAxPiBkaWZmZXJlbmNlczsKIAogICAgIGF1dG8gc2hvdWxk
U3RvcEFmdGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IgPSBbJl0gKHNpemVfdCBpKSAtPiBib29s
IHsKICAgICAgICAgLy8gQmFpbCBpZiB0aGUgbm9uLW1hdGNoaW5nIGNvbG9yIGlzIG5vdCB0aGUg
Zmlyc3Qgb3IgbGFzdCBzYW1wbGUsIG9yIHRoZXJlIGFscmVhZHkgaXMgYW4gbm9uLW1hdGNoaW5n
IGNvbG9yLgpAQCAtMjY2LDE4ICsyNjQsMTIgQEAgc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNv
bG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBhZ2UmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRv
IHNhbXBsZXNUb0F2ZXJhZ2UgPSBzYW1wbGVzOwotICAgIGF1dG8gdmFsaWRTYW1wbGVDb3VudCA9
IG51bVNhbXBsZXM7Ci0gICAgaWYgKCFub25NYXRjaGluZ0NvbG9ySW5kZXgpIHsKLSAgICAgICAg
Ly8gU2tpcCB0aGUgZmlyc3Qgc2FtcGxlIGJ5IG1vdmluZyB0aGUgcG9pbnRlciB0aGF0IGluZGlj
YXRlcyB3aGVyZSB0aGUgc2FtcGxlIGFycmF5Ci0gICAgICAgIC8vIHN0YXJ0cyBhbmQgZGVjcmVh
c2luZyB0aGUgY291bnQgb2Ygc2FtcGxlcyB0byBhdmVyYWdlLgotICAgICAgICArK3NhbXBsZXNU
b0F2ZXJhZ2U7Ci0gICAgICAgIC0tdmFsaWRTYW1wbGVDb3VudDsKLSAgICB9IGVsc2UgaWYgKG5v
bk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkgewotICAgICAgICAvLyBTa2lw
IHRoZSBsYXN0IHNhbXBsZSBieSBkZWNyZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2
ZXJhZ2UuCi0gICAgICAgIC0tdmFsaWRTYW1wbGVDb3VudDsKLSAgICB9Ci0gICAgcmV0dXJuIENv
bG9yKGF2ZXJhZ2VDb2xvcihzYW1wbGVzVG9BdmVyYWdlLCB2YWxpZFNhbXBsZUNvdW50KSk7Cisg
ICAgaWYgKCFub25NYXRjaGluZ0NvbG9ySW5kZXgpCisgICAgICAgIHJldHVybiBhdmVyYWdlQ29s
b3IoU3BhbiB7IHNhbXBsZXMgfS5zdWJzcGFuPDEsIG51bVNhbXBsZXMgLSAxPigpKTsKKyAgICBl
bHNlIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggPT0gbnVtU2FtcGxlcyAtIDEpCisgICAgICAg
IHJldHVybiBhdmVyYWdlQ29sb3IoU3BhbiB7IHNhbXBsZXMgfS5zdWJzcGFuPDAsIG51bVNhbXBs
ZXMgLSAxPigpKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBhdmVyYWdlQ29sb3IoU3BhbiB7
IHNhbXBsZXMgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODQsNyArODQsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHRlbmVkKCkgY29uc3QKICAgICBp
ZiAoaXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IGJsYWNrKQogICAgICAgICByZXR1cm4gbGln
aHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsK
IAogICAgIGlmICh2ID09IDAuMGYpCkBAIC0xMDEsNyArMTAxLDcgQEAgQ29sb3IgQ29sb3I6OmRh
cmtlbmVkKCkgY29uc3QKICAgICBpZiAoaXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IHdoaXRl
KQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBmbG9hdCB2
ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1h
eCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwpAQCAtMTEyLDcgKzExMiw3IEBAIENvbG9yIENvbG9y
OjpkYXJrZW5lZCgpIGNvbnN0CiBkb3VibGUgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFuY2UuCi0gICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1
cm4gMC41ICogKG1heCArIG1pbik7CiB9CkBAIC0xNjIsMjMgKzE2MiwyMyBAQCBDb2xvciBDb2xv
cjo6c2VtYW50aWNDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIHsgYXNJbmxpbmUoKSwgRmxhZ3M6
OlNlbWFudGljIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29s
b3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkgY29u
c3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBv
bmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBjb25zdAogewot
ICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlucHV0Q29sb3JT
cGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBbaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50
cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IENvbG9yOjp0b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CitDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IENvbG9yOjp0b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5Db2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29u
c3QKIHsKLSAgICBhdXRvIFtpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gY29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1
dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOworICAgIGF1dG8gW2lu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNv
bXBvbmVudHMoKTsKKyAgICByZXR1cm4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMo
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKIH0KIAotc3Rk
OjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4+IENvbG9yOjpjb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CitzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JD
b21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29t
cG9uZW50cygpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVy
biB7IGNvbG9yU3BhY2UoKSwgYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgfTsKLSAgICByZXR1
cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JH
QkE8ZmxvYXQ+Pihhc0lubGluZSgpKSkgfTsKKyAgICAgICAgcmV0dXJuIHsgY29sb3JTcGFjZSgp
LCByZXNvbHZlQ29sb3JDb21wb25lbnRzKGFzT3V0T2ZMaW5lKCkucmVzb2x2ZWRDb21wb25lbnRz
KCkpIH07CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oYXNJbmxpbmUoKSkucmVzb2x2ZWQoKSkgfTsKIH0K
IAogYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDEwICsxMDEsMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVibGljKQogCiAgICAgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3Q7CiAKLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3Qg
eyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSA9PSAxLjAgOiBh
c0lubGluZSgpLmFscGhhID09IDI1NTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyBy
ZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5s
aW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVy
biBpc091dE9mTGluZSgpID8gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90Pihhc091dE9mTGlu
ZSgpLmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQotICAgIGZsb2F0IGFscGhhQXNGbG9h
dCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLmFscGhhKCkg
OiBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KGFzSW5saW5lKCkuYWxwaGEpOyB9CisgICAgYm9v
bCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgp
LnJlc29sdmVkQWxwaGEoKSA9PSAxLjAgOiBhc0lubGluZSgpLnJlc29sdmVkKCkuYWxwaGEgPT0g
MjU1OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgp
ID8gYXNPdXRPZkxpbmUoKS5yZXNvbHZlZEFscGhhKCkgPiAwLjAgOiBhc0lubGluZSgpLnJlc29s
dmVkKCkuYWxwaGEgPiAwOyB9CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVy
biBpc091dE9mTGluZSgpID8gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90Pihhc091dE9mTGlu
ZSgpLnJlc29sdmVkQWxwaGEoKSkgOiBhc0lubGluZSgpLnJlc29sdmVkKCkuYWxwaGE7IH0KKyAg
ICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNP
dXRPZkxpbmUoKS5yZXNvbHZlZEFscGhhKCkgOiBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KGFz
SW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJs
ZSBsdW1pbmFuY2UoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgbGlnaHRuZXNz
KCkgY29uc3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNl
LgpAQCAtMTE1LDE2ICsxMTUsMTEgQEAgY2xhc3MgQ29sb3IgeyAocHVibGljKQogICAgIC8vIG9y
IHByZWNpc2lvbiBvZiBDb2xvclR5cGUgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHVuZGVy
bHlpbmcgdHlwZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSB0
b0NvbG9yVHlwZUxvc3N5KCkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIHdpbGwgY29udmVydCB0aGUg
dW5kZXJseWluZyBjb2xvciBpbnRvIHNSR0IsIHBvdGVudGlhbGx5IGxvc3NpbHkgaWYgdGhlIGdh
bXV0Ci0gICAgLy8gb3IgcHJlY2lzaW9uIG9mIHNSR0IgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJy
ZW50IHVuZGVybHlpbmcgdHlwZS4gVGhpcyBpcyBhIGNvbnZlbmllbmNlCi0gICAgLy8gd3JhcHBl
ciBhcm91bmQgdG9Db2xvclR5cGVMb3NzeTw+KCkuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
U1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QgeyByZXR1cm4gdG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxUPj4oKTsgfQorICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENv
bG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlKSBjb25zdDsKKyAgICBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IHRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgY29uc3Q7CiAKLSAgICBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQsIDQ+IHRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNv
bnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4+
IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpIGNvbnN0OwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7Ci0KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBkYXJr
ZW5lZCgpIGNvbnN0OwogCkBAIC0xOTQsOCArMTg5LDEwIEBAIGNsYXNzIENvbG9yIHsgKHB1Ymxp
YykKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE91dE9mTGluZUNvbXBvbmVudHMo
Y29tcG9uZW50cykpOwogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX2NvbXBvbmVudHNbM107IH0KLSAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzOyB9CisgICAgICAg
IGZsb2F0IHVucmVzb2x2ZWRBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsg
fQorICAgICAgICBmbG9hdCByZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gc3RkOjppc25h
bihtX2NvbXBvbmVudHNbM10pID8gMCA6IG1fY29tcG9uZW50c1szXTsgfQorICAgICAgICBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHVucmVzb2x2ZWRDb21wb25lbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wb25lbnRzOyB9CisgICAgICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gcmVz
b2x2ZWRDb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZUNvbG9yQ29tcG9uZW50cyht
X2NvbXBvbmVudHMpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBPdXRPZkxpbmVDb21wb25l
bnRzKENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29tcG9uZW50cykKQEAgLTIyOCw3ICsyMjUs
NyBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgdm9pZCBzZXRDb2xvcihTUkdCQTx1aW50
OF90PiwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOwogICAgIHZvaWQg
c2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhSZWY8T3V0T2ZMaW5lQ29tcG9uZW50cz4mJiwgQ29sb3JT
cGFjZSwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOwogCi0gICAgU1JH
QkE8dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKKyAgICBSZXNvbHZlZENvbG9yVHlwZTxTUkdC
QTx1aW50OF90Pj4gYXNJbmxpbmUoKSBjb25zdDsKICAgICBQYWNrZWRDb2xvcjo6UkdCQSBhc1Bh
Y2tlZElubGluZSgpIGNvbnN0OwogCiAgICAgY29uc3QgT3V0T2ZMaW5lQ29tcG9uZW50cyYgYXNP
dXRPZkxpbmUoKSBjb25zdDsKQEAgLTI5Miw3ICsyODksNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKIGlubGluZSBib29sIG91dE9mTGlu
ZUNvbXBvbmVudHNzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewogICAg
IGlmIChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKQotICAgICAgICByZXR1cm4g
YS5hc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSA9PSBiLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50
cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBi
LmZsYWdzKCk7CisgICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkudW5yZXNvbHZlZENvbXBv
bmVudHMoKSA9PSBiLmFzT3V0T2ZMaW5lKCkudW5yZXNvbHZlZENvbXBvbmVudHMoKSAmJiBhLmNv
bG9yU3BhY2UoKSA9PSBiLmNvbG9yU3BhY2UoKSAmJiBhLmZsYWdzKCkgPT0gYi5mbGFncygpOwog
CiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5lKCkpOwogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTMwMyw3ICszMDAsNyBAQCBpbmxpbmUgYm9vbCBvdXRPZkxpbmVDb21w
b25lbnRzc0VxdWFsSWdub3JpbmdTZW1hbnRpY0MKICAgICBpZiAoYS5pc091dE9mTGluZSgpICYm
IGIuaXNPdXRPZkxpbmUoKSkgewogICAgICAgICBhdXRvIGFGbGFncyA9IGEuZmxhZ3MoKSAtIENv
bG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljOwogICAgICAgICBhdXRvIGJGbGFn
cyA9IGIuZmxhZ3MoKSAtIENvbG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljOwot
ICAgICAgICByZXR1cm4gYS5hc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSA9PSBiLmFzT3V0T2ZM
aW5lKCkuY29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYm
IGFGbGFncyA9PSBiRmxhZ3M7CisgICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkudW5yZXNv
bHZlZENvbXBvbmVudHMoKSA9PSBiLmFzT3V0T2ZMaW5lKCkudW5yZXNvbHZlZENvbXBvbmVudHMo
KSAmJiBhLmNvbG9yU3BhY2UoKSA9PSBiLmNvbG9yU3BhY2UoKSAmJiBhRmxhZ3MgPT0gYkZsYWdz
OwogICAgIH0KIAogICAgIEFTU0VSVChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9mTGluZSgp
KTsKQEAgLTMzNCwxNCArMzMxLDE0IEBAIGlubGluZSBDb2xvcjo6Q29sb3Ioc3RkOjpvcHRpb25h
bDxTUkdCQTx1aW50OF90Pj4gY29sbwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29sb3JUeXBlV2l0aENvbXBvbmVudFR5cGU8Q29sb3JU
eXBlLCBmbG9hdD4+Kj4KIGlubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgQ29sb3JUeXBlJiBjb2xv
ciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKIHsKLSAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRz
KE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpLCBD
b2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7
CisgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IudW5yZXNvbHZlZCgpKSksIENvbG9yU3BhY2VGb3I8Q29s
b3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29sb3JUeXBl
V2l0aENvbXBvbmVudFR5cGU8Q29sb3JUeXBlLCBmbG9hdD4+Kj4KIGlubGluZSBDb2xvcjo6Q29s
b3IoY29uc3Qgc3RkOjpvcHRpb25hbDxDb2xvclR5cGU+JiBjb2xvciwgT3B0aW9uU2V0PEZsYWdz
PiBmbGFncykKIHsKICAgICBpZiAoY29sb3IpCi0gICAgICAgIHNldE91dE9mTGluZUNvbXBvbmVu
dHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKCpjb2xvcikp
LCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdz
KSk7CisgICAgICAgIHNldE91dE9mTGluZUNvbXBvbmVudHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6
Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLT51bnJlc29sdmVkKCkpKSwgQ29sb3JTcGFj
ZUZvcjxDb2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCiBp
bmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmIG91dE9mTGluZUNv
bXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykK
QEAgLTM3Myw3ICszNzAsNyBAQCBpbmxpbmUgQ29sb3I6On5Db2xvcigpCiBpbmxpbmUgdW5zaWdu
ZWQgQ29sb3I6Omhhc2goKSBjb25zdAogewogICAgIGlmIChpc091dE9mTGluZSgpKQotICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2goYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCksIGNvbG9yU3Bh
Y2UoKSwgZmxhZ3MoKS50b1JhdygpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzT3V0
T2ZMaW5lKCkudW5yZXNvbHZlZENvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBmbGFncygpLnRv
UmF3KCkpOwogICAgIHJldHVybiBjb21wdXRlSGFzaChhc1BhY2tlZElubGluZSgpLnZhbHVlLCBm
bGFncygpLnRvUmF3KCkpOwogfQogCkBAIC00MDAsNyArMzk3LDcgQEAgaW5saW5lIENvbG9yU3Bh
Y2UgQ29sb3I6OmNvbG9yU3BhY2UoKSBjb25zdAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
ZGVjbHR5cGUoYXV0bykgQ29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJiBmdW5j
dG9yKSBjb25zdAogewogICAgIGlmIChpc091dE9mTGluZSgpKQotICAgICAgICByZXR1cm4gY2Fs
bFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCksIGNvbG9yU3BhY2UoKSwg
c3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxXaXRo
Q29sb3JUeXBlKGFzT3V0T2ZMaW5lKCkudW5yZXNvbHZlZENvbXBvbmVudHMoKSwgY29sb3JTcGFj
ZSgpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgIHJldHVybiBzdGQ6Omlu
dm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzSW5saW5lKCkpOwogfQogCkBA
IC00NTgsMTAgKzQ1NSwxMCBAQCBpbmxpbmUgUmVmPENvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRz
PiBDb2xvcjo6YXNPdXRPZkwKICAgICByZXR1cm4gZGVjb2RlZE91dE9mTGluZUNvbXBvbmVudHMo
bV9jb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIFNSR0JBPHVpbnQ4X3Q+IENvbG9yOjphc0lu
bGluZSgpIGNvbnN0CitpbmxpbmUgUmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8dWludDhfdD4+IENv
bG9yOjphc0lubGluZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzSW5saW5lKCkpOwotICAgIHJl
dHVybiBhc1NSR0JBKGFzUGFja2VkSW5saW5lKCkpOworICAgIHJldHVybiBhc1NSR0JBKGFzUGFj
a2VkSW5saW5lKCkpLnJlc29sdmVkKCk7CiB9CiAKIGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBD
b2xvcjo6YXNQYWNrZWRJbmxpbmUoKSBjb25zdApAQCAtNTY1LDcgKzU2Miw3IEBAIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbgogICAgICAgICBl
bmNvZGVyIDw8IGNvbG9yU3BhY2UoKTsKIAogICAgICAgICBhdXRvJiBvdXRPZkxpbmVDb21wb25l
bnRzID0gYXNPdXRPZkxpbmUoKTsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
b3V0T2ZMaW5lQ29tcG9uZW50cy5jb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IG91dE9mTGluZUNvbXBvbmVudHMudW5yZXNvbHZlZENvbXBvbmVudHMoKTsK
ICAgICAgICAgZW5jb2RlciA8PCBjMTsKICAgICAgICAgZW5jb2RlciA8PCBjMjsKICAgICAgICAg
ZW5jb2RlciA8PCBjMzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJhY2tk
cm9wLCBjb25zdCBDb2wKICAgICBpZiAoIXNvdXJjZS5pc1Zpc2libGUoKSkKICAgICAgICAgcmV0
dXJuIGJhY2tkcm9wOwogCi0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9w
QiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgIGF1
dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJjZUIsIHNvdXJjZUFdID0gc291cmNlLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW2JhY2tkcm9wUiwgYmFja2Ryb3BHLCBiYWNrZHJv
cEIsIGJhY2tkcm9wQV0gPSBiYWNrZHJvcC50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CisgICAgYXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291
cmNlQV0gPSBzb3VyY2UudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZl
ZCgpOwogCiAgICAgaW50IGQgPSAweEZGICogKGJhY2tkcm9wQSArIHNvdXJjZUEpIC0gYmFja2Ry
b3BBICogc291cmNlQTsKICAgICBpbnQgYSA9IGQgLyAweEZGOwpAQCAtNjgsNyArNjgsNyBAQCBD
b2xvciBibGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAgICAgaWYgKCFjb2xvci5p
c09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gY29sb3I7CiAKLSAgICBhdXRvIFtleGlzdGluZ1Is
IGV4aXN0aW5nRywgZXhpc3RpbmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBleGlzdGluZ0Is
IGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogCiAgICAgU1JHQkE8dWludDhfdD4gcmVzdWx0OwogICAgIGZvciAoaW50
IGFscGhhID0gc3RhcnRBbHBoYTsgYWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5j
cmVtZW50KSB7CkBAIC05Nyw4ICs5Nyw4IEBAIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9t
LCBjb25zdCBDb2xvciYgdG8sIGNvbnN0IAogICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gcHJlbXVs
dGlwbGllZEZyb20gPSBwcmVtdWx0aXBsaWVkKGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkpOwotICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZCh0by50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVk
RnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4o
KSkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWQo
dG8udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAKICAgICBh
dXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JH
QkE8ZmxvYXQ+PigKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVk
LCBwcmVtdWx0aXBsaWVkVG8ucmVkLCBjb250ZXh0KSwKQEAgLTExNyw4ICsxMTcsOCBAQCBDb2xv
ciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QKICAgICBp
ZiAoY29udGV4dC5wcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKTsKLSAgICBhdXRvIHRvU1JHQiA9IHRvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpOworICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CisgICAgYXV0byB0b1NSR0IgPSB0by50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgYXV0byBibGVuZGVkID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PigKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBjb250ZXh0KSwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCShy
ZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbXBvbmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgQ29s
b3JDb21wb25lbnRzIHsKICAgICBjb25zdGV4cHIgYXV0byBtYXAoRiYmIGZ1bmN0aW9uKSBjb25z
dCAtPiBDb2xvckNvbXBvbmVudHM8ZGVjbHR5cGUoZnVuY3Rpb24oc3RkOjpkZWNsdmFsPFQ+KCkp
KSwgTj47CiAKICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0
IENvbG9yQ29tcG9uZW50cyYpOworICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMmIG9wZXJh
dG9yLz0oVCk7CiAKICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzIG9wZXJhdG9yKyhUKSBj
b25zdDsKICAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzIG9wZXJhdG9yLyhUKSBjb25zdDsK
QEAgLTk4LDYgKzk5LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgogY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCBOPiYgQ29sb3JDb21wb25lbnRzPFQsIE4+OjpvcGVyYXRv
cis9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgcmhzKQogewogICAgICp0aGlzID0gbWFwQ29sb3JD
b21wb25lbnRzKFtdKFQgYzEsIFQgYzIpIHsgcmV0dXJuIGMxICsgYzI7IH0sICp0aGlzLCByaHMp
OworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+
Citjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBvbmVudHM8VCwgTj46
Om9wZXJhdG9yLz0oVCByaHMpCit7CisgICAgKnRoaXMgPSAoKnRoaXMgLyByaHMpOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwyOCArMzksMjUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgTENITGlrZSwgdHlw
ZW5hbWUgTGFiTGlrZT4KIExDSExpa2UgY29udmVydFRvUG9sYXJGb3JtKGNvbnN0IExhYkxpa2Um
IGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2xh
Yi10by1sY2gKLSAgICBmbG9hdCBodWUgPSByYWQyZGVnKGF0YW4yKGNvbG9yLmIsIGNvbG9yLmEp
KTsKKyAgICBhdXRvIFtsaWdodG5lc3MsIGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7
CiAKLSAgICByZXR1cm4gewotICAgICAgICBjb2xvci5saWdodG5lc3MsCi0gICAgICAgIHN0ZDo6
aHlwb3QoY29sb3IuYSwgY29sb3IuYiksCi0gICAgICAgIGh1ZSA+PSAwID8gaHVlIDogaHVlICsg
MzYwLAotICAgICAgICBjb2xvci5hbHBoYQotICAgIH07CisgICAgZmxvYXQgaHVlID0gcmFkMmRl
ZyhhdGFuMihiLCBhKSk7CisgICAgZmxvYXQgY2hyb21hID0gc3RkOjpoeXBvdChhLCBiKTsKKwor
ICAgIHJldHVybiB7IGxpZ2h0bmVzcywgY2hyb21hLCBodWUgPj0gMCA/IGh1ZSA6IGh1ZSArIDM2
MCwgYWxwaGEgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGFiTGlrZSwgdHlwZW5hbWUgTENI
TGlrZT4KIExhYkxpa2UgY29udmVydFRvUmVjdGFuZ3VsYXJGb3JtKGNvbnN0IExDSExpa2UmIGNv
bG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2xjaC10
by1sYWIKLSAgICBmbG9hdCBodWVBbmdsZVJhZGlhbnMgPSBkZWcycmFkKGNvbG9yLmh1ZSk7Cisg
ICAgYXV0byBbbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0bmVzcywKLSAgICAgICAgY29s
b3IuY2hyb21hICogc3RkOjpjb3MoaHVlQW5nbGVSYWRpYW5zKSwKLSAgICAgICAgY29sb3IuY2hy
b21hICogc3RkOjpzaW4oaHVlQW5nbGVSYWRpYW5zKSwKLSAgICAgICAgY29sb3IuYWxwaGEKLSAg
ICB9OworICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRlZzJyYWQoaHVlKTsKKyAgICBmbG9h
dCBhID0gY2hyb21hICogc3RkOjpjb3MoaHVlQW5nbGVSYWRpYW5zKTsKKyAgICBmbG9hdCBiID0g
Y2hyb21hICogc3RkOjpzaW4oaHVlQW5nbGVSYWRpYW5zKTsKKworICAgIHJldHVybiB7IGxpZ2h0
bmVzcywgYSwgYiwgYWxwaGEgfTsKIH0KIAogLy8gTUFSSzogSFNMIGNvbnZlcnNpb25zLgpAQCAt
NzIsOSArNjksOCBAQCBzdHJ1Y3QgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgewogICAgIGZsb2F0
IGNocm9tYTsKIH07CiAKLXN0YXRpYyBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCBjYWxjdWxhdGVI
U0xIdWUoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3N0YXRpYyBIU0xIdWVDYWxjdWxhdGlv
blJlc3VsdCBjYWxjdWxhdGVIU0xIdWUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYikKIHsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKICAgICBhdXRvIFttaW4sIG1heF0gPSBz
dGQ6Om1pbm1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgY2hyb21hID0gbWF4IC0gbWluOwog
CkBAIC05Nyw4ICs5Myw4IEBAIHN0YXRpYyBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCBjYWxjdWxh
dGVIU0xIdWUoY29uc3QgUwogSFNMQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+
LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCi0g
ICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3I7Ci0gICAgYXV0byBbaHVlLCBtaW4sIG1h
eCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJv
bWFdID0gY2FsY3VsYXRlSFNMSHVlKHIsIGcsIGIpOwogCiAgICAgZmxvYXQgbGlnaHRuZXNzID0g
KDAuNWYgKiAobWF4ICsgbWluKSkgKiAxMDAuMGY7CiAgICAgZmxvYXQgc2F0dXJhdGlvbjsKQEAg
LTExNSw3ICsxMTEsNyBAQCBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9hdD4s
IFNSR0JBPGZsb2F0Pj4KIFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+
LCBIU0xBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgSFNMQTxmbG9hdD4mIGNvbG9yKQogewogICAg
IC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHNsLXRvLXJnYgotICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBh
dXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAogICAgIGlmICghc2F0dXJhdGlvbikgewogICAgICAgICBhdXRvIGdyZXkgPSBsaWdodG5l
c3MgLyAxMDAuMGY7CkBAIC0xNjIsMTcgKzE1OCwxOCBAQCBTUkdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFNMQTxmbG9hdD4KIEhXQkE8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxIV0JBPGZsb2F0PiwgU1JHQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3It
NC8jcmdiLXRvLWh3YgotICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxh
dGVIU0xIdWUoY29sb3IpOworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CisgICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1
ZShyLCBnLCBiKTsKICAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbiAqIDEwMC4wZjsKICAgICBhdXRv
IGJsYWNrbmVzcyA9ICgxLjBmIC0gbWF4KSAqIDEwMC4wZjsKICAgICAKLSAgICByZXR1cm4geyBo
dWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBjb2xvci5hbHBoYSB9OworICAgIHJldHVybiB7IGh1
ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFscGhhIH07CiB9CiAKIFNSR0JBPGZsb2F0PiBDb2xv
ckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIV0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgSFdC
QTxmbG9hdD4mIGNvbG9yKQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3Mt
Y29sb3ItNC8jaHdiLXRvLXJnYgotICAgIGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3Ms
IGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFs
cGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAKICAgICBpZiAod2hpdGVuZXNzICsgYmxhY2tuZXNz
ID09IDEwMC4wZikgewogICAgICAgICBhdXRvIGdyZXkgPSB3aGl0ZW5lc3MgLyAxMDAuMGY7CkBA
IC0yMjUsMTAgKzIyMiwxMiBAQCBzdGF0aWMgY29uc3RleHByIGZsb2F0IEQ1MFdoaXRlVmFsdWVz
W10gPSB7IDAuOTY0MjJmLCAKIAogWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiBDb2xvckNv
bnZlcnNpb248WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiwgTGFiPGZsb2F0Pj46OmNvbnZl
cnQoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgZmxvYXQgZjEgPSAoY29sb3IubGln
aHRuZXNzICsgMTYuMGYpIC8gMTE2LjBmOwotICAgIGZsb2F0IGYwID0gZjEgKyAoY29sb3IuYSAv
IDUwMC4wZik7Ci0gICAgZmxvYXQgZjIgPSBmMSAtIChjb2xvci5iIC8gMjAwLjBmKTsKKyAgICBh
dXRvIFtsaWdodG5lc3MsIGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAKKyAgICBm
bG9hdCBmMSA9IChsaWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7CisgICAgZmxvYXQgZjAgPSBm
MSArIChhIC8gNTAwLjBmKTsKKyAgICBmbG9hdCBmMiA9IGYxIC0gKGIgLyAyMDAuMGYpOworCiAg
ICAgYXV0byBjb21wdXRlWEFuZFogPSBbXShmbG9hdCB0KSB7CiAgICAgICAgIGZsb2F0IHRDdWJl
ZCA9IHQgKiB0ICogdDsKICAgICAgICAgaWYgKHRDdWJlZCA+IExBQmUpCkBAIC0yNDcsMzEgKzI0
NiwzMyBAQCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IENvbG9yQ29udmVyc2lvbjxYWVpB
PGZsb2EKICAgICB9OwogCiAgICAgZmxvYXQgeCA9IEQ1MFdoaXRlVmFsdWVzWzBdICogY29tcHV0
ZVhBbmRaKGYwKTsKLSAgICBmbG9hdCB5ID0gRDUwV2hpdGVWYWx1ZXNbMV0gKiBjb21wdXRlWShj
b2xvci5saWdodG5lc3MpOworICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZhbHVlc1sxXSAqIGNvbXB1
dGVZKGxpZ2h0bmVzcyk7CiAgICAgZmxvYXQgeiA9IEQ1MFdoaXRlVmFsdWVzWzJdICogY29tcHV0
ZVhBbmRaKGYyKTsKIAotICAgIHJldHVybiB7IHgsIHksIHosIGNvbG9yLmFscGhhIH07CisgICAg
cmV0dXJuIHsgeCwgeSwgeiwgYWxwaGEgfTsKIH0KIAogTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNp
b248TGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPj46OmNvbnZlcnQoY29u
c3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiYgY29sb3IpCiB7Ci0gICAgZmxvYXQgeCA9
IGNvbG9yLnggLyBENTBXaGl0ZVZhbHVlc1swXTsKLSAgICBmbG9hdCB5ID0gY29sb3IueSAvIEQ1
MFdoaXRlVmFsdWVzWzFdOwotICAgIGZsb2F0IHogPSBjb2xvci56IC8gRDUwV2hpdGVWYWx1ZXNb
Ml07CisgICAgYXV0byBbeCwgeSwgeiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAorICAg
IGZsb2F0IGFkanVzdGVkWCA9IHggLyBENTBXaGl0ZVZhbHVlc1swXTsKKyAgICBmbG9hdCBhZGp1
c3RlZFkgPSB5IC8gRDUwV2hpdGVWYWx1ZXNbMV07CisgICAgZmxvYXQgYWRqdXN0ZWRaID0geiAv
IEQ1MFdoaXRlVmFsdWVzWzJdOworCiAgICAgYXV0byBmVHJhbnNmb3JtID0gW10oZmxvYXQgdmFs
dWUpIHsKICAgICAgICAgcmV0dXJuIHZhbHVlID4gTEFCZSA/IHN0ZDo6Y2JydCh2YWx1ZSkgOiAo
TEFCayAqIHZhbHVlICsgMTYuMGYpIC8gMTE2LjBmOwogICAgIH07CiAKLSAgICBmbG9hdCBmMCA9
IGZUcmFuc2Zvcm0oeCk7Ci0gICAgZmxvYXQgZjEgPSBmVHJhbnNmb3JtKHkpOwotICAgIGZsb2F0
IGYyID0gZlRyYW5zZm9ybSh6KTsKKyAgICBmbG9hdCBmMCA9IGZUcmFuc2Zvcm0oYWRqdXN0ZWRY
KTsKKyAgICBmbG9hdCBmMSA9IGZUcmFuc2Zvcm0oYWRqdXN0ZWRZKTsKKyAgICBmbG9hdCBmMiA9
IGZUcmFuc2Zvcm0oYWRqdXN0ZWRaKTsKIAogICAgIGZsb2F0IGxpZ2h0bmVzcyA9ICgxMTYuMGYg
KiBmMSkgLSAxNi4wZjsKICAgICBmbG9hdCBhID0gNTAwLjBmICogKGYwIC0gZjEpOwogICAgIGZs
b2F0IGIgPSAyMDAuMGYgKiAoZjEgLSBmMik7CiAKLSAgICByZXR1cm4geyBsaWdodG5lc3MsIGEs
IGIsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBhbHBoYSB9
OwogfQogCiAvLyBNQVJLOiBMQ0ggY29udmVyc2lvbnMuCkBAIC0zMDgsOSArMzA5LDEwIEBAIFhZ
WkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4gQ29sb3JDb252ZXJzaW9uPFhZWkE8ZmxvYQogICAg
ICAgICAxLjAwMDAwMDA1NDY3MjQxMDkxNzdmLCAgLTAuMDg5NDg0MTgyMDk0OTY1NzU5Njg0Ziwg
LTEuMjkxNDg1NTM3ODY0MDkxNzM5OWYKICAgICB9OwogCisgICAgYXV0byBbbGlnaHRuZXNzLCBh
LCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworCiAgICAgLy8gMS4gVHJhbnNmb3JtIGZy
b20gcHJlY2VudGFnZSBsaWdodG5lc3MgdG8gdW5pdCBsaWdodG5lc3MuCi0gICAgYXV0byBjb21w
b25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLnN1YnNldDwwLCAzPigpOwotICAgIGNv
bXBvbmVudHNbMF0gPSBjb21wb25lbnRzWzBdIC8gMTAwLjBmOworICAgIGF1dG8gY29tcG9uZW50
cyA9IENvbG9yQ29tcG9uZW50czxmbG9hdCwgMz4geyBsaWdodG5lc3MgLyAxMDAuMGYsIGEsIGIg
fTsKIAogICAgIC8vIDIuIFRyYW5zZm9ybSBmcm9tIExhYi1jb29yZGluYXRlcyBpbnRvIG5vbi1s
aW5lYXIgTE1TICJhcHByb3hpbWF0ZSBjb25lIHJlc3BvbnNlcyIuCiAgICAgYXV0byBub25MaW5l
YXJMTVMgPSBPS0xhYlRvTm9uTGluZWFyTE1TLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNv
bXBvbmVudHMpOwpAQCAtMzIxLDcgKzMyMyw3IEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2
NT4gQ29sb3JDb252ZXJzaW9uPFhZWkE8ZmxvYQogICAgIC8vIDQuIENvbnZlcnQgdG8gWFlaLgog
ICAgIGF1dG8gW3gsIHksIHpdID0gTGluZWFyTE1TVG9YWVpENjUudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMobGluZWFyTE1TKTsKIAotICAgIHJldHVybiB7IHgsIHksIHosIGNvbG9yLmFscGhh
IH07CisgICAgcmV0dXJuIHsgeCwgeSwgeiwgYWxwaGEgfTsKIH0KIAogT0tMYWI8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4sIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4+
Ojpjb252ZXJ0KGNvbnN0IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4mIGNvbG9yKQpAQCAt
MzQ0LDggKzM0NiwxMCBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0
PiwgWFlaQTxmbG9hdCwKICAgICAgICAgMC4wMjU5MDQwMzcxZiwgIDAuNzgyNzcxNzY2MmYsIC0w
LjgwODY3NTc2NjBmCiAgICAgfTsKIAorICAgIGF1dG8gW3gsIHksIHosIGFscGhhXSA9IGNvbG9y
LnJlc29sdmVkKCk7CisKICAgICAvLyAxLiBDb252ZXJ0IFhZWiBpbnRvIExNUyAiYXBwcm94aW1h
dGUgY29uZSByZXNwb25zZXMiLgotICAgIGF1dG8gbGluZWFyTE1TID0gWFlaRDY1VG9MaW5lYXJM
TVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLnN1
YnNldDwwLCAzPigpKTsKKyAgICBhdXRvIGxpbmVhckxNUyA9IFhZWkQ2NVRvTGluZWFyTE1TLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdCwgMz4geyB4LCB5
LCB6IH0pOwogCiAgICAgLy8gMi4gQXBwbHkgbm9uLWxpbmVhcml0eS4KICAgICBhdXRvIG5vbkxp
bmVhckxNUyA9IGxpbmVhckxNUy5tYXAoW10gKGZsb2F0IHYpIHsgcmV0dXJuIHN0ZDo6Y2JydCh2
KTsgfSk7CkBAIC0zNTQsNyArMzU4LDcgQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxP
S0xhYjxmbG9hdD4sIFhZWkE8ZmxvYXQsCiAgICAgYXV0byBbbGlnaHRuZXNzLCBhLCBiXSA9IE5v
bkxpbmVhckxNU1RvT0tMYWIudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMobm9uTGluZWFyTE1T
KTsKIAogICAgIC8vIDQuIFRyYW5zZm9ybSBsaWdodG5lc3MgZnJvbSB1bml0IGxpZ2h0bmVzcyB0
byBwZXJjZW50YWdlIGxpZ2h0bmVzcy4KLSAgICByZXR1cm4geyBsaWdodG5lc3MgKiAxMDAuMGYs
IGEsIGIsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzICogMTAwLjBmLCBh
LCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBPS0xDSCBjb252ZXJzaW9ucy4KQEAgLTM3MSw1
OCArMzc1LDU4IEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8ZmxvYXQ+LCBP
S0xDSEE8ZmxvYQogCiAvLyBNQVJLOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgcmF3IGNvbG9y
IGNvbXBvbmVudHMgd2l0aCBhc3NvY2lhdGVkIGNvbG9yIHNwYWNlcy4KIAotQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKENvbG9yU3BhY2UgaW5wdXRDb2xv
clNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JDb21wb25lbnRzLCBD
b2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpCitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNv
bnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNl
LCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNw
YWNlIG91dHB1dENvbG9yU3BhY2UpCiB7CiAgICAgcmV0dXJuIGNhbGxXaXRoQ29sb3JUeXBlKGlu
cHV0Q29sb3JDb21wb25lbnRzLCBpbnB1dENvbG9yU3BhY2UsIFtvdXRwdXRDb2xvclNwYWNlXSAo
Y29uc3QgYXV0byYgaW5wdXRDb2xvcikgewogICAgICAgICBzd2l0Y2ggKG91dHB1dENvbG9yU3Bh
Y2UpIHsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpBOThSR0I6Ci0gICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEE5OFJHQjxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
QTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29s
b3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+
KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVu
ZGVkQTk4UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRD
b2xvcjxFeHRlbmRlZEE5OFJHQjxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRBOThSR0I8ZmxvYXQ+
PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRl
bmRlZERpc3BsYXlQMzoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8RXh0ZW5kZWREaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkRGlzcGxh
eVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JT
cGFjZTo6RXh0ZW5kZWRMaW5lYXJTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xv
cikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxF
eHRlbmRlZExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAg
ICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRQcm9QaG90b1JHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRQcm9QaG90b1JHQjxm
bG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkUmVjMjAyMDoKLSAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRS
ZWMyMDIwPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFNSR0I6Ci0g
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVk
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5y
ZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpIU0w6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEhTTEE8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEhTTEE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpIV0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPEhXQkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEhXQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNv
bHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMQ0g6Ci0gICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPExDSEE8ZmxvYXQ+PihpbnB1dENvbG9y
KSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPExD
SEE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNw
YWNlOjpMYWI6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENv
bG9yPExhYjxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyU1JHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+Pihp
bnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAg
ICAgIGNhc2UgQ29sb3JTcGFjZTo6T0tMQ0g6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPE9LTENIQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6T0tM
YWI6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE9L
TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxPS0xhYjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkp
OwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlByb1Bob3RvUkdCOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlu
cHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8UHJvUGhvdG9SR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAg
ICAgY2FzZSBDb2xvclNwYWNlOjpSZWMyMDIwOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxSZWMyMDIwPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxSZWMyMDIwPGZs
b2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6
U1JHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6WFlaX0Q1MDoKLSAgICAgICAgICAgIHJldHVy
biBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDUwPj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+PihpbnB1dENvbG9yKS5y
ZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDY1OgotICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0
ZVBvaW50OjpENjU+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4+KGlucHV0
Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICB9KTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0Q29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG91dHB1
dENvbG9yU3BhY2UpCitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZl
Q29sb3JDb21wb25lbnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JDb21wb25lbnRzLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIG91dHB1dENvbG9yU3BhY2UpCiB7CiAjaWYgVVNFKENHKQogICAgIHJldHVybiBwbGF0
Zm9ybUNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xvclNwYWNlLCBpbnB1dENvbG9yQ29t
cG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CkBAIC00MzAsMTkgKzQzNCwxOSBAQCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3IKICAgICByZXR1
cm4gY2FsbFdpdGhDb2xvclR5cGUoaW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFj
ZSwgW291dHB1dENvbG9yU3BhY2VdIChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAg
IHN3aXRjaCAob3V0cHV0Q29sb3JTcGFjZS5wbGF0Zm9ybUNvbG9yU3BhY2UoKSkgewogICAgICAg
ICBjYXNlIFBsYXRmb3JtQ29sb3JTcGFjZTo6TmFtZTo6U1JHQjoKLSAgICAgICAgICAgIHJldHVy
biBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9y
KSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNS
R0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAjaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgICAgICBjYXNlIFBsYXRmb3JtQ29sb3JT
cGFjZTo6TmFtZTo6TGluZWFyU1JHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAg
ICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPExpbmVhclNSR0JB
PGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMykKICAgICAgICAgY2FzZSBQbGF0Zm9ybUNv
bG9yU3BhY2U6Ok5hbWU6OkRpc3BsYXlQMzoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8
ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNlbmRpZgogICAgICAgICB9CiAKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENv
bG9yKS5yZXNvbHZlZCgpKTsKICAgICB9KTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVy
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIGVudW0gY2xhc3MgQ29sb3JT
cGFjZSA6IHVpbnQ4X3Q7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0
PiBPdXRwdXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcik7CiAKIC8vIENvbnZlcnNp
b24gZnVuY3Rpb25zIGZvciByYXcgY29sb3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29s
b3Igc3BhY2VzLgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0Q29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpOwotQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKENvbG9yU3BhY2Ug
aW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JDb21w
b25lbnRzLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG91dHB1dENvbG9yU3BhY2UpOwor
Q29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBp
bnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKTsKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29s
b3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRD
b2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JT
cGFjZSk7CiAKIAogLy8gQWxsIGNvbG9yIHR5cGVzLCBvdGhlciB0aGFuIFhZWkEgb3IgdGhvc2Ug
aW5oZXJpdGluZyBmcm9tIFJHQlR5cGUsIG11c3QgaW1wbGVtZW50CkBAIC0yMDgsNyArMjA4LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0
CiAKICAgICAgICAgdXNpbmcgSW5wdXRXaXRoUmVwbGFjZW1lbnQgPSBDb2xvclR5cGVXaXRoUmVw
bGFjZW1lbnRDb21wb25lbnQ8SW5wdXQsIGZsb2F0PjsKICAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWVfdjxJbnB1dFdpdGhSZXBsYWNlbWVudCwgT3V0cHV0PikKLSAgICAgICAgICAg
IHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8SW5wdXRXaXRoUmVwbGFjZW1lbnQ+KGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKS5tYXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4g
dmFsdWUgLyAyNTUuMGY7IH0pKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVu
dHM8SW5wdXRXaXRoUmVwbGFjZW1lbnQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVk
KCkpLm1hcChbXSh1aW50OF90IHZhbHVlKSAtPiBmbG9hdCB7IHJldHVybiB2YWx1ZSAvIDI1NS4w
ZjsgfSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91
dHB1dD4oY29udmVydENvbG9yPElucHV0V2l0aFJlcGxhY2VtZW50Pihjb2xvcikpOwogICAgIH0K
QEAgLTIxOSwzMSArMjE5LDMxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUg
SW5wdXQsIHR5cGVuYW1lPiBzdAogCiAgICAgICAgIHVzaW5nIE91dHB1dFdpdGhSZXBsYWNlbWVu
dCA9IENvbG9yVHlwZVdpdGhSZXBsYWNlbWVudENvbXBvbmVudDxPdXRwdXQsIGZsb2F0PjsKICAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQs
IElucHV0PikKLSAgICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8T3V0cHV0Pihh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90IHsg
cmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7
IH0pKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8T3V0cHV0Pihhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKS5tYXAoW10oZmxvYXQgdmFsdWUpIC0+IHVp
bnQ4X3QgeyByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAqIDI1NS4wZiksIDBs
LCAyNTVsKTsgfSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29udmVydENv
bG9yPE91dHB1dD4oY29udmVydENvbG9yPE91dHB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsK
ICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUg
Y29uc3RleHByIGF1dG8gdG9MaW5lYXJFbmNvZGVkKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpIC0+
IHR5cGVuYW1lIENvbG9yVHlwZTo6TGluZWFyQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMz
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4geyBDb2xvclR5cGU6
OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMxKSwgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0
aW9uOjp0b0xpbmVhcihjMiksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9MaW5lYXIo
YzMpLCBhbHBoYSB9OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIGlubGluZSBjb25zdGV4cHIgYXV0byB0b0dhbW1hRW5jb2RlZChjb25zdCBDb2xvclR5
cGUmIGNvbG9yKSAtPiB0eXBlbmFtZSBDb2xvclR5cGU6OkdhbW1hRW5jb2RlZENvdW50ZXJwYXJ0
CiAgICAgewotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAg
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAg
cmV0dXJuIHsgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMSks
IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzIpLCBDb2xvclR5
cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMzKSwgYWxwaGEgfTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3Rl
eHByIGF1dG8gdG9FeHRlbmRlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBlbmFtZSBD
b2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtl
RnJvbUNvbXBvbmVudHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0Pihh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpOworICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25l
bnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBv
bmVudHMoY29sb3IucmVzb2x2ZWQoKSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZT4gc3RhdGljIGlubGluZSBjb25zdGV4cHIgYXV0byB0b0JvdW5kZWQoY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBh
cnQKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhPHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0Pihhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpOworICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmdFeGNlcHRBbHBoYTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXND
b2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBp
bmxpbmUgY29uc3RleHByIE91dHB1dCBoYW5kbGVSR0JGYW1pbHlDb252ZXJzaW9uKGNvbnN0IElu
cHV0JiBjb2xvcikKQEAgLTMxMiw3ICszMTIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQs
IHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZT4gc3QKICAgICAgICAgLy8gaGF2ZSBzdWZmaWNpZW50
IHRlc3RpbmcgY292ZXJhZ2UgdG8gbm90aWNlIGFueSBhZHZlcnNlIGVmZmVjdHMuCiAKICAgICAg
ICAgYXV0byBhcHBseU1hdHJpY2VzID0gW10oY29uc3QgSW5wdXQmIGNvbG9yLCBhdXRvLi4uIG1h
dHJpY2VzKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdF
eGNlcHRBbHBoYTxPdXRwdXQ+KGFwcGx5TWF0cmljZXNUb0NvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvciksIG1hdHJpY2VzLi4uKSk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxPdXRwdXQ+KGFwcGx5TWF0cmljZXNU
b0NvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSwgbWF0
cmljZXMuLi4pKTsKICAgICAgICAgfTsKIAogICAgICAgICBpZiBjb25zdGV4cHIgKElucHV0Ojp3
aGl0ZVBvaW50ID09IE91dHB1dDo6d2hpdGVQb2ludCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50
ZXJwb2xhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdGVtcGxhdGU8
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYVByZW11bHRpcGxpY2F0aW9uCiB0eXBlbmFtZSBJ
bnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGludGVycG9sYXRlQ29sb3JD
b21wb25lbnRzKEludGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNlIGludGVycG9sYXRpb25NZXRo
b2RDb2xvclNwYWNlLCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZTo6Q29s
b3JUeXBlIGNvbG9yMSwgZG91YmxlIGNvbG9yMU11bHRpcGxpZXIsIHR5cGVuYW1lIEludGVycG9s
YXRpb25NZXRob2RDb2xvclNwYWNlOjpDb2xvclR5cGUgY29sb3IyLCBkb3VibGUgY29sb3IyTXVs
dGlwbGllcikKIHsKICAgICAvLyAxLiBBcHBseSBwcmUtaW50ZXJwb2xhdGlvbiB0cmFuc2Zvcm1z
IChodWUgZml4dXAgZm9yIHBvbGFyIGNvbG9yIHNwYWNlcywgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaWYgcmVxdWlyZWQpLgotICAgIGF1dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBu
b3JtYWxpemVkQ29sb3JDb21wb25lbnRzMl0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlv
bjxhbHBoYVByZW11bHRpcGxpY2F0aW9uPihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwg
YXNDb2xvckNvbXBvbmVudHMoY29sb3IxKSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3IyKSk7Cisg
ICAgYXV0byBbbm9ybWFsaXplZENvbG9yQ29tcG9uZW50czEsIG5vcm1hbGl6ZWRDb2xvckNvbXBv
bmVudHMyXSA9IHByZUludGVycG9sYXRpb25Ob3JtYWxpemF0aW9uPGFscGhhUHJlbXVsdGlwbGlj
YXRpb24+KGludGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNlLCBhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcjEucmVzb2x2ZWQoKSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMi5yZXNvbHZlZCgpKSk7
CiAKICAgICAvLyAyLiBJbnRlcnBvbGF0ZSB1c2luZyB0aGUgbm9ybWFsaXplZCBjb21wb25lbnRz
LgogICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb21wb25lbnRzID0gbWFwQ29sb3JDb21wb25l
bnRzKFsmXSAoYXV0byBjb21wb25lbnRGcm9tQ29sb3IxLCBhdXRvIGNvbXBvbmVudEZyb21Db2xv
cjIpIC0+IGZsb2F0IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yTHVtaW5hbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JMdW1pbmFuY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JMdW1pbmFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBkb3VibGUg
cmVsYXRpdmVMdW0KICAgICAvLyB0aGlzIGluIENvbG9yQ29udmVyc2lvbi5oIGFzIGEgc2libGlu
ZyBmdW5jdGlvbiB0byBjb252ZXJ0Q29sb3Igd2hpY2ggY2FuIGdldCBhIGNoYW5uZWwKICAgICAv
LyBvZiBhIGNvbG9yIGluIGFub3RoZXIgc3BhY2UgaW4gdGhpcyBraW5kIG9mIG9wdGltYWwgd2F5
LgogCi0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+
Pihjb2xvcikueTsKKyAgICByZXR1cm4gY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9p
bnQ6OkQ2NT4+KGNvbG9yKS5yZXNvbHZlZCgpLnk7CiB9CiAKIGlubGluZSBkb3VibGUgY29udHJh
c3RSYXRpbyhkb3VibGUgcmVsYXRpdmVMdW1pbmFuY2VBLCBkb3VibGUgcmVsYXRpdmVMdW1pbmFu
Y2VCKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1v
ZGVscy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvck1vZGVscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsODYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIGNsYXNzIFJHQkJvdW5kZWRuZXNzIHsgQm91bmRl
ZCwgRXh0ZW5kZWQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUsIFJHQkJvdW5kZWRuZXNzPiBzdHJ1
Y3QgUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRzOwogdGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDb2xvckNvbXBvbmVudEluZm87Ci10ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IEV4dGVuZGVkUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IEhTTE1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIV0JNb2RlbDsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgTENITW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExh
Yk1vZGVsOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSR0JNb2RlbDsKIHRlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgWFlaTW9kZWw7CiAKKy8vIE1BUks6IFJlc29sdmVkL1VucmVzb2x2ZWQg
RGVmaW50aXRpb25zCiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgQ29s
b3JNb2RlbCA9IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHN0cnVjdCBFeHBvc2VkQ29sb3JU
eXBlOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgUmVzb2x2ZWRDb2xvclR5
cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBVbnJlc29sdmVkQ29sb3JU
eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBSZXNvbHZlZENv
bG9yVHlwZTxDb2xvclR5cGU+IHJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAg
IHJldHVybiBSZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+IHsgaW5wdXQgfTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxD
b2xvclR5cGU+IHVucmVzb2x2ZWRDb2xvcihDb2xvclR5cGUgaW5wdXQpCit7CisgICAgcmV0dXJu
IFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK2lubGluZSBj
b25zdGV4cHIgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHJlc29sdmVDb2xvckNvbXBvbmVu
dHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb2xvckNvbXBvbmVudHMpCit7
CisgICAgcmV0dXJuIGNvbG9yQ29tcG9uZW50czsKK30KKworaW5saW5lIGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHJlc29sdmVDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAgIHJldHVybiBjb2xv
ckNvbXBvbmVudHMubWFwKFtdIChmbG9hdCBjb21wb25lbnQpIHsgcmV0dXJuIHN0ZDo6aXNuYW4o
Y29tcG9uZW50KSA/IDAuMGYgOiBjb21wb25lbnQ7IH0pOworfQorCisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlIDogRXhwb3NlZENvbG9yVHlw
ZTxDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsKKyAgICB1c2luZyBDYW5v
bmljYWxUeXBlID0gQ29sb3JUeXBlOworCisgICAgLy8gQ2FsbGluZyByZXNvbHZlZCgpIG9yIHVu
cmVzb2x2ZWQoKSBvbiBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHJlc29sdmVkIGlzIGEgbm8tb3As
IHNvIHdlIGNhbgorICAgIC8vIGp1c3QgcmV0dXJuIG91dHNlbHZlcy4KKyAgICBjb25zdGV4cHIg
YXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3RleHByIGF1
dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKK3ByaXZhdGU6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQz4gZnJpZW5kIGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlwZTxD
PiByZXNvbHZlZENvbG9yKEMpOworCisgICAgZXhwbGljaXQgY29uc3RleHByIFJlc29sdmVkQ29s
b3JUeXBlKENvbG9yVHlwZSBjb2xvcikKKyAgICAgICAgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9y
VHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geyByZXNvbHZlKGNvbG9yKSB9CisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgQ29sb3JUeXBlIHJlc29sdmUoQ29sb3JU
eXBlIGNvbG9yKQorICAgIHsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gcmVz
b2x2ZUNvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhFeHBvc2VkQ29sb3JUeXBlPENv
bG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geyBjb2xvciB9KSk7CisgICAgICAg
IHJldHVybiBDb2xvclR5cGUgeyBjMSwgYzIsIGMzLCBhbHBoYSB9OworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFVucmVzb2x2ZWRDb2xvclR5cGUgOiBF
eHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4gewor
ICAgIHVzaW5nIENhbm9uaWNhbFR5cGUgPSBDb2xvclR5cGU7CisKKyAgICAvLyBDYWxsaW5nIHVu
cmVzb2x2ZWQoKSBvbiBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHVucmVzb2x2ZWQgaXMgYSBuby1v
cCwgc28gd2UgY2FuCisgICAgLy8ganVzdCByZXR1cm4gb3V0c2VsdmVzLgorICAgIGNvbnN0ZXhw
ciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9y
VHlwZTxDPiB1bnJlc29sdmVkQ29sb3IoQyk7CisKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVW5y
ZXNvbHZlZENvbG9yVHlwZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9y
VHlwZTxDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3IgfQorICAg
IHsKKyAgICB9Cit9OworCisKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgc3VwcG9ydCB0eXBlcy4K
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29u
c3RleHByIGZsb2F0IHRyYW5zcGFyZW50ID0gMC4wZjsKICAgICBzdGF0aWMgY29uc3RleHByIGZs
b2F0IG9wYXF1ZSA9IDEuMGY7CkBAIC02OCwxNyArMTM3LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbG9yQ29tcG9uZW50SW5mbyB7CiAgICAgQ29sb3JDb21wb25lbnRUeXBlIHR5
cGU7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsPGZsb2F0PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4s
IDM+IGNvbXBvbmVudEluZm8geyB7Ci0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwg
Q29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZp
bml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KLSAgICB9IH07Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVT
eXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKLX07CisvLyBNQVJLOiAtIENvbG9yIE1vZGVs
IERlZmluaXRpdGlvbnMKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29u
c3RleHByIGJvb2wgVXNlc0V4dGVuZGVkUkdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFt
ZSBDb2xvclR5cGU6Ok1vZGVsLCBFeHRlbmRlZFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT4+OworLy8gTUFSSzogSFNMTW9kZWwKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
SFNMTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JD
b21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKQEAgLTkwLDggKzE1MSwy
MiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25z
dGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06
OkN5bGluZHJpY2FsUG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0
cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6
aHVlOworICAgIHVzaW5nIENvbG9yVHlwZTo6c2F0dXJhdGlvbjsKKyAgICB1c2luZyBDb2xvclR5
cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JU
eXBlLCBIU0xNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlv
biwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0hTTE1vZGVsID0gc3RkOjppc19zYW1lX3Y8
dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPj47CiAKKy8vIE1BUks6IEhXQk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0
IEhXQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9y
Q29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwg
MzYwLCBDb2xvckNvbXBvbmVudFR5cGU6OkFuZ2xlIH0sCkBAIC0xMDIsOCArMTc3LDIyIEBAIHRl
bXBsYXRlPD4gc3RydWN0IEhXQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBh
dXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5k
cmljYWxQb2xhcjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4
cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNv
bXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjp3aGl0ZW5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpibGFj
a25lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0
PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFdC
TW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFj
a25lc3MsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgVXNlc0hXQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUg
Q29sb3JUeXBlOjpNb2RlbCwgSFdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlPj47CiAKKy8vIE1BUks6IExhYk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVs
PGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVy
IH0sCkBAIC0xMTQsOCArMjAzLDIyIEBAIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IExhYk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBl
IHsKKyAgICB1c2luZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6
OmE7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpiOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhw
ciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENv
bG9yVHlwZTxDb2xvclR5cGUsIExhYk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmxp
Z2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0xhYk1vZGVsID0gc3RkOjppc19zYW1l
X3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgTGFiTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBl
OjpDb21wb25lbnRUeXBlPj47CiAKKy8vIE1BUks6IExDSE1vZGVsCisKIHRlbXBsYXRlPD4gc3Ry
dWN0IExDSE1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENv
bG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsg
MCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50
VHlwZTo6TnVtYmVyIH0sCkBAIC0xMjYsOSArMjI5LDIzIEBAIHRlbXBsYXRlPD4gc3RydWN0IExD
SE1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0
ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsKIH07CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCBMQ0hNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENv
bG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjpjaHJvbWE7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9y
VHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhj
b25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgTENITW9kZWw8VD4+JiBjKQoreworICAg
IHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKK30KKwog
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0xD
SE1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgTENITW9k
ZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKLXRlbXBsYXRlPD4gc3Ry
dWN0IFJHQk1vZGVsPGZsb2F0PiB7CisvLyBNQVJLOiBSR0JNb2RlbAorCit0ZW1wbGF0ZTw+IHN0
cnVjdCBSR0JNb2RlbDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29t
cG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJl
ciB9LAogICAgICAgICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0x
MzgsNyArMjU1LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKICAgICBz
dGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGlu
YXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVj
dCBSR0JNb2RlbDx1aW50OF90PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90
LCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjph
cnJheTxDb2xvckNvbXBvbmVudEluZm88dWludDhfdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAg
ICAgICAgIHsgMCwgMjU1LCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAgICB7
IDAsIDI1NSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTE0OCw4ICsyNjUsMzUg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4gewogICAgIHN0YXRpYyBjb25z
dGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06
OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5
cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT4+OwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5k
ZWRuZXNzOjpFeHRlbmRlZD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xv
ckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgeworICAgICAgICB7IC1z
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCisgICAg
ICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIg
fSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6
Ok51bWJlciB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGli
bGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9
IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Cit9Owog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIFJHQkJvdW5kZWRuZXNzIGJvdW5kZWRuZXNz
PiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPHR5cGVuYW1lIENv
bG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgYm91bmRlZG5lc3M+PiA6IENvbG9yVHlwZSB7CisgICAg
dXNpbmcgQ29sb3JUeXBlOjpyZWQ7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpncmVlbjsKKyAgICB1
c2luZyBDb2xvclR5cGU6OmJsdWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3Mg
Ym91bmRlZG5lc3M+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBv
bmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPFQsIGJvdW5k
ZWRuZXNzPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5h
bHBoYSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBVc2VzUkdCTW9kZWwgPQorICAgICAgIHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENv
bG9yVHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZSwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+PgorICAgIHx8IHN0ZDo6aXNfc2FtZV92PHR5cGVu
YW1lIENvbG9yVHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZSwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPj47CisKKworLy8gTUFSSzogWFlaTW9k
ZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29u
c3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50
SW5mbyB7IHsKICAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVu
dFR5cGU6Ok51bWJlciB9LApAQCAtMTYwLDYgKzMwNCw0OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBY
WVpNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lz
dGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp4OworICAgIHVzaW5nIENvbG9y
VHlwZTo6eTsKKyAgICB1c2luZyBDb2xvclR5cGU6Ono7CisgICAgdXNpbmcgQ29sb3JUeXBlOjph
bHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29u
c3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBv
c2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgWFlaTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7
IGMueCwgYy55LCBjLnosIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc1hZWk1vZGVsID0gc3RkOjppc19zYW1lX3Y8
dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPj47CisKKworLy8gZ2V0PD4gb3ZlcmxvYWQgKGFsb25nIHdpdGggc3RkOjp0
dXBsZV9zaXplIGFuZCBzdGQ6OnR1cGxlX2VsZW1lbnQgYmVsb3cpIHRvIHN1cHBvcnQgZGVzdHJ1
Y3R1cmluZyBvZiBleHBsaWNpdGx5IHJlc29sdmVkIGFuZCB1bnJlc29sdmVkIGNvbG9ycy4KKwor
dGVtcGxhdGU8c2l6ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSBnZXQoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGU+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpW0ld
OworfQorCit9CisKK25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlw
ZT4+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3Rl
bXBsYXRlPHNpemVfdCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50
PEksIFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAg
ICB1c2luZyB0eXBlID0gdHlwZW5hbWUgV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPjo6Q29tcG9uZW50VHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4K
K2NsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+
PiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgND4geyB9OworCit0ZW1w
bGF0ZTxzaXplX3QgSSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfZWxlbWVudDxJ
LCBXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAg
ICB1c2luZyB0eXBlID0gdHlwZW5hbWUgV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xv
clR5cGU+OjpDb21wb25lbnRUeXBlOworfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNl
cmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpCiB7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGUsIGZsb2F0Pik7CiAKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsK
KyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlw
ZT4pLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcg
JywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTM3NCw3ICsz
NzQsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgSFdC
QTxmbG8KIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xv
ciwgYm9vbCkKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3Nl
cmlhbGl6aW5nLWxhYi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsK
KyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygibGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1
cm4gbWFrZVN0cmluZygibGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhh
LCAnKScpOwpAQCAtMzk1LDcgKzM5NSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBMQ0hBPGZsbwogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgTGFiPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy1jb2xvci00LyNzZXJpYWxpemluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3Iu
cmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBm
KSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywg
YzMsICcpJyk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcg
JywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1IKIAogU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgT0tMQ0hBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0g
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxs
eUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGNoKCIs
IGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygib2ts
Y2goIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00NTIs
NyArNDUyLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0
IE9LTENIQTxmCiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IE9LTGFiPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7
CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBp
ZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIm9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICBy
ZXR1cm4gbWFrZVN0cmluZygib2tsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwg
YWxwaGEsICcpJyk7CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoU1JHQkE8dWludDhfdD4gY29sb3IsIGJvb2wgCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25T
ZXJpYWxpemF0aW9uKQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5j
dGlvbihjb2xvcik7CiAKLSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xv
cjsKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgp
OwogICAgIHN3aXRjaCAoYWxwaGEpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKCJyZ2JhKCIsIHJlZCwgIiwgIiwgZ3JlZW4sICIsICIsIGJsdWUsICIsIDApIik7CkBA
IC01NTksNyArNTU5LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yLCBib29sCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQog
ICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiAK
LSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFty
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChhbHBo
YSA9PSAweEZGKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQsIDIsIExv
d2VyY2FzZSksIGhleChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWUsIDIsIExvd2VyY2Fz
ZSkpOwogICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKQEAgLTU3MCw3ICs1
NzAsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWlu
dDhfdD4KICAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8g
W3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhIDwgMHhGRikK
ICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAy
KSwgaGV4KGJsdWUsIDIpLCBoZXgoYWxwaGEsIDIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygn
IycsIGhleChyZWQsIDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMikpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAkocmV2aXNpb24g
Mjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb2xvclNwYWNlTWFwcGluZzxTUkdCQTxUPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbG9yU3BhY2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDUwPj4geyBzdGF0aWMg
Y29uc3RleHByIGF1dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENTAgfTsgfTsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRl
UG9pbnQ6OkQ2NT4+IHsgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNw
YWNlOjpYWVpfRDY1IH07IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIENvbG9yU3BhY2UgQ29sb3JTcGFjZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENvbG9yVHlw
ZT46OmNvbG9yU3BhY2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBD
b2xvclNwYWNlIENvbG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFwcGluZzxDYW5vbmljYWxDb2xv
clR5cGU8Q29sb3JUeXBlPj46OmNvbG9yU3BhY2U7CiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRnVuY3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNhbGxXaXRoQ29sb3JU
eXBlKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cywgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBGdW5jdG9yJiYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsOSArNDgsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUsIFdoaXRlUG9pbnQ+IHN0cnVjdCBY
WVpBOwogCiAvLyBNQVJLOiBNYWtlIGZ1bmN0aW9ucy4KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50
cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlw
ZW5hbWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJl
ciA9IGZhbHNlOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhh
c0Nhbm9uaWNhbFR5cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q2Fub25pY2Fs
VHlwZT4+ID0gdHJ1ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBib29sIGhhc0Nv
bm9uaWNhbFR5cGU+IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXIgeyB1c2luZyB0eXBl
ID0gQ29sb3JUeXBlOyB9OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgQ2Fu
b25pY2FsQ29sb3JUeXBlSGVscGVyPENvbG9yVHlwZSwgdHJ1ZT4geyB1c2luZyB0eXBlID0gdHlw
ZW5hbWUgQ29sb3JUeXBlOjpDYW5vbmljYWxUeXBlOyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHVzaW5nIENhbm9uaWNhbENvbG9yVHlwZSA9IHR5cGVuYW1lIENhbm9uaWNhbENv
bG9yVHlwZUhlbHBlcjxDb2xvclR5cGUsIEhhc0Nhbm9uaWNhbFR5cGVNZW1iZXI8Q29sb3JUeXBl
Pj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29u
c3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0
PiYgYykKIHsKLSAgICByZXR1cm4gQ29sb3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9
OworICAgIHJldHVybiBDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGNbMF0sIGNbMV0s
IGNbMl0sIGNbM10gfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25l
ZCBJbmRleCwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMp
IC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZQpAQCAtOTcsMjcgKzEwNSwyNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2wK
ICAgICByZXR1cm4geyBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyks
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLCBjb21wb25lbnRzWzNdIH07CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlw
ZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4m
IGNvbXBvbmVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxULCA0PiYgY29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQogewogICAgIHJldHVybiBt
YWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29t
cG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4o
YzIpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBBbHBoYVRyYWl0czx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUgfSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQogewogICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlw
ZSwgMT4oYzIpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBjbGFtcGVkQWxw
aGE8VCwgdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkgfSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9y
VHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29t
cG9uZW50czxULCA0PiYgY29tcG9uZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNl
cHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAg
cmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzRXhj
ZXB0QWxwaGE8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBDb2xvclR5
cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBUIGMz
LCBBbHBoYSBhbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
RXhjZXB0QWxwaGEoVCBjMSwgVCBjMiwgVCBjMywgQWxwaGEgYWxwaGEpCiB7CiAgICAgcmV0dXJu
IG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAx
PihjMiksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGFscGhhIH0pOwogfQpA
QCAtMTI3LDEzICsxMzUsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBBbHBoCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdm9pZCBh
c3NlcnRJblJhbmdlKFQgY29sb3IpCiB7CiAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pIHsKLSAgICAgICAgYXV0byBjb21w
b25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgICAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGNvbXBvbmVudHNbaV0gPj0gVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAi
Q29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tp
XS5taW4pOwogICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9
IFQ6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBp
cyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gJWYiLCBpLCAgY29t
cG9uZW50c1tpXSwgVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4KTsKICAgICAgICAgfQot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5
cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBp
cyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3Iu
YWxwaGEsIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVu
dCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFp
dHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBp
cyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFs
cGhhLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzWzNdID49IEFscGhhVHJhaXRzPHR5
cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBp
cyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29tcG9u
ZW50c1szXSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFy
ZW50KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzWzNdIDw9IEFscGhh
VHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUsICJBbHBoYSBpcyAlZiBh
bmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gKG9wYXF1ZSkgJWYiLCBjb21w
b25lbnRzWzNdLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVl
KTsKICAgICB9CiB9CiAKQEAgLTE0Niw3ICsxNTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQpCiAjZW5kaWYKIAogdGVtcGxhdGU8dHlwZW5h
bWUsIHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzQ29udmVydGlibGVU
b0NvbG9yQ29tcG9uZW50cyA9IGZhbHNlOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNv
bnN0ZXhwciBib29sIElzQ29udmVydGlibGVUb0NvbG9yQ29tcG9uZW50czxULCBzdGQ6OnZvaWRf
dDxkZWNsdHlwZShhc0NvbG9yQ29tcG9uZW50cyhzdGQ6OmRlY2x2YWw8VD4oKSkpPj4gPSB0cnVl
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzQ29udmVydGli
bGVUb0NvbG9yQ29tcG9uZW50czxULCBzdGQ6OnZvaWRfdDxkZWNsdHlwZShhc0NvbG9yQ29tcG9u
ZW50cyhzdGQ6OmRlY2x2YWw8VD4oKS51bnJlc29sdmVkKCkpKT4+ID0gdHJ1ZTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nv
bXBvbmVudFR5cGVNZW1iZXIgPSBmYWxzZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBj
b25zdGV4cHIgYm9vbCBIYXNDb21wb25lbnRUeXBlTWVtYmVyPFQsIHN0ZDo6dm9pZF90PHR5cGVu
YW1lIFQ6OkNvbXBvbmVudFR5cGU+PiA9IHRydWU7CkBAIC0xNjYsOSArMTc0LDkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1Y3QgQ29sb3JXaXRoQWxwaGFIZWxwZXIgCiAgICAgLy8g
ZS5nLiBhdXRvIHllbGxvd1dpdGg1MFBlcmNlbnRBbHBoYSA9IENvbG9yOjp5ZWxsb3cuY29sb3JX
aXRoQWxwaGFCeXRlKDEyOCk7CiAgICAgY29uc3RleHByIFBhcmVudCBjb2xvcldpdGhBbHBoYUJ5
dGUodWludDhfdCBvdmVycmlkZUFscGhhKSBjb25zdAogICAgIHsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWVfdjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8UGFyZW50PigpLmFscGhh
KSwgdWludDhfdD4sICJPbmx5IHVpbnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1cHBvcnRl
ZC4iKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBQYXJl
bnQ6OkNvbXBvbmVudFR5cGUsIHVpbnQ4X3Q+LCAiT25seSB1aW50OF90IGJhc2VkIGNvbG9yIHR5
cGVzIGFyZSBzdXBwb3J0ZWQuIik7CiAKLSAgICAgICAgYXV0byBjb3B5ID0gKnN0YXRpY19jYXN0
PGNvbnN0IFBhcmVudCo+KHRoaXMpOworICAgICAgICBhdXRvIGNvcHkgPSBzdGF0aWNfY2FzdDxj
b25zdCBQYXJlbnQqPih0aGlzKS0+dW5yZXNvbHZlZCgpOwogICAgICAgICBjb3B5LmFscGhhID0g
b3ZlcnJpZGVBbHBoYTsKICAgICAgICAgcmV0dXJuIGNvcHk7CiAgICAgfQpAQCAtMTc4LDcgKzE4
Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9yV2l0aEFscGhhSGVs
cGVyIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zl90PElzQ29udmVydGlibGVUb0NvbG9yQ29tcG9uZW50czxDb2xvclR5cGU+PiogPSBudWxscHRy
PgogY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvclR5cGUmIGEsIGNvbnN0IENv
bG9yVHlwZSYgYikKIHsKLSAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xv
ckNvbXBvbmVudHMoYik7CisgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEudW5yZXNvbHZl
ZCgpKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiLnVucmVzb2x2ZWQoKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbnZlcnRp
YmxlVG9Db2xvckNvbXBvbmVudHM8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4KQEAgLTIwMyw3ICsy
MTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBELCB0eXBlbmFtZSBDb2xvclR5
cGUsIHQKICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9
CiAgICAgewotICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKKyAgICAgICAgYXNzZXJ0SW5S
YW5nZSgqc3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOwogICAgIH0KIAogICAg
IGNvbnN0ZXhwciBSR0JBVHlwZSgpCkBAIC0yMTEsMjEgKzIxOSwyMCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBELCB0eXBlbmFtZSBDb2xvclR5cGUsIHQKICAgICB7CiAgICAgfQog
CisKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVk
Q29sb3IoKnN0YXRpY19jYXN0PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsgfQorICAgIGNvbnN0
ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnN0
YXRpY19jYXN0PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAg
VCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgTSwgdHlwZW5hbWUgVEY+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xv
ckNvbXBvbmVudHMoY29uc3QgUkdCQVR5cGU8VCwgRCwgQ29sb3JUeXBlLCBNLCBURj4mIGMpCi17
Ci0gICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwotfQotCi0K
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZEdhbW1hRW5j
b2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVs
PFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVu
Y3Rpb25Nb2RlOjpDbGFtcGVkPj4gewotICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRH
YW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFu
c2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBl
Oworc3RydWN0IEJvdW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2Ft
bWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5
cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1v
ZGU6OkNsYW1wZWQ+PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFt
ZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpD
bGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRlcnBhcnQgPSBCb3Vu
ZGVkTGluZWFyRW5jb2RlZDxULCBEPjsKICAgICB1c2luZyBFeHRlbmRlZENvdW50ZXJwYXJ0ID0g
RXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwgRD47CkBAIC0yMzQsOCArMjQxLDggQEAgc3RydWN0IEJv
dW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtCiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNvZGVk
IDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQ+
LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rp
b25Nb2RlOjpDbGFtcGVkPj4gewotICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5l
YXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNm
ZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+OjpSR0JBVHlwZTsK
K3N0cnVjdCBCb3VuZGVkTGluZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5l
YXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5
cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1v
ZGU6OkNsYW1wZWQ+PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVu
Y29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5h
bWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6
Q2xhbXBlZD4+OjpSR0JBVHlwZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBsaW5lYXJU
b1hZWiA9IEQ6OmxpbmVhclRvWFlaOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB4eXpUb0xp
bmVhciA9IEQ6Onh5elRvTGluZWFyOwpAQCAtMjQ3LDggKzI1NCw4IEBAIHN0cnVjdCBCb3VuZGVk
TGluZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaQogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBFeHRlbmRlZEdhbW1hRW5jb2RlZCA6IFJH
QkFUeXBlPFQsIEQsIEV4dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVs
PFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVu
Y3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5k
ZWRHYW1tYUVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBl
ZD4+OjpSR0JBVHlwZTsKK3N0cnVjdCBFeHRlbmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQs
IEQsIEV4dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVz
czo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRy
YW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNz
OjpFeHRlbmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJh
bnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+OjpSR0JBVHlwZTsKIAogICAgIHVzaW5nIExp
bmVhckNvdW50ZXJwYXJ0ID0gRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+OwogICAgIHVzaW5n
IEJvdW5kZWRDb3VudGVycGFydCA9IEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD47CkBAIC0yNTYs
OCArMjYzLDggQEAgc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwg
RXh0ZW5kZWRHCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotc3RydWN0
IEV4dGVuZGVkTGluZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5j
b2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj4gewotICAg
IHVzaW5nIFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgRXh0ZW5k
ZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBU
cmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEV4dGVu
ZGVkTGluZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxU
LCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFt
cGVkPj4geworICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxU
LCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFt
cGVkPj46OlJHQkFUeXBlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFla
ID0gRDo6bGluZWFyVG9YWVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFy
ID0gRDo6eHl6VG9MaW5lYXI7CkBAIC00MzQsMTcgKzQ0MSwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgTGFiIDogQ29sb3JXaXRoQWxwaGFIZWxwZXIKICAgICB7CiAgICAgfQogCisg
ICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9y
KCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVy
biB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVz
czsKICAgICBUIGE7CiAgICAgVCBiOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRz
KGNvbnN0IExhYjxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBjLmIs
IGMuYWxwaGEgfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29u
c3RleHByIGJvb2wgSXNMYWIgPSBzdGQ6OmlzX3NhbWVfdjxMYWI8dHlwZW5hbWUgQ29sb3JUeXBl
OjpDb21wb25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBMQ0hBIENvbG9yIFR5
cGUuCkBAIC00NjksMTcgKzQ3NSwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTENI
QSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1
dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAg
IGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29s
b3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGNocm9t
YTsKICAgICBUIGh1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBM
Q0hBPFQ+JiBjKQotewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUs
IGMuYWxwaGEgfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29u
c3RleHByIGJvb2wgSXNMQ0hBID0gc3RkOjppc19zYW1lX3Y8TENIQTx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIE9LTGFiIENvbG9y
IFR5cGUuCkBAIC01MDQsMTcgKzUwOSwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
T0tMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHAKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHBy
IGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQor
ICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVk
Q29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGE7
CiAgICAgVCBiOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IE9LTGFi
PFQ+JiBjKQotewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc09LTGFiID0gc3RkOjppc19zYW1lX3Y8T0tMYWI8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBPS0xDSEEgQ29sb3IgVHlwZS4K
QEAgLTUzOSwxNyArNTQzLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xDSEEg
OiBDb2xvcldpdGhBbHBoYUhlbAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byBy
ZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29u
c3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigq
dGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwog
ICAgIFQgaHVlOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IE9LTENI
QTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5jaHJvbWEsIGMuaHVlLCBj
LmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0
ZXhwciBib29sIElzT0tMQ0hBID0gc3RkOjppc19zYW1lX3Y8T0tMQ0hBPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIApAQCAtNTc1LDE3ICs1NzgsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgOiBDb2xvcldpdGhBbHBoYUhlbHBl
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0
ZWQ6CiAgICAgVCBodWU7CiAgICAgVCBzYXR1cmF0aW9uOwogICAgIFQgbGlnaHRuZXNzOwogICAg
IFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEhTTEE8VD4mIGMpCi17Ci0gICAg
cmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlvbiwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKLX0K
LQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNI
U0xBID0gc3RkOjppc19zYW1lX3Y8SFNMQTx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIEhXQkEgQ29sb3IgVHlwZS4KQEAgLTYxMCwx
NyArNjEyLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIV0JBIDogQ29sb3JXaXRo
QWxwaGFIZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgp
IGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1
dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0K
KworcHJvdGVjdGVkOgogICAgIFQgaHVlOwogICAgIFQgd2hpdGVuZXNzOwogICAgIFQgYmxhY2tu
ZXNzOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEhXQkE8VD4mIGMp
Ci17Ci0gICAgcmV0dXJuIHsgYy5odWUsIGMud2hpdGVuZXNzLCBjLmJsYWNrbmVzcywgYy5hbHBo
YSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIg
Ym9vbCBJc0hXQkEgPSBzdGQ6OmlzX3NhbWVfdjxIV0JBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gWFlaIENvbG9yIFR5cGUuCkBA
IC02NDUsMTcgKzY0NiwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IHN0
cnVjdCBYWVpBIDogQ29sb3IKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVz
b2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0
ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRo
aXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIHg7CiAgICAgVCB5OwogICAgIFQgejsKICAgICBU
IGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgV2hpdGVQb2ludCBXPiBjb25zdGV4
cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFhZWkE8VCwg
Vz4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc1hZWkEg
PSBzdGQ6OmlzX3NhbWVfdjxYWVpBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwg
Q29sb3JUeXBlOjp3aGl0ZVBvaW50PiwgQ29sb3JUeXBlPjsKIAogLy8gUGFja2VkIENvbG9yIEZv
cm1hdHMKQEAgLTY2OCwxMSArNjY4LDE2IEBAIHN0cnVjdCBSR0JBIHsKICAgICB7CiAgICAgfQog
Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IFJHQkEoU1JHQkE8dWludDhfdD4gY29sb3IpCisgICAg
Y29uc3RleHByIGV4cGxpY2l0IFJHQkEoUmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8dWludDhfdD4+
IGNvbG9yKQogICAgICAgICA6IHZhbHVlIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9yLnJl
ZCA8PCAyNCB8IGNvbG9yLmdyZWVuIDw8IDE2IHwgY29sb3IuYmx1ZSA8PCA4IHwgY29sb3IuYWxw
aGEpIH0KICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGV4cGxpY2l0IFJHQkEoU1JHQkE8
dWludDhfdD4gY29sb3IpCisgICAgICAgIDogUkdCQSB7IGNvbG9yLnJlc29sdmVkKCkgfQorICAg
IHsKKyAgICB9CisKICAgICB1aW50MzJfdCB2YWx1ZTsKIH07CiAKQEAgLTY4Miw4ICs2ODcsMTMg
QEAgc3RydWN0IEFSR0IgewogICAgIHsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgZXhwbGljaXQg
QVJHQihTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgQVJHQihS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAgICAgICAgIDogdmFsdWUg
eyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29sb3IuYWxwaGEgPDwgMjQgfCBjb2xvci5yZWQgPDwg
MTYgfCBjb2xvci5ncmVlbiA8PCA4IHwgY29sb3IuYmx1ZSkgfQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgZXhwbGljaXQgQVJHQihTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICAgICAg
OiBBUkdCIHsgY29sb3IucmVzb2x2ZWQoKSB9CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxm
bG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIHJldHVybiB7IHIgKiBhLCBn
ICogYSwgYiAqIGEsIGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25z
dCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmICghYSkK
ICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZ0V4Y2VwdEFscGhhPFNSR0JBPGZsb2F0Pj4ociAvIGEsIGcgLyBhLCBiIC8gYSwgYSk7CkBA
IC00NCw3ICs0NCw3IEBAIFNSR0JBPGZsb2F0PiB1bnByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8
ZmxvYXQ+JiBjb2xvcgogCiBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JH
QkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAg
ICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQpAQCAtNTQsNyAr
NTQsNyBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHQkE8dWludDhf
dD4gY28KIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1
cm4geyAwLCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQpAQCAtNjksNyArNjksNyBAQCBz
dGF0aWMgaW5saW5lIHVpbnQxNl90IHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUodWkKIAog
U1JHQkE8dWludDhfdD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBj
b2xvci5yZXNvbHZlZCgpOwogICAgIGlmICghYSB8fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJu
IGNvbG9yOwogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhh
PFNSR0JBPHVpbnQ4X3Q+Pih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIsIGEpLCB1bnBy
ZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRC
eXRlKGIsIGEpLCBhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMjEgKzQ2LDIxIEBAIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JB
Qnl0ZShmbG9hdCk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRCeXRlQWxwaGFUbyh1
aW50OF90KTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0QWxwaGFUbyhmbG9h
dCk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29s
b3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5
cGUmLCBGdW5jdG9yJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBG
dW5jdG9yPiBhdXRvIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBD
b2xvclR5cGUmLCBGdW5jdG9yJiYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlw
ZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxv
YXQgb3ZlcnJpZGVBbHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhw
ciBhdXRvIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90
IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGNvbG9y
V2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGlu
dmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qg
b3ZlcnJpZGVBbHBoYSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBp
bnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBv
dmVycmlkZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1
dG8gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWlu
dDhfdCBvdmVycmlkZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBp
bnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBv
dmVycmlkZUFscGhhKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNMQ0hNb2RlbDxD
b2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4
cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+
IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhw
ciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4+
KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0hXQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxhY2so
Y29uc3QgQ29sb3JUeXBlJik7CiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBib29s
IGlzQmxhY2soY29uc3QgWFlaQTxmbG9hdCwgVz4mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+
IHx8IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Piog
PSBudWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNS
R0JNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+KiA9
IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JH
Qk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29u
c3QgQ29sb3JUeXBlJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0
ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7CiB0ZW1wbGF0ZTxXaGl0ZVBvaW50
IFc+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgWFlaQTxmbG9hdCwgVz4mKTsKIApAQCAt
OTMsMzUgKzkzLDM1IEBAIHRlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhh
VG88ZmxvYXQ+KGZsbwogICAgIHJldHVybiBjbGFtcGVkQWxwaGEodmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwg
RnVuY3RvciYmIGZ1bmN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+IGF1dG8gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0
IENvbG9yVHlwZSYgY29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQogewotICAgIGF1dG8gY29tcG9u
ZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBh
c0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21w
b25lbnRzOwogICAgIGNvcHlbMF0gPSBzdGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzBd
KTsKICAgICBjb3B5WzFdID0gc3RkOjppbnZva2UoZnVuY3RvciwgY29tcG9uZW50c1sxXSk7CiAg
ICAgY29weVsyXSA9IHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwg
Y29tcG9uZW50c1syXSk7Ci0gICAgcmV0dXJuIHsgY29weVswXSwgY29weVsxXSwgY29weVsyXSwg
Y29weVszXSB9OworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90
IG92ZXJyaWRlQWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBh
dXRvIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50
OF90IG92ZXJyaWRlQWxwaGEpCiB7Ci0gICAgYXV0byBjb3B5ID0gY29sb3I7CisgICAgYXV0byBj
b3B5ID0gY29sb3IudW5yZXNvbHZlZCgpOwogICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFs
cGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsK
ICAgICByZXR1cm4gY29weTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZs
b2F0IG92ZXJyaWRlQWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJy
aWRlQWxwaGEpCiB7Ci0gICAgYXV0byBjb3B5ID0gY29sb3I7CisgICAgYXV0byBjb3B5ID0gY29s
b3IudW5yZXNvbHZlZCgpOwogICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAgcmV0
dXJuIGNvcHk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENv
bG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUm
IGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBhdXRvIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBzdGF0aWNf
YXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CiAKLSAgICBhdXRvIGNvbXBv
bmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb21wb25lbnRzID0g
YXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSk7CiAgICAgYXV0byBjb3B5ID0gY29t
cG9uZW50czsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCkBAIC0xMzEs
MTEgKzEzMSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xv
clR5cGUgaW52ZXIKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29w
eSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVk
Q29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92
ZXJyaWRlQWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gaW52ZXJ0ZWRD
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3Zl
cnJpZGVBbHBoYSkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52
ZXJ0aWJsZSk7CiAKLSAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cik7CisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2
ZWQoKSk7CiAgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAzOyArK2kpCkBAIC0xNDcsMTkgKzE0NywyMSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2kKIAogdGVtcGxhdGU8V2hpdGVQ
b2ludCBXPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IFhZWkE8ZmxvYXQsIFc+JiBjb2xv
cikKIHsKLSAgICByZXR1cm4gY29sb3IueSA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJh
aXRzPGZsb2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29s
dmVkKCk7CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IueSA9PSAwICYmIHJlc29sdmVkQ29sb3Iu
YWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFiTW9kZWw8Q29s
b3JUeXBlPiB8fCBVc2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9kZWw8Q29sb3JU
eXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQog
ewotICAgIHJldHVybiBjb2xvci5saWdodG5lc3MgPT0gMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBo
YVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5y
ZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAwICYmIHJl
c29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2Vz
UkdCTW9kZWw8Q29sb3JUeXBlPnx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4K
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxV
c2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBD
b2xvclR5cGUmIGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9y
OworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAg
Y29uc3RleHByIGF1dG8gY29tcG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVu
dEluZm87CiAgICAgcmV0dXJuIGMxID09IGNvbXBvbmVudEluZm9bMF0ubWluICYmIGMyID09IGNv
bXBvbmVudEluZm9bMV0ubWluICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWluICYmIGFscGhh
ID09IEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1
ZTsKIH0KQEAgLTE2NywyNCArMTY5LDI3IEBAIGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJv
b2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5i
bGFja25lc3MgPT0gMTAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3Bh
cXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0
dXJuIHJlc29sdmVkQ29sb3IuYmxhY2tuZXNzID09IDEwMCAmJiByZXNvbHZlZENvbG9yLmFscGhh
ID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50
IFc+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQog
ewotICAgIHJldHVybiBjb2xvci55ID09IDEgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8
ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQo
KTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci55ID09IDEgJiYgcmVzb2x2ZWRDb2xvci5hbHBo
YSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5
cGU+IHx8IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+
Pio+CiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0g
ICAgcmV0dXJuIGNvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFU
cmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVz
b2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5saWdodG5lc3MgPT0gMTAwICYmIHJl
c29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2Vz
UkdCTW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxDb2xvclR5cGU+Pio+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8
VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xv
cjsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAg
IGNvbnN0ZXhwciBhdXRvIGNvbXBvbmVudEluZm8gPSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25l
bnRJbmZvOwogICAgIHJldHVybiBjMSA9PSBjb21wb25lbnRJbmZvWzBdLm1heCAmJiBjMiA9PSBj
b21wb25lbnRJbmZvWzFdLm1heCAmJiBjMyA9PSBjb21wb25lbnRJbmZvWzJdLm1heCAmJiBhbHBo
YSA9PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFx
dWU7CiB9CkBAIC0xOTIsNyArMTk3LDggQEAgY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBD
b2xvclR5cGUmIGNvbG9yKQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9v
bCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLndo
aXRlbmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFx
dWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1
cm4gcmVzb2x2ZWRDb2xvci53aGl0ZW5lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEg
PT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIGNvbnN0ZXhwciB1aW50MTZfdCBm
YXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRGcm9tVmFsdWUoY29uc3QgQ29sbwogewogICAgIGlmICghaXNCYXNpY0Fu
aW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1
ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVl
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBbc3Rh
dGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZh
bHVlOkBbQChyKSwgQChnKSwgQChiKSwgQChhKV1dOwogfQogCkBAIC00NjcsNyArNDY3LDcgQEAg
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdWUoY29uc3QgQ29sb3ImCiB7
CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwgQChhKV1dOwogfQogCkBA
IC01MjQsNyArNTI0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVl
cyhjb25zdCBWZWN0b3I8CiAgICAgICAgIHJldHVybjsKIAogICAgIFtzdGF0aWNfY2FzdDxDQUtl
eWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNB
cnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IudGVtcGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudGVtcGxhdGUgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50
OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4gQFtAKHIpLCBAKGcpLCBAKGIpLCBA
KGEpXTsKICAgICB9KS5nZXQoKV07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRp
b25XaW4uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZyb21W
YWx1ZShjb25zdCBXZWJDb3IKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21w
b25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRz
LmFscGhhIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZW
ZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmlt
YXRpb24uZ2V0KCksIHYuZ2V0KCkpOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbldpbjo6c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOgogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29tcG9uZW50
cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29tcG9uZW50cyA9
IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21w
b25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3Rv
clJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1h
dGlvblNldFRvVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYuZ2V0KCkpOwpAQCAtNDkzLDcgKzQ5
Myw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3Rv
cjxXZQogICAgICAgICAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0g
YWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJy
YXlDYWxsQmFja3MpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlW2ldLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOworICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZVtpXS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIENHRmxvYXQgYVs0
XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwg
Y29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9
IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBlbmRW
YWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBj
b3B5Q29udGV4dFByb3BlcnRpZXMoY2Fpcm9fdCogc3JjQ3IsIGNhaXJvX3QqIGRzCiAKIHZvaWQg
c2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0
LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgR3JhZGllbnQ6OnN0
b3BzQ2hhbmdlZCgpCiAKIHN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVy
bl90ICpncmFkaWVudCwgR3JhZGllbnRDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEp
CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xv
cl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxw
aGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBz
dGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwg
aW50IGlkLCBHcmFkaWVudENvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVy
X2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNH
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NywxMiArMTQ3LDEyIEBAIHN0
YXRpYyBzdGQ6OnBhaXI8Q0dDb2xvclNwYWNlUmVmLCBDb2xvckNvbXBvbmVudHM8ZmxvYQogICAg
IGlmICghY2dDb2xvclNwYWNlKSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNTX0VYVEVOREVEX1NS
R0JfQ09MT1JfU1BBQ0UpCiAgICAgICAgIGF1dG8gY29tcG9uZW50c0NvbnZlcnRlZFRvRXh0ZW5k
ZWRTUkdCQSA9IGNhbGxXaXRoQ29sb3JUeXBlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UsIFtdIChj
b25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKKyAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9h
dD4+KGNvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB7IGV4
dGVuZGVkU1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50c0NvbnZlcnRlZFRvRXh0ZW5kZWRT
UkdCQSB9OwogI2Vsc2UKICAgICAgICAgYXV0byBjb21wb25lbnRzQ29udmVydGVkVG9TUkdCQSA9
IGNhbGxXaXRoQ29sb3JUeXBlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UsIFtdIChjb25zdCBhdXRv
JiBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRD
b2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHsgc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9u
ZW50c0NvbnZlcnRlZFRvU1JHQkEgfTsKICNlbmRpZgpAQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRp
YyBzdGQ6OnBhaXI8Q0dDb2xvclNwYWNlUmVmLCBDb2xvckNvbXBvbmVudHM8ZmxvYQogCiBzdGF0
aWMgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNyZWF0ZUNHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3IuY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNv
bG9yLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIGF1dG8gW2Nn
Q29sb3JTcGFjZSwgY2dDb21wYXRpYmxlQ29tcG9uZW50c10gPSBjb252ZXJ0VG9DR0NvbXBhdGli
bGVDb21wb25lbnRzKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOwogICAgIAogICAgIGF1dG8gW2Mx
LCBjMiwgYzMsIGM0XSA9IGNnQ29tcGF0aWJsZUNvbXBvbmVudHM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVy
ZXJDRy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Miw4
ICs0NzIsNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJD
Rzo6bWFrZUcKICAgICAvLyBleHRlbmRlZCBzUkdCIGZvciBhbGwgZ3JhZGllbnRzLgogICAgIGlm
IChoYXNPbmx5Qm91bmRlZFNSR0JDb2xvclN0b3BzKHN0b3BzKSkgewogICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0b3AgOiBzdG9wcykgewotICAgICAgICAgICAgYXV0byBbY29sb3JTcGFjZSwg
Y29tcG9uZW50c10gPSBzdG9wLmNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Ci0gICAg
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgICAgICAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+
KCkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBl
bmQocik7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKGcpOwog
ICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChiKTsKQEAgLTQ4OCw5
ICs0ODcsOSBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJD
Rzo6bWFrZUcKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBzdG9wcykgewogI2lm
IEhBVkUoQ09SRV9HUkFQSElDU19FWFRFTkRFRF9TUkdCX0NPTE9SX1NQQUNFKQotICAgICAgICAg
ICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3Au
Y29sb3IudG9Db2xvclR5cGVMb3NzeTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgp
OwogI2Vsc2UKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwogI2VuZGlmCiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5k
KHIpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChnKTsKQEAg
LTU0Niw3ICs1NDUsNyBAQCB2b2lkIEdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGlu
Z0Z1bmN0aW9uKHZvaWQKICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPEludGVycG9sYXRpb25T
cGFjZUNvbG9yVHlwZT4oc3RvcDEuY29sb3JDb21wb25lbnRzKSwgb2Zmc2V0KTsKIAogICAgIC8v
IDQuIENvbnZlcnQgdG8gdGhlIG91dHB1dCBjb2xvciBzcGFjZS4KLSAgICBhdXRvIGludGVycG9s
YXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZSA9IGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxPdXRwdXRTcGFjZUNvbG9yVHlwZT4oaW50ZXJwb2xhdGVkQ29sb3IpKTsKKyAgICBh
dXRvIGludGVycG9sYXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZSA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxPdXRwdXRTcGFjZUNvbG9yVHlwZT4oaW50ZXJwb2xhdGVkQ29s
b3IpLnJlc29sdmVkKCkpOwogCiAgICAgLy8gNS4gV3JpdGUgY29sb3IgY29tcG9uZW50cyB0byAn
b3V0JyBwb2ludGVyLgogICAgIGZvciAoc2l6ZV90IGNvbXBvbmVudEluZGV4ID0gMDsgY29tcG9u
ZW50SW5kZXggPCBpbnRlcnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0U3BhY2Uuc2l6ZSgp
OyArK2NvbXBvbmVudEluZGV4KQpAQCAtNTYwLDcgKzU1OSw3IEBAIEdyYWRpZW50UmVuZGVyZXJD
Rzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlUwogICAgICAgICAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24oY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLmNvbG9yU3BhY2UsCiAgICAg
ICAgICAgICAgICAgWyZdIChhdXRvJiBjb2xvclNwYWNlKSAtPiBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IHsKICAgICAgICAgICAgICAgICAgICAgdXNpbmcgQ29sb3JUeXBlID0gdHlwZW5hbWUg
c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoY29sb3JTcGFjZSk+OjpDb2xvclR5cGU7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci50ZW1w
bGF0ZSB0b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICApOwogICAgICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyAr
MTExLDcgQEAgaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24oY29uc3Qg
TGlnaHRpCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAgICAgZmxvYXRBcmd1
bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgYXV0byBjb2xvciA9IG1fbGlnaHRpbmdDb2xvci50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbG9yID0gbV9saWdodGluZ0NvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZs
b2F0QXJndW1lbnRzLmNvbG9yUmVkID0gY29sb3IucmVkOwogICAgIGZsb2F0QXJndW1lbnRzLmNv
bG9yR3JlZW4gPSBjb2xvci5ncmVlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTkgKzkyLDE5IEBA
IGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoUwog
ewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHUkFZU0NBTEU6IHsKLSAgICAgICAg
Y29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGdyYXlzY2Fs
ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHND
bGFtcGluZzxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgp
KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBTRVBJQTogewotICAg
ICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2Vw
aWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVfUk9UQVRFOiB7Ci0g
ICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+Piho
dWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21w
b25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3Vu
dCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVz
b2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0FUVVJB
VEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxm
bG9hdD4+KHNhdHVyYXRpb25Db2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRy
aXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBk
ZWZhdWx0OgpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQwogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBPUEFDSVRZOgotICAgICAgICBjb2xvci5hbHBoYSAqPSBtX2Ftb3VudDsKKyAgICAgICAg
Y29sb3IgPSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29sb3IsIHN0ZDo6Y2xhbXA8ZmxvYXQ+
KGNvbG9yLnJlc29sdmVkKCkuYWxwaGEgKiBtX2Ftb3VudCwgMC4wZiwgMS4wZikpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIElOVkVSVDogewogICAgICAgICBmbG9hdCBvbmVNaW51
c0Ftb3VudCA9IDEuMGYgLSBtX2Ftb3VudDsKQEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBodWVSb3RhdGUoY29uc3QgQ29sb3IKIAogYm9vbCBJbnZl
cnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYg
Y29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVl
Um90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgMC41Zik7CisgICAgYXV0byBodWVSb3Rh
dGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJl
c29sdmVkKCkpLCAwLjVmKTsKICAgICAKICAgICAvLyBBcHBseSB0aGUgbWF0cml4LiBTZWUgcmRh
cjovL3Byb2JsZW0vNDExNDY2NTAgZm9yIGhvdyB0aGlzIG1hdHJpeCB3YXMgZGVyaXZlZC4KICAg
ICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8NSwgMz4gdG9EYXJrTW9kZU1hdHJpeCB7CkBAIC0zMTYs
NyArMzE2LDcgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmludmVyc2VU
cmFuc2Zvcm1DCiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVm
LAogICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07
Ci0gICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0b0xpZ2h0TW9kZU1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
OworICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRzID0gdG9MaWdodE1vZGVN
YXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3Iu
cmVzb2x2ZWQoKSkpOwogCiAgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVl
Um90YXRlKGNvbnZlcnRlZFRvTGlnaHRNb2RlQ29tcG9uZW50cywgMC41Zik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6dHJhbnNm
b3JtQ29sb3IoQ29sb3ImIGNvbG9yKSBjbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9v
cGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdC
QUNvbG9yKSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVy
c2VUcmFuc2Zvcm1Db2xvcihDb2xvciYgY28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CiAKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1f
b3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJzZVRyYW5zZm9ybUNv
bG9yKHNSR0JBQ29sb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNyArMzI2LDcgQEAgdm9pZCBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IExpCiB7CiAgICAg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGRh
dGEubGlnaHRpbmdDb2xvci50b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpk
YXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCiAgICAgZGF0YS5s
aWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5maWx0ZXIsICpkYXRhLnJlc3VsdCwg
cGFpbnRpbmdEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWMKICAgICBzdGF0aWMg
aW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpIHsgcmV0
dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7IH0KICAgICBzdGF0aWMgaW5saW5lIFBhY2tlZENvbG9y
OjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JB
IHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OyB9CiAK
LSAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JD
b21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxW
YWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
YXNTUkdCQShwaXhlbCkucmVzb2x2ZWQoKSk7IH0KICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xvcikKIAogQ29sb3I6
Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIHsgciwgZywgYiwg
YSB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGYKICAgICBSZWY8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcik7CiAgICAgZ2xVc2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlw
bGllZChjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gcHJlbXVsdGlwbGllZChjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSku
cmVzb2x2ZWQoKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIs
IGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc2LDcgKzI3Niw3IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKGludCBudW1iZXIsIGNvbnN0IENvbAog
ICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwogCiAgICAgLy8gU2luY2Ug
d2Ugd29uJ3Qgc3dhcCBSK0Igd2hlbiB1cGxvYWRpbmcgYSB0ZXh0dXJlLCBwYWludCB3aXRoIHRo
ZSBzd2FwcGVkIFIrQiBjb2xvci4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2JhKGNyLCBiLCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwg
d2lkdGgsIGhlaWdodCk7CkBAIC00MTUsNyArNDE1LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZp
bHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNo
YWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAg
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCku
dG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
cHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0
Pj4oKSkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JM
b2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0u
Ymx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zm
c2V0TG9jYXRpb24oKSwgMCwgMCk7CkBAIC03MzUsNyArNzM1LDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgCiAgICAgaWYgKGNsaXBTdGFj
aygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQogICAgICAgICBwcmVwYXJlUm91bmRlZFJl
Y3RDbGlwKHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q29tcG9uZW50cygp
LCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zvcm1Db21wb25lbnRzKCksIGNs
aXBTdGFjaygpLnJvdW5kZWRSZWN0Q291bnQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2Nh
dGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAoYSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQp
CiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwpAQCAtNzQ1LDcgKzc0NSw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmIAogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBnbENsZWFyKEdM
X0NPTE9SX0JVRkZFUl9CSVQpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTMgQEAgQ29sb3I6OkNvbG9yKEQyRDFf
Q09MT1JfRiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0CiB7
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9CiAKIENvbG9yOjpv
cGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIHJldHVybiBEMkQxOjpW
ZWN0b3I0RihyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRp
ZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIElEMkQxQnJ1
c2gqIEdyYWRpZW50OjpjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRhcmdldCogcgogICAgIGdyYWRp
ZW50U3RvcHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0b3BzLnNpemUoKSk7CiAgICAgZm9y
IChhdXRvJiBzdG9wIDogbV9zdG9wcykgewogICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG5vbi1zUkdCQSBjb2xvciBzcGFjZXMuCi0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0
b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgICAgIGdyYWRpZW50U3RvcHMuZ3JhZGllbnRTdG9wcy51bmNoZWNrZWRBcHBlbmQoRDJE
MTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24g
Mjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDcgKzM2NSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbAogCiBE
MkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhh
KGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJu
IEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2
aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU5NCw3ICsxNTk0LDcgQEAgY29uc3RleHByIGZsb2F0IGRh
dGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVuCiBDb2xvciBSZW5kZXJUaGVtZTo6
ZGF0ZVBsYWNlaG9sZGVyVGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENv
bG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVz
aW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFuIEhTTEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVyY2Vw
dHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBjbGFtcGluZyB0byBzUkdCIGdhbXV0LCB3aGljaCBp
cyB3aGF0IEhTTEEgZG9lcy4KLSAgICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVM
b3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5
cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGlmICh0ZXh0Q29sb3IubHVt
aW5hbmNlKCkgPCBiYWNrZ3JvdW5kQ29sb3IubHVtaW5hbmNlKCkpCiAgICAgICAgIGhzbGEubGln
aHRuZXNzICs9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3RvciAq
ICgxMDAuMGYgLSBoc2xhLmxpZ2h0bmVzcyk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzA3LDcgKzEzMDcsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29y
YXRpb25zKGNvbnN0IFJlbmQKIHN0YXRpYyBib29sIHNob3VsZFVzZUNvbnZleEdyYWRpZW50KGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVz
b2x2ZWQoKTsKICAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyBy
LCBnLCBiIH0pOwogICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwg
PCAwLjU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRp
b25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5o
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDEwICs4MSwxMCBAQCBjbGFzcyBTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uIDogcHVibGljIFNW
R0FuaW1hdGlvbkEKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50JiwgZmxvYXQgcHJvZ3Jl
c3MsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAg
ICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25N
b2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
LSAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0aW9u
KCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQg
PSBhbmltYXRlZC50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7
CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25N
b2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9D
b2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRv
IHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIAogICAgICAgICBm
bG9hdCByZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJv
bS5yZWQsIHNpbXBsZVRvLnJlZCwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkLCBzaW1wbGVB
bmltYXRlZC5yZWQpOwogICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jl
c3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ncmVlbiwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24uZ3JlZW4sIHNpbXBsZUFuaW1hdGVkLmdyZWVuKTsKQEAgLTEwMyw4
ICsxMDMsOCBAQCBjbGFzcyBTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uIDogcHVibGljIFNWR0Fu
aW1hdGlvbkEKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNv
bG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9D
b2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0g
ZnJvbUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
KyAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgICAgIGZsb2F0IHJlZCA9IHNpbXBsZUZyb20u
cmVkIC0gc2ltcGxlVG8ucmVkOwogICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20uZ3Jl
ZW4gLSBzaW1wbGVUby5ncmVlbjsKQEAgLTExNiw4ICsxMTYsOCBAQCBjbGFzcyBTVkdBbmltYXRp
b25Db2xvckZ1bmN0aW9uIDogcHVibGljIFNWR0FuaW1hdGlvbkEKIHByaXZhdGU6CiAgICAgdm9p
ZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCYpIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAg
ICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICAgICAgLy8gSWdub3Jl
cyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgogICAg
ICAgICBtX3RvID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+KHNp
bXBsZVRvLnJlZCArIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20u
Z3JlZW4sIHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOwpJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMjItMDEtMDIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCByZXNvbHZlZC91bnJlc29sdmVkIGNvbG9yIHR5cGUgYWNjZXNz
b3JzIHRvIHJlcXVpcmUgdXNlcnMgdG8gYmUgZXhwbGljaXQgYWJvdXQgd2hldGhlciB0aGV5IHdp
bGwgaGFuZGxlIG1pc3Npbmcvbm9uZSBjb2xvciBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQ29sb3I6OnRv
U1JHQkFMb3NzeTw+KCkgd2l0aCBDb2xvcjo6dG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+PigpIGFu
ZCBhZGQKKyAgICAgICAgY2FsbHMgdG8gcmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29sb3IgY29tcG9u
ZW50cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2
YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRD
b2xvckZpbGxGcm9tV2ViQ29yZUNvbG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAg
KFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6
OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKToKKwogMjAyMS0xMi0yNiAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBXZWJLaXQvQ29jb2FDb2xvci5o
IHdpdGggV2ViQ29yZS9Db2xvckNvY29hLmgsIG5vdCBjb25mdXNpbmcgYXQgYWxsCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxh
eVN0YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVBy
aXZhdGVQbGF5U3RhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgc3Rh
dGljIHZvaWQgZHJhd1BhZ2VCYWNrZ3JvdW5kKGNhaXJvX3QqIGN0eCwgY29uc3Qgc3RkCiAgICAg
aWYgKCFiYWNrZ3JvdW5kQ29sb3IgfHwgYmFja2dyb3VuZENvbG9yLnZhbHVlKCkuaXNWaXNpYmxl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3Vu
ZENvbG9yLnZhbHVlKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVp
bnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3R4LCBy
LCBnLCBiLCBhKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3R4LCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29yZUNv
bG9yKGNvbnN0IFdlYkNvcmU6OkNvCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNvbG9y
LmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBjb2xvci0+
cmVkID0gcjsKICAgICBjb2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBl
R2VzdHVyZShXZWJCYWNrRgogICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAg
ICAgICBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9yOwogICAgICAg
ICAgICAgaWYgKCFtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAgICAgICAgICAg
ICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKKyAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0g
PSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogI2lm
IFVTRShHVEs0KQogICAgICAgICAgICAgICAgIEdka1JHQkEgcmdiYSA9IHsgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEgfTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0
dGVybiA9IGFkb3B0R1JlZihnc2tfY29sb3Jfbm9kZV9uZXcoJnJnYmEsICZib3VuZHMpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIGJvb2wgV2ViRnJhbWU6
OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKGRvdWJsZSogcmVkLAogICAgIGlmICghYmdDb2xv
ci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBiZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgKnJlZCA9IHI7CiAgICAgKmdyZWVuID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQko
cmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTY4MSw3ICs2ODEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TT2JqZWN0PiBhbmltYXRpb25W
YWx1ZUZyb21LZXlmcmFtZVYKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlmcmFtZVZhbHVl
LAogICAgICAgICBbJl0oY29uc3QgZmxvYXQgbnVtYmVyKSAtPiBSZXRhaW5QdHI8TlNPYmplY3Q+
IHsgcmV0dXJuIEAobnVtYmVyKTsgfSwKICAgICAgICAgWyZdKGNvbnN0IFdlYkNvcmU6OkNvbG9y
IGNvbG9yKSAtPiBSZXRhaW5QdHI8TlNPYmplY3Q+IHsKLSAgICAgICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gIGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICAgICAgYXV0
byBbciwgZywgYiwgYV0gPSAgY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgcmV0dXJuIEBbIEAociksIEAoZyksIEAoYiksIEAo
YSkgXTsKICAgICAgICAgfSwKICAgICAgICAgWyZdKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQz
RCBwb2ludCkgLT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc1MjEpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAyMi0wMS0wMiAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3Vu
cmVzb2x2ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBs
aWNpdCBhYm91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNv
bXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBDb2xvcjo6dG9T
UkdCQUxvc3N5PD4oKSB3aXRoIENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPD4+KCkgYW5k
IGFkZAorICAgICAgICBjYWxscyB0byByZXNvbHZlZCgpIHRvIGFjY2VzcyBjb2xvciBjb21wb25l
bnRzLiBBbHNvIHVwZGF0ZSB0byBuZXcgbmFtZSBvZiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
LAorICAgICAgICBjb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoYW5nZUNvbnRleHRDb250
ZW50cyk6CisgICAgICAgIFJlcGxhY2UgdW5uZWNlc3NhcnkgdXNlIG9mIGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCkgd2l0aCB0aGUgbW9yZSBjb21tb24gdG9Db2xvclR5cGVMb3NzeTxXZWJDb3Jl
OjpTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKS4KKwogMjAyMi0wMS0wMSAgSmVhbi1ZdmVzIEF2
ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2UgU2hhcmVkQnVmZmVyOjpjb3B5
KCkgcmV0dXJuIGEgY29udGlndW91cyBTaGFyZWRCdWZmZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0
ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8gaHNsYUNv
bG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhz
bGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQo
KTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNTcsNyArNTcsNyBAQCBURVNU
KENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFj
azsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZs
b2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNM
QTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpA
QCAtNzMsNyArNzMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7CiAgICAgQ29sb3Ig
Y29sb3IgPSBDb2xvcjo6cmVkOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9D
b2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTg5LDcgKzg5LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xf
R3JlZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JlZW47CiAKLSAgICBhdXRvIGhz
bGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0
byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBF
WFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMDUsNyArMTA1
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IENv
bG9yOjpibHVlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5
PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVM
b3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDI0
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLnNh
dHVyYXRpb24pOwpAQCAtMTIxLDcgKzEyMSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0RhcmtH
cmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmRhcmtHcmF5OwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMzcsNyArMTM3LDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9y
OjpncmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhT
TEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CkBAIC0xNTMsNyArMTUzLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQog
ewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gaHNsYUNv
bG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhz
bGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQo
KTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTgxLDcgKzE4MSw3IEBAIFRF
U1QoQ29sb3IsIFZhbGlkaXR5KQogCiAgICAgdmFsaWRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsg
MSwgMiwgMywgNCB9OwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAg
ICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0VR
KHZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JD
b21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMu
Ymx1ZSwgMyk7CkBAIC0xODksNyArMTg5LDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAKICAg
ICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3IpKTsKICAgICBF
WFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIGF1dG8geWV0
QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29sb3IudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVu
dHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9u
ZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVu
dHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVu
dHMuYmx1ZSwgMyk7CkBAIC0xOTcsNyArMTk3LDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAK
ICAgICBvdGhlclZhbGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJWYWxpZENvbG9yKTsKICAg
ICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBhdXRvIG90aGVy
VmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CisgICAgYXV0byBvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBF
WFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9F
UShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBFQ1RfRVEob3Ro
ZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKQEAgLTIwOSwyMCArMjA5LDIwIEBAIFRF
U1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoQ29sb3I6OmJs
YWNrKS5sdW1pbmFuY2UoKSwgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKENvbG9yOjp3
aGl0ZSkubHVtaW5hbmNlKCksIDEpOwogCi0gICAgYXV0byBjQ29tcG9uZW50cyA9IFNSR0JBPHVp
bnQ4X3Q+IHsgODUsIDkwLCAxNjAgfTsKKyAgICBhdXRvIGNDb21wb25lbnRzID0gU1JHQkE8dWlu
dDhfdD4geyA4NSwgOTAsIDE2MCB9LnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENv
bG9yKGNDb21wb25lbnRzKS5sdW1pbmFuY2UoKSwgMC4xMTc4MTQ1NSk7CiAKICAgICBFWFBFQ1Rf
RVEoY0NvbXBvbmVudHMucmVkLCA4NSk7CiAgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmdyZWVu
LCA5MCk7CiAgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmJsdWUsIDE2MCk7CiAKLSAgICBhdXRv
IGNMaWd0ZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5saWdodGVuZWQoKS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIGNMaWd0ZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5saWdo
dGVuZWQoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNMaWd0ZW5lZCkubHVtaW5hbmNlKCksIDAuMjkxNjgy
KTsKICAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLnJlZCwgMTMwKTsKICAgICBFWFBFQ1RfRVEoY0xp
Z3RlbmVkLmdyZWVuLCAxMzcpOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQuYmx1ZSwgMjQ0KTsK
IAotICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmRhcmtlbmVkKCkudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjQ29tcG9u
ZW50cykuZGFya2VuZWQoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29s
dmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNEYXJrZW5lZCkubHVtaW5hbmNlKCks
IDAuMDI3MDA2MjQyKTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLnJlZCwgNDApOwogICAgIEVY
UEVDVF9FUShjRGFya2VuZWQuZ3JlZW4sIDQzKTsKQEAgLTIzMyw3ICsyMzMsNyBAQCBURVNUKENv
bG9yLCBDb25zdHJ1Y3RvcikKIHsKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gYzEuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNl
LCBjb21wb25lbnRzXSA9IGMxLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygp
OwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMS4wLCByKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBURVNUKENvbG9yLCBDb3B5Q29u
c3RydWN0b3IpCiAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDEuMCB9IH07CiAgICAgQ29sb3IgYzIoYzEpOwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwg
Y29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21w
b25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKIAogICAg
IEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIFRFU1QoQ29sb3Is
IEFzc2lnbm1lbnQpCiAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CiAgICAgQ29sb3IgYzIgPSBjMTsKIAotICAgIGF1dG8gW2NvbG9yU3Bh
Y2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRv
IFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CiAK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKQEAgLTMyMyw3ICszMjMsNyBAQCBURVNUKENv
bG9yLCBNb3ZlQ29uc3RydWN0b3IpCiAgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRo
YXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxp
ZCgpKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMy
LmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIEVYUEVDVF9FUShj
b2xvclNwYWNlLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogCiAgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gY29tcG9uZW50czsKQEAgLTM0NCw3ICszNDQsNyBAQCBURVNUKENvbG9yLCBNb3Zl
QXNzaWdubWVudCkKICAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQgc28gdGhhdCBpdCBkb2Vz
bid0IGNhdXNlIGRlbGV0aW9uLgogICAgIEVYUEVDVF9GQUxTRShjMS5pc1ZhbGlkKCkpOwogCi0g
ICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9u
ZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFj
ZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2Us
IENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBj
b21wb25lbnRzOwpAQCAtMzcwLDcgKzM3MCw3IEBAIFRFU1QoQ29sb3IsIFJldHVyblZhbHVlcykK
IFRFU1QoQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKICAgICBDb2xvciBwM0NvbG9yIHsg
RGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBhdXRvIHNS
R0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JB
Q29sb3IgPSBwM0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVk
KCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKICAgICBFWFBF
Q1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1MzI4MmYpOwogICAgIEVYUEVDVF9G
TE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTI3NDhmKTsKQEAgLTM4MCw3ICszODAsNyBA
QCBURVNUKENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiBURVNUKENvbG9yLCBMaW5lYXJTUkdC
Q29udmVyc2lvblRvU1JHQikKIHsKICAgICBDb2xvciBsaW5lYXJTUkdCQUNvbG9yIHsgTGluZWFy
U1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwotICAgIGF1dG8gc1JHQkFD
b2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8g
c1JHQkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9h
dD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEu
MGYpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2Yp
OwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2Zik7CkBA
IC0zOTgsNyArMzk4LDcgQEAgVEVTVChDb2xvciwgQ29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkp
CiAKICAgICB7CiAgICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMC41KTsKLSAgICAgICAgYXV0byBbY29sb3JT
cGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9
IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29t
cG9uZW50cygpOwogICAgICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6U1JH
Qik7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKICAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHIsIDAuKTsKQEAgLTQwOSw3ICs0MDksNyBAQCBURVNUKENvbG9yLCBDb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeSkKIAogICAgIHsKICAgICAgICAgQ29sb3IgY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLik7
Ci0gICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNw
YWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICAgICAgRVhQRUNUX0VRKGNvbG9y
U3BhY2UsIENvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bXBvbmVudHM7CiAgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nv
Y29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDggQEAgc3RhdGljIDo6dGVz
dGluZzo6QXNzZXJ0aW9uUmVzdWx0IGNoYW5nZUNvbnRleHRDb250ZW50CiB7CiAgICAgY29udGV4
dC5tYXJrQ29udGV4dENoYW5nZWQoKTsKICAgICBXZWJDb3JlOjpDb2xvciBleHBlY3RlZCB7IGl0
ZXJhdGlvbiAlIDIgPyBXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gOiBXZWJDb3JlOjpDb2xvcjo6eWVs
bG93IH07Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBleHBlY3RlZC5jb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOwotICAgIFVOVVNFRF9WQVJJQUJMRShjb2xvclNwYWNlKTsK
LSAgICBjb250ZXh0LmNsZWFyQ29sb3IoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29t
cG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBleHBl
Y3RlZC50b0NvbG9yVHlwZUxvc3N5PFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgp
OworICAgIGNvbnRleHQuY2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBjb250ZXh0LmNsZWFy
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUKTsKICAgICB1aW50
OF90IGdvdFZhbHVlc1s0XSA9IHsgfTsKICAgICBhdXRvIHNhbXBsZUF0ID0gY29udGV4dC5nZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwo=
</data>
<flag name="commit-queue"
          id="474005"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448184</attachid>
            <date>2022-01-02 12:28:49 -0800</date>
            <delta_ts>2022-01-02 14:46:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved2.diff</filename>
            <type>text/plain</type>
            <size>156697</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRl
eHRBdHNwaS5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyNCwxMyArODI0LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0
dHJpYnV0ZXMgQWNjZXNzaWJpbGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAg
ICAgICAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9y
Li50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAg
ICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIs
ICcsJywgZywgJywnLCBiKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdD
b2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAg
ICAgICAgICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xv
ci4udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAg
ICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhy
LCAnLCcsIGcsICcsJywgYikpOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVu
ZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2lu
Z09iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29s
dmVkKCk7CiAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAl
Ny41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3
NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8
dWludDhfdD4gQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpDb2xvclZhbHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
OwogfQogCiBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1
YmxpYyBSZWZDb3VudGUKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVp
bnQ4X3Q+PiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NP
TVByaW1pdGl2ZVZhbHVlPiBjcmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVy
LCBOdW1iZXJUeXBlIG51bWJlcikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENT
U09NUkdCQ29sb3IgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVj
YXRlZENTU09NUkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9y
JiBjb2xvcikKLSAgICAgICAgOiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
KQorICAgICAgICA6IG1fY29sb3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpKQogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29s
b3IuZ3JlZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9y
LmJsdWUpKQpAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhf
dD4gbV9jb2xvcjsKKyAgICBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xv
cjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJl
ZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGlj
IENvbG9yIHBhcnNlUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYg
KCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IG9yaWdpbkNvbG9yQXNTUkdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6
OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1
OSw3ICsxNjU5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENT
U1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9
IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFs
dWVILCBDU1NVbml0VHlwZTo6Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3
NzMsNyArMTc3Myw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhD
U1NQYXJzZXJUb2tlbgogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxIV0JBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0Ig
PSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1Zh
bHVlSCwgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0x
ODQ5LDcgKzE4NDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMo
Q1NTUGFyc2VyVG9rZW4KICAgICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9
IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAK
ICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVl
TCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVz
cyB9LApAQCAtMTkyOSw3ICsxOTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQ
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmln
aW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNv
bG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNv
bHZlZCgpOwogCiAgICAgQ1NTQ2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAg
eyBDU1NWYWx1ZUwsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xD
SC5saWdodG5lc3MgfSwKQEAgLTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3
KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29s
b3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2
ZWQoKTsKIAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsg
Q1NTVmFsdWVSLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xv
clR5cGUucmVkICogMTAwLjAgfSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlk
ZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFla
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsK
IAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFs
dWVYLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0y
NDQ5LDcgKzI0NDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBz
dGF0aWMgQ29sb3IgbWkKICAgICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0
ZSB0b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUg
dGhlbiBpbnRlcnBvbGF0ZWQgaW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3Jp
YmVkIGluIENTUyBDb2xvciA0IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRv
IG1peGVkQ29sb3IgPSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xv
cjEsIG1peFBlcmNlbnRhZ2VzLnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2Vu
dGFnZXMucDIgLyAxMDAuMCk7CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xv
ckNvbXBvbmVudHM8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJw
b2xhdGlvbk1ldGhvZCwgY29udmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4w
LCBjb252ZXJ0ZWRDb2xvcjIsIG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7
CiAKICAgICAvLyAzLiBJZiBhbiBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcg
cGVyY2VudGFnZSBub3JtYWxpemF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRl
cnBvbGF0ZWQgcmVzdWx0CiAgICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVs
dGlwbGllci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5T
QXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAg
ICAgICAgICAgICAgICAgICBhdXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXh0Q29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgdXNpbmcgTENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJl
dHRlciBwZXJjZXB0dWFsIHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2Ft
dXQsIHdoaWNoIGlzIHdoYXQgSFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3Nz
eTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGb3JjZSB0aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRs
ZSwgYW5kIG11bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzbyB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3Vu
ZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNSwyNyArMTM1LDI1IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBs
ZUNvbG9yKERvY3VtZW50JgogICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JH
QkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3RE
YXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZm
ZXJlbmNlKExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBj
b2xvckRpZmZlcmVuY2UoY29uc3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiBy
aHMpCiB7Ci0gICAgcmV0dXJuIHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNz
LCAyKSArIHBvdyhyaHMuYSAtIGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1l
dHJpYyAoZGVsdGFFMjAwMCwgZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBl
cmNlcHR1YWxseSB1bmlmb3JtIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29s
b3JfZGlmZmVyZW5jZSkuCisKKyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJl
c29sdmVkKCk7CisgICAgYXV0byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQo
KTsKKworICAgIHJldHVybiBzcXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNz
IC0gcmVzb2x2ZWRMZWZ0SGFuZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0
SGFuZFNpZGUuYSAtIHJlc29sdmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmln
aHRIYW5kU2lkZS5iIC0gcmVzb2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMg
TGFiPGZsb2F0PiBhdmVyYWdlQ29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50
KQorc3RhdGljIExhYjxmbG9hdD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3Jz
KQogewotICAgIGZsb2F0IHRvdGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAw
OwotICAgIGZsb2F0IHRvdGFsQiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7
Ci0gICAgICAgIHRvdGFsQSArPSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9y
c1tpXS5iOwotICAgIH0KLSAgICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNv
dW50LAotICAgICAgICB0b3RhbEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0g
ICAgICAgIDEsCi0gICAgfTsKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7
IH07CisgICAgZm9yIChhdXRvIGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXND
b2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0
b3RhbHMgLz0gY29sb3JzLnNpemUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxz
WzFdLCB0b3RhbHNbMl0gfTsKIH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2Ft
cGxlcjo6c2FtcGxlVG9wKFBhZ2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBQYWdlQ29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBE
ZWNyZWFzZSB0aGUgd2lkdGggYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlz
IHdpdGhpbiBib3VuZHMgYW5kIG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9
IGZyYW1lVmlldy0+Y29udGVudHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51
bVNhbXBsZXMgPSA1OworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsK
ICAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExh
YjxmbG9hdD4gc2FtcGxlc1tudW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVt
U2FtcGxlcyAtIDFdOworICAgIHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2Ft
cGxlczsKKyAgICBzdGQ6OmFycmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2Vz
OwogCiAgICAgYXV0byBzaG91bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsm
XSAoc2l6ZV90IGkpIC0+IGJvb2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hp
bmcgY29sb3IgaXMgbm90IHRoZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFk
eSBpcyBhbiBub24tbWF0Y2hpbmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBQYWdlQ29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAg
fQogICAgIH0KIAotICAgIGF1dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0
byB2YWxpZFNhbXBsZUNvdW50ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29s
b3JJbmRleCkgewotICAgICAgICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRo
ZSBwb2ludGVyIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAg
Ly8gc3RhcnRzIGFuZCBkZWNyZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2Uu
Ci0gICAgICAgICsrc2FtcGxlc1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50
OwotICAgIH0gZWxzZSBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAx
KSB7Ci0gICAgICAgIC8vIFNraXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNv
dW50IG9mIHNhbXBsZXMgdG8gYXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50Owot
ICAgIH0KLSAgICByZXR1cm4gQ29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZh
bGlkU2FtcGxlQ291bnQpKTsKKyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1T
YW1wbGVzIC0gMSkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9
LnN1YnNwYW48MCwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
cmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdo
dGVuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2sp
CiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3Rk
OjptYXgoeyByLCBnLCBiIH0pOwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEs
NyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYm
IGFzSW5saW5lKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAg
IAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQg
bXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyAr
MTEyLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGln
aHRuZXNzKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3
aXRoIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyBy
LCBnLCBiIH0pOwogICAgIHJldHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyAr
MTYyLDIzIEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4g
eyBhc0lubGluZSgpLCBGbGFnczo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBDb2xvcjo6dG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBv
dXRwdXRDb2xvclNwYWNlKSBjb25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6
dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENv
bG9yU3BhY2UpIGNvbnN0CiB7Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNv
bXBvbmVudHMoaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsK
KyAgICBhdXRvIFtpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJl
c29sdmVkQ29sb3JDb21wb25lbnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29s
b3JDb21wb25lbnRzKGlucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFj
ZSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25l
bnRzSW5Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JT
cGFjZSkgY29uc3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRD
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBv
dXRwdXRDb2xvclNwYWNlKSBjb25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0
Q29sb3JDb21wb25lbnRzKGlucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JT
cGFjZSk7CisgICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3Bh
Y2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVz
b2x2ZUNvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENv
bG9yU3BhY2UpOwogfQogCi1zdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFp
cjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFj
ZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxp
bmUoKSkKLSAgICAgICAgcmV0dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBv
bmVudHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICBy
ZXR1cm4geyBjb2xvclNwYWNlKCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUo
KS5yZXNvbHZlZENvbXBvbmVudHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdC
LCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgp
KS5yZXNvbHZlZCgpKSB9OwogfQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7
IChwdWJsaWMpCiAKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJv
b2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUo
KS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5h
bHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhh
Qnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRv
PHVpbnQ4X3Q+KGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0g
ICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFz
T3V0T2ZMaW5lKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUo
KS5hbHBoYSk7IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxp
bmUoKSA/IGFzT3V0T2ZMaW5lKCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCku
cmVzb2x2ZWQoKS5hbHBoYSA9PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAu
MCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhh
Qnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRv
PHVpbnQ4X3Q+KGFzT3V0T2ZMaW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJu
IGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRC
eXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgZG91YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIGRvdWJsZSBsaWdodG5lc3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5n
IHVzZXMgd2l0aCBsdW1pbmFuY2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7
IChwdWJsaWMpCiAgICAgLy8gb3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRo
YW4gdGhlIGN1cnJlbnQgdW5kZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gQ29sb3JUeXBlIHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRo
aXMgd2lsbCBjb252ZXJ0IHRoZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFs
bHkgbG9zc2lseSBpZiB0aGUgZ2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBz
bWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVu
aWVuY2UKLSAgICAvLyB3cmFwcGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVy
biB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2Up
IGNvbnN0OworICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsK
IAotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9y
U3BhY2UoQ29sb3JTcGFjZSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0
b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JD
b21wb25lbnRzPGZsb2F0LCA0Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRz
KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsK
LQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yIGRhcmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAg
Y2xhc3MgQ29sb3IgeyAocHVibGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
T3V0T2ZMaW5lQ29tcG9uZW50cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBm
bG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBvbmVudHM7IH0KKyAgICAgICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25z
dCB7IHJldHVybiBzdGQ6OmlzbmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRz
WzNdOyB9CisgICAgICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBv
bmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNv
bHZlQ29sb3JDb21wb25lbnRzKG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIE91dE9mTGluZUNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25l
bnRzKQpAQCAtMjI4LDcgKzIyNSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lk
IHNldENvbG9yKFNSR0JBPHVpbnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRl
PiA9IHsgfSk7CiAgICAgdm9pZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVD
b21wb25lbnRzPiYmLCBDb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRl
PiA9IHsgfSk7CiAKLSAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJl
c29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBh
Y2tlZENvbG9yOjpSR0JBIGFzUGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRP
ZkxpbmVDb21wb25lbnRzJiBhc091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBA
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQog
aW5saW5lIGJvb2wgb3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5l
KCkpCi0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNP
dXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNl
KCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxp
bmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVk
Q29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxh
Z3MoKSA9PSBiLmZsYWdzKCk7CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNP
dXRPZkxpbmUoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGlu
ZSBib29sIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlm
IChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZs
YWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
CiAgICAgICAgIGF1dG8gYkZsYWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5n
UHJpdmF0ZTo6U2VtYW50aWM7Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9u
ZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkg
PT0gYi5jb2xvclNwYWNlKCkgJiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEu
YXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51
bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgp
ICYmIGFGbGFncyA9PSBiRmxhZ3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUo
KSB8fCBiLmlzT3V0T2ZMaW5lKCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9y
OjpDb2xvcihzdGQ6Om9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRo
Q29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihj
b25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNl
dE91dE9mTGluZUNvbXBvbmVudHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1
ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGlu
ZUNvbXBvbmVudHM6OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkp
KSwgQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFn
cykpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4q
PgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAg
c2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xv
ckNvbXBvbmVudHMoKmNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0lu
Y2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhP
dXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVz
b2x2ZWQoKSkpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2
YXRlKGZsYWdzKSk7CiB9CiAKIGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBv
bmVudHM+JiYgb3V0T2ZMaW5lQ29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRp
b25TZXQ8RmxhZ3M+IGZsYWdzKQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNv
bG9yKCkKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlz
T3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNv
bXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1
cm4gY29tcHV0ZUhhc2goYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xv
clNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFj
a2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcs
NyBAQCBpbmxpbmUgQ29sb3JTcGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWlu
Z1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkp
Ci0gICAgICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVu
dHMoKSwgY29sb3JTcGFjZSgpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAg
ICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpLCBjb2xvclNwYWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
CiAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwg
YXNJbmxpbmUoKSk7CiB9CiAKQEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6
Ok91dE9mTGluZUNvbXBvbmVudHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVk
T3V0T2ZMaW5lQ29tcG9uZW50cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8
dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlw
ZTxTUkdCQTx1aW50OF90Pj4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNJbmxpbmUoKSk7Ci0gICAgcmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5l
IFBhY2tlZENvbG9yOjpSR0JBIENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUs
NyArNTYyLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVu
Y29kZXImIGVuCiAgICAgICAgIGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1
dG8mIG91dE9mTGluZUNvbXBvbmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAg
ICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJl
c29sdmVkQ29tcG9uZW50cygpOwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNv
ZGVyIDw8IGMyOwogICAgICAgICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zl
cihjb25zdCBDb2xvciYgYmFja2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlz
aWJsZSgpKQogICAgICAgICByZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIs
IGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7Ci0gICAgYXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNl
QV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BS
LCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBz
b3VyY2VHLCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BB
ICsgc291cmNlQSkgLSBiYWNrZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7
CkBAIC02OCw3ICs2OCw3IEBAIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICBpZiAoIWNvbG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAot
ICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFd
ID0gY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBl
eGlzdGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiBy
ZXN1bHQ7CiAgICAgZm9yIChpbnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBo
YTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxl
bmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNv
bnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBwcmVtdWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8g
PSBwcmVtdWx0aXBsaWVkKHRvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAg
ICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGll
ZFRvID0gcHJlbXVsdGlwbGllZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSku
cmVzb2x2ZWQoKTsKIAogICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAt
MTE3LDggKzExNyw4IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9y
JiBmcm9tLCBjb25zdAogICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRv
U1JHQiA9IHRvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAK
ICAgICBhdXRvIGJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9h
dD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNv
bnRleHQpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb21wb25lbnRzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBAIHN0cnVjdCBDb2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1h
cChGJiYgZnVuY3Rpb24pIGNvbnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlv
bihzdGQ6OmRlY2x2YWw8VD4oKSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHMmIG9wZXJhdG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENv
bG9yQ29tcG9uZW50cyYgb3BlcmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHMgb3BlcmF0b3IrKFQpIGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMg
b3BlcmF0b3IvKFQpIGNvbnN0OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IE4+CiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBv
bmVudHM8VCwgTj46Om9wZXJhdG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAg
ICAgKnRoaXMgPSBtYXBDb2xvckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEg
KyBjMjsgfSwgKnRoaXMsIHJocyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgTj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENv
bG9yQ29tcG9uZW50czxULCBOPjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgq
dGhpcyAvIHJocyk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29u
dmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBMQ0hMaWtlLCB0eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xh
ckZvcm0oY29uc3QgTGFiTGlrZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy1jb2xvci8jbGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRh
bjIoY29sb3IuYiwgY29sb3IuYSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0
bmVzcywKLSAgICAgICAgc3RkOjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVl
ID49IDAgPyBodWUgOiBodWUgKyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAg
ICBmbG9hdCBodWUgPSByYWQyZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBz
dGQ6Omh5cG90KGEsIGIpOworCisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+
PSAwID8gaHVlIDogaHVlICsgMzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YWJMaWtlLCB0eXBlbmFtZSBMQ0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZv
cm0oY29uc3QgTENITGlrZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL2Nzcy1jb2xvci8jbGNoLXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRl
ZzJyYWQoY29sb3IuaHVlKTsKKyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBo
YV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGln
aHRuZXNzLAotICAgICAgICBjb2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMp
LAotICAgICAgICBjb2xvci5jaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAg
ICAgICBjb2xvci5hbHBoYQotICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVn
MnJhZChodWUpOworICAgIGZsb2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlh
bnMpOworICAgIGZsb2F0IGIgPSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBI
U0wgY29udmVyc2lvbnMuCkBAIC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlv
blJlc3VsdCB7CiAgICAgZmxvYXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3Rh
dGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAg
IGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBj
aHJvbWEgPSBtYXggLSBtaW47CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1
bGF0aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248SFNMQTxmbG9hdD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8
ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNv
bG9yLTQvI2hzbC10by1yZ2IKLSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAg
ICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsK
KyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8g
W2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAg
ICBmbG9hdCBsaWdodG5lc3MgPSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBm
bG9hdCBzYXR1cmF0aW9uOwpAQCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29u
dmVyc2lvbjxIU0xBPGZsb2F0PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29u
dmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNoc2wtdG8tcmdiCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFs
cGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBo
YV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAg
IGF1dG8gZ3JleSA9IGxpZ2h0bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNS
R0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdC
QTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252
ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1jb2xvci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1h
eCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJv
bWFdID0gY2FsY3VsYXRlSFNMSHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWlu
ICogMTAwLjBmOwogICAgIGF1dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwog
ICAgIAotICAgIHJldHVybiB7IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhh
IH07CisgICAgcmV0dXJuIHsgaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0K
IAogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+
Pjo6Y29udmVydChjb25zdCBIV0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3
aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0
ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3
aGl0ZW5lc3MgKyBibGFja25lc3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdo
aXRlbmVzcyAvIDEwMC4wZjsKQEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgRDUwV2hpdGVWYWx1ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0
ZVBvaW50OjpENTA+IENvbG9yQ29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+
LCBMYWI8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBm
bG9hdCBmMSA9IChjb2xvci5saWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQg
ZjAgPSBmMSArIChjb2xvci5hIC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9y
LmIgLyAyMDAuMGYpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3Iu
cmVzb2x2ZWQoKTsKIAorICAgIGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4w
ZjsKKyAgICBmbG9hdCBmMCA9IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEg
LSAoYiAvIDIwMC4wZik7CisKICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsK
ICAgICAgICAgZmxvYXQgdEN1YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4g
TEFCZSkKQEAgLTI0NywzMSArMjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4g
Q29sb3JDb252ZXJzaW9uPFhZWkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hp
dGVWYWx1ZXNbMF0gKiBjb21wdXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZh
bHVlc1sxXSAqIGNvbXB1dGVZKGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdo
aXRlVmFsdWVzWzFdICogY29tcHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hp
dGVWYWx1ZXNbMl0gKiBjb21wdXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwg
Y29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8
ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+Pjo6Y29udmVydChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xv
cikKIHsKLSAgICBmbG9hdCB4ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZs
b2F0IHkgPSBjb2xvci55IC8gRDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9y
LnogLyBENTBXaGl0ZVZhbHVlc1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xv
ci5yZXNvbHZlZCgpOwogCisgICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVz
WzBdOworICAgIGZsb2F0IGFkanVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBm
bG9hdCBhZGp1c3RlZFogPSB6IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFu
c2Zvcm0gPSBbXShmbG9hdCB2YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8g
c3RkOjpjYnJ0KHZhbHVlKSA6IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAg
fTsKIAotICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFu
c2Zvcm0oeSk7Ci0gICAgZmxvYXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0g
ZlRyYW5zZm9ybShhZGp1c3RlZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFkpOworICAgIGZsb2F0IGYyID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQg
bGlnaHRuZXNzID0gKDExNi4wZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYg
KiAoZjAgLSBmMSk7CiAgICAgZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJl
dHVybiB7IGxpZ2h0bmVzcywgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdo
dG5lc3MsIGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAg
LTMwOCw5ICszMDksMTAgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZl
cnNpb248WFlaQTxmbG9hCiAgICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0
ODQxODIwOTQ5NjU3NTk2ODRmLCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAg
ICBhdXRvIFtsaWdodG5lc3MsIGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAg
ICAvLyAxLiBUcmFuc2Zvcm0gZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0
bmVzcy4KLSAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vi
c2V0PDAsIDM+KCk7Ci0gICAgY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7
CisgICAgYXV0byBjb21wb25lbnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0
bmVzcyAvIDEwMC4wZiwgYSwgYiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNv
b3JkaW5hdGVzIGludG8gbm9uLWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2Vz
Ii4KICAgICBhdXRvIG5vbkxpbmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoY29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxm
bG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8g
NC4gQ29udmVydCB0byBYWVouCiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2
NS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsg
eCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9Owog
fQogCiBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9h
dCwgV2hpdGVQb2ludDo6RDY1Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2lu
dDo6RDY1PiYgY29sb3IpCkBAIC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248T0tMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFm
LCAgMC43ODI3NzE3NjYyZiwgLTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwg
eSwgeiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFla
IGludG8gTE1TICJhcHByb3hpbWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJM
TVMgPSBYWVpENjVUb0xpbmVhckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0g
WFlaRDY1VG9MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25l
bnRzPGZsb2F0LCAzPiB7IHgsIHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFy
aXR5LgogICAgIGF1dG8gbm9uTGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikg
eyByZXR1cm4gc3RkOjpjYnJ0KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9h
dD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFts
aWdodG5lc3MsIGEsIGJdID0gTm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhub25MaW5lYXJMTVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBm
cm9tIHVuaXQgbGlnaHRuZXNzIHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7
IGxpZ2h0bmVzcyAqIDEwMC4wZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBs
aWdodG5lc3MgKiAxMDAuMGYsIGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNv
bnZlcnNpb25zLgpAQCAtMzcxLDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxPS0xhYjxmbG9hdD4sIE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVu
Y3Rpb25zIGZvciByYXcgY29sb3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3Bh
Y2VzLgogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMo
Q29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5w
dXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JT
cGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xv
ckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4g
Y2FsbFdpdGhDb2xvclR5cGUoaW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwg
W291dHB1dENvbG9yU3BhY2VdIChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3
aXRjaCAob3V0cHV0Q29sb3JTcGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJH
QjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4
UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgp
KTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8RGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNh
c2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xv
cikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxF
eHRlbmRlZEE5OFJHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBj
YXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlu
cHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8RXh0ZW5kZWREaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsK
ICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3Rv
UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxF
eHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZs
b2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6
RXh0ZW5kZWRSZWMyMDIwOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAy
MDxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3Bh
Y2U6OkV4dGVuZGVkU1JHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhj
b252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxm
bG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OkhTTDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkp
OwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0Nv
bG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxD
SDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENI
QTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAg
ICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+Pihp
bnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJT
UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxM
aW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0Nv
bG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxPS0xDSEE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAg
Y2FzZSBDb2xvclNwYWNlOjpPS0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9S
R0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFBy
b1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+
PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAg
ICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihp
bnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUw
OgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpB
PGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6
OkQ1MD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OlhZWl9ENjU6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENv
bG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hp
dGVQb2ludDo6RDY1Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9y
U3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0Uo
Q0cpCiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9y
U3BhY2UsIGlucHV0Q29sb3JDb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwx
OSArNDM0LDE5IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9u
ZW50cyhDb2xvcgogICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9u
ZW50cywgaW5wdXRDb2xvclNwYWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlu
cHV0Q29sb3IpIHsKICAgICAgICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29s
b3JTcGFjZSgpKSB7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdC
OgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdC
QTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsK
ICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAg
IGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNl
bmRpZgogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAg
ICAgICBjYXNlIFBsYXRmb3JtQ29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+
PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2Vu
ZGlmCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNv
bnZlcnNpb24uaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDgg
QEAgZW51bSBjbGFzcyBDb2xvclNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91
dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNv
bG9yKTsKIAogLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRz
IHdpdGggYXNzb2NpYXRlZCBjb2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0
cHV0Q29sb3JTcGFjZSk7Ci1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNv
bXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
b3V0cHV0Q29sb3JTcGFjZSk7CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRS
ZXNvbHZlQ29sb3JDb21wb25lbnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1
dENvbG9yU3BhY2UpOworQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2
ZUNvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVy
IHRoYW4gWFlaQSBvciB0aG9zZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1l
bnQKQEAgLTIwOCw3ICsyMDgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1l
IElucHV0LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBJbnB1dFdpdGhSZXBsYWNlbWVu
dCA9IENvbG9yVHlwZVdpdGhSZXBsYWNlbWVudENvbXBvbmVudDxJbnB1dCwgZmxvYXQ+OwogICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PElucHV0V2l0aFJlcGxhY2VtZW50LCBP
dXRwdXQ+KQotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxJbnB1dFdpdGhS
ZXBsYWNlbWVudD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLm1hcChbXSh1aW50OF90IHZhbHVl
KSAtPiBmbG9hdCB7IHJldHVybiB2YWx1ZSAvIDI1NS4wZjsgfSkpOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50czxJbnB1dFdpdGhSZXBsYWNlbWVudD4oYXNDb2xvckNvbXBv
bmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0IHsg
cmV0dXJuIHZhbHVlIC8gMjU1LjBmOyB9KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0Q29sb3I8T3V0cHV0Pihjb252ZXJ0Q29sb3I8SW5wdXRXaXRoUmVwbGFjZW1l
bnQ+KGNvbG9yKSk7CiAgICAgfQpAQCAtMjE5LDMxICsyMTksMzEgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAKICAgICAgICAgdXNpbmcg
T3V0cHV0V2l0aFJlcGxhY2VtZW50ID0gQ29sb3JUeXBlV2l0aFJlcGxhY2VtZW50Q29tcG9uZW50
PE91dHB1dCwgZmxvYXQ+OwogICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PE91
dHB1dFdpdGhSZXBsYWNlbWVudCwgSW5wdXQ+KQotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxPdXRwdXQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5tYXAoW10oZmxvYXQg
dmFsdWUpIC0+IHVpbnQ4X3QgeyByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAq
IDI1NS4wZiksIDBsLCAyNTVsKTsgfSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50czxPdXRwdXQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpLm1hcChb
XShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7IHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5k
KHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOyB9KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8T3V0cHV0Pihjb252ZXJ0Q29sb3I8T3V0cHV0V2l0aFJl
cGxhY2VtZW50Pihjb2xvcikpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gc3RhdGljIGlubGluZSBjb25zdGV4cHIgYXV0byB0b0xpbmVhckVuY29kZWQoY29uc3Qg
Q29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpMaW5lYXJDb3VudGVycGFy
dAogICAgIHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAg
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgICAg
IHJldHVybiB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9MaW5lYXIoYzEpLCBDb2xv
clR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMyKSwgQ29sb3JUeXBlOjpUcmFuc2Zl
ckZ1bmN0aW9uOjp0b0xpbmVhcihjMyksIGFscGhhIH07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBhdXRvIHRvR2FtbWFF
bmNvZGVkKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6R2Ft
bWFFbmNvZGVkQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5y
ZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4geyBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246
OnRvR2FtbWFFbmNvZGVkKGMxKSwgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1h
RW5jb2RlZChjMiksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQo
YzMpLCBhbHBoYSB9OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIGlubGluZSBjb25zdGV4cHIgYXV0byB0b0V4dGVuZGVkKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czx0eXBlbmFtZSBDb2xvclR5cGU6OkV4
dGVuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CisgICAgICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpFeHRlbmRlZENvdW50
ZXJwYXJ0Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSk7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIHRvQm91bmRlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBlbmFtZSBDb2xvclR5
cGU6OkJvdW5kZWRDb3VudGVycGFydAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291
bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CisgICAgICAgIHJldHVybiBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91
bmRlZENvdW50ZXJwYXJ0Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIGlubGluZSBjb25zdGV4cHIgT3V0cHV0IGhhbmRsZVJHQkZhbWls
eUNvbnZlcnNpb24oY29uc3QgSW5wdXQmIGNvbG9yKQpAQCAtMzEyLDcgKzMxMiw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lPiBzdAogICAgICAg
ICAvLyBoYXZlIHN1ZmZpY2llbnQgdGVzdGluZyBjb3ZlcmFnZSB0byBub3RpY2UgYW55IGFkdmVy
c2UgZWZmZWN0cy4KIAogICAgICAgICBhdXRvIGFwcGx5TWF0cmljZXMgPSBbXShjb25zdCBJbnB1
dCYgY29sb3IsIGF1dG8uLi4gbWF0cmljZXMpIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPE91dHB1dD4oYXBwbHlNYXRyaWNlc1RvQ29s
b3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgbWF0cmljZXMuLi4pKTsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPE91
dHB1dD4oYXBwbHlNYXRyaWNlc1RvQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yLnJlc29sdmVkKCkpLCBtYXRyaWNlcy4uLikpOwogICAgICAgICB9OwogCiAgICAgICAgIGlm
IGNvbnN0ZXhwciAoSW5wdXQ6OndoaXRlUG9pbnQgPT0gT3V0cHV0Ojp3aGl0ZVBvaW50KSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9sYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvcklu
dGVycG9sYXRpb24uaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3
ICsxMDEsNyBAQCB0ZW1wbGF0ZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhUHJlbXVsdGlw
bGljYXRpb24KIHR5cGVuYW1lIEludGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNlOjpDb2xvclR5
cGUgaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMoSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3Bh
Y2UgaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2UsIHR5cGVuYW1lIEludGVycG9sYXRpb25N
ZXRob2RDb2xvclNwYWNlOjpDb2xvclR5cGUgY29sb3IxLCBkb3VibGUgY29sb3IxTXVsdGlwbGll
ciwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBjb2xv
cjIsIGRvdWJsZSBjb2xvcjJNdWx0aXBsaWVyKQogewogICAgIC8vIDEuIEFwcGx5IHByZS1pbnRl
cnBvbGF0aW9uIHRyYW5zZm9ybXMgKGh1ZSBmaXh1cCBmb3IgcG9sYXIgY29sb3Igc3BhY2VzLCBh
bHBoYSBwcmVtdWx0aXBsaWNhdGlvbiBpZiByZXF1aXJlZCkuCi0gICAgYXV0byBbbm9ybWFsaXpl
ZENvbG9yQ29tcG9uZW50czEsIG5vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMyXSA9IHByZUludGVy
cG9sYXRpb25Ob3JtYWxpemF0aW9uPGFscGhhUHJlbXVsdGlwbGljYXRpb24+KGludGVycG9sYXRp
b25NZXRob2RDb2xvclNwYWNlLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjEpLCBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcjIpKTsKKyAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JDb21wb25lbnRzMSwg
bm9ybWFsaXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlvbk5vcm1hbGl6YXRp
b248YWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2Us
IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMS5yZXNvbHZlZCgpKSwgYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IyLnJlc29sdmVkKCkpKTsKIAogICAgIC8vIDIuIEludGVycG9sYXRlIHVzaW5nIHRoZSBu
b3JtYWxpemVkIGNvbXBvbmVudHMuCiAgICAgYXV0byBpbnRlcnBvbGF0ZWRDb2xvckNvbXBvbmVu
dHMgPSBtYXBDb2xvckNvbXBvbmVudHMoWyZdIChhdXRvIGNvbXBvbmVudEZyb21Db2xvcjEsIGF1
dG8gY29tcG9uZW50RnJvbUNvbG9yMikgLT4gZmxvYXQgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JMdW1pbmFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1bWluYW5jZS5oCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1bWluYW5jZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gaW5saW5lIGRvdWJsZSByZWxhdGl2ZUx1bQogICAgIC8vIHRoaXMgaW4gQ29sb3JDb252
ZXJzaW9uLmggYXMgYSBzaWJsaW5nIGZ1bmN0aW9uIHRvIGNvbnZlcnRDb2xvciB3aGljaCBjYW4g
Z2V0IGEgY2hhbm5lbAogICAgIC8vIG9mIGEgY29sb3IgaW4gYW5vdGhlciBzcGFjZSBpbiB0aGlz
IGtpbmQgb2Ygb3B0aW1hbCB3YXkuCiAKLSAgICByZXR1cm4gY29udmVydENvbG9yPFhZWkE8Zmxv
YXQsIFdoaXRlUG9pbnQ6OkQ2NT4+KGNvbG9yKS55OworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oY29sb3IpLnJlc29sdmVkKCkueTsKIH0KIAog
aW5saW5lIGRvdWJsZSBjb250cmFzdFJhdGlvKGRvdWJsZSByZWxhdGl2ZUx1bWluYW5jZUEsIGRv
dWJsZSByZWxhdGl2ZUx1bWluYW5jZUIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvck1vZGVscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDE3ICszMCw4NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gY2xhc3MgUkdC
Qm91bmRlZG5lc3MgeyBCb3VuZGVkLCBFeHRlbmRlZCB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSwg
UkdCQm91bmRlZG5lc3M+IHN0cnVjdCBSR0JNb2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgQWxwaGFUcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENvbG9yQ29tcG9uZW50
SW5mbzsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRXh0ZW5kZWRSR0JNb2RlbDsKIHRlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNMTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IEhXQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMQ0hNb2RlbDsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgTGFiTW9kZWw7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFJH
Qk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBYWVpNb2RlbDsKIAorLy8gTUFSSzog
UmVzb2x2ZWQvVW5yZXNvbHZlZCBEZWZpbnRpdGlvbnMKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvck1vZGVsID0gdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4g
c3RydWN0IEV4cG9zZWRDb2xvclR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0
cnVjdCBSZXNvbHZlZENvbG9yVHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Ry
dWN0IFVucmVzb2x2ZWRDb2xvclR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
Y29uc3RleHByIFJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4gcmVzb2x2ZWRDb2xvcihDb2xv
clR5cGUgaW5wdXQpCit7CisgICAgcmV0dXJuIFJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4g
eyBpbnB1dCB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBV
bnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4gdW5yZXNvbHZlZENvbG9yKENvbG9yVHlwZSBp
bnB1dCkKK3sKKyAgICByZXR1cm4gVW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+IHsgaW5w
dXQgfTsKK30KKworaW5saW5lIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
cmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4m
IGNvbG9yQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29sb3JDb21wb25lbnRzOworfQorCitp
bmxpbmUgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gcmVzb2x2ZUNvbG9yQ29t
cG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBjb2xvckNvbXBvbmVudHMp
Cit7CisgICAgcmV0dXJuIGNvbG9yQ29tcG9uZW50cy5tYXAoW10gKGZsb2F0IGNvbXBvbmVudCkg
eyByZXR1cm4gc3RkOjppc25hbihjb21wb25lbnQpID8gMC4wZiA6IGNvbXBvbmVudDsgfSk7Cit9
CisKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgUmVzb2x2ZWRDb2xvclR5
cGUgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2Rl
bD4geworICAgIHVzaW5nIENhbm9uaWNhbFR5cGUgPSBDb2xvclR5cGU7CisKKyAgICAvLyBDYWxs
aW5nIHJlc29sdmVkKCkgb3IgdW5yZXNvbHZlZCgpIG9uIGEgdHlwZSB0aGF0IGlzIGFscmVhZHkg
cmVzb2x2ZWQgaXMgYSBuby1vcCwgc28gd2UgY2FuCisgICAgLy8ganVzdCByZXR1cm4gb3V0c2Vs
dmVzLgorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7
IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7
IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDPiBmcmllbmQgY29uc3RleHBy
IFJlc29sdmVkQ29sb3JUeXBlPEM+IHJlc29sdmVkQ29sb3IoQyk7CisKKyAgICBleHBsaWNpdCBj
b25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5cGUoQ29sb3JUeXBlIGNvbG9yKQorICAgICAgICA6IEV4
cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7IHJl
c29sdmUoY29sb3IpIH0KKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xv
clR5cGUgcmVzb2x2ZShDb2xvclR5cGUgY29sb3IpCisgICAgeworICAgICAgICBhdXRvIFtjMSwg
YzIsIGMzLCBhbHBoYV0gPSByZXNvbHZlQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7
IGNvbG9yIH0pKTsKKyAgICAgICAgcmV0dXJuIENvbG9yVHlwZSB7IGMxLCBjMiwgYzMsIGFscGhh
IH07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5y
ZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCB0eXBlbmFtZSBD
b2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2FsVHlwZSA9IENvbG9yVHlwZTsK
KworICAgIC8vIENhbGxpbmcgdW5yZXNvbHZlZCgpIG9uIGEgdHlwZSB0aGF0IGlzIGFscmVhZHkg
dW5yZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXRz
ZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuICp0
aGlzOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQz4gZnJpZW5kIGNvbnN0
ZXhwciBVbnJlc29sdmVkQ29sb3JUeXBlPEM+IHVucmVzb2x2ZWRDb2xvcihDKTsKKworICAgIGV4
cGxpY2l0IGNvbnN0ZXhwciBVbnJlc29sdmVkQ29sb3JUeXBlKENvbG9yVHlwZSBjb2xvcikKKyAg
ICAgICAgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbD4geyBjb2xvciB9CisgICAgeworICAgIH0KK307CisKKworLy8gTUFSSzogLSBDb2xvciBN
b2RlbCBzdXBwb3J0IHR5cGVzLgorCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBbHBoYVRyYWl0czxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgdHJhbnNwYXJlbnQgPSAwLjBmOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgb3BhcXVlID0gMS4wZjsKQEAgLTY4LDE3ICsxMzcsOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvIHsKICAgICBD
b2xvckNvbXBvbmVudFR5cGUgdHlwZTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEV4dGVuZGVk
UkdCTW9kZWw8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JD
b21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKLSAgICAgICAgeyAtc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAotICAgICAg
ICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0s
Ci0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpO
dW1iZXIgfQotICAgIH0gfTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBD
b2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwotfTsKKy8v
IE1BUks6IC0gQ29sb3IgTW9kZWwgRGVmaW5pdGl0aW9ucwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzRXh0ZW5kZWRSR0JNb2RlbCA9IHN0
ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIEV4dGVuZGVkUkdCTW9kZWw8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CisvLyBNQVJLOiBIU0xNb2RlbAog
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4
cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZv
IHsgewpAQCAtOTAsOCArMTUxLDIyIEBAIHRlbXBsYXRlPD4gc3RydWN0IEhTTE1vZGVsPGZsb2F0
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIU0xN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpzYXR1cmF0aW9u
OworICAgIHVzaW5nIENvbG9yVHlwZTo6bGlnaHRuZXNzOworICAgIHVzaW5nIENvbG9yVHlwZTo6
YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhw
b3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhTTE1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4g
eyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzSFNMTW9k
ZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBIU0xNb2RlbDx0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAorLy8gTUFSSzogSFdCTW9kZWwK
KwogdGVtcGxhdGU8PiBzdHJ1Y3QgSFdCTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5m
byB7IHsKICAgICAgICAgeyAwLCAzNjAsIENvbG9yQ29tcG9uZW50VHlwZTo6QW5nbGUgfSwKQEAg
LTEwMiw4ICsxNzcsMjIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSFdCTW9kZWw8ZmxvYXQ+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29y
ZGluYXRlU3lzdGVtOjpDeWxpbmRyaWNhbFBvbGFyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhXQk1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OndoaXRlbmVzczsKKyAgICB1
c2luZyBDb2xvclR5cGU6OmJsYWNrbmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xv
clR5cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUs
IGMud2hpdGVuZXNzLCBjLmJsYWNrbmVzcywgYy5hbHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzSFdCTW9kZWwgPSBzdGQ6
OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBIV0JNb2RlbDx0eXBlbmFtZSBD
b2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAorLy8gTUFSSzogTGFiTW9kZWwKKwogdGVtcGxh
dGU8PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAg
ICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JD
b21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTExNCw4ICsyMDMsMjIgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRp
bmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhv
Z29uYWw7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgTGFiTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6bGlnaHRuZXNzOwor
ICAgIHVzaW5nIENvbG9yVHlwZTo6YTsKKyAgICB1c2luZyBDb2xvclR5cGU6OmI7CisgICAgdXNp
bmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9u
ZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgTGFiTW9kZWw8VD4+JiBjKQor
eworICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9OworfQorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzTGFi
TW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBMYWJNb2Rl
bDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAorLy8gTUFSSzogTENITW9k
ZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29u
c3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50
SW5mbyB7IHsKICAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5p
dHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTEyNiw5ICsyMjksMjMgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpDeWxp
bmRyaWNhbFBvbGFyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExDSE1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6OmxpZ2h0
bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmNocm9tYTsKKyAgICB1c2luZyBDb2xvclR5cGU6
Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+
IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMQ0hN
b2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1
ZSwgYy5hbHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBj
b25zdGV4cHIgYm9vbCBVc2VzTENITW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xv
clR5cGU6Ok1vZGVsLCBMQ0hNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PjsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKKy8vIE1BUks6IFJHQk1v
ZGVsCisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0LCBSR0JCb3VuZGVkbmVzczo6
Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVu
dEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7IDAsIDEsIENvbG9y
Q29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCiAgICAgICAgIHsgMCwgMSwgQ29sb3JDb21wb25lbnRU
eXBlOjpOdW1iZXIgfSwKQEAgLTEzOCw3ICsyNTUsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JN
b2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVt
ID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07
CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+IHsKK3RlbXBsYXRlPD4gc3Ry
dWN0IFJHQk1vZGVsPHVpbnQ4X3QsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzx1aW50OF90PiwgMz4g
Y29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCAyNTUsIENvbG9yQ29tcG9uZW50VHlwZTo6
TnVtYmVyIH0sCiAgICAgICAgIHsgMCwgMjU1LCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9
LApAQCAtMTQ4LDggKzI2NSwzNSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc1JHQk1vZGVs
ID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JN
b2RlbDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudElu
Zm8geyB7CisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRU
eXBlOjpOdW1iZXIgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNv
bXBvbmVudFR5cGU6Ok51bWJlciB9LAorICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCks
IENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1
bGFyT3J0aG9nb25hbDsKK307CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgUkdCQm91
bmRlZG5lc3MgYm91bmRlZG5lc3M+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwg
UkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBib3VuZGVkbmVzcz4+
IDogQ29sb3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6OnJlZDsKKyAgICB1c2luZyBDb2xv
clR5cGU6OmdyZWVuOworICAgIHVzaW5nIENvbG9yVHlwZTo6Ymx1ZTsKKyAgICB1c2luZyBDb2xv
clR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JU
eXBlLCBSR0JCb3VuZGVkbmVzcyBib3VuZGVkbmVzcz4gY29uc3RleHByIENvbG9yQ29tcG9uZW50
czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlw
ZSwgUkdCTW9kZWw8VCwgYm91bmRlZG5lc3M+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLnJlZCwg
Yy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNSR0JNb2RlbCA9CisgICAgICAgc3RkOjpp
c19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29s
b3JUeXBlOjpDb21wb25lbnRUeXBlLCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4+CisgICAgfHwg
c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+PjsK
KworCisvLyBNQVJLOiBYWVpNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88
ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmlu
aXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xNjAsNiArMzA0LDQ4IEBA
IHRlbXBsYXRlPD4gc3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVj
dGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBz
dHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFhZWk1vZGVsPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6
Ong7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp5OworICAgIHVzaW5nIENvbG9yVHlwZTo6ejsKKyAg
ICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JD
b21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBYWVpNb2RlbDxUPj4m
IGMpCit7CisgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzWFlaTW9k
ZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBYWVpNb2RlbDx0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKKworCisvLyBnZXQ8PiBvdmVybG9h
ZCAoYWxvbmcgd2l0aCBzdGQ6OnR1cGxlX3NpemUgYW5kIHN0ZDo6dHVwbGVfZWxlbWVudCBiZWxv
dykgdG8gc3VwcG9ydCBkZXN0cnVjdHVyaW5nIG9mIGV4cGxpY2l0bHkgcmVzb2x2ZWQgYW5kIHVu
cmVzb2x2ZWQgY29sb3JzLgorCit0ZW1wbGF0ZTxzaXplX3QgSSwgdHlwZW5hbWUgQ29sb3JUeXBl
PiBjb25zdGV4cHIgdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlIGdldChjb25zdCBF
eHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZT4mIGNvbG9yKQoreworICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcilbSV07Cit9CisKK30KKworbmFtZXNwYWNlIHN0ZCB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6UmVzb2x2
ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxz
aXplX3QsIDQ+IHsgfTsKKwordGVtcGxhdGU8c2l6ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4K
K2NsYXNzIHR1cGxlX2VsZW1lbnQ8SSwgV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPj4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBXZWJDb3JlOjpSZXNv
bHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21wb25lbnRUeXBlOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpVbnJlc29sdmVk
Q29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6
ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVfdCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+Citj
bGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6OlVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPj4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBXZWJDb3JlOjpVbnJl
c29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT46OkNvbXBvbmVudFR5cGU7Cit9OwogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2Vy
aWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
OCw3ICsxODgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBTdHJpbmcg
c2VyaWFsaXphdGkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KTsKIAotICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9y
LnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4w
ZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKENv
bG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7
CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JTcGFj
ZUZvcjxDb2xvclR5cGU+KSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhh
LCAnKScpOwpAQCAtMzc0LDcgKzM3NCw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBIV0JBPGZsbwogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgTENIQTxmbG9hdD4mIGNvbG9yLCBib29sKQogewogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9jc3MtY29sb3ItNC8jc2VyaWFsaXppbmctbGFiLWxjaAotICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9y
LnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4w
ZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2goIiwgYzEsICIlICIsIGMyLCAnICcs
IGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2goIiwgYzEsICIlICIsIGMyLCAn
ICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC0zOTUsNyArMzk1LDcgQEAgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExDSEE8ZmxvCiBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKICAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxhYi1sY2gK
LSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIs
IGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygibGFiKCIs
IGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygibGFi
KCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAtNDMyLDcg
KzQzMiw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBM
aW5lYXJTUgogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBPS0xDSEE8ZmxvYXQ+
JiBjb2xvciwgYm9vbCkKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsK
KyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygib2tsY2goIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJva2xjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAiLCBh
bHBoYSwgJyknKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoY29uc3QgT0tMQ0hBPGYKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoY29uc3QgT0tMYWI8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICBhdXRvIFtjMSwgYzIs
IGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xv
ci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEu
MGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsYWIoIiwgYzEsICIlICIsIGMyLCAn
ICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJva2xhYigiLCBjMSwgIiUgIiwg
YzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTU0Myw3ICs1NDMsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90PiBjb2xvciwgYm9vbCAKICAgICBp
ZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgc3dpdGNoIChhbHBoYSkgewogICAgIGNhc2UgMDoK
ICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwgcmVkLCAiLCAiLCBncmVlbiwgIiwg
IiwgYmx1ZSwgIiwgMCkiKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoU1JHQkE8dWludDhfdD4gY29sb3IsIGJvb2wKICAgICBpZiAodXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xv
ckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9
IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKGFscGhhID09IDB4RkYpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KCcjJywgaGV4KHJlZCwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVuLCAyLCBMb3dlcmNhc2UpLCBo
ZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7CiAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
Y29sb3IpOwpAQCAtNTcwLDcgKzU3MCw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChTUkdCQTx1aW50OF90PgogICAgIGlmICh1c2VDb2xvckZ1bmN0aW9uU2VyaWFs
aXphdGlvbikKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24o
Y29sb3IpOwogCi0gICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7Cisg
ICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAg
ICBpZiAoYWxwaGEgPCAweEZGKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChy
ZWQsIDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMiksIGhleChhbHBoYSwgMikpOwogICAg
IHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhleChncmVlbiwgMiksIGhleChi
bHVlLCAyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTcGFjZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3BhY2VNYXBwaW5nPFNSR0JBPFQ+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JTcGFjZU1hcHBpbmc8WFlaQTxULCBXaGl0ZVBv
aW50OjpENTA+PiB7IHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlIHsgQ29sb3JTcGFj
ZTo6WFlaX0Q1MCB9OyB9OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3BhY2VN
YXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDY1Pj4geyBzdGF0aWMgY29uc3RleHByIGF1dG8g
Y29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENjUgfTsgfTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JTcGFjZSBDb2xvclNwYWNlRm9yID0gQ29sb3JT
cGFjZU1hcHBpbmc8Q29sb3JUeXBlPjo6Y29sb3JTcGFjZTsKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gY29uc3RleHByIENvbG9yU3BhY2UgQ29sb3JTcGFjZUZvciA9IENvbG9yU3BhY2VN
YXBwaW5nPENhbm9uaWNhbENvbG9yVHlwZTxDb2xvclR5cGU+Pjo6Y29sb3JTcGFjZTsKIAogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiBjb25zdGV4cHIgZGVjbHR5cGUo
YXV0bykgY2FsbFdpdGhDb2xvclR5cGUoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21w
b25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEZ1bmN0b3ImJiBmdW5jdG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSwg
V2hpdGVQb2ludD4gc3RydWN0IFhZWkE7CiAKIC8vIE1BUks6IE1ha2UgZnVuY3Rpb25zLgogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5
cGUgbWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBI
YXNDYW5vbmljYWxUeXBlTWVtYmVyID0gZmFsc2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDx0
eXBlbmFtZSBUOjpDYW5vbmljYWxUeXBlPj4gPSB0cnVlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIGJvb2wgaGFzQ29ub25pY2FsVHlwZT4gc3RydWN0IENhbm9uaWNhbENvbG9yVHlw
ZUhlbHBlciB7IHVzaW5nIHR5cGUgPSBDb2xvclR5cGU7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXI8Q29sb3JUeXBlLCB0cnVl
PiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBDb2xvclR5cGU6OkNhbm9uaWNhbFR5cGU7IH07CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gdXNpbmcgQ2Fub25pY2FsQ29sb3JUeXBlID0g
dHlwZW5hbWUgQ2Fub25pY2FsQ29sb3JUeXBlSGVscGVyPENvbG9yVHlwZSwgSGFzQ2Fub25pY2Fs
VHlwZU1lbWJlcjxDb2xvclR5cGU+Pjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHMoY29uc3Qg
Q29sb3JDb21wb25lbnRzPFQsIDQ+JiBjKQogewotICAgIHJldHVybiBDb2xvclR5cGUgeyBjWzBd
LCBjWzFdLCBjWzJdLCBjWzNdIH07CisgICAgcmV0dXJuIENhbm9uaWNhbENvbG9yVHlwZTxDb2xv
clR5cGU+IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBj
bGFtcGVkQ29tcG9uZW50KFQgYykgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
CkBAIC05NywyNyArMTA1LDI3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgVD4gY29uc3RleHByIENvbAogICAgIHJldHVybiB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JU
eXBlLCAwPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+KGNvbXBv
bmVudHMpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oY29tcG9uZW50cyksIGNvbXBv
bmVudHNbM10gfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBU
PiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKGNvbnN0IENv
bG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21wb25lbnRzKQogewogICAgIHJldHVy
biBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVkQ29tcG9uZW50czxDb2xvclR5
cGU+KGNvbXBvbmVudHMpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKFQg
YzEsIFQgYzIsIFQgYzMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQg
YzMpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29t
cG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksIGNsYW1wZWRDb21w
b25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1
ZSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQg
YzMsIFQgYWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQgYzMs
IFQgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENv
bG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksIGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAyPihjMyksIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+KGFscGhhKSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21wb25lbnRzKQordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYg
Y29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4o
Y2xhbXBlZENvbXBvbmVudHNFeGNlcHRBbHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBo
YT4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFs
cGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIGF1dG8gbWFrZUZy
b21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBUIGMzLCBBbHBoYSBh
bHBoYSkKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JD
b21wb25lbnRzIHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+
KGMzKSwgYWxwaGEgfSk7CiB9CkBAIC0xMjcsMTMgKzEzNSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFscGgKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCBjb2xvcikKIHsKICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGUsIGZsb2F0Pikg
ewotICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7Cisg
ICAgICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnVucmVzb2x2
ZWQoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tpXSA+PSBUOjpNb2RlbDo6Y29t
cG9uZW50SW5mb1tpXS5taW4sICJDb21wb25lbnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGxl
c3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIFQ6Ok1v
ZGVsOjpjb21wb25lbnRJbmZvW2ldLm1pbik7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4LCAiQ29t
cG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQg
bWF4aW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tp
XS5tYXgpOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxw
aGEgPj0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50
LCAiQWxwaGEgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtICh0cmFu
c3BhcmVudCkgJWYiLCBjb2xvci5hbHBoYSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9u
ZW50VHlwZT46OnRyYW5zcGFyZW50KTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb2xv
ci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVl
LCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtIChv
cGFxdWUpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVu
dFR5cGU+OjpvcGFxdWUpOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNb
M10gPj0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50
LCAiQWxwaGEgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtICh0cmFu
c3BhcmVudCkgJWYiLCBjb21wb25lbnRzWzNdLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21w
b25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNv
bXBvbmVudHNbM10gPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9w
YXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11
bSAob3BhcXVlKSAlZiIsIGNvbXBvbmVudHNbM10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNv
bXBvbmVudFR5cGU+OjpvcGFxdWUpOwogICAgIH0KIH0KIApAQCAtMTQ2LDcgKzE1NCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCkKICNlbmRp
ZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzID0gZmFsc2U7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21w
b25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6ZGVj
bHZhbDxUPigpKSk+PiA9IHRydWU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRl
Y2x0eXBlKGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6ZGVjbHZhbDxUPigpLnVucmVzb2x2ZWQoKSkp
Pj4gPSB0cnVlOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgSGFzQ29tcG9uZW50VHlwZU1lbWJlciA9IGZhbHNlOwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0NvbXBvbmVudFR5cGVNZW1iZXI8
VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT4+ID0gdHJ1ZTsKQEAgLTE2
Niw5ICsxNzQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhB
bHBoYUhlbHBlciAKICAgICAvLyBlLmcuIGF1dG8geWVsbG93V2l0aDUwUGVyY2VudEFscGhhID0g
Q29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYUJ5dGUoMTI4KTsKICAgICBjb25zdGV4cHIgUGFy
ZW50IGNvbG9yV2l0aEFscGhhQnl0ZSh1aW50OF90IG92ZXJyaWRlQWxwaGEpIGNvbnN0CiAgICAg
ewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PGRlY2x0eXBlKHN0ZDo6ZGVj
bHZhbDxQYXJlbnQ+KCkuYWxwaGEpLCB1aW50OF90PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xv
ciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
c2FtZV92PHR5cGVuYW1lIFBhcmVudDo6Q29tcG9uZW50VHlwZSwgdWludDhfdD4sICJPbmx5IHVp
bnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1cHBvcnRlZC4iKTsKIAotICAgICAgICBhdXRv
IGNvcHkgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgUGFyZW50Kj4odGhpcyk7CisgICAgICAgIGF1dG8g
Y29weSA9IHN0YXRpY19jYXN0PGNvbnN0IFBhcmVudCo+KHRoaXMpLT51bnJlc29sdmVkKCk7CiAg
ICAgICAgIGNvcHkuYWxwaGEgPSBvdmVycmlkZUFscGhhOwogICAgICAgICByZXR1cm4gY29weTsK
ICAgICB9CkBAIC0xNzgsNyArMTg2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1
Y3QgQ29sb3JXaXRoQWxwaGFIZWxwZXIgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPENv
bG9yVHlwZT4+KiA9IG51bGxwdHI+CiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
bG9yVHlwZSYgYSwgY29uc3QgQ29sb3JUeXBlJiBiKQogewotICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKKyAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoYS51bnJlc29sdmVkKCkpID09IGFzQ29sb3JDb21wb25lbnRzKGIudW5yZXNvbHZl
ZCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZl90PElzQ29udmVydGlibGVUb0NvbG9yQ29tcG9uZW50czxDb2xvclR5cGU+PiogPSBu
dWxscHRyPgpAQCAtMjAzLDcgKzIxMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAgICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAg
ICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Ci0gICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMp
OworICAgICAgICBhc3NlcnRJblJhbmdlKCpzdGF0aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0
aGlzKSk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFJHQkFUeXBlKCkKQEAgLTIxMSwyMSArMjE5
LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlw
ZSwgdAogICAgIHsKICAgICB9CiAKKworICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29u
c3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JUeXBlKj4o
dGhpcykpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJu
IHVucmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9
CisKK3Byb3RlY3RlZDoKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAg
ICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBURj4gY29uc3RleHByIENvbG9yQ29t
cG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBSR0JBVHlwZTxULCBELCBDb2xv
clR5cGUsIE0sIFRGPiYgYykKLXsKLSAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVl
LCBjLmFscGhhIH07Ci19Ci0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0
cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVu
Y3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdC
QVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgQm91bmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFU
eXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5k
ZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxU
LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxU
LCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVz
czo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJh
bnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAKICAgICB1c2luZyBMaW5l
YXJDb3VudGVycGFydCA9IEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+OwogICAgIHVzaW5nIEV4
dGVuZGVkQ291bnRlcnBhcnQgPSBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPjsKQEAgLTIzNCw4
ICsyNDEsOCBAQCBzdHJ1Y3QgQm91bmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJv
dW5kZWRHYW0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3Qg
Qm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2Rl
ZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rp
b248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5
cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFt
ZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpD
bGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5
cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5k
ZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxU
LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxU
LCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5l
c3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRy
YW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6bGluZWFyVG9YWVo7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6eHl6VG9MaW5lYXI7CkBAIC0yNDcsOCArMjU0
LDggQEAgc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRl
ZExpCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotc3RydWN0IEV4dGVu
ZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwg
RD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVu
Y3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+IHsKLSAgICB1c2luZyBS
R0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2Rl
bDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1
bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEV4dGVuZGVkR2FtbWFF
bmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1v
ZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRy
YW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+IHsKKyAg
ICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9k
ZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFU
eXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRlcnBhcnQgPSBFeHRlbmRlZExpbmVhckVuY29k
ZWQ8VCwgRD47CiAgICAgdXNpbmcgQm91bmRlZENvdW50ZXJwYXJ0ID0gQm91bmRlZEdhbW1hRW5j
b2RlZDxULCBEPjsKQEAgLTI1Niw4ICsyNjMsOCBAQCBzdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29k
ZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEcKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBl
bmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2Rl
OjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJF
bmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdC
QVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0
ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0
ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVy
RnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0
ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0
ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVy
RnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5lYXJUb1hZWjsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpUb0xpbmVhcjsKQEAgLTQzNCwxNyArNDQxLDE2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBl
cgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsg
cmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNv
bHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVj
dGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7CiAgICAgVCBhbHBoYTsK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwg
ND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGFiPFQ+JiBjKQotewotICAgIHJldHVybiB7IGMu
bGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0xhYiA9IHN0ZDo6aXNfc2FtZV92PExh
Yjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBN
QVJLOiAtIExDSEEgQ29sb3IgVHlwZS4KQEAgLTQ2OSwxNyArNDc1LDE2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JXaXRoQWxwaGFIZWxwZQogICAgIHsKICAgICB9
CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVk
Q29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsg
cmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGln
aHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQgaHVlOwogICAgIFQgYWxwaGE7CiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29s
b3JDb21wb25lbnRzKGNvbnN0IExDSEE8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5l
c3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxM
Q0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8v
IE1BUks6IC0gT0tMYWIgQ29sb3IgVHlwZS4KQEAgLTUwNCwxNyArNTA5LDE2IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xhYiA6IENvbG9yV2l0aEFscGhhSGVscAogICAgIHsKICAg
ICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29s
dmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0
IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQg
bGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNv
bXBvbmVudHMoY29uc3QgT0tMYWI8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3Ms
IGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
aW5saW5lIGNvbnN0ZXhwciBib29sIElzT0tMYWIgPSBzdGQ6OmlzX3NhbWVfdjxPS0xhYjx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAt
IE9LTENIQSBDb2xvciBUeXBlLgpAQCAtNTM5LDE3ICs1NDMsMTYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9LTENIQSA6IENvbG9yV2l0aEFscGhhSGVsCiAgICAgewogICAgIH0KIAor
ICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xv
cigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1
cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5l
c3M7CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNv
bXBvbmVudHMoY29uc3QgT0tMQ0hBPFQ+JiBjKQotewotICAgIHJldHVybiB7IGMubGlnaHRuZXNz
LCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNPS0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxP
S0xDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAog
CkBAIC01NzUsMTcgKzU3OCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSA6
IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8g
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNv
bnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3Io
KnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGh1ZTsKICAgICBUIHNhdHVyYXRpb247CiAg
ICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
SFNMQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0
bmVzcywgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGlu
ZSBjb25zdGV4cHIgYm9vbCBJc0hTTEEgPSBzdGQ6OmlzX3NhbWVfdjxIU0xBPHR5cGVuYW1lIENv
bG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gSFdCQSBD
b2xvciBUeXBlLgpAQCAtNjEwLDE3ICs2MTIsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhXQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBlCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0
ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7
IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNv
bHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBodWU7CiAgICAgVCB3aGl0
ZW5lc3M7CiAgICAgVCBibGFja25lc3M7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVu
dHMoY29uc3QgSFdCQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmh1ZSwgYy53aGl0ZW5lc3Ms
IGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFdCQSA9IHN0ZDo6aXNfc2FtZV92PEhXQkE8dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzog
LSBYWVogQ29sb3IgVHlwZS4KQEAgLTY0NSwxNyArNjQ2LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIFdoaXRlUG9pbnQgVz4gc3RydWN0IFhZWkEgOiBDb2xvcgogICAgIHsKICAgICB9CiAKKyAg
ICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3Io
KnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJu
IHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgeDsKICAgICBU
IHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBX
aGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBv
bmVudHMoY29uc3QgWFlaQTxULCBXPiYgYykKLXsKLSAgICByZXR1cm4geyBjLngsIGMueSwgYy56
LCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNv
bnN0ZXhwciBib29sIElzWFlaQSA9IHN0ZDo6aXNfc2FtZV92PFhZWkE8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlLCBDb2xvclR5cGU6OndoaXRlUG9pbnQ+LCBDb2xvclR5cGU+Owog
CiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpAQCAtNjY4LDExICs2NjgsMTYgQEAgc3RydWN0IFJH
QkEgewogICAgIHsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1
aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShSZXNvbHZlZENvbG9y
VHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAgICAgICAgIDogdmFsdWUgeyBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oY29sb3IucmVkIDw8IDI0IHwgY29sb3IuZ3JlZW4gPDwgMTYgfCBjb2xvci5i
bHVlIDw8IDggfCBjb2xvci5hbHBoYSkgfQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIg
ZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICAgICAgOiBSR0JBIHsgY29s
b3IucmVzb2x2ZWQoKSB9CisgICAgeworICAgIH0KKwogICAgIHVpbnQzMl90IHZhbHVlOwogfTsK
IApAQCAtNjgyLDggKzY4NywxMyBAQCBzdHJ1Y3QgQVJHQiB7CiAgICAgewogICAgIH0KIAotICAg
IGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgIGNvbnN0
ZXhwciBleHBsaWNpdCBBUkdCKFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xv
cikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvci5hbHBoYSA8
PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9yLmdyZWVuIDw8IDggfCBjb2xvci5ibHVlKSB9
CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yKQorICAgICAgICA6IEFSR0IgeyBjb2xvci5yZXNvbHZlZCgpIH0KICAgICB7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDEzICszMCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNSR0JBPGZsb2F0PiBwcmVtdWx0
aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAg
ICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCiBTUkdCQTxmbG9hdD4g
dW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgcmV0dXJuIG1h
a2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8ZmxvYXQ+PihyIC8gYSwg
ZyAvIGEsIGIgLyBhLCBhKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgU1JHQkE8ZmxvYXQ+IHVucHJlbXVs
dGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yCiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11
bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAo
YSA9PSAyNTUpCkBAIC01NCw3ICs1NCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRG
bG9vcmluZyhTUkdCQTx1aW50OF90PiBjbwogCiBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVk
Q2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBp
ZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUp
CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVtdWx0aXBsaWVk
Q29tcG9uZW50Qnl0ZSh1aQogCiBTUkdCQTx1aW50OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8
dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQogICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50
c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJl
bXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYsMjEgQEAgdWludDhfdCBjb252ZXJ0UHJlc2Nh
bGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
Y29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29t
cG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1dG8gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFs
cGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVu
QWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYs
IGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3Qg
Q29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlw
ZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+
KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4q
ID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2Vz
UkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29u
c3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9p
bnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hT
TE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29u
c3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdC
TW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25z
dCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBl
Pj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsK
IHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpB
PGZsb2F0LCBXPiYpOwogCkBAIC05MywzNSArOTMsMzUgQEAgdGVtcGxhdGU8PiBpbmxpbmUgZmxv
YXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4oZmxvCiAgICAgcmV0dXJuIGNsYW1wZWRBbHBo
YSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVu
Y3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25z
dCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gYXV0byBjb2xvckJ5TW9kaWZpbmdFYWNoTm9u
QWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgRnVuY3RvciYmIGZ1bmN0b3Ip
CiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAg
IGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpOwog
ICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAgICAgY29weVswXSA9IHN0ZDo6aW52b2tlKGZ1
bmN0b3IsIGNvbXBvbmVudHNbMF0pOwogICAgIGNvcHlbMV0gPSBzdGQ6Omludm9rZShmdW5jdG9y
LCBjb21wb25lbnRzWzFdKTsKICAgICBjb3B5WzJdID0gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJk
PEZ1bmN0b3I+KGZ1bmN0b3IpLCBjb21wb25lbnRzWzJdKTsKLSAgICByZXR1cm4geyBjb3B5WzBd
LCBjb3B5WzFdLCBjb3B5WzJdLCBjb3B5WzNdIH07CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkg
PSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29sdmVkKCk7CiAgICAgY29weS5h
bHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVybiBjb3B5OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3Qg
Q29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsK
KyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29sdmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNv
bnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVy
cmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFs
cGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFs
cGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxl
KTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAg
ICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsK
ICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDM7ICsraSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcgogICAgIHJldHVybiBtYWtlRnJvbUNvbXBv
bmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JU
eXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gYXV0byBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29s
b3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTE0NywxOSArMTQ3LDIx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JX
aQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3Qg
WFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci55ID09IDAgJiYgY29s
b3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZl
ZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci55ID09
IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8
IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmxpZ2h0bmVzcyA9PSAwICYm
IGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVz
b2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3Iu
bGlnaHRuZXNzID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+fHwgVXNlc0V4dGVuZGVkUkdC
TW9kZWw8Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIg
Ym9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKICAgICBjb25zdGV4cHIgYXV0byBjb21wb25lbnRJbmZvID0gQ29sb3JU
eXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mbzsKICAgICByZXR1cm4gYzEgPT0gY29tcG9uZW50SW5m
b1swXS5taW4gJiYgYzIgPT0gY29tcG9uZW50SW5mb1sxXS5taW4gJiYgYzMgPT0gY29tcG9uZW50
SW5mb1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQpAQCAtMTY3LDI0ICsxNjksMjcgQEAgY29uc3RleHBy
IGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5
cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7
Ci0gICAgcmV0dXJuIGNvbG9yLmJsYWNrbmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxw
aGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3Iu
cmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5ibGFja25lc3MgPT0gMTAwICYm
IHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAK
IHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpB
PGZsb2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLnkgPT0gMSAmJiBjb2xvci5h
bHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29s
b3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLnkgPT0gMSAm
JiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8
VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNl
c0hTTE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29s
b3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IubGlnaHRuZXNzID09IDEwMCAmJiBj
b2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29s
dmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLmxp
Z2h0bmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNFeHRlbmRlZFJH
Qk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHBy
IGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBj
MiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNv
bG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHByIGF1dG8gY29tcG9uZW50SW5mbyA9IENvbG9y
VHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAgICAgcmV0dXJuIGMxID09IGNvbXBvbmVudElu
Zm9bMF0ubWF4ICYmIGMyID09IGNvbXBvbmVudEluZm9bMV0ubWF4ICYmIGMzID09IGNvbXBvbmVu
dEluZm9bMl0ubWF4ICYmIGFscGhhID09IEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAgLTE5Miw3ICsxOTcsOCBAQCBjb25zdGV4cHIg
Ym9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlw
ZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsK
LSAgICByZXR1cm4gY29sb3Iud2hpdGVuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBo
YVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5y
ZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLndoaXRlbmVzcyA9PSAxMDAgJiYg
cmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAog
Y29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUy
LDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeyAocHVibGljKQogICAgICAgICBpZiAoIWEp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFj
a2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KTsKKyAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEo
UGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KS5yZXNvbHZlZCgpOwogCiAgICAgICAgIGlmIChh
ID49IDI1NSB8fCAhcGl4ZWwuYWxwaGEpIHsKICAgICAgICAgICAgIHNldFBpeGVsKGRlc3QsIHIs
IGcsIGIsIGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5t
bQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MjQsNyArNDI0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1
ZShjb25zdCBDb2xvCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0
aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIp
LCBAKGEpXV07CiB9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0VG9WYWx1ZShjb25zdCBDb2xvciYKIHsKICAgICBpZiAoIWlzQmFzaWNBbmlt
YXRpb24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRp
Y19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6
QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjwKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9h
bmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYg
Y29sb3IpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50
ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAg
ICAgICAgIHJldHVybiBAW0AociksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBQW5pbWF0aW9uV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBQW5pbWF0aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcgogICAg
IGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8g
Y29tcG9uZW50cyA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVz
b2x2ZWQoKTsKICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRz
LmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5Q
dHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAg
ICAgQ0FDRkFuaW1hdGlvblNldEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7
CkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1Zh
bHVlKGNvbnN0IFdlYkNvcmU6CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29t
cG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50
cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNG
VmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1h
dGlvbi5nZXQoKSwgdi5nZXQoKSk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlCiAgICAgICAgIAogICAgIFJl
dGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVN
dXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBj
b21wb25lbnRzID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1
dG8gY29tcG9uZW50cyA9IHZhbHVlW2ldLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+
KCkucmVzb2x2ZWQoKTsKICAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwg
Y29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAg
ICAgICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3Jl
YXRlKDQsIGEpKTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2Lmdl
dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhj
YWlyb190KiBzcmNDciwgY2Fpcm9fdCogZHMKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9y
KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIAogc3RhdGlj
IHZvaWQgYWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVu
dENvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwg
c3RvcC5vZmZzZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1
LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNv
bG9yUkdCQShjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JT
dG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0g
PSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwg
aWQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9y
U3BhY2VSZWYsIENvbG9yQ29tcG9uZW50czxmbG9hCiAgICAgaWYgKCFjZ0NvbG9yU3BhY2UpIHsK
ICNpZiBIQVZFKENPUkVfR1JBUEhJQ1NfRVhURU5ERURfU1JHQl9DT0xPUl9TUEFDRSkKICAgICAg
ICAgYXV0byBjb21wb25lbnRzQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBID0gY2FsbFdpdGhDb2xv
clR5cGUoY29tcG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVk
U1JHQkE8ZmxvYXQ+Pihjb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29sb3IpLnJlc29sdmVkKCkp
OwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRTUkdCQ29sb3JTcGFjZVJl
ZigpLCBjb21wb25lbnRzQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBIH07CiAjZWxzZQogICAgICAg
ICBhdXRvIGNvbXBvbmVudHNDb252ZXJ0ZWRUb1NSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29t
cG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+Pihjb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0pOwogICAgICAgICBy
ZXR1cm4geyBzUkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzQ29udmVydGVkVG9TUkdCQSB9
OwogI2VuZGlmCkBAIC0xNjMsNyArMTYzLDcgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3Bh
Y2VSZWYsIENvbG9yQ29tcG9uZW50czxmbG9hCiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclJl
Zj4gY3JlYXRlQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbY29sb3JT
cGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3IuY29sb3JTcGFjZUFuZFJlc29s
dmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgYXV0byBbY2dDb2xvclNwYWNlLCBjZ0NvbXBhdGli
bGVDb21wb25lbnRzXSA9IGNvbnZlcnRUb0NHQ29tcGF0aWJsZUNvbXBvbmVudHMoY29sb3JTcGFj
ZSwgY29tcG9uZW50cyk7CiAgICAgCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYzRdID0gY2dDb21w
YXRpYmxlQ29tcG9uZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAkocmV2aXNpb24gMjg3
NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5k
ZXJlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDggKzQ3Miw3IEBAIEdyYWRpZW50UmVu
ZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlRwogICAgIC8vIGV4dGVu
ZGVkIHNSR0IgZm9yIGFsbCBncmFkaWVudHMuCiAgICAgaWYgKGhhc09ubHlCb3VuZGVkU1JHQkNv
bG9yU3RvcHMoc3RvcHMpKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3Bz
KSB7Ci0gICAgICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29s
b3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gY29tcG9uZW50czsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5j
b2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAg
ICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAgICAgICAgICAgIGNv
bG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgICAgICBjb2xvckNvbXBv
bmVudHMudW5jaGVja2VkQXBwZW5kKGIpOwpAQCAtNDg4LDkgKzQ4Nyw5IEBAIEdyYWRpZW50UmVu
ZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlRwogCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNTX0VY
VEVOREVEX1NSR0JfQ09MT1JfU1BBQ0UpCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oKTsKKyAg
ICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5
PEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjZWxzZQotICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Zmxv
YXQ+PigpOworICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjZW5kaWYKICAgICAgICAg
ICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAgICAgICAgICAgICBjb2xv
ckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKGcpOwpAQCAtNTQ2LDcgKzU0NSw3IEBAIHZvaWQg
R3JhZGllbnRSZW5kZXJlckNHOjpTaGFkaW5nOjpzaGFkaW5nRnVuY3Rpb24odm9pZAogICAgICAg
ICBtYWtlRnJvbUNvbXBvbmVudHM8SW50ZXJwb2xhdGlvblNwYWNlQ29sb3JUeXBlPihzdG9wMS5j
b2xvckNvbXBvbmVudHMpLCBvZmZzZXQpOwogCiAgICAgLy8gNC4gQ29udmVydCB0byB0aGUgb3V0
cHV0IGNvbG9yIHNwYWNlLgotICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091
dHB1dFNwYWNlID0gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91dHB1dFNwYWNlQ29s
b3JUeXBlPihpbnRlcnBvbGF0ZWRDb2xvcikpOworICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JD
b252ZXJ0ZWRUb091dHB1dFNwYWNlID0gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91
dHB1dFNwYWNlQ29sb3JUeXBlPihpbnRlcnBvbGF0ZWRDb2xvcikucmVzb2x2ZWQoKSk7CiAKICAg
ICAvLyA1LiBXcml0ZSBjb2xvciBjb21wb25lbnRzIHRvICdvdXQnIHBvaW50ZXIuCiAgICAgZm9y
IChzaXplX3QgY29tcG9uZW50SW5kZXggPSAwOyBjb21wb25lbnRJbmRleCA8IGludGVycG9sYXRl
ZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZS5zaXplKCk7ICsrY29tcG9uZW50SW5kZXgpCkBA
IC01NjAsNyArNTU5LDcgQEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJl
bmRlcmVyQ0c6Om1ha2VTCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihjb2xvcklu
dGVycG9sYXRpb25NZXRob2QuY29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICBbJl0gKGF1dG8m
IGNvbG9yU3BhY2UpIC0+IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gewogICAgICAgICAgICAg
ICAgICAgICB1c2luZyBDb2xvclR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2Vf
dDxkZWNsdHlwZShjb2xvclNwYWNlKT46OkNvbG9yVHlwZTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8
Q29sb3JUeXBlPigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yLnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVk
KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdo
dGluZ05FT04uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRp
bmdORU9OLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBpbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGkKICAgICAvLyBTZXQgbGln
aHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7CiAK
LSAgICBhdXRvIGNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIGF1dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQg
PSBjb2xvci5yZWQ7CiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IGNvbG9yLmdyZWVu
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOSArOTIsMTkgQEAgYm9vbCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTCiB7CiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIEdSQVlTQ0FMRTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQp
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwor
ICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4o
Z3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50
KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsK
KyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+
KHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1f
YW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxm
bG9hdD4+KGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBTQVRVUkFURTogewotICAgICAgICBjb2xvciA9
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9y
TWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGlu
ZzxTUkdCQTxmbG9hdD4+KHNhdHVyYXRpb25Db2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNTUsNyArMTU1
LDcgQEAgYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zv
cm1DCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIE9QQUNJVFk6Ci0gICAgICAg
IGNvbG9yLmFscGhhICo9IG1fYW1vdW50OworICAgICAgICBjb2xvciA9IGNvbG9yV2l0aE92ZXJy
aWRkZW5BbHBoYShjb2xvciwgc3RkOjpjbGFtcDxmbG9hdD4oY29sb3IucmVzb2x2ZWQoKS5hbHBo
YSAqIG1fYW1vdW50LCAwLjBmLCAxLjBmKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNh
c2UgSU5WRVJUOiB7CiAgICAgICAgIGZsb2F0IG9uZU1pbnVzQW1vdW50ID0gMS4wZiAtIG1fYW1v
dW50OwpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGh1ZVJvdGF0ZShjb25zdCBDb2xvcgogCiBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6dHJhbnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKLSAgICBh
dXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpLCAwLjVmKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBo
dWVSb3RhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIDAuNWYpOwogICAg
IAogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXguIFNlZSByZGFyOi8vcHJvYmxlbS80MTE0NjY1MCBm
b3IgaG93IHRoaXMgbWF0cml4IHdhcyBkZXJpdmVkLgogICAgIGNvbnN0ZXhwciBDb2xvck1hdHJp
eDw1LCAzPiB0b0RhcmtNb2RlTWF0cml4IHsKQEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEludmVy
dExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUMKICAgICAgICAgLTAu
MDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0w
LjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICBhdXRvIGNvbnZlcnRlZFRv
TGlnaHRNb2RlQ29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CisgICAgYXV0byBjb252ZXJ0ZWRU
b0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSk7CiAKICAgICBh
dXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdo
dE1vZGVDb21wb25lbnRzLCAwLjVmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTEx
LDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDb2xvciYgY29sb3Ip
IGNvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+Pigp
OwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAg
aWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpAQCAtMTMwLDcgKzEz
MCw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9y
JiBjbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAg
ICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4o
KTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAg
IGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
ci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgTGkKIHsKICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGlu
Z0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9y
U3BhY2UpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvUmVz
b2x2ZWRDb2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFj
ZSk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBG
bG9hdFBvaW50M0QociwgZywgYik7CiAKICAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRp
bmdEYXRhKCpkYXRhLmZpbHRlciwgKmRhdGEucmVzdWx0LCBwYWludGluZ0RhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
ci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlYwogICAgIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJ
bmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkgeyByZXR1cm4gKHkgKiB3aWR0aCArIHgpICog
NDsgfQogICAgIHN0YXRpYyBpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVG
cm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29t
cG9uZW50cykgeyByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8
U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07IH0KIAotICAgIHN0YXRpYyBpbmxpbmUgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1
ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNT
UkdCQShwaXhlbCkpOyB9CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JB
IHBpeGVsKSB7IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKS5yZXNvbHZl
ZCgpKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1p
bk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBz
dGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQs
IGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRp
YyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0
IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgQ29sb3I6OkNv
bG9yKGNvbnN0IEdka1JHQkEmIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNv
bnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7Cisg
ICAgYXV0byBbciwgZywgYiwgYV0gPSAudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0
IENvbG9yJiBjb2xvciwgZgogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwog
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgIGdsVW5p
Zm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgZ2xMaW5l
V2lkdGgod2lkdGgpOwogCkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdOdW1iZXIoaW50IG51bWJlciwgY29uc3QgQ29sCiAgICAgY2Fpcm9fdCogY3IgPSBjYWly
b19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVu
IHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+
KCkucmVzb2x2ZWQoKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEp
OwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQx
NSw3ICs0MTUsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyUHIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAg
ICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29u
dGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gcHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkp
OworICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5j
b2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAg
ICAgICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEp
OwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwg
MCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAg
ICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsK
QEAgLTczNSw3ICs3MzUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3Io
Y29uc3QgRmxvYXRSZWN0JiAKICAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBF
bmFibGVkKCkpCiAgICAgICAgIHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwg
Y2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRS
ZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RD
b3VudCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlw
bGllZChjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsK
ICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwog
ICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0gU2hv
dWxkQmxlbmQ7CkBAIC03NDUsNyArNzQ1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdT
b2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVh
ckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZ2xDbGVh
ckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDEzICs0MCwxMyBAQCBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xv
cjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIEQyRDE6
OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRG
KCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNyZWF0ZUJy
dXNoKElEMkQxUmVuZGVyVGFyZ2V0KiByCiAgICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3Bz
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNw
YWNlcy4KLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgZ3JhZGllbnRTdG9w
cy5ncmFkaWVudFN0b3BzLnVuY2hlY2tlZEFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5v
ZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsCiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBj
b25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIs
IGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTk0LDcgKzE1OTQsNyBAQCBjb25zdGV4cHIgZmxvYXQgZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdo
dG5lc3NBZGp1c3RtZW4KIENvbG9yIFJlbmRlclRoZW1lOjpkYXRlUGxhY2Vob2xkZXJUZXh0Q29s
b3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENIQTxmbG9hdD4gcmF0aGVy
IHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJlc3VsdHMgYW5kIHRvIGF2
b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQgSFNMQSBkb2VzLgotICAg
IGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwor
ICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CiAgICAgaWYgKHRleHRDb2xvci5sdW1pbmFuY2UoKSA8IGJhY2tncm91bmRD
b2xvci5sdW1pbmFuY2UoKSkKICAgICAgICAgaHNsYS5saWdodG5lc3MgKz0gZGF0ZVBsYWNlaG9s
ZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICogKDEwMC4wZiAtIGhzbGEubGlnaHRu
ZXNzKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMDcsNyArMTMwNyw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZAogc3Rh
dGljIGJvb2wgc2hvdWxkVXNlQ29udmV4R3JhZGllbnQoY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVt
aW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGZsb2F0IGxh
cmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgcmV0dXJu
IGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlv
bkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAgKzgxLDEwIEBAIGNsYXNzIFNW
R0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQQogCiAgICAgdm9p
ZCBhbmltYXRlKFNWR0VsZW1lbnQmLCBmbG9hdCBwcm9ncmVzcywgdW5zaWduZWQgcmVwZWF0Q291
bnQsIENvbG9yJiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQg
PSBhbmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVG
cm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0
ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxl
VG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRv
QXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8dWludDhf
dD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVG
cm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0
ZWQgOiBtX2Zyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgp
OworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVp
bnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRp
b24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+
KCkucmVzb2x2ZWQoKTsKICAgICAgICAgCiAgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1h
dGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8ucmVkLCBz
aW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7CiAgICAgICAg
IGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBs
ZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVl
biwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOwpAQCAtMTAzLDggKzEwMyw4IEBAIGNsYXNzIFNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQQogICAgICAgICBpZiAo
IXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAg
IAotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50
OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3IudG9Db2xvclR5cGVM
b3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRv
ID0gdG9Db2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7
CiAKICAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5yZWQ7CiAg
ICAgICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdyZWVuOwpA
QCAtMTE2LDggKzExNiw4IEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJs
aWMgU1ZHQW5pbWF0aW9uQQogcHJpdmF0ZToKICAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhT
VkdFbGVtZW50Jikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1f
ZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1f
dG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1f
ZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+
KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBh
bHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAgICAgICAgIG1fdG8gPSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJv
bS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSAr
IHNpbXBsZUZyb20uYmx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NDgyKQorKysgU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAy
Mi0wMS0wMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJl
c29sdmVkL3VucmVzb2x2ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0
byBiZSBleHBsaWNpdCBhYm91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25l
IGNvbG9yIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBDb2xvcjo6dG9TUkdCQUxvc3N5PD4oKSB3aXRoIENv
bG9yOjp0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPD4+KCkgYW5kIGFkZAorICAgICAgICBjYWxscyB0
byByZXNvbHZlZCgpIHRvIGFjY2VzcyBjb2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHA6Cisg
ICAgICAgIChkcmF3UGFnZUJhY2tncm91bmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29s
b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2Vz
dHVyZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAoV2ViS2l0OjphbmltYXRpb25WYWx1
ZUZyb21LZXlmcmFtZVZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5k
Q29sb3IpOgorCiAyMDIxLTEyLTI2ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBsYWNlIFdlYktpdC9Db2NvYUNvbG9yLmggd2l0aCBXZWJDb3JlL0NvbG9yQ29j
b2EuaCwgbm90IGNvbmZ1c2luZyBhdCBhbGwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UGFnZUJhY2tn
cm91bmQoY2Fpcm9fdCogY3R4LCBjb25zdCBzdGQKICAgICBpZiAoIWJhY2tncm91bmRDb2xvciB8
fCBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS5pc1Zpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS50b1NSR0JB
TG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xv
ci52YWx1ZSgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjdHgsIHIsIGcsIGIsIGEpOwogICAgIGNhaXJv
X3JlY3RhbmdsZShjdHgsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29s
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2Vi
S2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6Q28K
IHsKICAgICBSRUxFQVNFX0FTU0VSVCh3ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNvbG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5n
cmVlbiA9IGc7CiAgICAgY29sb3ItPmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9p
ZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGCiAgICAg
ICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9y
Rm9yQ3VycmVudFNuYXBzaG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3
aXBlU25hcHNob3RQYXR0ZXJuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgICAgICAgICAg
ICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjaWYgVVNFKEdUSzQpCiAgICAgICAgICAg
ICAgICAgR2RrUkdCQSByZ2JhID0geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OwogICAgICAg
ICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRHUmVmKGdza19j
b2xvcl9ub2RlX25ldygmcmdiYSwgJmJvdW5kcykpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NzEsNyArNjcxLDcgQEAgYm9vbCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5k
Q29sb3IoZG91YmxlKiByZWQsCiAgICAgaWYgKCFiZ0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICAqcmVkID0gcjsKICAgICAq
Z3JlZW4gPSBnOwogICAgICpibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHN0
YXRpYyBSZXRhaW5QdHI8TlNPYmplY3Q+IGFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVgogICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKGtleWZyYW1lVmFsdWUsCiAgICAgICAgIFsmXShjb25zdCBm
bG9hdCBudW1iZXIpIC0+IFJldGFpblB0cjxOU09iamVjdD4geyByZXR1cm4gQChudW1iZXIpOyB9
LAogICAgICAgICBbJl0oY29uc3QgV2ViQ29yZTo6Q29sb3IgY29sb3IpIC0+IFJldGFpblB0cjxO
U09iamVjdD4gewotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSAgY29sb3IudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAg
ICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwgQChiKSwgQChhKSBdOwogICAgICAgICB9LAogICAg
ICAgICBbJl0oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEIHBvaW50KSAtPiBSZXRhaW5QdHI8
TlNPYmplY3Q+IHsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4NzUyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIyLTAxLTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgcmVzb2x2ZWQvdW5yZXNvbHZlZCBjb2xvciB0eXBlIGFj
Y2Vzc29ycyB0byByZXF1aXJlIHVzZXJzIHRvIGJlIGV4cGxpY2l0IGFib3V0IHdoZXRoZXIgdGhl
eSB3aWxsIGhhbmRsZSBtaXNzaW5nL25vbmUgY29sb3IgY29tcG9uZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0Nzk4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIENvbG9yOjp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29s
b3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4oKSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRv
IHJlc29sdmVkKCkgdG8gYWNjZXNzIGNvbG9yIGNvbXBvbmVudHMuIEFsc28gdXBkYXRlIHRvIG5l
dyBuYW1lIG9mIGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCksCisgICAgICAgIGNvbG9yU3BhY2VB
bmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Y2hhbmdlQ29udGV4dENvbnRlbnRzKToKKyAgICAgICAgUmVwbGFj
ZSB1bm5lY2Vzc2FyeSB1c2Ugb2YgY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSB3aXRoIHRoZSBt
b3JlIGNvbW1vbiB0b0NvbG9yVHlwZUxvc3N5PFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpLgorCiAyMDIyLTAxLTAxICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+
CiAKICAgICAgICAgbWFrZSBTaGFyZWRCdWZmZXI6OmNvcHkoKSByZXR1cm4gYSBjb250aWd1b3Vz
IFNoYXJlZEJ1ZmZlcgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Nv
bG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9y
ID0gQ29sb3I6OndoaXRlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlw
ZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FU
X0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iu
c2F0dXJhdGlvbik7CkBAIC01Nyw3ICs1Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNr
KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29s
b3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNs
YUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgp
OwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9G
TE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC03Myw3ICs3Myw3IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpyZWQ7CiAK
LSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+
KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1
ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAt
ODksNyArODksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIHsKICAgICBDb2xvciBj
b2xvciA9IENvbG9yOjpncmVlbjsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9G
TE9BVF9FUSgxMjAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBURVNUKENvbG9yLCBSR0JU
b0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsdWU7CiAKLSAgICBhdXRv
IGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAg
YXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJl
c29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMjQwLCBoc2xhQ29sb3IuaHVlKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMjEsNyAr
MTIxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29s
b3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50
b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9HcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIGhz
bGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0
byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE1Myw3ICsxNTMsNyBA
QCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBD
b2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlw
ZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FU
X0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iu
c2F0dXJhdGlvbik7CkBAIC0xODEsNyArMTgxLDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAK
ICAgICB2YWxpZENvbG9yID0gU1JHQkE8dWludDhfdD4geyAxLCAyLCAzLCA0IH07CiAgICAgRVhQ
RUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIGF1dG8gdmFsaWRDb2xvckNvbXBv
bmVudHMgPSB2YWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gdmFs
aWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWlu
dDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMu
cmVkLCAxKTsKICAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwog
ICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKQEAgLTE4OSw3ICsx
ODksNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIAogICAgIENvbG9yIHlldEFub3RoZXJWYWxp
ZENvbG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwogICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJW
YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBv
bmVudHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAg
ICBhdXRvIHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBF
WFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQ
RUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQ
RUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKQEAgLTE5Nyw3
ICsxOTcsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIAogICAgIG90aGVyVmFsaWRDb2xvciA9
IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFs
aWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9
IG90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIG90aGVy
VmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29s
b3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBv
bmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRz
LmJsdWUsIDMpOwpAQCAtMjA5LDIwICsyMDksMjAgQEAgVEVTVChDb2xvciwgTHVtaW5hbmNlKQog
ICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihDb2xvcjo6YmxhY2spLmx1bWluYW5jZSgpLCAwKTsK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoQ29sb3I6OndoaXRlKS5sdW1pbmFuY2UoKSwgMSk7
CiAKLSAgICBhdXRvIGNDb21wb25lbnRzID0gU1JHQkE8dWludDhfdD4geyA4NSwgOTAsIDE2MCB9
OworICAgIGF1dG8gY0NvbXBvbmVudHMgPSBTUkdCQTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH0u
cmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0NvbXBvbmVudHMpLmx1bWlu
YW5jZSgpLCAwLjExNzgxNDU1KTsKIAogICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5yZWQsIDg1
KTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuZ3JlZW4sIDkwKTsKICAgICBFWFBFQ1RfRVEo
Y0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKIAotICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0Nv
bXBvbmVudHMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8g
Y0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmxpZ2h0ZW5lZCgpLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29s
b3IoY0xpZ3RlbmVkKS5sdW1pbmFuY2UoKSwgMC4yOTE2ODIpOwogICAgIEVYUEVDVF9FUShjTGln
dGVuZWQucmVkLCAxMzApOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CiAg
ICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAyNDQpOwogCi0gICAgYXV0byBjRGFya2VuZWQg
PSBDb2xvcihjQ29tcG9uZW50cykuZGFya2VuZWQoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
KyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5kYXJrZW5lZCgpLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxP
QVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFuY2UoKSwgMC4wMjcwMDYyNDIpOwogICAgIEVY
UEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVl
biwgNDMpOwpAQCAtMjMzLDcgKzIzMyw3IEBAIFRFU1QoQ29sb3IsIENvbnN0cnVjdG9yKQogewog
ICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5k
Q29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzEuY29s
b3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gY29tcG9uZW50czsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAt
MjQ4LDcgKzI0OCw3IEBAIFRFU1QoQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKICAgICBDb2xvciBj
MSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xv
ciBjMihjMSk7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10g
PSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFty
LCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwg
cik7CkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVChDb2xvciwgQXNzaWdubWVudCkKICAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBD
b2xvciBjMiA9IGMxOwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjAsIHIpOwpAQCAtMzIzLDcgKzMyMyw3IEBAIFRFU1QoQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikK
ICAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQgc28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRl
bGV0aW9uLgogICAgIEVYUEVDVF9GQUxTRShjMS5pc1ZhbGlkKCkpOwogCi0gICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVk
Q29sb3JDb21wb25lbnRzKCk7CiAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMyk7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwpA
QCAtMzQ0LDcgKzM0NCw3IEBAIFRFU1QoQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogICAgIC8vIGFu
ZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAg
ICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBj
b21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBv
bmVudHMoKTsKICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAz
KTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CkBAIC0zNzAsNyAr
MzcwLDcgQEAgVEVTVChDb2xvciwgUmV0dXJuVmFsdWVzKQogVEVTVChDb2xvciwgUDNDb252ZXJz
aW9uVG9TUkdCKQogewogICAgIENvbG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4w
LCAwLjUsIDAuMjUsIDAuNzUgfSB9OwotICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9y
LmdyZWVuLCAwLjQ2MjUzMjgyZik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1
ZSwgMC4xNDkxMjc0OGYpOwpAQCAtMzgwLDcgKzM4MCw3IEBAIFRFU1QoQ29sb3IsIFAzQ29udmVy
c2lvblRvU1JHQikKIFRFU1QoQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uVG9TUkdCKQogewog
ICAgIENvbG9yIGxpbmVhclNSR0JBQ29sb3IgeyBMaW5lYXJTUkdCQTxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMC43NSB9IH07Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JH
QkFDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAg
IEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwgMS4wZik7CiAgICAgRVhQRUNUX0ZMT0FU
X0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNzM1MzU2OTI3Zik7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZmKTsKQEAgLTM5OCw3ICszOTgsNyBAQCBURVNU
KENvbG9yLCBDb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSkKIAogICAgIHsKICAgICAgICAgQ29s
b3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeSgwLjUpOwotICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAg
ICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgICAgIEVY
UEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpTUkdCKTsKICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb21wb25lbnRzOwogICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwpA
QCAtNDA5LDcgKzQwOSw3IEBAIFRFU1QoQ29sb3IsIENvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KQogCiAgICAgewogICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuKTsKLSAgICAgICAgYXV0byBbY29sb3JT
cGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9
IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29t
cG9uZW50cygpOwogICAgICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6U1JH
Qik7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKICAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHIsIDAuKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4
dEdMQ29jb2EubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTQsOSArOTQsOCBAQCBzdGF0aWMgOjp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQg
Y2hhbmdlQ29udGV4dENvbnRlbnQKIHsKICAgICBjb250ZXh0Lm1hcmtDb250ZXh0Q2hhbmdlZCgp
OwogICAgIFdlYkNvcmU6OkNvbG9yIGV4cGVjdGVkIHsgaXRlcmF0aW9uICUgMiA/IFdlYkNvcmU6
OkNvbG9yOjpncmVlbiA6IFdlYkNvcmU6OkNvbG9yOjp5ZWxsb3cgfTsKLSAgICBhdXRvIFtjb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IGV4cGVjdGVkLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7
Ci0gICAgVU5VU0VEX1ZBUklBQkxFKGNvbG9yU3BhY2UpOwotICAgIGNvbnRleHQuY2xlYXJDb2xv
cihjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRz
WzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGV4cGVjdGVkLnRvQ29sb3JUeXBlTG9zc3k8
V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CisgICAgY29udGV4dC5jbGVhckNv
bG9yKHIsIGcsIGIsIGEpOwogICAgIGNvbnRleHQuY2xlYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIHVpbnQ4X3QgZ290VmFsdWVzWzRdID0geyB9
OwogICAgIGF1dG8gc2FtcGxlQXQgPSBjb250ZXh0LmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCk7Cg==
</data>
<flag name="commit-queue"
          id="474006"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448186</attachid>
            <date>2022-01-02 14:46:02 -0800</date>
            <delta_ts>2022-01-02 18:40:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved3.diff</filename>
            <type>text/plain</type>
            <size>158178</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRl
eHRBdHNwaS5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyNCwxMyArODI0LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0
dHJpYnV0ZXMgQWNjZXNzaWJpbGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAg
ICAgICAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9y
Li50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAg
ICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIs
ICcsJywgZywgJywnLCBiKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdD
b2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAg
ICAgICAgICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xv
ci4udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAg
ICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhy
LCAnLCcsIGcsICcsJywgYikpOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVu
ZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2lu
Z09iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KHNlbGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29s
dmVkKCk7CiAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAl
Ny41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3
NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8
dWludDhfdD4gQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpDb2xvclZhbHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
OwogfQogCiBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1
YmxpYyBSZWZDb3VudGUKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVp
bnQ4X3Q+PiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NP
TVByaW1pdGl2ZVZhbHVlPiBjcmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVy
LCBOdW1iZXJUeXBlIG51bWJlcikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENT
U09NUkdCQ29sb3IgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVj
YXRlZENTU09NUkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9y
JiBjb2xvcikKLSAgICAgICAgOiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
KQorICAgICAgICA6IG1fY29sb3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpKQogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29s
b3IuZ3JlZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9y
LmJsdWUpKQpAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhf
dD4gbV9jb2xvcjsKKyAgICBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xv
cjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJl
ZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGlj
IENvbG9yIHBhcnNlUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYg
KCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IG9yaWdpbkNvbG9yQXNTUkdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6
OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1
OSw3ICsxNjU5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENT
U1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9
IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFs
dWVILCBDU1NVbml0VHlwZTo6Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3
NzMsNyArMTc3Myw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhD
U1NQYXJzZXJUb2tlbgogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxIV0JBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0Ig
PSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1Zh
bHVlSCwgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0x
ODQ5LDcgKzE4NDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMo
Q1NTUGFyc2VyVG9rZW4KICAgICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9
IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAK
ICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVl
TCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVz
cyB9LApAQCAtMTkyOSw3ICsxOTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQ
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmln
aW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNv
bG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNv
bHZlZCgpOwogCiAgICAgQ1NTQ2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAg
eyBDU1NWYWx1ZUwsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xD
SC5saWdodG5lc3MgfSwKQEAgLTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3
KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29s
b3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2
ZWQoKTsKIAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsg
Q1NTVmFsdWVSLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xv
clR5cGUucmVkICogMTAwLjAgfSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlk
ZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFla
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsK
IAogICAgIENTU0NhbGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFs
dWVYLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0y
NDQ5LDcgKzI0NDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBz
dGF0aWMgQ29sb3IgbWkKICAgICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0
ZSB0b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUg
dGhlbiBpbnRlcnBvbGF0ZWQgaW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3Jp
YmVkIGluIENTUyBDb2xvciA0IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRv
IG1peGVkQ29sb3IgPSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xv
cjEsIG1peFBlcmNlbnRhZ2VzLnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2Vu
dGFnZXMucDIgLyAxMDAuMCk7CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xv
ckNvbXBvbmVudHM8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJw
b2xhdGlvbk1ldGhvZCwgY29udmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4w
LCBjb252ZXJ0ZWRDb2xvcjIsIG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7
CiAKICAgICAvLyAzLiBJZiBhbiBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcg
cGVyY2VudGFnZSBub3JtYWxpemF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRl
cnBvbGF0ZWQgcmVzdWx0CiAgICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVs
dGlwbGllci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5T
QXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAg
ICAgICAgICAgICAgICAgICBhdXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXh0Q29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgdXNpbmcgTENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJl
dHRlciBwZXJjZXB0dWFsIHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2Ft
dXQsIHdoaWNoIGlzIHdoYXQgSFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3Nz
eTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGb3JjZSB0aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRs
ZSwgYW5kIG11bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzbyB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3Vu
ZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNSwyNyArMTM1LDI1IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBs
ZUNvbG9yKERvY3VtZW50JgogICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JH
QkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3RE
YXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZm
ZXJlbmNlKExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBj
b2xvckRpZmZlcmVuY2UoY29uc3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiBy
aHMpCiB7Ci0gICAgcmV0dXJuIHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNz
LCAyKSArIHBvdyhyaHMuYSAtIGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1l
dHJpYyAoZGVsdGFFMjAwMCwgZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBl
cmNlcHR1YWxseSB1bmlmb3JtIChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29s
b3JfZGlmZmVyZW5jZSkuCisKKyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJl
c29sdmVkKCk7CisgICAgYXV0byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQo
KTsKKworICAgIHJldHVybiBzcXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNz
IC0gcmVzb2x2ZWRMZWZ0SGFuZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0
SGFuZFNpZGUuYSAtIHJlc29sdmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmln
aHRIYW5kU2lkZS5iIC0gcmVzb2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMg
TGFiPGZsb2F0PiBhdmVyYWdlQ29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50
KQorc3RhdGljIExhYjxmbG9hdD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3Jz
KQogewotICAgIGZsb2F0IHRvdGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAw
OwotICAgIGZsb2F0IHRvdGFsQiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7
Ci0gICAgICAgIHRvdGFsQSArPSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9y
c1tpXS5iOwotICAgIH0KLSAgICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNv
dW50LAotICAgICAgICB0b3RhbEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0g
ICAgICAgIDEsCi0gICAgfTsKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7
IH07CisgICAgZm9yIChhdXRvIGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXND
b2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0
b3RhbHMgLz0gY29sb3JzLnNpemUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxz
WzFdLCB0b3RhbHNbMl0gfTsKIH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2Ft
cGxlcjo6c2FtcGxlVG9wKFBhZ2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBQYWdlQ29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBE
ZWNyZWFzZSB0aGUgd2lkdGggYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlz
IHdpdGhpbiBib3VuZHMgYW5kIG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9
IGZyYW1lVmlldy0+Y29udGVudHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51
bVNhbXBsZXMgPSA1OworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsK
ICAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExh
YjxmbG9hdD4gc2FtcGxlc1tudW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVt
U2FtcGxlcyAtIDFdOworICAgIHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2Ft
cGxlczsKKyAgICBzdGQ6OmFycmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2Vz
OwogCiAgICAgYXV0byBzaG91bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsm
XSAoc2l6ZV90IGkpIC0+IGJvb2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hp
bmcgY29sb3IgaXMgbm90IHRoZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFk
eSBpcyBhbiBub24tbWF0Y2hpbmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBQYWdlQ29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAg
fQogICAgIH0KIAotICAgIGF1dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0
byB2YWxpZFNhbXBsZUNvdW50ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29s
b3JJbmRleCkgewotICAgICAgICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRo
ZSBwb2ludGVyIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAg
Ly8gc3RhcnRzIGFuZCBkZWNyZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2Uu
Ci0gICAgICAgICsrc2FtcGxlc1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50
OwotICAgIH0gZWxzZSBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAx
KSB7Ci0gICAgICAgIC8vIFNraXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNv
dW50IG9mIHNhbXBsZXMgdG8gYXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50Owot
ICAgIH0KLSAgICByZXR1cm4gQ29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZh
bGlkU2FtcGxlQ291bnQpKTsKKyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1T
YW1wbGVzIC0gMSkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9
LnN1YnNwYW48MCwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
cmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdo
dGVuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2sp
CiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3Rk
OjptYXgoeyByLCBnLCBiIH0pOwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEs
NyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYm
IGFzSW5saW5lKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAg
IAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQg
bXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyAr
MTEyLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGln
aHRuZXNzKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3
aXRoIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyBy
LCBnLCBiIH0pOwogICAgIHJldHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyAr
MTYyLDIzIEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4g
eyBhc0lubGluZSgpLCBGbGFnczo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBDb2xvcjo6dG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBv
dXRwdXRDb2xvclNwYWNlKSBjb25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6
dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENv
bG9yU3BhY2UpIGNvbnN0CiB7Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNv
bXBvbmVudHMoaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsK
KyAgICBhdXRvIFtpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJl
c29sdmVkQ29sb3JDb21wb25lbnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29s
b3JDb21wb25lbnRzKGlucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFj
ZSk7CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25l
bnRzSW5Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JT
cGFjZSkgY29uc3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRD
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBv
dXRwdXRDb2xvclNwYWNlKSBjb25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0
Q29sb3JDb21wb25lbnRzKGlucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JT
cGFjZSk7CisgICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3Bh
Y2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVz
b2x2ZUNvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENv
bG9yU3BhY2UpOwogfQogCi1zdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFp
cjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFj
ZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxp
bmUoKSkKLSAgICAgICAgcmV0dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBv
bmVudHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICBy
ZXR1cm4geyBjb2xvclNwYWNlKCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUo
KS5yZXNvbHZlZENvbXBvbmVudHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdC
LCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgp
KS5yZXNvbHZlZCgpKSB9OwogfQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7
IChwdWJsaWMpCiAKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJv
b2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUo
KS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5h
bHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhh
Qnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRv
PHVpbnQ4X3Q+KGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0g
ICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFz
T3V0T2ZMaW5lKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUo
KS5hbHBoYSk7IH0KKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxp
bmUoKSA/IGFzT3V0T2ZMaW5lKCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCku
cmVzb2x2ZWQoKS5hbHBoYSA9PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAu
MCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhh
Qnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRv
PHVpbnQ4X3Q+KGFzT3V0T2ZMaW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJu
IGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRC
eXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgZG91YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIGRvdWJsZSBsaWdodG5lc3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5n
IHVzZXMgd2l0aCBsdW1pbmFuY2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7
IChwdWJsaWMpCiAgICAgLy8gb3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRo
YW4gdGhlIGN1cnJlbnQgdW5kZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gQ29sb3JUeXBlIHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRo
aXMgd2lsbCBjb252ZXJ0IHRoZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFs
bHkgbG9zc2lseSBpZiB0aGUgZ2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBz
bWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVu
aWVuY2UKLSAgICAvLyB3cmFwcGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVy
biB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2Up
IGNvbnN0OworICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsK
IAotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9y
U3BhY2UoQ29sb3JTcGFjZSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0
b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JD
b21wb25lbnRzPGZsb2F0LCA0Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRz
KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsK
LQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yIGRhcmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAg
Y2xhc3MgQ29sb3IgeyAocHVibGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
T3V0T2ZMaW5lQ29tcG9uZW50cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBm
bG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBvbmVudHM7IH0KKyAgICAgICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25z
dCB7IHJldHVybiBzdGQ6OmlzbmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRz
WzNdOyB9CisgICAgICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBv
bmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNv
bHZlQ29sb3JDb21wb25lbnRzKG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIE91dE9mTGluZUNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25l
bnRzKQpAQCAtMjI4LDcgKzIyNSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lk
IHNldENvbG9yKFNSR0JBPHVpbnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRl
PiA9IHsgfSk7CiAgICAgdm9pZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVD
b21wb25lbnRzPiYmLCBDb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRl
PiA9IHsgfSk7CiAKLSAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJl
c29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBh
Y2tlZENvbG9yOjpSR0JBIGFzUGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRP
ZkxpbmVDb21wb25lbnRzJiBhc091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBA
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQog
aW5saW5lIGJvb2wgb3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5l
KCkpCi0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNP
dXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNl
KCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxp
bmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVk
Q29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxh
Z3MoKSA9PSBiLmZsYWdzKCk7CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNP
dXRPZkxpbmUoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGlu
ZSBib29sIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlm
IChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZs
YWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
CiAgICAgICAgIGF1dG8gYkZsYWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5n
UHJpdmF0ZTo6U2VtYW50aWM7Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9u
ZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkg
PT0gYi5jb2xvclNwYWNlKCkgJiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEu
YXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51
bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgp
ICYmIGFGbGFncyA9PSBiRmxhZ3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUo
KSB8fCBiLmlzT3V0T2ZMaW5lKCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9y
OjpDb2xvcihzdGQ6Om9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRo
Q29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihj
b25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNl
dE91dE9mTGluZUNvbXBvbmVudHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1
ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGlu
ZUNvbXBvbmVudHM6OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkp
KSwgQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFn
cykpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4q
PgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAg
c2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xv
ckNvbXBvbmVudHMoKmNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0lu
Y2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhP
dXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVz
b2x2ZWQoKSkpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2
YXRlKGZsYWdzKSk7CiB9CiAKIGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBv
bmVudHM+JiYgb3V0T2ZMaW5lQ29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRp
b25TZXQ8RmxhZ3M+IGZsYWdzKQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNv
bG9yKCkKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlz
T3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNv
bXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1
cm4gY29tcHV0ZUhhc2goYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xv
clNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFj
a2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcs
NyBAQCBpbmxpbmUgQ29sb3JTcGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWlu
Z1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkp
Ci0gICAgICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVu
dHMoKSwgY29sb3JTcGFjZSgpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAg
ICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpLCBjb2xvclNwYWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
CiAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwg
YXNJbmxpbmUoKSk7CiB9CiAKQEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6
Ok91dE9mTGluZUNvbXBvbmVudHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVk
T3V0T2ZMaW5lQ29tcG9uZW50cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8
dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlw
ZTxTUkdCQTx1aW50OF90Pj4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNJbmxpbmUoKSk7Ci0gICAgcmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5l
IFBhY2tlZENvbG9yOjpSR0JBIENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUs
NyArNTYyLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVu
Y29kZXImIGVuCiAgICAgICAgIGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1
dG8mIG91dE9mTGluZUNvbXBvbmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAg
ICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJl
c29sdmVkQ29tcG9uZW50cygpOwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNv
ZGVyIDw8IGMyOwogICAgICAgICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zl
cihjb25zdCBDb2xvciYgYmFja2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlz
aWJsZSgpKQogICAgICAgICByZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIs
IGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7Ci0gICAgYXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNl
QV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BS
LCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBz
b3VyY2VHLCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BB
ICsgc291cmNlQSkgLSBiYWNrZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7
CkBAIC02OCw3ICs2OCw3IEBAIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICBpZiAoIWNvbG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAot
ICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFd
ID0gY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBl
eGlzdGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiBy
ZXN1bHQ7CiAgICAgZm9yIChpbnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBo
YTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxl
bmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNv
bnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBwcmVtdWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8g
PSBwcmVtdWx0aXBsaWVkKHRvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAg
ICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGll
ZFRvID0gcHJlbXVsdGlwbGllZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSku
cmVzb2x2ZWQoKTsKIAogICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAt
MTE3LDggKzExNyw4IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9y
JiBmcm9tLCBjb25zdAogICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRv
U1JHQiA9IHRvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAK
ICAgICBhdXRvIGJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9h
dD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNv
bnRleHQpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb21wb25lbnRzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBAIHN0cnVjdCBDb2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1h
cChGJiYgZnVuY3Rpb24pIGNvbnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlv
bihzdGQ6OmRlY2x2YWw8VD4oKSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHMmIG9wZXJhdG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENv
bG9yQ29tcG9uZW50cyYgb3BlcmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHMgb3BlcmF0b3IrKFQpIGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMg
b3BlcmF0b3IvKFQpIGNvbnN0OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IE4+CiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBv
bmVudHM8VCwgTj46Om9wZXJhdG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAg
ICAgKnRoaXMgPSBtYXBDb2xvckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEg
KyBjMjsgfSwgKnRoaXMsIHJocyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgTj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENv
bG9yQ29tcG9uZW50czxULCBOPjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgq
dGhpcyAvIHJocyk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29u
dmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBMQ0hMaWtlLCB0eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xh
ckZvcm0oY29uc3QgTGFiTGlrZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy1jb2xvci8jbGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRh
bjIoY29sb3IuYiwgY29sb3IuYSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0
bmVzcywKLSAgICAgICAgc3RkOjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVl
ID49IDAgPyBodWUgOiBodWUgKyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAg
ICBmbG9hdCBodWUgPSByYWQyZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBz
dGQ6Omh5cG90KGEsIGIpOworCisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+
PSAwID8gaHVlIDogaHVlICsgMzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YWJMaWtlLCB0eXBlbmFtZSBMQ0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZv
cm0oY29uc3QgTENITGlrZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL2Nzcy1jb2xvci8jbGNoLXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRl
ZzJyYWQoY29sb3IuaHVlKTsKKyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBo
YV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGln
aHRuZXNzLAotICAgICAgICBjb2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMp
LAotICAgICAgICBjb2xvci5jaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAg
ICAgICBjb2xvci5hbHBoYQotICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVn
MnJhZChodWUpOworICAgIGZsb2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlh
bnMpOworICAgIGZsb2F0IGIgPSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBI
U0wgY29udmVyc2lvbnMuCkBAIC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlv
blJlc3VsdCB7CiAgICAgZmxvYXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3Rh
dGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAg
IGF1dG8gW21pbiwgbWF4XSA9IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBj
aHJvbWEgPSBtYXggLSBtaW47CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1
bGF0aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248SFNMQTxmbG9hdD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8
ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNv
bG9yLTQvI2hzbC10by1yZ2IKLSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAg
ICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsK
KyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8g
W2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAg
ICBmbG9hdCBsaWdodG5lc3MgPSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBm
bG9hdCBzYXR1cmF0aW9uOwpAQCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29u
dmVyc2lvbjxIU0xBPGZsb2F0PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29u
dmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNoc2wtdG8tcmdiCi0gICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFs
cGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBo
YV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAg
IGF1dG8gZ3JleSA9IGxpZ2h0bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNS
R0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdC
QTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252
ZXJ0KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1jb2xvci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1h
eCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJv
bWFdID0gY2FsY3VsYXRlSFNMSHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWlu
ICogMTAwLjBmOwogICAgIGF1dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwog
ICAgIAotICAgIHJldHVybiB7IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhh
IH07CisgICAgcmV0dXJuIHsgaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0K
IAogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+
Pjo6Y29udmVydChjb25zdCBIV0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3
aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0
ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3
aGl0ZW5lc3MgKyBibGFja25lc3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdo
aXRlbmVzcyAvIDEwMC4wZjsKQEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgRDUwV2hpdGVWYWx1ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0
ZVBvaW50OjpENTA+IENvbG9yQ29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+
LCBMYWI8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBm
bG9hdCBmMSA9IChjb2xvci5saWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQg
ZjAgPSBmMSArIChjb2xvci5hIC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9y
LmIgLyAyMDAuMGYpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3Iu
cmVzb2x2ZWQoKTsKIAorICAgIGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4w
ZjsKKyAgICBmbG9hdCBmMCA9IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEg
LSAoYiAvIDIwMC4wZik7CisKICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsK
ICAgICAgICAgZmxvYXQgdEN1YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4g
TEFCZSkKQEAgLTI0NywzMSArMjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4g
Q29sb3JDb252ZXJzaW9uPFhZWkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hp
dGVWYWx1ZXNbMF0gKiBjb21wdXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZh
bHVlc1sxXSAqIGNvbXB1dGVZKGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdo
aXRlVmFsdWVzWzFdICogY29tcHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hp
dGVWYWx1ZXNbMl0gKiBjb21wdXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwg
Y29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8
ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+Pjo6Y29udmVydChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xv
cikKIHsKLSAgICBmbG9hdCB4ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZs
b2F0IHkgPSBjb2xvci55IC8gRDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9y
LnogLyBENTBXaGl0ZVZhbHVlc1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xv
ci5yZXNvbHZlZCgpOwogCisgICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVz
WzBdOworICAgIGZsb2F0IGFkanVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBm
bG9hdCBhZGp1c3RlZFogPSB6IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFu
c2Zvcm0gPSBbXShmbG9hdCB2YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8g
c3RkOjpjYnJ0KHZhbHVlKSA6IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAg
fTsKIAotICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFu
c2Zvcm0oeSk7Ci0gICAgZmxvYXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0g
ZlRyYW5zZm9ybShhZGp1c3RlZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFkpOworICAgIGZsb2F0IGYyID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQg
bGlnaHRuZXNzID0gKDExNi4wZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYg
KiAoZjAgLSBmMSk7CiAgICAgZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJl
dHVybiB7IGxpZ2h0bmVzcywgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdo
dG5lc3MsIGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAg
LTMwOCw5ICszMDksMTAgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZl
cnNpb248WFlaQTxmbG9hCiAgICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0
ODQxODIwOTQ5NjU3NTk2ODRmLCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAg
ICBhdXRvIFtsaWdodG5lc3MsIGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAg
ICAvLyAxLiBUcmFuc2Zvcm0gZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0
bmVzcy4KLSAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vi
c2V0PDAsIDM+KCk7Ci0gICAgY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7
CisgICAgYXV0byBjb21wb25lbnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0
bmVzcyAvIDEwMC4wZiwgYSwgYiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNv
b3JkaW5hdGVzIGludG8gbm9uLWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2Vz
Ii4KICAgICBhdXRvIG5vbkxpbmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoY29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxm
bG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8g
NC4gQ29udmVydCB0byBYWVouCiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2
NS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsg
eCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9Owog
fQogCiBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9h
dCwgV2hpdGVQb2ludDo6RDY1Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2lu
dDo6RDY1PiYgY29sb3IpCkBAIC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248T0tMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFm
LCAgMC43ODI3NzE3NjYyZiwgLTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwg
eSwgeiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFla
IGludG8gTE1TICJhcHByb3hpbWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJM
TVMgPSBYWVpENjVUb0xpbmVhckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0g
WFlaRDY1VG9MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25l
bnRzPGZsb2F0LCAzPiB7IHgsIHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFy
aXR5LgogICAgIGF1dG8gbm9uTGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikg
eyByZXR1cm4gc3RkOjpjYnJ0KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9h
dD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFts
aWdodG5lc3MsIGEsIGJdID0gTm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhub25MaW5lYXJMTVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBm
cm9tIHVuaXQgbGlnaHRuZXNzIHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7
IGxpZ2h0bmVzcyAqIDEwMC4wZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBs
aWdodG5lc3MgKiAxMDAuMGYsIGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNv
bnZlcnNpb25zLgpAQCAtMzcxLDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxPS0xhYjxmbG9hdD4sIE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVu
Y3Rpb25zIGZvciByYXcgY29sb3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3Bh
Y2VzLgogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMo
Q29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5w
dXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JT
cGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xv
ckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4g
Y2FsbFdpdGhDb2xvclR5cGUoaW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwg
W291dHB1dENvbG9yU3BhY2VdIChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3
aXRjaCAob3V0cHV0Q29sb3JTcGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJH
QjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4
UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgp
KTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8RGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNh
c2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xv
cikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxF
eHRlbmRlZEE5OFJHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBj
YXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlu
cHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8RXh0ZW5kZWREaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsK
ICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3Rv
UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxF
eHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZs
b2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6
RXh0ZW5kZWRSZWMyMDIwOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAy
MDxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3Bh
Y2U6OkV4dGVuZGVkU1JHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhj
b252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxm
bG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OkhTTDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkp
OwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0Nv
bG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxD
SDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENI
QTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAg
ICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+Pihp
bnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJT
UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxM
aW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0Nv
bG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxPS0xDSEE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAg
Y2FzZSBDb2xvclNwYWNlOjpPS0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9S
R0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFBy
b1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+
PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAg
ICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihp
bnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUw
OgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpB
PGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6
OkQ1MD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OlhZWl9ENjU6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENv
bG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hp
dGVQb2ludDo6RDY1Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9y
U3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0Uo
Q0cpCiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9y
U3BhY2UsIGlucHV0Q29sb3JDb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwx
OSArNDM0LDE5IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9u
ZW50cyhDb2xvcgogICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9u
ZW50cywgaW5wdXRDb2xvclNwYWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlu
cHV0Q29sb3IpIHsKICAgICAgICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29s
b3JTcGFjZSgpKSB7CiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdC
OgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdC
QTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsK
ICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAg
IGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNl
bmRpZgogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAg
ICAgICBjYXNlIFBsYXRmb3JtQ29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+
PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2Vu
ZGlmCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNv
bnZlcnNpb24uaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDgg
QEAgZW51bSBjbGFzcyBDb2xvclNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91
dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNv
bG9yKTsKIAogLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRz
IHdpdGggYXNzb2NpYXRlZCBjb2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0
cHV0Q29sb3JTcGFjZSk7Ci1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNv
bXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
b3V0cHV0Q29sb3JTcGFjZSk7CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRS
ZXNvbHZlQ29sb3JDb21wb25lbnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1
dENvbG9yU3BhY2UpOworQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2
ZUNvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVy
IHRoYW4gWFlaQSBvciB0aG9zZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1l
bnQKQEAgLTU3LDcgKzU3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJ
bnB1dCwgdHlwZW5hbWUgPSB2CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUg
SW5wdXQ+IGlubGluZSBPdXRwdXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcikKIHsK
LSAgICByZXR1cm4gQ29sb3JDb252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0KGNvbG9y
KTsKKyAgICByZXR1cm4gQ29sb3JDb252ZXJzaW9uPENhbm9uaWNhbENvbG9yVHlwZTxPdXRwdXQ+
LCBDYW5vbmljYWxDb2xvclR5cGU8SW5wdXQ+Pjo6Y29udmVydChjb2xvcik7CiB9CiAKIApAQCAt
MjA4LDcgKzIwOCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQs
IHR5cGVuYW1lPiBzdAogCiAgICAgICAgIHVzaW5nIElucHV0V2l0aFJlcGxhY2VtZW50ID0gQ29s
b3JUeXBlV2l0aFJlcGxhY2VtZW50Q29tcG9uZW50PElucHV0LCBmbG9hdD47CiAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8SW5wdXRXaXRoUmVwbGFjZW1lbnQsIE91dHB1dD4p
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2Vt
ZW50Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZs
b2F0IHsgcmV0dXJuIHZhbHVlIC8gMjU1LjBmOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9uZW50cyhj
b2xvci5yZXNvbHZlZCgpKS5tYXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4g
dmFsdWUgLyAyNTUuMGY7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRDb2xvcjxPdXRwdXQ+KGNvbnZlcnRDb2xvcjxJbnB1dFdpdGhSZXBsYWNlbWVudD4oY29s
b3IpKTsKICAgICB9CkBAIC0yMTksMzEgKzIxOSwzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRw
dXQsIHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBPdXRwdXRX
aXRoUmVwbGFjZW1lbnQgPSBDb2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21wb25lbnQ8T3V0cHV0
LCBmbG9hdD47CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3V0cHV0V2l0
aFJlcGxhY2VtZW50LCBJbnB1dD4pCi0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25l
bnRzPE91dHB1dD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLm1hcChbXShmbG9hdCB2YWx1ZSkg
LT4gdWludDhfdCB7IHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBm
KSwgMGwsIDI1NWwpOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PE91dHB1dD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKGZsb2F0
IHZhbHVlKSAtPiB1aW50OF90IHsgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUg
KiAyNTUuMGYpLCAwbCwgMjU1bCk7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRDb2xvcjxPdXRwdXQ+KGNvbnZlcnRDb2xvcjxPdXRwdXRXaXRoUmVwbGFjZW1l
bnQ+KGNvbG9yKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBz
dGF0aWMgaW5saW5lIGNvbnN0ZXhwciBhdXRvIHRvTGluZWFyRW5jb2RlZChjb25zdCBDb2xvclR5
cGUmIGNvbG9yKSAtPiB0eXBlbmFtZSBDb2xvclR5cGU6OkxpbmVhckNvdW50ZXJwYXJ0CiAgICAg
ewotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0
byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJu
IHsgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0xpbmVhcihjMSksIENvbG9yVHlwZTo6
VHJhbnNmZXJGdW5jdGlvbjo6dG9MaW5lYXIoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rp
b246OnRvTGluZWFyKGMzKSwgYWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9HYW1tYUVuY29kZWQo
Y29uc3QgQ29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpHYW1tYUVuY29k
ZWRDb3VudGVycGFydAogICAgIHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3I7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVk
KCk7CiAgICAgICAgIHJldHVybiB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1t
YUVuY29kZWQoYzEpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVk
KGMyKSwgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMyksIGFs
cGhhIH07CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMg
aW5saW5lIGNvbnN0ZXhwciBhdXRvIHRvRXh0ZW5kZWQoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikg
LT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAg
ICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRD
b3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VGcm9tQ29tcG9uZW50czx0eXBlbmFtZSBDb2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQ+
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9C
b3VuZGVkKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91
bmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmdFeGNlcHRBbHBoYTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFy
dD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291
bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBPdXRwdXQgaGFuZGxlUkdCRmFtaWx5Q29udmVy
c2lvbihjb25zdCBJbnB1dCYgY29sb3IpCkBAIC0zMTIsNyArMzEyLDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAgICAgICAgIC8vIGhh
dmUgc3VmZmljaWVudCB0ZXN0aW5nIGNvdmVyYWdlIHRvIG5vdGljZSBhbnkgYWR2ZXJzZSBlZmZl
Y3RzLgogCiAgICAgICAgIGF1dG8gYXBwbHlNYXRyaWNlcyA9IFtdKGNvbnN0IElucHV0JiBjb2xv
ciwgYXV0by4uLiBtYXRyaWNlcykgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLCBtYXRyaWNlcy4uLikpOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0Pihh
cHBseU1hdHJpY2VzVG9Db2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVz
b2x2ZWQoKSksIG1hdHJpY2VzLi4uKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgY29uc3Rl
eHByIChJbnB1dDo6d2hpdGVQb2ludCA9PSBPdXRwdXQ6OndoaXRlUG9pbnQpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xh
dGlvbi5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvckludGVycG9sYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3
IEBAIHRlbXBsYXRlPEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFQcmVtdWx0aXBsaWNhdGlv
bgogdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50cyhJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSBpbnRl
cnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENv
bG9yU3BhY2U6OkNvbG9yVHlwZSBjb2xvcjEsIGRvdWJsZSBjb2xvcjFNdWx0aXBsaWVyLCB0eXBl
bmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9yMiwgZG91
YmxlIGNvbG9yMk11bHRpcGxpZXIpCiB7CiAgICAgLy8gMS4gQXBwbHkgcHJlLWludGVycG9sYXRp
b24gdHJhbnNmb3JtcyAoaHVlIGZpeHVwIGZvciBwb2xhciBjb2xvciBzcGFjZXMsIGFscGhhIHBy
ZW11bHRpcGxpY2F0aW9uIGlmIHJlcXVpcmVkKS4KLSAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JD
b21wb25lbnRzMSwgbm9ybWFsaXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlv
bk5vcm1hbGl6YXRpb248YWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhv
ZENvbG9yU3BhY2UsIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMSksIGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yMikpOworICAgIGF1dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxp
emVkQ29sb3JDb21wb25lbnRzMl0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBo
YVByZW11bHRpcGxpY2F0aW9uPihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IxLnJlc29sdmVkKCkpLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjIu
cmVzb2x2ZWQoKSkpOwogCiAgICAgLy8gMi4gSW50ZXJwb2xhdGUgdXNpbmcgdGhlIG5vcm1hbGl6
ZWQgY29tcG9uZW50cy4KICAgICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29tcG9uZW50cyA9IG1h
cENvbG9yQ29tcG9uZW50cyhbJl0gKGF1dG8gY29tcG9uZW50RnJvbUNvbG9yMSwgYXV0byBjb21w
b25lbnRGcm9tQ29sb3IyKSAtPiBmbG9hdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckx1bWluYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBp
bmxpbmUgZG91YmxlIHJlbGF0aXZlTHVtCiAgICAgLy8gdGhpcyBpbiBDb2xvckNvbnZlcnNpb24u
aCBhcyBhIHNpYmxpbmcgZnVuY3Rpb24gdG8gY29udmVydENvbG9yIHdoaWNoIGNhbiBnZXQgYSBj
aGFubmVsCiAgICAgLy8gb2YgYSBjb2xvciBpbiBhbm90aGVyIHNwYWNlIGluIHRoaXMga2luZCBv
ZiBvcHRpbWFsIHdheS4KIAotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hp
dGVQb2ludDo6RDY1Pj4oY29sb3IpLnk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZs
b2F0LCBXaGl0ZVBvaW50OjpENjU+Pihjb2xvcikucmVzb2x2ZWQoKS55OwogfQogCiBpbmxpbmUg
ZG91YmxlIGNvbnRyYXN0UmF0aW8oZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQSwgZG91YmxlIHJl
bGF0aXZlTHVtaW5hbmNlQikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yTW9kZWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JNb2RlbHMuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcg
KzMwLDg2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBSR0JCb3VuZGVk
bmVzcyB7IEJvdW5kZWQsIEV4dGVuZGVkIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lLCBSR0JCb3Vu
ZGVkbmVzcz4gc3RydWN0IFJHQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBo
YVRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvOwot
dGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsOwogdGVtcGxhdGU8dHlw
ZW5hbWU+IHN0cnVjdCBIU0xNb2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFdCTW9k
ZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExDSE1vZGVsOwogdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMYWJNb2RlbDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7
CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFhZWk1vZGVsOwogCisvLyBNQVJLOiBSZXNvbHZl
ZC9VbnJlc29sdmVkIERlZmludGl0aW9ucwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yTW9kZWwgPSB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiBzdHJ1Y3Qg
RXhwb3NlZENvbG9yVHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFJl
c29sdmVkQ29sb3JUeXBlOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5y
ZXNvbHZlZENvbG9yVHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4
cHIgUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiByZXNvbHZlZENvbG9yKENvbG9yVHlwZSBp
bnB1dCkKK3sKKyAgICByZXR1cm4gUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIFVucmVzb2x2
ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB1bnJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQor
eworICAgIHJldHVybiBVbnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4geyBpbnB1dCB9Owor
fQorCitpbmxpbmUgY29uc3RleHByIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiByZXNvbHZl
Q29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29sb3JD
b21wb25lbnRzKQoreworICAgIHJldHVybiBjb2xvckNvbXBvbmVudHM7Cit9CisKK2lubGluZSBj
b25zdGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGNvbG9yQ29tcG9uZW50cykKK3sKKyAg
ICByZXR1cm4gY29sb3JDb21wb25lbnRzLm1hcChbXSAoZmxvYXQgY29tcG9uZW50KSB7IHJldHVy
biBzdGQ6OmlzbmFuKGNvbXBvbmVudCkgPyAwLjBmIDogY29tcG9uZW50OyB9KTsKK30KKworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBSZXNvbHZlZENvbG9yVHlwZSA6IEV4
cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7Cisg
ICAgdXNpbmcgQ2Fub25pY2FsVHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgcmVz
b2x2ZWQoKSBvciB1bnJlc29sdmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSByZXNvbHZl
ZCBpcyBhIG5vLW9wLCBzbyB3ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXRzZWx2ZXMuCisg
ICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAg
IGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitw
cml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgUmVzb2x2
ZWRDb2xvclR5cGU8Qz4gcmVzb2x2ZWRDb2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhw
ciBSZXNvbHZlZENvbG9yVHlwZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENv
bG9yVHlwZTxDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgcmVzb2x2ZShj
b2xvcikgfQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIENvbG9yVHlwZSBy
ZXNvbHZlKENvbG9yVHlwZSBjb2xvcikKKyAgICB7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMs
IGFscGhhXSA9IHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoRXhwb3Nl
ZENvbG9yVHlwZTxDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3Ig
fSkpOworICAgICAgICByZXR1cm4gQ29sb3JUeXBlIHsgYzEsIGMyLCBjMywgYWxwaGEgfTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBVbnJlc29sdmVk
Q29sb3JUeXBlIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yVHlw
ZTo6TW9kZWw+IHsKKyAgICB1c2luZyBDYW5vbmljYWxUeXBlID0gQ29sb3JUeXBlOworCisgICAg
Ly8gQ2FsbGluZyB1bnJlc29sdmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSB1bnJlc29s
dmVkIGlzIGEgbm8tb3AsIHNvIHdlIGNhbgorICAgIC8vIGp1c3QgcmV0dXJuIG91dHNlbHZlcy4K
KyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0K
KworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDPiBmcmllbmQgY29uc3RleHByIFVu
cmVzb2x2ZWRDb2xvclR5cGU8Qz4gdW5yZXNvbHZlZENvbG9yKEMpOworCisgICAgZXhwbGljaXQg
Y29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGUoQ29sb3JUeXBlIGNvbG9yKQorICAgICAgICA6
IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7
IGNvbG9yIH0KKyAgICB7CisgICAgfQorfTsKKworCisvLyBNQVJLOiAtIENvbG9yIE1vZGVsIHN1
cHBvcnQgdHlwZXMuCisKIHRlbXBsYXRlPD4gc3RydWN0IEFscGhhVHJhaXRzPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCB0cmFuc3BhcmVudCA9IDAuMGY7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBmbG9hdCBvcGFxdWUgPSAxLjBmOwpAQCAtNjgsMTcgKzEzNyw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvckNvbXBvbmVudEluZm8gewogICAgIENvbG9yQ29t
cG9uZW50VHlwZSB0eXBlOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgRXh0ZW5kZWRSR0JNb2Rl
bDxmbG9hdD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVu
dEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewotICAgICAgICB7IC1zdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCi0gICAgICAgIHsgLXN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKLSAgICAg
ICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9
Ci0gICAgfSB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3Bh
Y2VDb29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Ci19OworLy8gTUFSSzog
LSBDb2xvciBNb2RlbCBEZWZpbml0aXRpb25zCiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNFeHRlbmRlZFJHQk1vZGVsID0gc3RkOjppc19z
YW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgRXh0ZW5kZWRSR0JNb2RlbDx0eXBlbmFt
ZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKKy8vIE1BUks6IEhTTE1vZGVsCiAKIHRlbXBs
YXRlPD4gc3RydWN0IEhTTE1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6
OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CkBA
IC05MCw4ICsxNTEsMjIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29y
ZGluYXRlU3lzdGVtOjpDeWxpbmRyaWNhbFBvbGFyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhTTE1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OnNhdHVyYXRpb247CisgICAg
dXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHBy
IENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29s
b3JUeXBlPENvbG9yVHlwZSwgSFNMTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMuaHVl
LCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNIU0xNb2RlbCA9IHN0
ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIEhTTE1vZGVsPHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+OwogCisvLyBNQVJLOiBIV0JNb2RlbAorCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBIV0JNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3Rk
OjphcnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewog
ICAgICAgICB7IDAsIDM2MCwgQ29sb3JDb21wb25lbnRUeXBlOjpBbmdsZSB9LApAQCAtMTAyLDgg
KzE3NywyMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIV0JNb2RlbDxmbG9hdD4gewogICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVT
eXN0ZW06OkN5bGluZHJpY2FsUG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFdCTW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9y
VHlwZTo6aHVlOworICAgIHVzaW5nIENvbG9yVHlwZTo6d2hpdGVuZXNzOworICAgIHVzaW5nIENv
bG9yVHlwZTo6YmxhY2tuZXNzOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNv
bXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxD
b2xvclR5cGUsIEhXQk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmh1ZSwgYy53aGl0
ZW5lc3MsIGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNIV0JNb2RlbCA9IHN0ZDo6aXNfc2Ft
ZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIEhXQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlw
ZTo6Q29tcG9uZW50VHlwZT4+OwogCisvLyBNQVJLOiBMYWJNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBMYWJNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxD
b2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7
IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVu
dFR5cGU6Ok51bWJlciB9LApAQCAtMTE0LDggKzIwMywyMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBM
YWJNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lz
dGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBMYWJNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNp
bmcgQ29sb3JUeXBlOjphOworICAgIHVzaW5nIENvbG9yVHlwZTo6YjsKKyAgICB1c2luZyBDb2xv
clR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JU
eXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNv
bnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMYWJNb2RlbDxUPj4mIGMpCit7CisgICAg
cmV0dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNMYWJNb2RlbCA9
IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIExhYk1vZGVsPHR5cGVu
YW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+OwogCisvLyBNQVJLOiBMQ0hNb2RlbAorCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBMQ0hNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIg
c3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsg
ewogICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBD
b2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LApAQCAtMTI2LDkgKzIyOSwyMyBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBMQ0hNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2Fs
UG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgTENITW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6bGlnaHRuZXNzOwor
ICAgIHVzaW5nIENvbG9yVHlwZTo6Y2hyb21hOworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOwor
ICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xv
ckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExDSE1vZGVsPFQ+
PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5jaHJvbWEsIGMuaHVlLCBjLmFs
cGhhIH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhw
ciBib29sIFVzZXNMQ0hNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6
TW9kZWwsIExDSE1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxmbG9hdD4geworLy8gTUFSSzogUkdCTW9kZWwKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVk
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxm
bG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgMSwgQ29sb3JDb21wb25l
bnRUeXBlOjpOdW1iZXIgfSwKICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51
bWJlciB9LApAQCAtMTM4LDcgKzI1NSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZs
b2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xv
clNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4gewordGVtcGxhdGU8PiBzdHJ1Y3QgUkdC
TW9kZWw8dWludDhfdCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0aWMgY29u
c3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPHVpbnQ4X3Q+LCAzPiBjb21wb25l
bnRJbmZvIHsgewogICAgICAgICB7IDAsIDI1NSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIg
fSwKICAgICAgICAgeyAwLCAyNTUsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0x
NDgsOCArMjY1LDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29y
ZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzUkdCTW9kZWwgPSBzdGQ6
OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBD
b2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZs
b2F0LCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0
ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsK
KyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51
bWJlciB9LAorICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50
VHlwZTo6TnVtYmVyIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JD
b21wb25lbnRUeXBlOjpOdW1iZXIgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3Jk
aW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRo
b2dvbmFsOworfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBSR0JCb3VuZGVkbmVz
cyBib3VuZGVkbmVzcz4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBSR0JNb2Rl
bDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIGJvdW5kZWRuZXNzPj4gOiBDb2xv
clR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6cmVkOworICAgIHVzaW5nIENvbG9yVHlwZTo6
Z3JlZW47CisgICAgdXNpbmcgQ29sb3JUeXBlOjpibHVlOworICAgIHVzaW5nIENvbG9yVHlwZTo6
YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGUsIFJH
QkJvdW5kZWRuZXNzIGJvdW5kZWRuZXNzPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+
IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBSR0JN
b2RlbDxULCBib3VuZGVkbmVzcz4+JiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVu
LCBjLmJsdWUsIGMuYWxwaGEgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBp
bmxpbmUgY29uc3RleHByIGJvb2wgVXNlc1JHQk1vZGVsID0KKyAgICAgICBzdGQ6OmlzX3NhbWVf
djx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGUsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPj4KKyAgICB8fCBzdGQ6Omlz
X3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGUsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4+OworCisKKy8v
IE1BUks6IFhZWk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4s
IDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwg
Q29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTE2MCw2ICszMDQsNDggQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8g
Y29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxh
ck9ydGhvZ29uYWw7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBF
eHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6eDsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Onk7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp6OworICAgIHVzaW5n
IENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBD
b2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVu
dHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFhZWk1vZGVsPFQ+PiYgYykKK3sK
KyAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNYWVpNb2RlbCA9IHN0
ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFhZWk1vZGVsPHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+OworCisKKy8vIGdldDw+IG92ZXJsb2FkIChhbG9u
ZyB3aXRoIHN0ZDo6dHVwbGVfc2l6ZSBhbmQgc3RkOjp0dXBsZV9lbGVtZW50IGJlbG93KSB0byBz
dXBwb3J0IGRlc3RydWN0dXJpbmcgb2YgZXhwbGljaXRseSByZXNvbHZlZCBhbmQgdW5yZXNvbHZl
ZCBjb2xvcnMuCisKK3RlbXBsYXRlPHNpemVfdCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0
ZXhwciB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUgZ2V0KGNvbnN0IEV4cG9zZWRD
b2xvclR5cGU8Q29sb3JUeXBlPiYgY29sb3IpCit7CisgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKVtJXTsKK30KKworfQorCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpSZXNvbHZlZENvbG9y
VHlwZTxDb2xvclR5cGU+PiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwg
ND4geyB9OworCit0ZW1wbGF0ZTxzaXplX3QgSSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3Mg
dHVwbGVfZWxlbWVudDxJLCBXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiB7
CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFdlYkNvcmU6OlJlc29sdmVkQ29s
b3JUeXBlPENvbG9yVHlwZT46OkNvbXBvbmVudFR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OlVucmVzb2x2ZWRDb2xvclR5
cGU8Q29sb3JUeXBlPj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzaXplX3QsIDQ+
IHsgfTsKKwordGVtcGxhdGU8c2l6ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1
cGxlX2VsZW1lbnQ8SSwgV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiB7
CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIFdlYkNvcmU6OlVucmVzb2x2ZWRD
b2xvclR5cGU8Q29sb3JUeXBlPjo6Q29tcG9uZW50VHlwZTsKK307CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0
aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4
OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmluZyBzZXJpYWxp
emF0aQogewogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pOwogCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2
ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JTcGFj
ZUZvcjxDb2xvclR5cGU+KSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENv
bG9yVHlwZT4pLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7
CkBAIC0zNzQsNyArMzc0LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGNvbnN0IEhXQkE8ZmxvCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMQ0hB
PGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nz
cy1jb2xvci00LyNzZXJpYWxpemluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2
ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImxjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcp
Jyk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImxjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMs
ICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTM5NSw3ICszOTUsNyBAQCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTENIQTxmbG8KIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9yQ1NTKGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yLCBib29sKQogewogICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8jc2VyaWFsaXppbmctbGFiLWxjaAotICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJsYWIoIiwgYzEsICIl
ICIsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsYWIoIiwgYzEs
ICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00MzIsNyArNDMyLDcg
QEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNS
CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IE9LTENIQTxmbG9hdD4mIGNvbG9y
LCBib29sKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6
YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJva2xjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIm9rbGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAn
KScpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChjb25zdCBPS0xDSEE8ZgogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBPS0xhYjxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCiAg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJva2xhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMs
ICcpJyk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAn
LCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBib29sIAogICAgIGlmICh1c2VD
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25V
c2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogCi0gICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKICAgICBzd2l0Y2ggKGFscGhhKSB7CiAgICAgY2FzZSAwOgogICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWQsICIsICIsIGdyZWVuLCAiLCAiLCBibHVl
LCAiLCAwKSIpOwpAQCAtNTU5LDcgKzU1OSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRN
TChTUkdCQTx1aW50OF90PiBjb2xvciwgYm9vbAogICAgIGlmICh1c2VDb2xvckZ1bmN0aW9uU2Vy
aWFsaXphdGlvbikKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rp
b24oY29sb3IpOwogCi0gICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7
CisgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsK
ICAgICBpZiAoYWxwaGEgPT0gMHhGRikKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBo
ZXgocmVkLCAyLCBMb3dlcmNhc2UpLCBoZXgoZ3JlZW4sIDIsIExvd2VyY2FzZSksIGhleChibHVl
LCAyLCBMb3dlcmNhc2UpKTsKICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7
CkBAIC01NzAsNyArNTcwLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KFNSR0JBPHVpbnQ4X3Q+CiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7
CiAKLSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChh
bHBoYSA8IDB4RkYpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiks
IGhleChncmVlbiwgMiksIGhleChibHVlLCAyKSwgaGV4KGFscGhhLCAyKSk7CiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUsIDIp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNl
LmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JTcGFjZU1hcHBpbmc8U1JHQkE8VD4KIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRlUG9pbnQ6OkQ1
MD4+IHsgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpYWVpf
RDUwIH07IH07CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JTcGFjZU1hcHBpbmc8
WFlaQTxULCBXaGl0ZVBvaW50OjpENjU+PiB7IHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNw
YWNlIHsgQ29sb3JTcGFjZTo6WFlaX0Q2NSB9OyB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclNwYWNlIENvbG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFw
cGluZzxDb2xvclR5cGU+Ojpjb2xvclNwYWNlOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBjb25zdGV4cHIgQ29sb3JTcGFjZSBDb2xvclNwYWNlRm9yID0gQ29sb3JTcGFjZU1hcHBpbmc8
Q2Fub25pY2FsQ29sb3JUeXBlPENvbG9yVHlwZT4+Ojpjb2xvclNwYWNlOwogCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBj
YWxsV2l0aENvbG9yVHlwZShjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVuY3RvciYmIGZ1bmN0b3IpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLCBXaGl0ZVBv
aW50PiBzdHJ1Y3QgWFlaQTsKIAogLy8gTUFSSzogTWFrZSBmdW5jdGlvbnMuCiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtl
RnJvbUNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjKQordGVtcGxhdGU8
dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nhbm9u
aWNhbFR5cGVNZW1iZXIgPSBmYWxzZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25z
dGV4cHIgYm9vbCBIYXNDYW5vbmljYWxUeXBlTWVtYmVyPFQsIHN0ZDo6dm9pZF90PHR5cGVuYW1l
IFQ6OkNhbm9uaWNhbFR5cGU+PiA9IHRydWU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgYm9vbCBoYXNDb25vbmljYWxUeXBlPiBzdHJ1Y3QgQ2Fub25pY2FsQ29sb3JUeXBlSGVscGVy
IHsgdXNpbmcgdHlwZSA9IENvbG9yVHlwZTsgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gc3RydWN0IENhbm9uaWNhbENvbG9yVHlwZUhlbHBlcjxDb2xvclR5cGUsIHRydWU+IHsgdXNp
bmcgdHlwZSA9IHR5cGVuYW1lIENvbG9yVHlwZTo6Q2Fub25pY2FsVHlwZTsgfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiB1c2luZyBDYW5vbmljYWxDb2xvclR5cGUgPSB0eXBlbmFt
ZSBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXI8Q29sb3JUeXBlLCBIYXNDYW5vbmljYWxUeXBlTWVt
YmVyPENvbG9yVHlwZT4+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xvckNv
bXBvbmVudHM8VCwgND4mIGMpCiB7Ci0gICAgcmV0dXJuIENvbG9yVHlwZSB7IGNbMF0sIGNbMV0s
IGNbMl0sIGNbM10gfTsKKyAgICByZXR1cm4gQ2Fub25pY2FsQ29sb3JUeXBlPENvbG9yVHlwZT4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdW5zaWduZWQgSW5kZXgsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIGNsYW1wZWRD
b21wb25lbnQoVCBjKSAtPiB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUKQEAgLTk3
LDI3ICsxMDUsMjcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBj
b25zdGV4cHIgQ29sCiAgICAgcmV0dXJuIHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+
KGNvbXBvbmVudHMpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyks
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwgY29tcG9uZW50c1sz
XSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQsIDQ+JiBjb21wb25lbnRzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZyhjb25z
dCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzPENvbG9yVHlwZT4oY29t
cG9uZW50cykpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBj
MiwgVCBjMykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3Rl
eHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMykKIHsK
ICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRz
IHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwgY2xhbXBlZENvbXBvbmVudDxD
b2xvclR5cGUsIDE+KGMyKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMzKSwgQWxw
aGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlIH0pOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBD
b2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMywgVCBh
bHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHBy
IGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMywgVCBhbHBo
YSkKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21w
b25lbnRzIHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDE+KGMyKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMz
KSwgY2xhbXBlZEFscGhhPFQsIHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4oYWxw
aGEpIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShj
b25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50
c0NsYW1waW5nRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21wb25l
bnRzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVk
Q29tcG9uZW50c0V4Y2VwdEFscGhhPENvbG9yVHlwZT4oY29tcG9uZW50cykpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFscGhhPiBjb25z
dGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGEoVCBj
MSwgVCBjMiwgVCBjMywgQWxwaGEgYWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFscGhhPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBv
bmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQog
ewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVu
dHMgeyBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50
PENvbG9yVHlwZSwgMT4oYzIpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBh
bHBoYSB9KTsKIH0KQEAgLTEyNywxMyArMTM1LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUIGNvbG9yKQogewogICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KSB7Ci0gICAg
ICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICAgICAg
YXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IudW5yZXNvbHZlZCgpKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldID49IFQ6Ok1vZGVsOjpjb21wb25lbnRJ
bmZvW2ldLm1pbiwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgbGVzcyB0aGFu
IHRoZSBhbGxvd2VkIG1pbmltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6TW9kZWw6OmNv
bXBvbmVudEluZm9baV0ubWluKTsKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29t
cG9uZW50c1tpXSA8PSBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5tYXgsICJDb21wb25lbnQg
YXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVt
ICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIFQ6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCk7
CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb2xvci5hbHBoYSA+PSBB
bHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQsICJBbHBo
YSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRyYW5zcGFyZW50
KSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBl
Pjo6dHJhbnNwYXJlbnQpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbG9yLmFscGhh
IDw9IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUsICJBbHBo
YSBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gKG9wYXF1ZSkg
JWYiLCBjb2xvci5hbHBoYSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46
Om9wYXF1ZSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1szXSA+PSBB
bHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQsICJBbHBo
YSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRyYW5zcGFyZW50
KSAlZiIsIGNvbXBvbmVudHNbM10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5
cGU+Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50
c1szXSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlLCAi
QWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtIChvcGFx
dWUpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50
VHlwZT46Om9wYXF1ZSk7CiAgICAgfQogfQogCkBAIC0xNDYsNyArMTU0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUKQogI2VuZGlmCiAKIHRl
bXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJ
c0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHMgPSBmYWxzZTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8
VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUoYXNDb2xvckNvbXBvbmVudHMoc3RkOjpkZWNsdmFsPFQ+
KCkpKT4+ID0gdHJ1ZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUo
YXNDb2xvckNvbXBvbmVudHMoc3RkOjpkZWNsdmFsPFQ+KCkudW5yZXNvbHZlZCgpKSk+PiA9IHRy
dWU7CiAKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBIYXNDb21wb25lbnRUeXBlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29tcG9uZW50VHlwZU1lbWJlcjxULCBzdGQ6
OnZvaWRfdDx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPj4gPSB0cnVlOwpAQCAtMTY2LDkgKzE3
NCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9yV2l0aEFscGhhSGVs
cGVyIAogICAgIC8vIGUuZy4gYXV0byB5ZWxsb3dXaXRoNTBQZXJjZW50QWxwaGEgPSBDb2xvcjo6
eWVsbG93LmNvbG9yV2l0aEFscGhhQnl0ZSgxMjgpOwogICAgIGNvbnN0ZXhwciBQYXJlbnQgY29s
b3JXaXRoQWxwaGFCeXRlKHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFBh
cmVudD4oKS5hbHBoYSksIHVpbnQ4X3Q+LCAiT25seSB1aW50OF90IGJhc2VkIGNvbG9yIHR5cGVz
IGFyZSBzdXBwb3J0ZWQuIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8
dHlwZW5hbWUgUGFyZW50OjpDb21wb25lbnRUeXBlLCB1aW50OF90PiwgIk9ubHkgdWludDhfdCBi
YXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOwogCi0gICAgICAgIGF1dG8gY29weSA9
ICpzdGF0aWNfY2FzdDxjb25zdCBQYXJlbnQqPih0aGlzKTsKKyAgICAgICAgYXV0byBjb3B5ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUGFyZW50Kj4odGhpcyktPnVucmVzb2x2ZWQoKTsKICAgICAgICAg
Y29weS5hbHBoYSA9IG92ZXJyaWRlQWxwaGE7CiAgICAgICAgIHJldHVybiBjb3B5OwogICAgIH0K
QEAgLTE3OCw3ICsxODYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xv
cldpdGhBbHBoYUhlbHBlciAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWZfdDxJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8Q29sb3JUeXBl
Pj4qID0gbnVsbHB0cj4KIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JUeXBl
JiBhLCBjb25zdCBDb2xvclR5cGUmIGIpCiB7Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhhLnVucmVzb2x2ZWQoKSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYi51bnJlc29sdmVkKCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
X3Q8SXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+
CkBAIC0yMDMsNyArMjExLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlw
ZW5hbWUgQ29sb3JUeXBlLCB0CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFs
cGhhIHsgYWxwaGEgfQogICAgIHsKLSAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CisgICAg
ICAgIGFzc2VydEluUmFuZ2UoKnN0YXRpY19jYXN0PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsK
ICAgICB9CiAKICAgICBjb25zdGV4cHIgUkdCQVR5cGUoKQpAQCAtMjExLDIxICsyMTksMjAgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0CiAg
ICAgewogICAgIH0KIAorCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJl
dHVybiByZXNvbHZlZENvbG9yKCpzdGF0aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7
IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNv
bHZlZENvbG9yKCpzdGF0aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7IH0KKworcHJv
dGVjdGVkOgogICAgIFQgcmVkOwogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxw
aGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBELCB0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIE0sIHR5cGVuYW1lIFRGPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRz
PFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFJHQkFUeXBlPFQsIEQsIENvbG9yVHlwZSwg
TSwgVEY+JiBjKQotewotICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxw
aGEgfTsKLX0KLQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotc3RydWN0IEJv
dW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQs
IEQ+LCBSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxU
LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxU
LCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+OjpSR0JBVHlwZTsKK3N0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6
OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5z
ZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4geworICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJv
dW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3Vu
ZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1
bmN0aW9uTW9kZTo6Q2xhbXBlZD4+OjpSR0JBVHlwZTsKIAogICAgIHVzaW5nIExpbmVhckNvdW50
ZXJwYXJ0ID0gQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgRXh0ZW5kZWRD
b3VudGVycGFydCA9IEV4dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+OwpAQCAtMjM0LDggKzI0MSw4
IEBAIHN0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdh
bQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVk
TGluZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+
LCBSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBU
cmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBE
LCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+
Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBE
LCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6
OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5z
ZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj4geworICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJv
dW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91
bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJG
dW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5lYXJUb1hZWjsKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpUb0xpbmVhcjsKQEAgLTI0Nyw4ICsyNTQsOCBAQCBz
dHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGkKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRHYW1t
YUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgRXh0
ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxU
LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj4gewotICAgIHVzaW5nIFJHQkFUeXBl
PFQsIEQsIEV4dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0
eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25N
b2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29kZWQg
OiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwg
UkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJG
dW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj4geworICAgIHVzaW5n
IFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBS
R0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1
bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAK
ICAgICB1c2luZyBMaW5lYXJDb3VudGVycGFydCA9IEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBE
PjsKICAgICB1c2luZyBCb3VuZGVkQ291bnRlcnBhcnQgPSBCb3VuZGVkR2FtbWFFbmNvZGVkPFQs
IEQ+OwpAQCAtMjU2LDggKzI2Myw4IEBAIHN0cnVjdCBFeHRlbmRlZEdhbW1hRW5jb2RlZCA6IFJH
QkFUeXBlPFQsIEQsIEV4dGVuZGVkRwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRD4KLXN0cnVjdCBFeHRlbmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRl
bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6
OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xh
bXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVy
RnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+OjpSR0JBVHlwZTsK
K3N0cnVjdCBFeHRlbmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExp
bmVhckVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4s
IHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlv
bk1vZGU6OlVuY2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExp
bmVhckVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4s
IHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlv
bk1vZGU6OlVuY2xhbXBlZD4+OjpSR0JBVHlwZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBsaW5lYXJUb1hZWiA9IEQ6OmxpbmVhclRvWFlaOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0
byB4eXpUb0xpbmVhciA9IEQ6Onh5elRvTGluZWFyOwpAQCAtNDM0LDE3ICs0NDEsMTYgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExhYiA6IENvbG9yV2l0aEFscGhhSGVscGVyCiAgICAg
ewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4g
cmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkg
Y29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAg
ICAgVCBsaWdodG5lc3M7CiAgICAgVCBhOwogICAgIFQgYjsKICAgICBUIGFscGhhOwogfTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0Nv
bG9yQ29tcG9uZW50cyhjb25zdCBMYWI8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5l
c3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzTGFiID0gc3RkOjppc19zYW1lX3Y8TGFiPHR5cGVu
YW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0g
TENIQSBDb2xvciBUeXBlLgpAQCAtNDY5LDE3ICs0NzUsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IExDSEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlCiAgICAgewogICAgIH0KIAorICAg
IGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigq
dGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4g
dW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7
CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBv
bmVudHMoY29uc3QgTENIQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5j
aHJvbWEsIGMuaHVlLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzTENIQSA9IHN0ZDo6aXNfc2FtZV92PExDSEE8dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzog
LSBPS0xhYiBDb2xvciBUeXBlLgpAQCAtNTA0LDE3ICs1MDksMTYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IE9LTGFiIDogQ29sb3JXaXRoQWxwaGFIZWxwCiAgICAgewogICAgIH0KIAor
ICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xv
cigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1
cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5l
c3M7CiAgICAgVCBhOwogICAgIFQgYjsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50
cyhjb25zdCBPS0xhYjxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBj
LmIsIGMuYWxwaGEgfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgSXNPS0xhYiA9IHN0ZDo6aXNfc2FtZV92PE9LTGFiPHR5cGVuYW1lIENv
bG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMQ0hB
IENvbG9yIFR5cGUuCkBAIC01MzksMTcgKzU0MywxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgT0tMQ0hBIDogQ29sb3JXaXRoQWxwaGFIZWwKICAgICB7CiAgICAgfQogCisgICAgY29u
c3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlz
KTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJl
c29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAg
ICBUIGNocm9tYTsKICAgICBUIGh1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50
cyhjb25zdCBPS0xDSEE8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hy
b21hLCBjLmh1ZSwgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc09LTENIQSA9IHN0ZDo6aXNfc2FtZV92PE9LTENIQTx0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5cGU+OwogCiAKQEAgLTU3
NSwxNyArNTc4LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHBy
IGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7
IH0KKworcHJvdGVjdGVkOgogICAgIFQgaHVlOwogICAgIFQgc2F0dXJhdGlvbjsKICAgICBUIGxp
Z2h0bmVzczsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBIU0xBPFQ+
JiBjKQotewotICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBj
LmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0
ZXhwciBib29sIElzSFNMQSA9IHN0ZDo6aXNfc2FtZV92PEhTTEE8dHlwZW5hbWUgQ29sb3JUeXBl
OjpDb21wb25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBIV0JBIENvbG9yIFR5
cGUuCkBAIC02MTAsMTcgKzYxMiwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFdC
QSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1
dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAg
IGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29s
b3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGh1ZTsKICAgICBUIHdoaXRlbmVzczsK
ICAgICBUIGJsYWNrbmVzczsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25z
dCBIV0JBPFQ+JiBjKQotewotICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFj
a25lc3MsIGMuYWxwaGEgfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgSXNIV0JBID0gc3RkOjppc19zYW1lX3Y8SFdCQTx0eXBlbmFtZSBD
b2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIFhZWiBD
b2xvciBUeXBlLgpAQCAtNjQ1LDE3ICs2NDYsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgV2hp
dGVQb2ludCBXPiBzdHJ1Y3QgWFlaQSA6IENvbG9yCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0
ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7
IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNv
bHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCB4OwogICAgIFQgeTsKICAg
ICBUIHo7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9p
bnQgVz4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhj
b25zdCBYWVpBPFQsIFc+JiBjKQotewotICAgIHJldHVybiB7IGMueCwgYy55LCBjLnosIGMuYWxw
aGEgfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgSXNYWVpBID0gc3RkOjppc19zYW1lX3Y8WFlaQTx0eXBlbmFtZSBDb2xvclR5cGU6OkNv
bXBvbmVudFR5cGUsIENvbG9yVHlwZTo6d2hpdGVQb2ludD4sIENvbG9yVHlwZT47CiAKIC8vIFBh
Y2tlZCBDb2xvciBGb3JtYXRzCkBAIC02NjgsMTEgKzY2OCwxNiBAQCBzdHJ1Y3QgUkdCQSB7CiAg
ICAgewogICAgIH0KIAotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBSR0JBKFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yKQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBSR0JBKFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBjb2xvcikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihjb2xvci5yZWQgPDwgMjQgfCBjb2xvci5ncmVlbiA8PCAxNiB8IGNvbG9yLmJsdWUgPDwg
OCB8IGNvbG9yLmFscGhhKSB9CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBleHBsaWNp
dCBSR0JBKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgICAgICA6IFJHQkEgeyBjb2xvci5yZXNv
bHZlZCgpIH0KKyAgICB7CisgICAgfQorCiAgICAgdWludDMyX3QgdmFsdWU7CiB9OwogCkBAIC02
ODIsOCArNjg3LDEzIEBAIHN0cnVjdCBBUkdCIHsKICAgICB7CiAgICAgfQogCi0gICAgY29uc3Rl
eHByIGV4cGxpY2l0IEFSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCisgICAgY29uc3RleHByIGV4
cGxpY2l0IEFSR0IoUmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8dWludDhfdD4+IGNvbG9yKQogICAg
ICAgICA6IHZhbHVlIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9yLmFscGhhIDw8IDI0IHwg
Y29sb3IucmVkIDw8IDE2IHwgY29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH0KKyAgICB7
CisgICAgfQorCisgICAgY29uc3RleHByIGV4cGxpY2l0IEFSR0IoU1JHQkE8dWludDhfdD4gY29s
b3IpCisgICAgICAgIDogQVJHQiB7IGNvbG9yLnJlc29sdmVkKCkgfQogICAgIHsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMw
LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1JHQkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQo
Y29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICByZXR1
cm4geyByICogYSwgZyAqIGEsIGIgKiBhLCBhIH07CiB9CiAKIFNSR0JBPGZsb2F0PiB1bnByZW11
bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsK
ICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxTUkdCQTxmbG9hdD4+KHIgLyBhLCBnIC8gYSwg
YiAvIGEsIGEpOwpAQCAtNDQsNyArNDQsNyBAQCBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVk
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IKIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGll
ZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3I7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAg
IGlmICghYSkKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1
NSkKQEAgLTU0LDcgKzU0LDcgQEAgU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5n
KFNSR0JBPHVpbnQ4X3Q+IGNvCiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWlsaW5n
KFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmICghYSkK
ICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1NSkKQEAgLTY5
LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25l
bnRCeXRlKHVpCiAKIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW50OF90
PiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEgfHwgYSA9PSAyNTUpCiAg
ICAgICAgIHJldHVybiBjb2xvcjsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmdFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4odW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0
ZShyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShnLCBhKSwgdW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShiLCBhKSwgYSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDIxICs0NiwyMSBAQCB1aW50OF90IGNvbnZlcnRQcmVzY2FsZWRTUkdC
QUZsb2F0VG9TUkdCQUJ5dGUoZmxvYXQpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
Qnl0ZUFscGhhVG8odWludDhfdCk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRGbG9h
dEFscGhhVG8oZmxvYXQpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQo
Y29uc3QgQ29sb3JUeXBlJiwgRnVuY3RvciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgRnVuY3Rvcj4gYXV0byBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21w
b25lbnQoY29uc3QgQ29sb3JUeXBlJiwgRnVuY3RvciYmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENv
bG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBjb25zdGV4cHIgYXV0byBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JU
eXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gYXV0byBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQg
b3ZlcnJpZGVBbHBoYSk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHBy
IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JU
eXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IGNvbnN0ZXhwciBhdXRvIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENv
bG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IGF1dG8gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JU
eXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFiTW9kZWw8Q29sb3JUeXBlPiB8fCBV
c2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVs
bHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9k
ZWw8Q29sb3JUeXBlPiB8fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxDb2xvclR5cGU+PiogPSBudWxs
cHRyPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2Rl
bDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENv
bG9yVHlwZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIg
Ym9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwogdGVtcGxhdGU8V2hpdGVQb2ludCBXPiBj
b25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IFhZWkE8ZmxvYXQsIFc+Jik7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFiTW9k
ZWw8Q29sb3JUeXBlPiB8fCBVc2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9kZWw8
Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xv
clR5cGUmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxD
b2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9y
VHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9v
bCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+PiogPSBu
dWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwogdGVtcGxh
dGU8V2hpdGVQb2ludCBXPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IFhZWkE8ZmxvYXQs
IFc+Jik7CiAKQEAgLTkzLDM1ICs5MywzNSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252
ZXJ0RmxvYXRBbHBoYVRvPGZsb2F0PihmbG8KICAgICByZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVl
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBD
b2xvclR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9y
VHlwZSYgY29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBhdXRvIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikKIHsKLSAg
ICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBj
b21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSk7CiAgICAgYXV0
byBjb3B5ID0gY29tcG9uZW50czsKICAgICBjb3B5WzBdID0gc3RkOjppbnZva2UoZnVuY3Rvciwg
Y29tcG9uZW50c1swXSk7CiAgICAgY29weVsxXSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBv
bmVudHNbMV0pOwogICAgIGNvcHlbMl0gPSBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rv
cj4oZnVuY3RvciksIGNvbXBvbmVudHNbMl0pOwotICAgIHJldHVybiB7IGNvcHlbMF0sIGNvcHlb
MV0sIGNvcHlbMl0sIGNvcHlbM10gfTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENv
bG9yVHlwZT4oY29weSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBj
b2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBjb25zdGV4cHIgYXV0byBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9y
OworICAgIGF1dG8gY29weSA9IGNvbG9yLnVucmVzb2x2ZWQoKTsKICAgICBjb3B5LmFscGhhID0g
Y29udmVydEJ5dGVBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3Zl
cnJpZGVBbHBoYSk7CiAgICAgcmV0dXJuIGNvcHk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBhdXRvIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9y
LCBmbG9hdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9yOworICAgIGF1
dG8gY29weSA9IGNvbG9yLnVucmVzb2x2ZWQoKTsKICAgICBjb3B5LmFscGhhID0gY29udmVydEZs
b2F0QWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxw
aGEpOwogICAgIHJldHVybiBjb3B5OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29u
c3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRk
ZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCiB7
CiAgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpOwogCi0g
ICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGF1dG8g
Y29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpOwogICAgIGF1
dG8gY29weSA9IGNvbXBvbmVudHM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsg
KytpKQpAQCAtMTMxLDExICsxMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgQ29sb3JUeXBlIGludmVyCiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxD
b2xvclR5cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9y
VHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBh
dXRvIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29s
b3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCiB7CiAgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6
Ok1vZGVsOjppc0ludmVydGlibGUpOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNv
bXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKQpAQCAtMTQ3LDE5ICsxNDcsMjEgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpCiAKIHRl
bXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBYWVpBPGZs
b2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLnkgPT0gMCAmJiBjb2xvci5hbHBo
YSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3Ig
PSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLnkgPT0gMCAmJiBy
ZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hT
TE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JU
eXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IubGlnaHRuZXNzID09IDAgJiYgY29sb3Iu
YWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENv
bG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5saWdodG5l
c3MgPT0gMCAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3Bh
cXVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT58fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxD
b2xvclR5cGU+Pio+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlz
QmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBh
bHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNv
bHZlZCgpOwogICAgIGNvbnN0ZXhwciBhdXRvIGNvbXBvbmVudEluZm8gPSBDb2xvclR5cGU6Ok1v
ZGVsOjpjb21wb25lbnRJbmZvOwogICAgIHJldHVybiBjMSA9PSBjb21wb25lbnRJbmZvWzBdLm1p
biAmJiBjMiA9PSBjb21wb25lbnRJbmZvWzFdLm1pbiAmJiBjMyA9PSBjb21wb25lbnRJbmZvWzJd
Lm1pbiAmJiBhbHBoYSA9PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+OjpvcGFxdWU7CiB9CkBAIC0xNjcsMjQgKzE2OSwyNyBAQCBjb25zdGV4cHIgYm9vbCBp
c0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4K
IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBy
ZXR1cm4gY29sb3IuYmxhY2tuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0
czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZl
ZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLmJsYWNrbmVzcyA9PSAxMDAgJiYgcmVzb2x2
ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxh
dGU8V2hpdGVQb2ludCBXPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IFhZWkE8ZmxvYXQs
IFc+JiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IueSA9PSAxICYmIGNvbG9yLmFscGhhID09
IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNv
bG9yLnJlc29sdmVkKCk7CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IueSA9PSAxICYmIHJlc29s
dmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFi
TW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9k
ZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5saWdodG5lc3MgPT0gMTAwICYmIGNvbG9yLmFs
cGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xv
ciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNz
ID09IDEwMCAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3Bh
cXVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8
Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBp
c1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywg
YWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVz
b2x2ZWQoKTsKICAgICBjb25zdGV4cHIgYXV0byBjb21wb25lbnRJbmZvID0gQ29sb3JUeXBlOjpN
b2RlbDo6Y29tcG9uZW50SW5mbzsKICAgICByZXR1cm4gYzEgPT0gY29tcG9uZW50SW5mb1swXS5t
YXggJiYgYzIgPT0gY29tcG9uZW50SW5mb1sxXS5tYXggJiYgYzMgPT0gY29tcG9uZW50SW5mb1sy
XS5tYXggJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPjo6b3BhcXVlOwogfQpAQCAtMTkyLDcgKzE5Nyw4IEBAIGNvbnN0ZXhwciBib29sIGlz
V2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qPgog
Y29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIHJl
dHVybiBjb2xvci53aGl0ZW5lc3MgPT0gMTAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRz
PGZsb2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVk
KCk7CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3Iud2hpdGVuZXNzID09IDEwMCAmJiByZXNvbHZl
ZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiBjb25zdGV4
cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3Jl
LmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBj
bGFzcyBJbWFnZUJhY2tpbmdTdG9yZSB7IChwdWJsaWMpCiAgICAgICAgIGlmICghYSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBhdXRvIHBpeGVsID0gYXNTUkdCQShQYWNrZWRDb2xv
cjo6QVJHQiB7ICpkZXN0IH0pOworICAgICAgICBhdXRvIHBpeGVsID0gYXNTUkdCQShQYWNrZWRD
b2xvcjo6QVJHQiB7ICpkZXN0IH0pLnJlc29sdmVkKCk7CiAKICAgICAgICAgaWYgKGEgPj0gMjU1
IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0UGl4ZWwoZGVzdCwgciwgZywgYiwg
YSk7CkBAIC0xNjAsNyArMTYwLDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeyAocHVibGlj
KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCi0gICAgICAg
ICAgICBwaXhlbCA9IHByZW11bHRpcGxpZWRGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBw
aXhlbCA9IHByZW11bHRpcGxpZWRGbG9vcmluZyhwaXhlbCkucmVzb2x2ZWQoKTsKIAogICAgICAg
ICB1aW50OF90IGQgPSAyNTUgLSBhOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YTo6c2V0RnJvbVZhbHVlKGNvbnN0IENvbG8KIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24o
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0
PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Ao
ciksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IENvbG9yJgogewogICAgIGlm
ICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywg
YiwgYV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0VG9WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAtNTI0LDcg
KzUyNCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3Qg
VmVjdG9yPAogICAgICAgICByZXR1cm47CiAKICAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFu
aW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFs
dWUsIFtdIChhdXRvJiBjb2xvcikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
LnRlbXBsYXRlIHRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCku
cmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIEBbQChyKSwgQChnKSwgQChiKSwgQChhKV07CiAg
ICAgfSkuZ2V0KCldOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEs
NyArMzcxLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUoY29u
c3QgV2ViQ29yCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5y
ZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9
OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3Jl
YXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdl
dCgpLCB2LmdldCgpKTsKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25XaW46OnNldFRvVmFsdWUoY29uc3QgV2ViQ29yZToKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ICE9IEJhc2ljKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1
ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgQ0dGbG9h
dCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5i
bHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYg
PSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRU
b1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQCB2
b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2UKICAg
ICAgICAgCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewot
ICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWVbaV0udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNv
bXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVu
dHMuYWxwaGEgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENG
KENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJy
YXkuZ2V0KCksIHYuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3
NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgY29weUNvbnRl
eHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0NyLCBjYWlyb190KiBkcwogCiB2b2lkIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+
KCkucmVzb2x2ZWQoKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgciwgZywg
YiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5n
ZWQoKQogCiBzdGF0aWMgdm9pZCBhZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3Jh
ZGllbnQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7Cisg
ICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9y
Z2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0K
IApAQCAtNTUsNyArNTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZv
aWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwg
R3JhZGllbnRDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+
KCkucmVzb2x2ZWQoKTsKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9y
Z2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTIgKzE0NywxMiBAQCBzdGF0aWMgc3Rk
OjpwYWlyPENHQ29sb3JTcGFjZVJlZiwgQ29sb3JDb21wb25lbnRzPGZsb2EKICAgICBpZiAoIWNn
Q29sb3JTcGFjZSkgewogI2lmIEhBVkUoQ09SRV9HUkFQSElDU19FWFRFTkRFRF9TUkdCX0NPTE9S
X1NQQUNFKQogICAgICAgICBhdXRvIGNvbXBvbmVudHNDb252ZXJ0ZWRUb0V4dGVuZGVkU1JHQkEg
PSBjYWxsV2l0aENvbG9yVHlwZShjb21wb25lbnRzLCBjb2xvclNwYWNlLCBbXSAoY29uc3QgYXV0
byYgY29sb3IpIHsKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGNvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xv
cikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4geyBleHRlbmRlZFNS
R0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHNDb252ZXJ0ZWRUb0V4dGVuZGVkU1JHQkEgfTsK
ICNlbHNlCiAgICAgICAgIGF1dG8gY29tcG9uZW50c0NvbnZlcnRlZFRvU1JHQkEgPSBjYWxsV2l0
aENvbG9yVHlwZShjb21wb25lbnRzLCBjb2xvclNwYWNlLCBbXSAoY29uc3QgYXV0byYgY29sb3Ip
IHsKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JH
QkE8ZmxvYXQ+Pihjb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAg
fSk7CiAgICAgICAgIHJldHVybiB7IHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHNDb252
ZXJ0ZWRUb1NSR0JBIH07CiAjZW5kaWYKQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgc3RkOjpw
YWlyPENHQ29sb3JTcGFjZVJlZiwgQ29sb3JDb21wb25lbnRzPGZsb2EKIAogc3RhdGljIFJldGFp
blB0cjxDR0NvbG9yUmVmPiBjcmVhdGVDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yLmNvbG9yU3BhY2VBbmRDb21w
b25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xv
clNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtjZ0NvbG9yU3Bh
Y2UsIGNnQ29tcGF0aWJsZUNvbXBvbmVudHNdID0gY29udmVydFRvQ0dDb21wYXRpYmxlQ29tcG9u
ZW50cyhjb2xvclNwYWNlLCBjb21wb25lbnRzKTsKICAgICAKICAgICBhdXRvIFtjMSwgYzIsIGMz
LCBjNF0gPSBjZ0NvbXBhdGlibGVDb21wb25lbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3Bw
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsOCArNDcyLDcg
QEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VH
CiAgICAgLy8gZXh0ZW5kZWQgc1JHQiBmb3IgYWxsIGdyYWRpZW50cy4KICAgICBpZiAoaGFzT25s
eUJvdW5kZWRTUkdCQ29sb3JTdG9wcyhzdG9wcykpIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBzdG9wIDogc3RvcHMpIHsKLSAgICAgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gc3RvcC5jb2xvci5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwotICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOworICAgICAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKHIpOwog
ICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChnKTsKICAgICAgICAg
ICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoYik7CkBAIC00ODgsOSArNDg3LDkg
QEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VH
CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdG9wIDogc3RvcHMpIHsKICNpZiBIQVZFKENP
UkVfR1JBUEhJQ1NfRVhURU5ERURfU1JHQl9DT0xPUl9TUEFDRSkKLSAgICAgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PEV4dGVuZGVkU1JHQkE8
ZmxvYXQ+PigpOworICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNlbHNl
Ci0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVM
b3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNl
bmRpZgogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAg
ICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CkBAIC01NDYsNyAr
NTQ1LDcgQEAgdm9pZCBHcmFkaWVudFJlbmRlcmVyQ0c6OlNoYWRpbmc6OnNoYWRpbmdGdW5jdGlv
bih2b2lkCiAgICAgICAgIG1ha2VGcm9tQ29tcG9uZW50czxJbnRlcnBvbGF0aW9uU3BhY2VDb2xv
clR5cGU+KHN0b3AxLmNvbG9yQ29tcG9uZW50cyksIG9mZnNldCk7CiAKICAgICAvLyA0LiBDb252
ZXJ0IHRvIHRoZSBvdXRwdXQgY29sb3Igc3BhY2UuCi0gICAgYXV0byBpbnRlcnBvbGF0ZWRDb2xv
ckNvbnZlcnRlZFRvT3V0cHV0U3BhY2UgPSBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
T3V0cHV0U3BhY2VDb2xvclR5cGU+KGludGVycG9sYXRlZENvbG9yKSk7CisgICAgYXV0byBpbnRl
cnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0U3BhY2UgPSBhc0NvbG9yQ29tcG9uZW50cyhj
b252ZXJ0Q29sb3I8T3V0cHV0U3BhY2VDb2xvclR5cGU+KGludGVycG9sYXRlZENvbG9yKS5yZXNv
bHZlZCgpKTsKIAogICAgIC8vIDUuIFdyaXRlIGNvbG9yIGNvbXBvbmVudHMgdG8gJ291dCcgcG9p
bnRlci4KICAgICBmb3IgKHNpemVfdCBjb21wb25lbnRJbmRleCA9IDA7IGNvbXBvbmVudEluZGV4
IDwgaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091dHB1dFNwYWNlLnNpemUoKTsgKytjb21w
b25lbnRJbmRleCkKQEAgLTU2MCw3ICs1NTksNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0
ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVMKICAgICAgICAgICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5jb2xvclNwYWNlLAogICAgICAgICAgICAg
ICAgIFsmXSAoYXV0byYgY29sb3JTcGFjZSkgLT4gQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB7
CiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIENvbG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKGNvbG9yU3BhY2UpPjo6Q29sb3JUeXBlOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IudGVtcGxhdGUgdG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29sb3IudGVtcGxhdGUgdG9Db2xvclR5cGVMb3NzeTxDb2xvclR5
cGU+KCkucmVzb2x2ZWQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgKTsKICAg
ICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0v
ZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2Zp
bHRlcnMvRkVMaWdodGluZ05FT04uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBA
IGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExpZ2h0aQog
ICAgIC8vIFNldCBsaWdodCBzb3VyY2UgYXJndW1lbnRzLgogICAgIGZsb2F0QXJndW1lbnRzLmNv
bnN0T25lID0gMTsKIAotICAgIGF1dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjb2xvciA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBmbG9hdEFyZ3Vt
ZW50cy5jb2xvclJlZCA9IGNvbG9yLnJlZDsKICAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVu
ID0gY29sb3IuZ3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE5ICs5MiwxOSBAQCBib29sIEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFMKIHsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1h
dHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8
U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsKLSAgICAgICAgY29s
b3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JN
YXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgSFVFX1JPVEFURTogewotICAgICAgICBj
b2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRl
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0Ns
YW1waW5nPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0g
ICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+Pihz
YXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1v
dW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5y
ZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoK
QEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb246OnRyYW5zZm9ybUMKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgT1BB
Q0lUWToKLSAgICAgICAgY29sb3IuYWxwaGEgKj0gbV9hbW91bnQ7CisgICAgICAgIGNvbG9yID0g
Y29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbG9yLCBzdGQ6OmNsYW1wPGZsb2F0Pihjb2xvci5y
ZXNvbHZlZCgpLmFscGhhICogbV9hbW91bnQsIDAuMGYsIDEuMGYpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAgICAgICAgZmxvYXQgb25lTWludXNBbW91bnQg
PSAxLjBmIC0gbV9hbW91bnQ7CkBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gaHVlUm90YXRlKGNvbnN0IENvbG9yCiAKIGJvb2wgSW52ZXJ0TGlnaHRu
ZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBj
b25zdAogewotICAgIGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShh
c0NvbG9yQ29tcG9uZW50cyhjb2xvciksIDAuNWYpOworICAgIGF1dG8gaHVlUm90YXRlZFNSR0JB
Q29tcG9uZW50cyA9IGh1ZVJvdGF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgp
KSwgMC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9i
bGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3Rl
eHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMzE2LDcgKzMxNiw3
IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3Jt
QwogICAgICAgICAtMC4wNDlmLCAtMS4zNDdmLCAgMC4xNDZmLCAwLjBmLCAxLjI1ZiwKICAgICAg
ICAgLTAuMDQ5ZiwgLTAuMDk3ZiwgLTEuMTA0ZiwgMC4wZiwgMS4yNWYKICAgICB9OwotICAgIGF1
dG8gY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRzID0gdG9MaWdodE1vZGVNYXRyaXgudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICBh
dXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlQ29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVk
KCkpKTsKIAogICAgIGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShj
b252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMsIDAuNWYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMSw3ICsxMTEsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9y
KENvbG9yJiBjb2xvcikgY28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCk7CiAKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9u
cykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikp
CkBAIC0xMzAsNyArMTMwLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNm
b3JtQ29sb3IoQ29sb3ImIGNvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8
U1JHQkE8ZmxvYXQ+PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlv
bnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdC
QUNvbG9yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBMaQogewogICAgIExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEu
b3BlcmF0aW5nQ29sb3JTcGFjZSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0
aW5nQ29sb3IudG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVy
YXRpbmdDb2xvclNwYWNlKTsKICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5j
b2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKIAogICAgIGRhdGEubGlnaHRTb3Vy
Y2UtPmluaXRQYWludGluZ0RhdGEoKmRhdGEuZmlsdGVyLCAqZGF0YS5yZXN1bHQsIHBhaW50aW5n
RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgRkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjCiAgICAgc3RhdGljIGlubGluZSBp
bnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSB7IHJldHVybiAoeSAq
IHdpZHRoICsgeCkgKiA0OyB9CiAgICAgc3RhdGljIGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBt
YWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+JiBjb21wb25lbnRzKSB7IHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VG
cm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsgfQogCi0gICAgc3Rh
dGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50
c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFj
a2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEo
cGl4ZWwpLnJlc29sdmVkKCkpOyB9CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBh
LCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNv
bHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQg
eCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVs
RXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRv
ciBHZGtSR0JBKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IC50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11
bHRpcGxpZWQoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVk
KCk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBh
KTsKICAgICBnbExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtYmVyLCBjb25zdCBDb2wKICAgICBjYWly
b190KiBjciA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0
IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5nIGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBl
ZCBSK0IgY29sb3IuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShj
ciwgYiwgZywgciwgYSk7CiAKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOwpAQCAtNDE1LDcgKzQxNSw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9n
cmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgMToKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29s
b3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKSk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRp
cGxpZWQoc2hhZG93LmNvbG9yKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJl
c29sdmVkKCk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9yTG9jYXRpb24o
KSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRp
dXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdo
dCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09mZnNldExvY2F0
aW9uKCksIDAsIDApOwpAQCAtNzM1LDcgKzczNSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpk
cmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmIAogICAgIGlmIChjbGlwU3RhY2soKS5pc1Jv
dW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkKICAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChw
cm9ncmFtLmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0
YWNrKCkucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2so
KS5yb3VuZGVkUmVjdENvdW50KCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0
aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+Pigp
KS5yZXNvbHZlZCgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwg
ciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAg
ICBmbGFncyB8PSBTaG91bGRCbGVuZDsKQEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiAKIAogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmNsZWFyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQo
KTsKICAgICBnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0Yg
Y29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3BlcmF0b3Ig
RDJEMV9WRUNUT1JfNEYoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYo
ciwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBJRDJEMUJydXNoKiBHcmFk
aWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqIHIKICAgICBncmFkaWVudFN0b3Bz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYg
c3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24t
c1JHQkEgY29sb3Igc3BhY2VzLgotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5j
b2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAg
ICBncmFkaWVudFN0b3BzLmdyYWRpZW50U3RvcHMudW5jaGVja2VkQXBwZW5kKEQyRDE6OkdyYWRp
ZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnMKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gc3BlbGxpbmdQYXR0ZXJuQ29sb3IgPSBDb2xvcjo6cmVkOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgYXV0byBncmFtbWFyUGF0dGVybkNvbG9yID0gQ29sb3I6OmRhcmtHcmVlbjsKIAotICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IgOiBzcGVsbGluZ1BhdHRlcm5D
b2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9yLnJlc29sdmVk
KCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvci5yZXNvbHZlZCgpOwogICAgIENHQ29udGV4dFNldFJH
QlN0cm9rZUNvbG9yKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2wKIAogRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNv
bnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwg
YSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTQsNyArMTU5NCw3IEBAIGNvbnN0ZXhwciBmbG9hdCBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0
bmVzc0FkanVzdG1lbgogQ29sb3IgUmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xv
cihjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBj
b25zdAogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciB1c2luZyBMQ0hBPGZsb2F0PiByYXRoZXIg
dGhhbiBIU0xBPGZsb2F0PiBmb3IgYmV0dGVyIHBlcmNlcHR1YWwgcmVzdWx0cyBhbmQgdG8gYXZv
aWQgY2xhbXBpbmcgdG8gc1JHQiBnYW11dCwgd2hpY2ggaXMgd2hhdCBIU0xBIGRvZXMuCi0gICAg
YXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7Cisg
ICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICBpZiAodGV4dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENv
bG9yLmx1bWluYW5jZSgpKQogICAgICAgICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xk
ZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbnRGYWN0b3IgKiAoMTAwLjBmIC0gaHNsYS5saWdodG5l
c3MpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsxMzA3LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kCiBzdGF0
aWMgYm9vbCBzaG91bGRVc2VDb252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBsdW1p
bmFuY2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZmxvYXQgbGFy
Z2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4g
YSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9u
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1
bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgY2xhc3MgU1ZH
QW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiAKICAgICB2b2lk
IGFuaW1hdGUoU1ZHRWxlbWVudCYsIGZsb2F0IHByb2dyZXNzLCB1bnNpZ25lZCByZXBlYXRDb3Vu
dCwgQ29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9
IGFuaW1hdGVkLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRl
ZCA6IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVU
byA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG9B
dEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9Db2xvclR5cGVM
b3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRl
ZCA6IG1fZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWlu
dDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
biA9IHRvQXRFbmRPZkR1cmF0aW9uKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogICAgICAgICAKICAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0
ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5yZWQsIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uLnJlZCwgc2ltcGxlQW5pbWF0ZWQucmVkKTsKICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxl
RnJvbS5ncmVlbiwgc2ltcGxlVG8uZ3JlZW4sIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVu
LCBzaW1wbGVBbmltYXRlZC5ncmVlbik7CkBAIC0xMDMsOCArMTAzLDggQEAgY2xhc3MgU1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiAgICAgICAgIGlmICgh
dG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAg
Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhf
dD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8g
PSB0b0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgICAgICBmbG9hdCByZWQgPSBzaW1wbGVGcm9tLnJlZCAtIHNpbXBsZVRvLnJlZDsKICAg
ICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuIC0gc2ltcGxlVG8uZ3JlZW47CkBA
IC0xMTYsOCArMTE2LDggQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1Ymxp
YyBTVkdBbmltYXRpb25BCiBwcml2YXRlOgogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNW
R0VsZW1lbnQmKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9m
cm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90
by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9m
cm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAg
ICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFs
cGhhIG9uIHJlc3VsdCB0byAxMDAlIG9wYXF1ZS4KICAgICAgICAgbV90byA9IG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihzaW1wbGVUby5yZWQgKyBzaW1wbGVGcm9t
LnJlZCwgc2ltcGxlVG8uZ3JlZW4gKyBzaW1wbGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ibHVlICsg
c2ltcGxlRnJvbS5ibHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDIy
LTAxLTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVz
b2x2ZWQvdW5yZXNvbHZlZCBjb2xvciB0eXBlIGFjY2Vzc29ycyB0byByZXF1aXJlIHVzZXJzIHRv
IGJlIGV4cGxpY2l0IGFib3V0IHdoZXRoZXIgdGhleSB3aWxsIGhhbmRsZSBtaXNzaW5nL25vbmUg
Y29sb3IgY29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIENvbG9yOjp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29s
b3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4oKSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRv
IHJlc29sdmVkKCkgdG8gYWNjZXNzIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcDoKKyAg
ICAgICAgKGRyYXdQYWdlQmFja2dyb3VuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xv
cik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0
dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAgIChXZWJLaXQ6OmFuaW1hdGlvblZhbHVl
RnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRD
b2xvcik6CisKIDIwMjEtMTItMjYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlcGxhY2UgV2ViS2l0L0NvY29hQ29sb3IuaCB3aXRoIFdlYkNvcmUvQ29sb3JDb2Nv
YS5oLCBub3QgY29uZnVzaW5nIGF0IGFsbApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2
YXRlUGxheVN0YXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYWdlQmFja2dy
b3VuZChjYWlyb190KiBjdHgsIGNvbnN0IHN0ZAogICAgIGlmICghYmFja2dyb3VuZENvbG9yIHx8
IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLmlzVmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9y
LnZhbHVlKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwog
CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGN0eCwgciwgZywgYiwgYSk7CiAgICAgY2Fpcm9f
cmVjdGFuZ2xlKGN0eCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRDb2xvci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBA
IHZvaWQgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb25zdCBXZWJDb3JlOjpDbwog
ewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlkKCkpOwogCi0gICAgYXV0
byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3ItPmdy
ZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkocmV2
aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJl
Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lk
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0YKICAgICAg
ICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JG
b3JDdXJyZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dp
cGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgICAgICAgICAg
ICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNpZiBVU0UoR1RLNCkKICAgICAgICAgICAg
ICAgICBHZGtSR0JBIHJnYmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CiAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdEdSZWYoZ3NrX2Nv
bG9yX25vZGVfbmV3KCZyZ2JhLCAmYm91bmRzKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3MSw3ICs2NzEsNyBAQCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRD
b2xvcihkb3VibGUqIHJlZCwKICAgICBpZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICpyZWQgPSByOwogICAgICpn
cmVlbiA9IGc7CiAgICAgKmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsNyArNjgxLDcgQEAgc3Rh
dGljIFJldGFpblB0cjxOU09iamVjdD4gYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWCiAgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oa2V5ZnJhbWVWYWx1ZSwKICAgICAgICAgWyZdKGNvbnN0IGZs
b2F0IG51bWJlcikgLT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7IHJldHVybiBAKG51bWJlcik7IH0s
CiAgICAgICAgIFsmXShjb25zdCBXZWJDb3JlOjpDb2xvciBjb2xvcikgLT4gUmV0YWluUHRyPE5T
T2JqZWN0PiB7Ci0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xvci50b1NSR0JB
TG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gIGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAg
ICAgIHJldHVybiBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgICAgIH0sCiAgICAg
ICAgIFsmXShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QgcG9pbnQpIC0+IFJldGFpblB0cjxO
U09iamVjdD4gewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjg3NTIxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjItMDEtMDIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCByZXNvbHZlZC91bnJlc29sdmVkIGNvbG9yIHR5cGUgYWNj
ZXNzb3JzIHRvIHJlcXVpcmUgdXNlcnMgdG8gYmUgZXhwbGljaXQgYWJvdXQgd2hldGhlciB0aGV5
IHdpbGwgaGFuZGxlIG1pc3Npbmcvbm9uZSBjb2xvciBjb21wb25lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3OTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQ29sb3I6OnRvU1JHQkFMb3NzeTw+KCkgd2l0aCBDb2xv
cjo6dG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+PigpIGFuZCBhZGQKKyAgICAgICAgY2FsbHMgdG8g
cmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29sb3IgY29tcG9uZW50cy4gQWxzbyB1cGRhdGUgdG8gbmV3
IG5hbWUgb2YgY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSwKKyAgICAgICAgY29sb3JTcGFjZUFu
ZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpjaGFuZ2VDb250ZXh0Q29udGVudHMpOgorICAgICAgICBSZXBsYWNl
IHVubmVjZXNzYXJ5IHVzZSBvZiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIHdpdGggdGhlIG1v
cmUgY29tbW9uIHRvQ29sb3JUeXBlTG9zc3k8V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCkuCisKIDIwMjItMDEtMDEgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4K
IAogICAgICAgICBtYWtlIFNoYXJlZEJ1ZmZlcjo6Y29weSgpIHJldHVybiBhIGNvbnRpZ3VvdXMg
U2hhcmVkQnVmZmVyCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29s
b3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAgICAgQ29sb3IgY29sb3Ig
PSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5z
YXR1cmF0aW9uKTsKQEAgLTU3LDcgKzU3LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2sp
CiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6YmxhY2s7CiAKLSAgICBhdXRvIGhzbGFDb2xv
ciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xh
Q29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTczLDcgKzczLDcgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfUmVkKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OnJlZDsKIAot
ICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4o
KTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9h
dD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVl
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC04
OSw3ICs4OSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNv
bG9yID0gQ29sb3I6OmdyZWVuOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9D
b2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDEyMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTA1LDcgKzEwNSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Ymx1ZTsKIAotICAgIGF1dG8g
aHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBh
dXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVz
b2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAsIGhzbGFDb2xvci5odWUpOwogICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEyMSw3ICsx
MjEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIHsKICAgICBDb2xvciBjb2xv
ciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9G
TE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNv
bG9yLnNhdHVyYXRpb24pOwpAQCAtMTM3LDcgKzEzNyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNs
YUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRv
IGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTUzLDcgKzE1Myw3IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENv
bG9yOjpsaWdodEdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5z
YXR1cmF0aW9uKTsKQEAgLTE4MSw3ICsxODEsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIAog
ICAgIHZhbGlkQ29sb3IgPSBTUkdCQTx1aW50OF90PiB7IDEsIDIsIDMsIDQgfTsKICAgICBFWFBF
Q1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0byB2YWxpZENvbG9yQ29tcG9u
ZW50cyA9IHZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB2YWxp
ZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50
OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5y
ZWQsIDEpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAg
ICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMTg5LDcgKzE4
OSw3IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlk
Q29sb3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZh
bGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBhdXRvIHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9u
ZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
IGF1dG8geWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVY
UEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBF
Q1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBF
Q1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMTk3LDcg
KzE5Nyw3IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQogCiAgICAgb3RoZXJWYWxpZENvbG9yID0g
V1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRDb2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxp
ZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0byBvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0g
b3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gb3RoZXJW
YWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xv
ckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9u
ZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMu
Ymx1ZSwgMyk7CkBAIC0yMDksMjAgKzIwOSwyMCBAQCBURVNUKENvbG9yLCBMdW1pbmFuY2UpCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKENvbG9yOjpibGFjaykubHVtaW5hbmNlKCksIDApOwog
ICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihDb2xvcjo6d2hpdGUpLmx1bWluYW5jZSgpLCAxKTsK
IAotICAgIGF1dG8gY0NvbXBvbmVudHMgPSBTUkdCQTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH07
CisgICAgYXV0byBjQ29tcG9uZW50cyA9IFNSR0JBPHVpbnQ4X3Q+IHsgODUsIDkwLCAxNjAgfS5y
ZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjQ29tcG9uZW50cykubHVtaW5h
bmNlKCksIDAuMTE3ODE0NTUpOwogCiAgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLnJlZCwgODUp
OwogICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ncmVlbiwgOTApOwogICAgIEVYUEVDVF9FUShj
Q29tcG9uZW50cy5ibHVlLCAxNjApOwogCi0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29t
cG9uZW50cykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBj
TGlndGVuZWQgPSBDb2xvcihjQ29tcG9uZW50cykubGlnaHRlbmVkKCkudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xv
cihjTGlndGVuZWQpLmx1bWluYW5jZSgpLCAwLjI5MTY4Mik7CiAgICAgRVhQRUNUX0VRKGNMaWd0
ZW5lZC5yZWQsIDEzMCk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3KTsKICAg
ICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWUsIDI0NCk7CiAKLSAgICBhdXRvIGNEYXJrZW5lZCA9
IENvbG9yKGNDb21wb25lbnRzKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmRhcmtlbmVkKCkudG9Db2xv
clR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9B
VF9FUShDb2xvcihjRGFya2VuZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjI0Mik7CiAgICAgRVhQ
RUNUX0VRKGNEYXJrZW5lZC5yZWQsIDQwKTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVu
LCA0Myk7CkBAIC0yMzMsNyArMjMzLDcgQEAgVEVTVChDb2xvciwgQ29uc3RydWN0b3IpCiB7CiAg
ICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMxLmNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMS5jb2xv
clNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBh
bHBoYV0gPSBjb21wb25lbnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0y
NDgsNyArMjQ4LDcgQEAgVEVTVChDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogICAgIENvbG9yIGMx
IHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIENvbG9y
IGMyKGMxKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9
IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIGF1dG8gW3Is
IGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBy
KTsKQEAgLTI2Myw3ICsyNjMsNyBAQCBURVNUKENvbG9yLCBBc3NpZ25tZW50KQogICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIENv
bG9yIGMyID0gYzE7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50
c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRv
IFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEu
MCwgcik7CkBAIC0zMjMsNyArMzIzLDcgQEAgVEVTVChDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQog
ICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgZGVs
ZXRpb24uCiAgICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtjb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAg
YXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRD
b2xvckNvbXBvbmVudHMoKTsKICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CkBA
IC0zNDQsNyArMzQ0LDcgQEAgVEVTVChDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAgICAgLy8gYW5k
IHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KICAg
ICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNv
bXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9u
ZW50cygpOwogICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
OwogCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKQEAgLTM3MCw3ICsz
NzAsNyBAQCBURVNUKENvbG9yLCBSZXR1cm5WYWx1ZXMpCiBURVNUKENvbG9yLCBQM0NvbnZlcnNp
b25Ub1NSR0IpCiB7CiAgICAgQ29sb3IgcDNDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAs
IDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9F
UShzUkdCQUNvbG9yLnJlZCwgMS4wZik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3Iu
Z3JlZW4sIDAuNDYyNTMyODJmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVl
LCAwLjE0OTEyNzQ4Zik7CkBAIC0zODAsNyArMzgwLDcgQEAgVEVTVChDb2xvciwgUDNDb252ZXJz
aW9uVG9TUkdCKQogVEVTVChDb2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCiB7CiAg
ICAgQ29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41
LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdC
QUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAg
RVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEo
c1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIFRFU1Qo
Q29sb3IsIENvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KQogCiAgICAgewogICAgICAgICBDb2xv
ciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KDAuNSk7Ci0gICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAg
ICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeS5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICAgICAgRVhQ
RUNUX0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbXBvbmVudHM7CiAgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CkBA
IC00MDksNyArNDA5LDcgQEAgVEVTVChDb2xvciwgQ29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkp
CiAKICAgICB7CiAgICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMC4pOwotICAgICAgICBhdXRvIFtjb2xvclNw
YWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VB
bmRDb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0g
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21w
b25lbnRzKCk7CiAgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpTUkdC
KTsKICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwogICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEociwgMC4pOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw5ICs5NCw4IEBAIHN0YXRpYyA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBj
aGFuZ2VDb250ZXh0Q29udGVudAogewogICAgIGNvbnRleHQubWFya0NvbnRleHRDaGFuZ2VkKCk7
CiAgICAgV2ViQ29yZTo6Q29sb3IgZXhwZWN0ZWQgeyBpdGVyYXRpb24gJSAyID8gV2ViQ29yZTo6
Q29sb3I6OmdyZWVuIDogV2ViQ29yZTo6Q29sb3I6OnllbGxvdyB9OwotICAgIGF1dG8gW2NvbG9y
U3BhY2UsIGNvbXBvbmVudHNdID0gZXhwZWN0ZWQuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsK
LSAgICBVTlVTRURfVkFSSUFCTEUoY29sb3JTcGFjZSk7Ci0gICAgY29udGV4dC5jbGVhckNvbG9y
KGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNb
M10pOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZXhwZWN0ZWQudG9Db2xvclR5cGVMb3NzeTxX
ZWJDb3JlOjpTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBjb250ZXh0LmNsZWFyQ29s
b3IociwgZywgYiwgYSk7CiAgICAgY29udGV4dC5jbGVhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgdWludDhfdCBnb3RWYWx1ZXNbNF0gPSB7IH07
CiAgICAgYXV0byBzYW1wbGVBdCA9IGNvbnRleHQuZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KTsK
</data>
<flag name="commit-queue"
          id="474011"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448191</attachid>
            <date>2022-01-02 17:11:33 -0800</date>
            <delta_ts>2022-01-02 18:40:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved4.diff</filename>
            <type>text/plain</type>
            <size>159129</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4CiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50Zigicmdi
ICU3LjVmICU3LjVmICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVl
KTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3Bp
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBj
b25zdAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKGF4T2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1
dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4
T2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOwogICAgIH0KQEAgLTgyNCwxMyArODI0
LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJp
bGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgaWYgKGJnQ29s
b3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLi50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci4udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjI4LDcgKzIy
NSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lkIHNldENvbG9yKFNSR0JBPHVp
bnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAgICAgdm9p
ZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xv
clNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAKLSAgICBT
UkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBhY2tlZENvbG9yOjpSR0JBIGFz
UGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBh
c091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogaW5saW5lIGJvb2wgb3V0T2ZM
aW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAg
ICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVy
biBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25l
bnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5mbGFncygpID09
IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEu
Y29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7
CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGluZSBib29sIG91dE9mTGluZUNv
bXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkg
JiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0g
Q29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgICAgIGF1dG8gYkZs
YWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRP
ZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkg
JiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50
cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGFGbGFncyA9PSBiRmxh
Z3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5l
KCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9yOjpDb2xvcihzdGQ6Om9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xv
clR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldE91dE9mTGluZUNvbXBvbmVu
dHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSks
IENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3Mp
KTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0
ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxD
b2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8Rmxh
Z3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoKmNvbG9y
KSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxh
Z3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRz
OjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVzb2x2ZWQoKSkpLCBDb2xvclNw
YWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAK
IGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5l
Q29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdz
KQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JT
cGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCku
dG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUs
IGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JT
cGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1
bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBj
YWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgp
LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gY2FsbFdp
dGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNw
YWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAK
QEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVu
dHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50
cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFz
SW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4g
Q29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Ci0gICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoYXNQ
YWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5lIFBhY2tlZENvbG9yOjpSR0JB
IENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUsNyArNTYyLDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgICAg
IGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1dG8mIG91dE9mTGluZUNvbXBv
bmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJlc29sdmVkQ29tcG9uZW50cygp
OwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVyIDw8IGMyOwogICAgICAg
ICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFj
a2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlzaWJsZSgpKQogICAgICAgICBy
ZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ry
b3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
YXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tk
cm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBz
b3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29s
dmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5n
QiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiByZXN1bHQ7CiAgICAgZm9yIChp
bnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJ
bmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNvbnRleHQucHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBwcmVt
dWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRv
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGll
ZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKIAogICAg
IGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxT
UkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5y
ZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAtMTE3LDggKzExNyw4IEBAIENv
bG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdAogICAg
IGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRvU1JHQiA9IHRvLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBhdXRvIGJsZW5kZWQg
PSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQpLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHN0cnVjdCBD
b2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1hcChGJiYgZnVuY3Rpb24pIGNv
bnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlvbihzdGQ6OmRlY2x2YWw8VD4o
KSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29u
c3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3Bl
cmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IrKFQp
IGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IvKFQpIGNvbnN0
OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBvbmVudHM8VCwgTj46Om9wZXJh
dG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAgICAgKnRoaXMgPSBtYXBDb2xv
ckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEgKyBjMjsgfSwgKnRoaXMsIHJo
cyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
Tj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBO
Pjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgqdGhpcyAvIHJocyk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBMQ0hMaWtlLCB0
eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xhckZvcm0oY29uc3QgTGFiTGlr
ZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
bGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRhbjIoY29sb3IuYiwgY29sb3Iu
YSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0bmVzcywKLSAgICAgICAgc3Rk
OjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVlID49IDAgPyBodWUgOiBodWUg
KyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAgICBmbG9hdCBodWUgPSByYWQy
ZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBzdGQ6Omh5cG90KGEsIGIpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+PSAwID8gaHVlIDogaHVlICsg
MzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYWJMaWtlLCB0eXBlbmFtZSBM
Q0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZvcm0oY29uc3QgTENITGlrZSYg
Y29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jbGNo
LXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRlZzJyYWQoY29sb3IuaHVlKTsK
KyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBj
b2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5j
aHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5hbHBoYQot
ICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChodWUpOworICAgIGZs
b2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpOworICAgIGZsb2F0IGIg
PSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOworCisgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBIU0wgY29udmVyc2lvbnMuCkBA
IC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCB7CiAgICAgZmxv
YXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0
ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW21pbiwgbWF4XSA9
IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47
CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1
bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsK
ICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IK
LSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAgICBhdXRvIFtodWUsIG1pbiwg
bWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAgICBmbG9hdCBsaWdodG5lc3Mg
PSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwpA
QCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0
PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9h
dD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCi0g
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOworICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IGxpZ2h0
bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1
bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3IucmVz
b2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWluICogMTAwLjBmOwogICAgIGF1
dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwogICAgIAotICAgIHJldHVybiB7
IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsg
aHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBI
V0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVz
cywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3aGl0ZW5lc3MgKyBibGFja25l
c3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAvIDEwMC4wZjsK
QEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1
ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IENvbG9y
Q29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+LCBMYWI8ZmxvYXQ+Pjo6Y29u
dmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBmbG9hdCBmMSA9IChjb2xvci5s
aWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQgZjAgPSBmMSArIChjb2xvci5h
IC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9yLmIgLyAyMDAuMGYpOworICAg
IGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAorICAg
IGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4wZjsKKyAgICBmbG9hdCBmMCA9
IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEgLSAoYiAvIDIwMC4wZik7CisK
ICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsKICAgICAgICAgZmxvYXQgdEN1
YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4gTEFCZSkKQEAgLTI0NywzMSAr
MjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJzaW9uPFhZ
WkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hpdGVWYWx1ZXNbMF0gKiBjb21w
dXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZhbHVlc1sxXSAqIGNvbXB1dGVZ
KGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29t
cHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hpdGVWYWx1ZXNbMl0gKiBjb21w
dXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAg
ICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Pjo6Y29udmVydChj
b25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvcikKIHsKLSAgICBmbG9hdCB4
ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZsb2F0IHkgPSBjb2xvci55IC8g
RDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9yLnogLyBENTBXaGl0ZVZhbHVl
c1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisg
ICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVzWzBdOworICAgIGZsb2F0IGFk
anVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBmbG9hdCBhZGp1c3RlZFogPSB6
IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFuc2Zvcm0gPSBbXShmbG9hdCB2
YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8gc3RkOjpjYnJ0KHZhbHVlKSA6
IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAgfTsKIAotICAgIGZsb2F0IGYw
ID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFuc2Zvcm0oeSk7Ci0gICAgZmxv
YXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3RlZFkpOworICAgIGZsb2F0IGYy
ID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQgbGlnaHRuZXNzID0gKDExNi4w
ZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYgKiAoZjAgLSBmMSk7CiAgICAg
ZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJldHVybiB7IGxpZ2h0bmVzcywg
YSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGFscGhh
IH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAgLTMwOCw5ICszMDksMTAgQEAg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAg
ICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0ODQxODIwOTQ5NjU3NTk2ODRm
LCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAgICBhdXRvIFtsaWdodG5lc3Ms
IGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAgICAvLyAxLiBUcmFuc2Zvcm0g
ZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0bmVzcy4KLSAgICBhdXRvIGNv
bXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7CisgICAgYXV0byBjb21wb25l
bnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0bmVzcyAvIDEwMC4wZiwgYSwg
YiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNvb3JkaW5hdGVzIGludG8gbm9u
LWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2VzIi4KICAgICBhdXRvIG5vbkxp
bmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
Y29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8gNC4gQ29udmVydCB0byBYWVou
CiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2NS50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxw
aGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBPS0xhYjxmbG9hdD4g
Q29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1
Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiYgY29sb3IpCkBA
IC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8Zmxv
YXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFmLCAgMC43ODI3NzE3NjYyZiwg
LTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwgeSwgeiwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFlaIGludG8gTE1TICJhcHByb3hp
bWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVh
ckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvciku
c3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0gWFlaRDY1VG9MaW5lYXJMTVMu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IHgs
IHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFyaXR5LgogICAgIGF1dG8gbm9u
TGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikgeyByZXR1cm4gc3RkOjpjYnJ0
KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9u
PE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFtsaWdodG5lc3MsIGEsIGJdID0g
Tm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhub25MaW5lYXJM
TVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBmcm9tIHVuaXQgbGlnaHRuZXNz
IHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4w
ZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MgKiAxMDAuMGYs
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNvbnZlcnNpb25zLgpAQCAtMzcx
LDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4s
IE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29s
b3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMs
IENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
Y29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3Bh
Y2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9y
U3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
aW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwgW291dHB1dENvbG9yU3BhY2Vd
IChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3aXRjaCAob3V0cHV0Q29sb3JT
cGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4UkdCPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0
ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZEE5OFJHQjxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4
dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWREaXNw
bGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3RvUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdC
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRSZWMyMDIwOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRl
ZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAyMDxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkU1JHQjoK
LSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhTTDoKLSAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxDSDoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8Zmxv
YXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpP
S0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFByb1Bob3RvUkdCPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAg
ICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8
ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUwOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENjU6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdo
aXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0
cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgcmV0dXJuIHBs
YXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGlucHV0Q29sb3JD
b21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwxOSArNDM0LDE5IEBAIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvcgogICAgIHJl
dHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNw
YWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAg
ICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpKSB7CiAgICAg
ICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdCOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xv
clNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAgICAgICBjYXNlIFBsYXRmb3Jt
Q29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQ
MzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgZW51bSBjbGFzcyBDb2xv
clNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5w
dXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKTsKIAogLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRzIHdpdGggYXNzb2NpYXRlZCBj
b2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFj
ZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNv
bXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSk7
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpOworQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVyIHRoYW4gWFlaQSBvciB0aG9z
ZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1lbnQKQEAgLTU3LDcgKzU3LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgPSB2
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IGlubGluZSBPdXRw
dXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3JD
b252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0KGNvbG9yKTsKKyAgICByZXR1cm4gQ29s
b3JDb252ZXJzaW9uPENhbm9uaWNhbENvbG9yVHlwZTxPdXRwdXQ+LCBDYW5vbmljYWxDb2xvclR5
cGU8SW5wdXQ+Pjo6Y29udmVydChjb2xvcik7CiB9CiAKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lPiBzdAogCiAg
ICAgICAgIHVzaW5nIElucHV0V2l0aFJlcGxhY2VtZW50ID0gQ29sb3JUeXBlV2l0aFJlcGxhY2Vt
ZW50Q29tcG9uZW50PElucHV0LCBmbG9hdD47CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8SW5wdXRXaXRoUmVwbGFjZW1lbnQsIE91dHB1dD4pCi0gICAgICAgICAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHZhbHVl
IC8gMjU1LjBmOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPElu
cHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKS5t
YXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUuMGY7IH0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxPdXRwdXQ+
KGNvbnZlcnRDb2xvcjxJbnB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CkBAIC0y
MTksMzEgKzIxOSwzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0
LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBPdXRwdXRXaXRoUmVwbGFjZW1lbnQgPSBD
b2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21wb25lbnQ8T3V0cHV0LCBmbG9hdD47CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3V0cHV0V2l0aFJlcGxhY2VtZW50LCBJbnB1
dD4pCi0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpLm1hcChbXShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7IHJldHVy
biBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOyB9KSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xvckNv
bXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90
IHsgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1
bCk7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxP
dXRwdXQ+KGNvbnZlcnRDb2xvcjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQ+KGNvbG9yKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0
ZXhwciBhdXRvIHRvTGluZWFyRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBl
bmFtZSBDb2xvclR5cGU6OkxpbmVhckNvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29sb3JUeXBlOjpUcmFu
c2ZlckZ1bmN0aW9uOjp0b0xpbmVhcihjMSksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6
dG9MaW5lYXIoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMzKSwg
YWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9HYW1tYUVuY29kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpHYW1tYUVuY29kZWRDb3VudGVycGFydAogICAg
IHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVy
biB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzEpLCBDb2xv
clR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMyKSwgQ29sb3JUeXBlOjpU
cmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMyksIGFscGhhIH07CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIHRvRXh0ZW5kZWQoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czx0
eXBlbmFtZSBDb2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9Cb3VuZGVkKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0CiAg
ICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhj
ZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5l
IGNvbnN0ZXhwciBPdXRwdXQgaGFuZGxlUkdCRmFtaWx5Q29udmVyc2lvbihjb25zdCBJbnB1dCYg
Y29sb3IpCkBAIC0zMTIsNyArMzEyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBl
bmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAgICAgICAgIC8vIGhhdmUgc3VmZmljaWVudCB0ZXN0
aW5nIGNvdmVyYWdlIHRvIG5vdGljZSBhbnkgYWR2ZXJzZSBlZmZlY3RzLgogCiAgICAgICAgIGF1
dG8gYXBwbHlNYXRyaWNlcyA9IFtdKGNvbnN0IElucHV0JiBjb2xvciwgYXV0by4uLiBtYXRyaWNl
cykgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpLCBtYXRyaWNlcy4uLikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIG1hdHJpY2Vz
Li4uKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgY29uc3RleHByIChJbnB1dDo6d2hpdGVQ
b2ludCA9PSBPdXRwdXQ6OndoaXRlUG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9s
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHRlbXBsYXRlPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbgogdHlwZW5hbWUgSW50ZXJw
b2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9u
ZW50cyhJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSBpbnRlcnBvbGF0aW9uTWV0aG9kQ29s
b3JTcGFjZSwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlw
ZSBjb2xvcjEsIGRvdWJsZSBjb2xvcjFNdWx0aXBsaWVyLCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9yMiwgZG91YmxlIGNvbG9yMk11bHRpcGxp
ZXIpCiB7CiAgICAgLy8gMS4gQXBwbHkgcHJlLWludGVycG9sYXRpb24gdHJhbnNmb3JtcyAoaHVl
IGZpeHVwIGZvciBwb2xhciBjb2xvciBzcGFjZXMsIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIGlm
IHJlcXVpcmVkKS4KLSAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JDb21wb25lbnRzMSwgbm9ybWFs
aXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlvbk5vcm1hbGl6YXRpb248YWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2UsIGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yMSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMikpOworICAgIGF1
dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29sb3JDb21wb25lbnRz
Ml0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11bHRpcGxpY2F0aW9u
PihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3Ix
LnJlc29sdmVkKCkpLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjIucmVzb2x2ZWQoKSkpOwogCiAg
ICAgLy8gMi4gSW50ZXJwb2xhdGUgdXNpbmcgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50cy4KICAg
ICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29tcG9uZW50cyA9IG1hcENvbG9yQ29tcG9uZW50cyhb
Jl0gKGF1dG8gY29tcG9uZW50RnJvbUNvbG9yMSwgYXV0byBjb21wb25lbnRGcm9tQ29sb3IyKSAt
PiBmbG9hdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1
bWluYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yTHVtaW5hbmNlLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgZG91YmxlIHJlbGF0
aXZlTHVtCiAgICAgLy8gdGhpcyBpbiBDb2xvckNvbnZlcnNpb24uaCBhcyBhIHNpYmxpbmcgZnVu
Y3Rpb24gdG8gY29udmVydENvbG9yIHdoaWNoIGNhbiBnZXQgYSBjaGFubmVsCiAgICAgLy8gb2Yg
YSBjb2xvciBpbiBhbm90aGVyIHNwYWNlIGluIHRoaXMga2luZCBvZiBvcHRpbWFsIHdheS4KIAot
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oY29s
b3IpLnk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpE
NjU+Pihjb2xvcikucmVzb2x2ZWQoKS55OwogfQogCiBpbmxpbmUgZG91YmxlIGNvbnRyYXN0UmF0
aW8oZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQSwgZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JNb2RlbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDg2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBSR0JCb3VuZGVkbmVzcyB7IEJvdW5kZWQsIEV4
dGVuZGVkIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lLCBSR0JCb3VuZGVkbmVzcz4gc3RydWN0IFJH
Qk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRyYWl0czsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvOwotdGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xN
b2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IExDSE1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2Rl
bDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IFhZWk1vZGVsOwogCisvLyBNQVJLOiBSZXNvbHZlZC9VbnJlc29sdmVkIERlZmlu
dGl0aW9ucwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yTW9k
ZWwgPSB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlOwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5
cGU8Q29sb3JUeXBlPiByZXNvbHZlZENvbG9yKENvbG9yVHlwZSBpbnB1dCkKK3sKKyAgICByZXR1
cm4gUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPiB1bnJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBVbnJl
c29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4geyBpbnB1dCB9OworfQorCitpbmxpbmUgY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAg
IHJldHVybiBjb2xvckNvbXBvbmVudHM7Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4mIGNvbG9yQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29sb3JDb21w
b25lbnRzLm1hcChbXSAoZmxvYXQgY29tcG9uZW50KSB7IHJldHVybiBzdGQ6OmlzbmFuKGNvbXBv
bmVudCkgPyAwLjBmIDogY29tcG9uZW50OyB9KTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0cnVjdCBSZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgcmVzb2x2ZWQoKSBvciB1bnJlc29s
dmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSByZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3
ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXRzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8g
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5cGU8Qz4gcmVz
b2x2ZWRDb2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlw
ZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgcmVzb2x2ZShjb2xvcikgfQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIENvbG9yVHlwZSByZXNvbHZlKENvbG9yVHlwZSBj
b2xvcikKKyAgICB7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IHJlc29sdmVD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5
cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3IgfSkpOworICAgICAgICByZXR1
cm4gQ29sb3JUeXBlIHsgYzEsIGMyLCBjMywgYWxwaGEgfTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBVbnJlc29sdmVkQ29sb3JUeXBlIDogRXhwb3Nl
ZENvbG9yVHlwZTxDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsKKyAgICB1
c2luZyBDYW5vbmljYWxUeXBlID0gQ29sb3JUeXBlOworCisgICAgLy8gQ2FsbGluZyB1bnJlc29s
dmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSB1bnJlc29sdmVkIGlzIGEgbm8tb3AsIHNv
IHdlIGNhbgorICAgIC8vIGp1c3QgcmV0dXJuIG91dHNlbHZlcy4KKyAgICBjb25zdGV4cHIgYXV0
byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworcHJpdmF0ZToKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDPiBmcmllbmQgY29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGU8
Qz4gdW5yZXNvbHZlZENvbG9yKEMpOworCisgICAgZXhwbGljaXQgY29uc3RleHByIFVucmVzb2x2
ZWRDb2xvclR5cGUoQ29sb3JUeXBlIGNvbG9yKQorICAgICAgICA6IEV4cG9zZWRDb2xvclR5cGU8
Q29sb3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7IGNvbG9yIH0KKyAgICB7Cisg
ICAgfQorfTsKKworCisvLyBNQVJLOiAtIENvbG9yIE1vZGVsIHN1cHBvcnQgdHlwZXMuCisKIHRl
bXBsYXRlPD4gc3RydWN0IEFscGhhVHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCB0cmFuc3BhcmVudCA9IDAuMGY7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBv
cGFxdWUgPSAxLjBmOwpAQCAtNjgsMTcgKzEzNyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb2xvckNvbXBvbmVudEluZm8gewogICAgIENvbG9yQ29tcG9uZW50VHlwZSB0eXBlOwog
fTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgRXh0ZW5kZWRSR0JNb2RlbDxmbG9hdD4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBj
b21wb25lbnRJbmZvIHsgewotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9y
Q29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCi0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKLSAgICAgICAgeyAtc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9Ci0gICAgfSB9OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVt
OjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Ci19OworLy8gTUFSSzogLSBDb2xvciBNb2RlbCBEZWZp
bml0aXRpb25zCiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhw
ciBib29sIFVzZXNFeHRlbmRlZFJHQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgRXh0ZW5kZWRSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBv
bmVudFR5cGU+PjsKKy8vIE1BUks6IEhTTE1vZGVsCiAKIHRlbXBsYXRlPD4gc3RydWN0IEhTTE1v
ZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9u
ZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CkBAIC05MCw4ICsxNTEsMjIgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpDeWxp
bmRyaWNhbFBvbGFyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhTTE1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6Omh1ZTsK
KyAgICB1c2luZyBDb2xvclR5cGU6OnNhdHVyYXRpb247CisgICAgdXNpbmcgQ29sb3JUeXBlOjps
aWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxU
LCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwg
SFNMTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMu
bGlnaHRuZXNzLCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
aW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNIU0xNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVu
YW1lIENvbG9yVHlwZTo6TW9kZWwsIEhTTE1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4+OwogCisvLyBNQVJLOiBIV0JNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIV0JN
b2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBv
bmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7IDAsIDM2MCwg
Q29sb3JDb21wb25lbnRUeXBlOjpBbmdsZSB9LApAQCAtMTAyLDggKzE3NywyMiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBIV0JNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2Fs
UG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgSFdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOworICAgIHVz
aW5nIENvbG9yVHlwZTo6d2hpdGVuZXNzOworICAgIHVzaW5nIENvbG9yVHlwZTo6YmxhY2tuZXNz
OworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXND
b2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhXQk1vZGVs
PFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmh1ZSwgYy53aGl0ZW5lc3MsIGMuYmxhY2tuZXNz
LCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNv
bnN0ZXhwciBib29sIFVzZXNIV0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9y
VHlwZTo6TW9kZWwsIEhXQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+
OwogCisvLyBNQVJLOiBMYWJNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0cnVjdCBMYWJNb2RlbDxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88
ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LApA
QCAtMTE0LDggKzIwMywyMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMYWJNb2RlbDxmbG9hdD4gewog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNv
b3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMYWJN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphOwor
ICAgIHVzaW5nIENvbG9yVHlwZTo6YjsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29s
b3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBMYWJNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5saWdodG5l
c3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNMYWJNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5
cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIExhYk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT4+OwogCisvLyBNQVJLOiBMQ0hNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0cnVjdCBM
Q0hNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNv
bXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7IDAsIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6
Ok51bWJlciB9LApAQCAtMTI2LDkgKzIyOSwyMyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMQ0hNb2Rl
bDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0g
Q29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2FsUG9sYXI7CiB9OwogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlw
ZSwgTENITW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4gOiBDb2xvclR5
cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6bGlnaHRuZXNzOworICAgIHVzaW5nIENvbG9yVHlw
ZTo6Y2hyb21hOworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOworICAgIHVzaW5nIENvbG9yVHlw
ZTo6YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExDSE1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1
cm4geyBjLmxpZ2h0bmVzcywgYy5jaHJvbWEsIGMuaHVlLCBjLmFscGhhIH07Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNMQ0hNb2Rl
bCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIExDSE1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBS
R0JNb2RlbDxmbG9hdD4geworLy8gTUFSSzogUkdCTW9kZWwKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
UkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiB7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVu
dEluZm8geyB7CiAgICAgICAgIHsgMCwgMSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwK
ICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LApAQCAtMTM4LDcg
KzI1NSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5
c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgUkdC
TW9kZWw8dWludDhfdD4gewordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdCwgUkdC
Qm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8
Q29sb3JDb21wb25lbnRJbmZvPHVpbnQ4X3Q+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAg
ICB7IDAsIDI1NSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKICAgICAgICAgeyAwLCAy
NTUsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xNDgsOCArMjY1LDM1IEBAIHRl
bXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpSZWN0
YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlu
bGluZSBjb25zdGV4cHIgYm9vbCBVc2VzUkdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFt
ZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+PjsKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0LCBSR0JCb3VuZGVkbmVz
czo6RXh0ZW5kZWQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21w
b25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAorICAgICAgICB7
IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCisg
ICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1i
ZXIgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xv
clNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOworfTsKIAordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBSR0JCb3VuZGVkbmVzcyBib3VuZGVkbmVzcz4gc3Ry
dWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGUsIGJvdW5kZWRuZXNzPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5n
IENvbG9yVHlwZTo6cmVkOworICAgIHVzaW5nIENvbG9yVHlwZTo6Z3JlZW47CisgICAgdXNpbmcg
Q29sb3JUeXBlOjpibHVlOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGUsIFJHQkJvdW5kZWRuZXNzIGJvdW5k
ZWRuZXNzPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRz
KGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBSR0JNb2RlbDxULCBib3VuZGVkbmVz
cz4+JiBjKQoreworICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJv
b2wgVXNlc1JHQk1vZGVsID0KKyAgICAgICBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5
cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIFJH
QkJvdW5kZWRuZXNzOjpCb3VuZGVkPj4KKyAgICB8fCBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBD
b2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGUsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4+OworCisKKy8vIE1BUks6IFhZWk1vZGVsCisK
IHRlbXBsYXRlPD4gc3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8g
eyB7CiAgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBl
OjpOdW1iZXIgfSwKQEAgLTE2MCw2ICszMDQsNDggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgWFlaTW9k
ZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9
IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9Owog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENv
bG9yVHlwZSwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4gOiBD
b2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6eDsKKyAgICB1c2luZyBDb2xvclR5cGU6
Onk7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp6OworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhw
ciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENv
bG9yVHlwZTxDb2xvclR5cGUsIFhZWk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLngs
IGMueSwgYy56LCBjLmFscGhhIH07Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
aW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNYWVpNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVu
YW1lIENvbG9yVHlwZTo6TW9kZWwsIFhZWk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4+OworCisKKy8vIGdldDw+IG92ZXJsb2FkIChhbG9uZyB3aXRoIHN0ZDo6dHVwbGVf
c2l6ZSBhbmQgc3RkOjp0dXBsZV9lbGVtZW50IGJlbG93KSB0byBzdXBwb3J0IGRlc3RydWN0dXJp
bmcgb2YgZXhwbGljaXRseSByZXNvbHZlZCBhbmQgdW5yZXNvbHZlZCBjb2xvcnMuCisKK3RlbXBs
YXRlPHNpemVfdCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciB0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGUgZ2V0KGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBl
PiYgY29sb3IpCit7CisgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKVtJXTsKK30K
KworfQorCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgor
Y2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiA6
IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgND4geyB9OworCit0ZW1wbGF0
ZTxzaXplX3QgSSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfZWxlbWVudDxJLCBX
ZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiB7CitwdWJsaWM6CisgICAgdXNp
bmcgdHlwZSA9IHR5cGVuYW1lIFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT46
OkNvbXBvbmVudFR5cGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFz
cyB0dXBsZV9zaXplPFdlYkNvcmU6OlVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4gOiBw
dWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzaXplX3QsIDQ+IHsgfTsKKwordGVtcGxhdGU8
c2l6ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8SSwgV2Vi
Q29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiB7CitwdWJsaWM6CisgICAgdXNp
bmcgdHlwZSA9IHR5cGVuYW1lIFdlYkNvcmU6OlVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBl
Pjo6Q29tcG9uZW50VHlwZTsKK307CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24g
Mjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxp
emF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmluZyBzZXJpYWxpemF0aQogewogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
LCBmbG9hdD4pOwogCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAg
YXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+KSwg
JyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygi
Y29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMx
LCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC0zNzQsNyArMzc0LDcg
QEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEhXQkE8Zmxv
CiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMQ0hBPGZsb2F0PiYgY29sb3IsIGJv
b2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNzZXJpYWxp
emluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAg
YXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoImxjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoImxjaCgiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJykn
KTsKQEAgLTM5NSw3ICszOTUsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29uc3QgTENIQTxmbG8KIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExh
YjxmbG9hdD4mIGNvbG9yLCBib29sKQogewogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9j
c3MtY29sb3ItNC8jc2VyaWFsaXppbmctbGFiLWxjaAotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCiAg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAn
KScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMz
LCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00MzIsNyArNDMyLDcgQEAgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExpbmVhclNSCiAKIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbnN0IE9LTENIQTxmbG9hdD4mIGNvbG9yLCBib29sKQogewotICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJva2xjaCgiLCBjMSwg
IiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGNoKCIs
IGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAtNDUyLDcgKzQ1
Miw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBPS0xD
SEE8ZgogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBPS0xhYjxmbG9hdD4mIGNv
bG9yLCBib29sKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAg
IGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdU
Rjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKCJva2xhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIm9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhh
LCAnKScpOwpAQCAtNTQzLDcgKzU0Myw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNS
R0JBPHVpbnQ4X3Q+IGNvbG9yLCBib29sIAogICAgIGlmICh1c2VDb2xvckZ1bmN0aW9uU2VyaWFs
aXphdGlvbikKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24o
Y29sb3IpOwogCi0gICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7Cisg
ICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAg
ICBzd2l0Y2ggKGFscGhhKSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygicmdiYSgiLCByZWQsICIsICIsIGdyZWVuLCAiLCAiLCBibHVlLCAiLCAwKSIpOwpAQCAtNTU5
LDcgKzU1OSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTUkdCQTx1aW50OF90PiBj
b2xvciwgYm9vbAogICAgIGlmICh1c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Vc2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogCi0gICAg
YXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoYWxwaGEgPT0g
MHhGRikKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyLCBMb3dlcmNh
c2UpLCBoZXgoZ3JlZW4sIDIsIExvd2VyY2FzZSksIGhleChibHVlLCAyLCBMb3dlcmNhc2UpKTsK
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CkBAIC01NzAsNyArNTcwLDcg
QEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNSR0JBPHVpbnQ4X3Q+
CiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogICAgICAgICByZXR1cm4g
c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiAKLSAgICBhdXRvIFtyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChhbHBoYSA8IDB4RkYpCiAgICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhleChncmVlbiwgMiksIGhl
eChibHVlLCAyKSwgaGV4KGFscGhhLCAyKSk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBo
ZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUsIDIpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29sb3JTcGFjZU1hcHBpbmc8U1JHQkE8VD4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRlUG9pbnQ6OkQ1MD4+IHsgc3RhdGljIGNvbnN0
ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpYWVpfRDUwIH07IH07CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JTcGFjZU1hcHBpbmc8WFlaQTxULCBXaGl0ZVBvaW50
OjpENjU+PiB7IHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
WFlaX0Q2NSB9OyB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBD
b2xvclNwYWNlIENvbG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFwcGluZzxDb2xvclR5cGU+Ojpj
b2xvclNwYWNlOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JT
cGFjZSBDb2xvclNwYWNlRm9yID0gQ29sb3JTcGFjZU1hcHBpbmc8Q2Fub25pY2FsQ29sb3JUeXBl
PENvbG9yVHlwZT4+Ojpjb2xvclNwYWNlOwogCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEZ1bmN0b3I+IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBjYWxsV2l0aENvbG9yVHlwZShj
b25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgRnVuY3RvciYmIGZ1bmN0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDkgKzQ4LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLCBXaGl0ZVBvaW50PiBzdHJ1Y3QgWFlaQTsK
IAogLy8gTUFSSzogTWFrZSBmdW5jdGlvbnMuCiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjKQordGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1l
ID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nhbm9uaWNhbFR5cGVNZW1iZXIgPSBm
YWxzZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBIYXNDYW5v
bmljYWxUeXBlTWVtYmVyPFQsIHN0ZDo6dm9pZF90PHR5cGVuYW1lIFQ6OkNhbm9uaWNhbFR5cGU+
PiA9IHRydWU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgYm9vbCBoYXNDb25vbmlj
YWxUeXBlPiBzdHJ1Y3QgQ2Fub25pY2FsQ29sb3JUeXBlSGVscGVyIHsgdXNpbmcgdHlwZSA9IENv
bG9yVHlwZTsgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IENhbm9uaWNh
bENvbG9yVHlwZUhlbHBlcjxDb2xvclR5cGUsIHRydWU+IHsgdXNpbmcgdHlwZSA9IHR5cGVuYW1l
IENvbG9yVHlwZTo6Q2Fub25pY2FsVHlwZTsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiB1c2luZyBDYW5vbmljYWxDb2xvclR5cGUgPSB0eXBlbmFtZSBDYW5vbmljYWxDb2xvclR5
cGVIZWxwZXI8Q29sb3JUeXBlLCBIYXNDYW5vbmljYWxUeXBlTWVtYmVyPENvbG9yVHlwZT4+Ojp0
eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGMp
CiB7Ci0gICAgcmV0dXJuIENvbG9yVHlwZSB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKKyAg
ICByZXR1cm4gQ2Fub25pY2FsQ29sb3JUeXBlPENvbG9yVHlwZT4geyBjWzBdLCBjWzFdLCBjWzJd
LCBjWzNdIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5zaWduZWQgSW5k
ZXgsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIGNsYW1wZWRDb21wb25lbnQoVCBjKSAtPiB0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUKQEAgLTk3LDI3ICsxMDUsMjcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sCiAgICAg
cmV0dXJuIHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGNvbXBvbmVudHMpLCBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyksIGNsYW1wZWRDb21wb25lbnQ8
Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwgY29tcG9uZW50c1szXSB9OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21w
b25lbnRzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZyhjb25zdCBDb2xvckNvbXBvbmVudHM8
VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xv
clR5cGU+KGNsYW1wZWRDb21wb25lbnRzPENvbG9yVHlwZT4oY29tcG9uZW50cykpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5
cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMykKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMykKIHsKICAgICByZXR1cm4gbWFrZUZy
b21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsgY2xhbXBlZENvbXBvbmVu
dDxDb2xvclR5cGUsIDA+KGMxKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwg
Y2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMzKSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMywgVCBhbHBoYSkKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWFrZUZyb21Db21w
b25lbnRzQ2xhbXBpbmcoVCBjMSwgVCBjMiwgVCBjMywgVCBhbHBoYSkKIHsKICAgICByZXR1cm4g
bWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+
KGMyKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMzKSwgY2xhbXBlZEFscGhhPFQs
IHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4oYWxwaGEpIH0pOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUg
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVu
dHM8VCwgND4mIGNvbXBvbmVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxw
aGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21wb25lbnRzKQogewogICAgIHJldHVy
biBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVkQ29tcG9uZW50c0V4Y2VwdEFs
cGhhPENvbG9yVHlwZT4oY29tcG9uZW50cykpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFscGhhPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1h
a2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGEoVCBjMSwgVCBjMiwgVCBjMywgQWxw
aGEgYWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEFscGhhPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQogewogICAgIHJldHVybiBtYWtl
RnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9u
ZW50PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIp
LCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBhbHBoYSB9KTsKIH0KQEAgLTEy
NywxMyArMTM1LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgQWxwaAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0
SW5SYW5nZShUIGNvbG9yKQogewogICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8dHlw
ZW5hbWUgVDo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KSB7Ci0gICAgICAgIGF1dG8gY29tcG9uZW50
cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICAgICAgYXV0byBjb21wb25lbnRzID0g
YXNDb2xvckNvbXBvbmVudHMoY29sb3IudW5yZXNvbHZlZCgpKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShjb21wb25lbnRzW2ldID49IFQ6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1pbiwgIkNvbXBv
bmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmlt
dW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWlu
KTsKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tpXSA8PSBUOjpN
b2RlbDo6Y29tcG9uZW50SW5mb1tpXS5tYXgsICJDb21wb25lbnQgYXQgaW5kZXggJWQgaXMgJWYg
YW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtICVmIiwgaSwgIGNvbXBvbmVu
dHNbaV0sIFQ6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCk7CiAgICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb2xvci5hbHBoYSA+PSBBbHBoYVRyYWl0czx0eXBlbmFt
ZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVz
cyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRyYW5zcGFyZW50KSAlZiIsIGNvbG9yLmFscGhh
LCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOwot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhIDw9IEFscGhhVHJhaXRzPHR5
cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUsICJBbHBoYSBpcyAlZiBhbmQgaXMgZ3Jl
YXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gKG9wYXF1ZSkgJWYiLCBjb2xvci5hbHBoYSwg
QWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7CisgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1szXSA+PSBBbHBoYVRyYWl0czx0eXBlbmFt
ZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVz
cyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRyYW5zcGFyZW50KSAlZiIsIGNvbXBvbmVudHNb
M10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1szXSA8PSBBbHBoYVRyYWl0
czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlz
IGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29tcG9uZW50
c1szXSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7CiAg
ICAgfQogfQogCkBAIC0xNDYsNyArMTU0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUKQogI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lLCB0
eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xv
ckNvbXBvbmVudHMgPSBmYWxzZTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8VCwgc3RkOjp2b2lkX3Q8ZGVj
bHR5cGUoYXNDb2xvckNvbXBvbmVudHMoc3RkOjpkZWNsdmFsPFQ+KCkpKT4+ID0gdHJ1ZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9D
b2xvckNvbXBvbmVudHM8VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUoYXNDb2xvckNvbXBvbmVudHMo
c3RkOjpkZWNsdmFsPFQ+KCkudW5yZXNvbHZlZCgpKSk+PiA9IHRydWU7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBIYXNDb21wb25l
bnRUeXBlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgSGFzQ29tcG9uZW50VHlwZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBU
OjpDb21wb25lbnRUeXBlPj4gPSB0cnVlOwpAQCAtMTY2LDkgKzE3NCw5IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9yV2l0aEFscGhhSGVscGVyIAogICAgIC8vIGUuZy4g
YXV0byB5ZWxsb3dXaXRoNTBQZXJjZW50QWxwaGEgPSBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFs
cGhhQnl0ZSgxMjgpOwogICAgIGNvbnN0ZXhwciBQYXJlbnQgY29sb3JXaXRoQWxwaGFCeXRlKHVp
bnQ4X3Qgb3ZlcnJpZGVBbHBoYSkgY29uc3QKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lX3Y8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFBhcmVudD4oKS5hbHBoYSksIHVp
bnQ4X3Q+LCAiT25seSB1aW50OF90IGJhc2VkIGNvbG9yIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIik7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgUGFyZW50OjpD
b21wb25lbnRUeXBlLCB1aW50OF90PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBh
cmUgc3VwcG9ydGVkLiIpOwogCi0gICAgICAgIGF1dG8gY29weSA9ICpzdGF0aWNfY2FzdDxjb25z
dCBQYXJlbnQqPih0aGlzKTsKKyAgICAgICAgYXV0byBjb3B5ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
UGFyZW50Kj4odGhpcyktPnVucmVzb2x2ZWQoKTsKICAgICAgICAgY29weS5hbHBoYSA9IG92ZXJy
aWRlQWxwaGE7CiAgICAgICAgIHJldHVybiBjb3B5OwogICAgIH0KQEAgLTE3OCw3ICsxODYsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJ
c0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4KIGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JUeXBlJiBhLCBjb25zdCBDb2xvclR5
cGUmIGIpCiB7Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21w
b25lbnRzKGIpOworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhLnVucmVzb2x2ZWQoKSkg
PT0gYXNDb2xvckNvbXBvbmVudHMoYi51bnJlc29sdmVkKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252ZXJ0aWJsZVRv
Q29sb3JDb21wb25lbnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CkBAIC0yMDMsNyArMjExLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0
CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CisgICAgICAgIGFzc2VydEluUmFuZ2Uo
KnN0YXRpY19jYXN0PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsKICAgICB9CiAKICAgICBjb25z
dGV4cHIgUkdCQVR5cGUoKQpAQCAtMjExLDIxICsyMTksMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0CiAgICAgewogICAgIH0KIAorCisg
ICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9y
KCpzdGF0aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7IH0KKyAgICBjb25zdGV4cHIg
YXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCpzdGF0aWNf
Y2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgcmVk
OwogICAgIFQgZ3JlZW47CiAgICAgVCBibHVlOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBELCB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIE0s
IHR5cGVuYW1lIFRGPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21w
b25lbnRzKGNvbnN0IFJHQkFUeXBlPFQsIEQsIENvbG9yVHlwZSwgTSwgVEY+JiBjKQotewotICAg
IHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKLX0KLQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotc3RydWN0IEJvdW5kZWRHYW1tYUVuY29kZWQg
OiBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxUPiwg
dHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9u
TW9kZTo6Q2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFF
bmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJG
dW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+OjpSR0JBVHlwZTsKK3N0
cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFt
ZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpD
bGFtcGVkPj4geworICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+OjpSR0JBVHlwZTsKIAogICAgIHVzaW5nIExpbmVhckNvdW50ZXJwYXJ0ID0gQm91bmRlZExp
bmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgRXh0ZW5kZWRDb3VudGVycGFydCA9IEV4dGVu
ZGVkR2FtbWFFbmNvZGVkPFQsIEQ+OwpAQCAtMjM0LDggKzI0MSw4IEBAIHN0cnVjdCBCb3VuZGVk
R2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbQogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVkTGluZWFyRW5jb2RlZCA6IFJH
QkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxUPiwgdHlw
ZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9k
ZTo6Q2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVu
Y3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1
Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFt
ZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpD
bGFtcGVkPj4geworICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5lYXJFbmNvZGVk
PFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6
OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1w
ZWQ+Pjo6UkdCQVR5cGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbGluZWFyVG9YWVog
PSBEOjpsaW5lYXJUb1hZWjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geHl6VG9MaW5lYXIg
PSBEOjp4eXpUb0xpbmVhcjsKQEAgLTI0Nyw4ICsyNTQsOCBAQCBzdHJ1Y3QgQm91bmRlZExpbmVh
ckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGkKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlw
ZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwg
dHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9u
TW9kZTo6VW5jbGFtcGVkPj4gewotICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkR2Ft
bWFFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0
ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6
UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBF
eHRlbmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4
dGVuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2Zl
ckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj4geworICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEV4
dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0
ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVy
RnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAKICAgICB1c2luZyBMaW5lYXJD
b3VudGVycGFydCA9IEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBEPjsKICAgICB1c2luZyBCb3Vu
ZGVkQ291bnRlcnBhcnQgPSBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+OwpAQCAtMjU2LDggKzI2
Myw4IEBAIHN0cnVjdCBFeHRlbmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEV4dGVu
ZGVkRwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBFeHRl
bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVy
RnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+IHsKLSAgICB1c2lu
ZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdC
TW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNm
ZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+OjpSR0JBVHlwZTsKK3N0cnVjdCBFeHRlbmRlZExp
bmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD4s
IFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+
IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD4s
IFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+
OjpSR0JBVHlwZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBsaW5lYXJUb1hZWiA9IEQ6
OmxpbmVhclRvWFlaOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB4eXpUb0xpbmVhciA9IEQ6
Onh5elRvTGluZWFyOwpAQCAtNDM0LDE3ICs0NDEsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IExhYiA6IENvbG9yV2l0aEFscGhhSGVscGVyCiAgICAgewogICAgIH0KIAorICAgIGNv
bnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhp
cyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5y
ZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAg
ICAgVCBhOwogICAgIFQgYjsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25z
dCBMYWI8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFs
cGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhw
ciBib29sIElzTGFiID0gc3RkOjppc19zYW1lX3Y8TGFiPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gTENIQSBDb2xvciBUeXBlLgpA
QCAtNDY5LDE3ICs0NzUsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExDSEEgOiBD
b2xvcldpdGhBbHBoYUhlbHBlCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJl
c29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25z
dGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0
aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBjaHJvbWE7CiAg
ICAgVCBodWU7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTENIQTxU
PiYgYykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5jaHJvbWEsIGMuaHVlLCBjLmFs
cGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhw
ciBib29sIElzTENIQSA9IHN0ZDo6aXNfc2FtZV92PExDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBPS0xhYiBDb2xvciBUeXBl
LgpAQCAtNTA0LDE3ICs1MDksMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9LTGFi
IDogQ29sb3JXaXRoQWxwaGFIZWxwCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRv
IHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBj
b25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9y
KCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhOwogICAg
IFQgYjsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBPS0xhYjxUPiYg
YykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEgfTsKLX0K
LQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNP
S0xhYiA9IHN0ZDo6aXNfc2FtZV92PE9LTGFiPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMQ0hBIENvbG9yIFR5cGUuCkBAIC01
MzksMTcgKzU0MywxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT0tMQ0hBIDogQ29s
b3JXaXRoQWxwaGFIZWwKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2
ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhw
ciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMp
OyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGNocm9tYTsKICAgICBU
IGh1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBPS0xDSEE8VD4m
IGMpCi17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBo
YSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIg
Ym9vbCBJc09LTENIQSA9IHN0ZDo6aXNfc2FtZV92PE9LTENIQTx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5cGU+OwogCiAKQEAgLTU3NSwxNyArNTc4LDE2IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDogQ29sb3JXaXRoQWxwaGFIZWxwZQogICAg
IHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJu
IHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgp
IGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgog
ICAgIFQgaHVlOwogICAgIFQgc2F0dXJhdGlvbjsKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGFs
cGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50
czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBIU0xBPFQ+JiBjKQotewotICAgIHJldHVy
biB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFNMQSA9
IHN0ZDo6aXNfc2FtZV92PEhTTEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwg
Q29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBIV0JBIENvbG9yIFR5cGUuCkBAIC02MTAsMTcgKzYx
MiwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFdCQSA6IENvbG9yV2l0aEFscGhh
SGVscGUKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25z
dCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3By
b3RlY3RlZDoKICAgICBUIGh1ZTsKICAgICBUIHdoaXRlbmVzczsKICAgICBUIGJsYWNrbmVzczsK
ICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9y
Q29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBIV0JBPFQ+JiBjKQotewot
ICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFja25lc3MsIGMuYWxwaGEgfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
SXNIV0JBID0gc3RkOjppc19zYW1lX3Y8SFdCQTx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIFhZWiBDb2xvciBUeXBlLgpAQCAtNjQ1
LDE3ICs2NDYsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgV2hpdGVQb2ludCBXPiBzdHJ1Y3Qg
WFlaQSA6IENvbG9yCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVk
KCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIg
YXV0byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsg
fQorCitwcm90ZWN0ZWQ6CiAgICAgVCB4OwogICAgIFQgeTsKICAgICBUIHo7CiAgICAgVCBhbHBo
YTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9pbnQgVz4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBYWVpBPFQsIFc+JiBj
KQotewotICAgIHJldHVybiB7IGMueCwgYy55LCBjLnosIGMuYWxwaGEgfTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNYWVpBID0gc3Rk
Ojppc19zYW1lX3Y8WFlaQTx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIENvbG9y
VHlwZTo6d2hpdGVQb2ludD4sIENvbG9yVHlwZT47CiAKIC8vIFBhY2tlZCBDb2xvciBGb3JtYXRz
CkBAIC02NjgsMTEgKzY2OCwxNiBAQCBzdHJ1Y3QgUkdCQSB7CiAgICAgewogICAgIH0KIAotICAg
IGNvbnN0ZXhwciBleHBsaWNpdCBSR0JBKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgIGNvbnN0
ZXhwciBleHBsaWNpdCBSR0JBKFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xv
cikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvci5yZWQgPDwg
MjQgfCBjb2xvci5ncmVlbiA8PCAxNiB8IGNvbG9yLmJsdWUgPDwgOCB8IGNvbG9yLmFscGhhKSB9
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBSR0JBKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yKQorICAgICAgICA6IFJHQkEgeyBjb2xvci5yZXNvbHZlZCgpIH0KKyAgICB7Cisg
ICAgfQorCiAgICAgdWludDMyX3QgdmFsdWU7CiB9OwogCkBAIC02ODIsOCArNjg3LDEzIEBAIHN0
cnVjdCBBUkdCIHsKICAgICB7CiAgICAgfQogCi0gICAgY29uc3RleHByIGV4cGxpY2l0IEFSR0Io
U1JHQkE8dWludDhfdD4gY29sb3IpCisgICAgY29uc3RleHByIGV4cGxpY2l0IEFSR0IoUmVzb2x2
ZWRDb2xvclR5cGU8U1JHQkE8dWludDhfdD4+IGNvbG9yKQogICAgICAgICA6IHZhbHVlIHsgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH0KKyAgICB7CisgICAgfQorCisgICAgY29u
c3RleHByIGV4cGxpY2l0IEFSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCisgICAgICAgIDogQVJH
QiB7IGNvbG9yLnJlc29sdmVkKCkgfQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogU1JHQkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICByZXR1cm4geyByICogYSwgZyAqIGEs
IGIgKiBhLCBhIH07CiB9CiAKIFNSR0JBPGZsb2F0PiB1bnByZW11bHRpcGxpZWQoY29uc3QgU1JH
QkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAg
ICAgIHJldHVybiBjb2xvcjsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdF
eGNlcHRBbHBoYTxTUkdCQTxmbG9hdD4+KHIgLyBhLCBnIC8gYSwgYiAvIGEsIGEpOwpAQCAtNDQs
NyArNDQsNyBAQCBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0
PiYgY29sb3IKIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmICghYSkKICAgICAgICAg
cmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1NSkKQEAgLTU0LDcgKzU0LDcg
QEAgU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+IGNv
CiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNv
bG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuIHsg
MCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1NSkKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGlj
IGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVpCiAKIFNSR0JB
PHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
cmVzb2x2ZWQoKTsKICAgICBpZiAoIWEgfHwgYSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xv
cjsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxTUkdC
QTx1aW50OF90Pj4odW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShyLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ29tcG9uZW50Qnl0ZShnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShi
LCBhKSwgYSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDIx
ICs0NiwyMSBAQCB1aW50OF90IGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUo
ZmxvYXQpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Qnl0ZUFscGhhVG8odWludDhf
dCk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRGbG9hdEFscGhhVG8oZmxvYXQpOwog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IENvbG9yVHlw
ZSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiwg
RnVuY3RvciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rv
cj4gYXV0byBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JU
eXBlJiwgRnVuY3RvciYmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1
aW50OF90IG92ZXJyaWRlQWxwaGEpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92
ZXJyaWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0
byBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVy
cmlkZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhP
dmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcnRl
ZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJy
aWRlQWxwaGEpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0
ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJp
ZGVBbHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBhdXRvIGlu
dmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qg
b3ZlcnJpZGVBbHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gaW52ZXJ0
ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJp
ZGVBbHBoYSk7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWZfdDxVc2VzTGFiTW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzTENITW9kZWw8Q29sb3JU
eXBlPiB8fCBVc2VzSFNMTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJv
b2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPiB8fCBV
c2VzRXh0ZW5kZWRSR0JNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9v
bCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+PiogPSBu
dWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwogdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNIV0JN
b2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0
IENvbG9yVHlwZSYpOwogdGVtcGxhdGU8V2hpdGVQb2ludCBXPiBjb25zdGV4cHIgYm9vbCBpc0Js
YWNrKGNvbnN0IFhZWkE8ZmxvYXQsIFc+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFiTW9kZWw8Q29sb3JUeXBlPiB8fCBV
c2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVs
bHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9k
ZWw8Q29sb3JUeXBlPiB8fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxDb2xvclR5cGU+PiogPSBudWxs
cHRyPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2Rl
bDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENv
bG9yVHlwZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIg
Ym9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwogdGVtcGxhdGU8V2hpdGVQb2ludCBXPiBj
b25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IFhZWkE8ZmxvYXQsIFc+Jik7CiAKQEAgLTkzLDM1
ICs5MywzNSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0RmxvYXRBbHBoYVRvPGZs
b2F0PihmbG8KICAgICByZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1v
ZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIEZ1bmN0
b3ImJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5j
dG9yPiBhdXRvIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xv
clR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikKIHsKLSAgICBhdXRvIGNvbXBvbmVudHMg
PSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSk7CiAgICAgYXV0byBjb3B5ID0gY29tcG9uZW50
czsKICAgICBjb3B5WzBdID0gc3RkOjppbnZva2UoZnVuY3RvciwgY29tcG9uZW50c1swXSk7CiAg
ICAgY29weVsxXSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBvbmVudHNbMV0pOwogICAgIGNv
cHlbMl0gPSBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGNvbXBv
bmVudHNbMl0pOwotICAgIHJldHVybiB7IGNvcHlbMF0sIGNvcHlbMV0sIGNvcHlbMl0sIGNvcHlb
M10gfTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBjb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVy
cmlkZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBj
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBv
dmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9yOworICAgIGF1dG8gY29weSA9
IGNvbG9yLnVucmVzb2x2ZWQoKTsKICAgICBjb3B5LmFscGhhID0gY29udmVydEJ5dGVBbHBoYVRv
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAg
cmV0dXJuIGNvcHk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBv
dmVycmlkZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGNvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFs
cGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9yOworICAgIGF1dG8gY29weSA9IGNvbG9yLnVu
cmVzb2x2ZWQoKTsKICAgICBjb3B5LmFscGhhID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFt
ZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVybiBj
b3B5OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5
cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xv
ciwgdWludDhfdCBvdmVycmlkZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgYXV0byBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xv
clR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCiB7CiAgICAgc3RhdGljX2Fzc2Vy
dChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpOwogCi0gICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVu
dHM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKQpAQCAtMTMxLDExICsx
MzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBl
IGludmVyCiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9y
V2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlk
ZUFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29sb3JX
aXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRl
QWxwaGEpCiB7CiAgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGli
bGUpOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwor
ICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkp
OwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMzsgKytpKQpAQCAtMTQ3LDE5ICsxNDcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpCiAKIHRlbXBsYXRlPFdoaXRlUG9pbnQg
Vz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpCiB7
Ci0gICAgcmV0dXJuIGNvbG9yLnkgPT0gMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxm
bG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgp
OworICAgIHJldHVybiByZXNvbHZlZENvbG9yLnkgPT0gMCAmJiByZXNvbHZlZENvbG9yLmFscGhh
ID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlw
ZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+
Kj4KIGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAg
ICByZXR1cm4gY29sb3IubGlnaHRuZXNzID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFp
dHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2
ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5saWdodG5lc3MgPT0gMCAmJiByZXNvbHZl
ZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1v
ZGVsPENvbG9yVHlwZT58fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxDb2xvclR5cGU+Pio+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JH
Qk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JU
eXBlJiBjb2xvcikKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAg
ICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGNvbnN0
ZXhwciBhdXRvIGNvbXBvbmVudEluZm8gPSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZv
OwogICAgIHJldHVybiBjMSA9PSBjb21wb25lbnRJbmZvWzBdLm1pbiAmJiBjMiA9PSBjb21wb25l
bnRJbmZvWzFdLm1pbiAmJiBjMyA9PSBjb21wb25lbnRJbmZvWzJdLm1pbiAmJiBhbHBoYSA9PSBB
bHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWU7CiB9
CkBAIC0xNjcsMjQgKzE2OSwyNyBAQCBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlz
QmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IuYmxhY2tu
ZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsK
KyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiBy
ZXNvbHZlZENvbG9yLmJsYWNrbmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBB
bHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8V2hpdGVQb2ludCBXPiBj
b25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IFhZWkE8ZmxvYXQsIFc+JiBjb2xvcikKIHsKLSAg
ICByZXR1cm4gY29sb3IueSA9PSAxICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0
Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7Cisg
ICAgcmV0dXJuIHJlc29sdmVkQ29sb3IueSA9PSAxICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0g
QWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFiTW9kZWw8Q29sb3JUeXBlPiB8
fCBVc2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9kZWw8Q29sb3JUeXBlPj4qPgog
Y29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIHJl
dHVybiBjb2xvci5saWdodG5lc3MgPT0gMTAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRz
PGZsb2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVk
KCk7CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNzID09IDEwMCAmJiByZXNvbHZl
ZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1v
ZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNS
R0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7Cisg
ICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBjb25z
dGV4cHIgYXV0byBjb21wb25lbnRJbmZvID0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5m
bzsKICAgICByZXR1cm4gYzEgPT0gY29tcG9uZW50SW5mb1swXS5tYXggJiYgYzIgPT0gY29tcG9u
ZW50SW5mb1sxXS5tYXggJiYgYzMgPT0gY29tcG9uZW50SW5mb1syXS5tYXggJiYgYWxwaGEgPT0g
QWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwog
fQpAQCAtMTkyLDcgKzE5Nyw4IEBAIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JU
eXBlJiBjb2xvcikKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNX
aGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci53aGl0ZW5l
c3MgPT0gMTAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwor
ICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0dXJuIHJl
c29sdmVkQ29sb3Iud2hpdGVuZXNzID09IDEwMCAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFs
cGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11
bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3Jl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBjbGFzcyBJbWFnZUJhY2tpbmdT
dG9yZSB7IChwdWJsaWMpCiAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBhdXRvIHBpeGVsID0gYXNTUkdCQShQYWNrZWRDb2xvcjo6QVJHQiB7ICpkZXN0IH0p
OworICAgICAgICBhdXRvIHBpeGVsID0gYXNTUkdCQShQYWNrZWRDb2xvcjo6QVJHQiB7ICpkZXN0
IH0pLnJlc29sdmVkKCk7CiAKICAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkg
ewogICAgICAgICAgICAgc2V0UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CkBAIC0xNjAsNyArMTYw
LDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeyAocHVibGljKQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBwaXhlbCA9IHByZW11
bHRpcGxpZWRGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRpcGxp
ZWRGbG9vcmluZyhwaXhlbCkucmVzb2x2ZWQoKTsKIAogICAgICAgICB1aW50OF90IGQgPSAyNTUg
LSBhOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9Q
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCShy
ZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNCw3
ICs0MjQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGNv
bnN0IENvbG8KIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVp
bnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24g
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAo
YSldXTsKIH0KIApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpzZXRUb1ZhbHVlKGNvbnN0IENvbG9yJgogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlv
bigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBbc3RhdGljX2Nh
c3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0Ao
ciksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPAogICAgICAgICBy
ZXR1cm47CiAKICAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBjb2xv
cikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRlbXBsYXRlIHRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRlbXBs
YXRlIHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAg
ICAgcmV0dXJuIEBbQChyKSwgQChnKSwgQChiKSwgQChhKV07CiAgICAgfSkuZ2V0KCldOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FB
bmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FB
bmltYXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yCiAgICAgaWYg
KGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBj
b21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjb21w
b25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3Jl
ZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxD
QUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBD
QUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKQEAg
LTQyMyw3ICs0MjMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUo
Y29uc3QgV2ViQ29yZToKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25l
bnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFs
cGhhIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0
b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9u
LmdldCgpLCB2LmdldCgpKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25XaW46OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2UKICAgICAgICAgCiAgICAgUmV0YWlu
UHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFi
bGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIGNvbXBv
bmVudHMgPSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBj
b21wb25lbnRzID0gdmFsdWVbaV0udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOwogICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21w
b25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICAg
ICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUo
NCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJv
X3QqIHNyY0NyLCBjYWlyb190KiBkcwogCiB2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fp
cm9fdCogY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgciwgZywgYiwgYSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCB2b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5nZWQoKQogCiBzdGF0aWMgdm9p
ZCBhZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIEdyYWRpZW50Q29s
b3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVk
KCk7CiAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9w
Lm9mZnNldCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAtNTUsNyArNTUsNyBA
QCB0eXBlZGVmIHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JS
R0JBKGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwgR3JhZGllbnRDb2xvclN0b3Ag
c3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwg
ciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsMTIgKzE0NywxMiBAQCBzdGF0aWMgc3RkOjpwYWlyPENHQ29sb3JTcGFj
ZVJlZiwgQ29sb3JDb21wb25lbnRzPGZsb2EKICAgICBpZiAoIWNnQ29sb3JTcGFjZSkgewogI2lm
IEhBVkUoQ09SRV9HUkFQSElDU19FWFRFTkRFRF9TUkdCX0NPTE9SX1NQQUNFKQogICAgICAgICBh
dXRvIGNvbXBvbmVudHNDb252ZXJ0ZWRUb0V4dGVuZGVkU1JHQkEgPSBjYWxsV2l0aENvbG9yVHlw
ZShjb21wb25lbnRzLCBjb2xvclNwYWNlLCBbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdC
QTxmbG9hdD4+KGNvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPEV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikucmVzb2x2ZWQoKSk7CiAg
ICAgICAgIH0pOwogICAgICAgICByZXR1cm4geyBleHRlbmRlZFNSR0JDb2xvclNwYWNlUmVmKCks
IGNvbXBvbmVudHNDb252ZXJ0ZWRUb0V4dGVuZGVkU1JHQkEgfTsKICNlbHNlCiAgICAgICAgIGF1
dG8gY29tcG9uZW50c0NvbnZlcnRlZFRvU1JHQkEgPSBjYWxsV2l0aENvbG9yVHlwZShjb21wb25l
bnRzLCBjb2xvclNwYWNlLCBbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb2xvcikp
OworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdC
QTxmbG9hdD4+KGNvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVy
biB7IHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHNDb252ZXJ0ZWRUb1NSR0JBIH07CiAj
ZW5kaWYKQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPENHQ29sb3JTcGFjZVJl
ZiwgQ29sb3JDb21wb25lbnRzPGZsb2EKIAogc3RhdGljIFJldGFpblB0cjxDR0NvbG9yUmVmPiBj
cmVhdGVDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtjb2xvclNwYWNl
LCBjb21wb25lbnRzXSA9IGNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0
byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5kUmVzb2x2ZWRD
b2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtjZ0NvbG9yU3BhY2UsIGNnQ29tcGF0aWJsZUNv
bXBvbmVudHNdID0gY29udmVydFRvQ0dDb21wYXRpYmxlQ29tcG9uZW50cyhjb2xvclNwYWNlLCBj
b21wb25lbnRzKTsKICAgICAKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBjNF0gPSBjZ0NvbXBhdGli
bGVDb21wb25lbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhZGllbnRSZW5kZXJlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVy
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsOCArNDcyLDcgQEAgR3JhZGllbnRSZW5kZXJl
ckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VHCiAgICAgLy8gZXh0ZW5kZWQg
c1JHQiBmb3IgYWxsIGdyYWRpZW50cy4KICAgICBpZiAoaGFzT25seUJvdW5kZWRTUkdCQ29sb3JT
dG9wcyhzdG9wcykpIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdG9wIDogc3RvcHMpIHsK
LSAgICAgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gc3RvcC5jb2xvci5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBjb21wb25lbnRzOworICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAg
ICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKHIpOwogICAgICAgICAgICAgY29sb3JD
b21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChnKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50
cy51bmNoZWNrZWRBcHBlbmQoYik7CkBAIC00ODgsOSArNDg3LDkgQEAgR3JhZGllbnRSZW5kZXJl
ckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VHCiAKICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBzdG9wIDogc3RvcHMpIHsKICNpZiBIQVZFKENPUkVfR1JBUEhJQ1NfRVhURU5E
RURfU1JHQl9DT0xPUl9TUEFDRSkKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3Rv
cC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PigpOworICAgICAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8RXh0
ZW5kZWRTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNlbHNlCi0gICAgICAgICAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+
KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNlbmRpZgogICAgICAgICAgICAg
Y29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAgICAgICAgICAgIGNvbG9yQ29t
cG9uZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CkBAIC01NDYsNyArNTQ1LDcgQEAgdm9pZCBHcmFk
aWVudFJlbmRlcmVyQ0c6OlNoYWRpbmc6OnNoYWRpbmdGdW5jdGlvbih2b2lkCiAgICAgICAgIG1h
a2VGcm9tQ29tcG9uZW50czxJbnRlcnBvbGF0aW9uU3BhY2VDb2xvclR5cGU+KHN0b3AxLmNvbG9y
Q29tcG9uZW50cyksIG9mZnNldCk7CiAKICAgICAvLyA0LiBDb252ZXJ0IHRvIHRoZSBvdXRwdXQg
Y29sb3Igc3BhY2UuCi0gICAgYXV0byBpbnRlcnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0
U3BhY2UgPSBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T3V0cHV0U3BhY2VDb2xvclR5
cGU+KGludGVycG9sYXRlZENvbG9yKSk7CisgICAgYXV0byBpbnRlcnBvbGF0ZWRDb2xvckNvbnZl
cnRlZFRvT3V0cHV0U3BhY2UgPSBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T3V0cHV0
U3BhY2VDb2xvclR5cGU+KGludGVycG9sYXRlZENvbG9yKS5yZXNvbHZlZCgpKTsKIAogICAgIC8v
IDUuIFdyaXRlIGNvbG9yIGNvbXBvbmVudHMgdG8gJ291dCcgcG9pbnRlci4KICAgICBmb3IgKHNp
emVfdCBjb21wb25lbnRJbmRleCA9IDA7IGNvbXBvbmVudEluZGV4IDwgaW50ZXJwb2xhdGVkQ29s
b3JDb252ZXJ0ZWRUb091dHB1dFNwYWNlLnNpemUoKTsgKytjb21wb25lbnRJbmRleCkKQEAgLTU2
MCw3ICs1NTksNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVy
ZXJDRzo6bWFrZVMKICAgICAgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGNvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZC5jb2xvclNwYWNlLAogICAgICAgICAgICAgICAgIFsmXSAoYXV0byYgY29s
b3JTcGFjZSkgLT4gQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB7CiAgICAgICAgICAgICAgICAg
ICAgIHVzaW5nIENvbG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRl
Y2x0eXBlKGNvbG9yU3BhY2UpPjo6Q29sb3JUeXBlOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IudGVtcGxhdGUgdG9Db2xvclR5cGVMb3NzeTxDb2xv
clR5cGU+KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IudGVtcGxhdGUgdG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgKTsKICAgICAgICAgfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05F
T04uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIGlubGluZSB2b2lkIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExpZ2h0aQogICAgIC8vIFNldCBsaWdodCBz
b3VyY2UgYXJndW1lbnRzLgogICAgIGZsb2F0QXJndW1lbnRzLmNvbnN0T25lID0gMTsKIAotICAg
IGF1dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Cisg
ICAgYXV0byBjb2xvciA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVp
bnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IGNv
bG9yLnJlZDsKICAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gY29sb3IuZ3JlZW47Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDE5ICs5MiwxOSBAQCBib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFMKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewog
ICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAg
ICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5
c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXND
b2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBv
bmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAg
ICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2Vw
aWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGNhc2UgSFVFX1JPVEFURTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91
bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkp
OworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0
Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRy
aXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENv
bG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE1NSw3ICsxNTUsNyBA
QCBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUMK
IHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgT1BBQ0lUWToKLSAgICAgICAgY29s
b3IuYWxwaGEgKj0gbV9hbW91bnQ7CisgICAgICAgIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGRl
bkFscGhhKGNvbG9yLCBzdGQ6OmNsYW1wPGZsb2F0Pihjb2xvci5yZXNvbHZlZCgpLmFscGhhICog
bV9hbW91bnQsIDAuMGYsIDEuMGYpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJ
TlZFUlQ6IHsKICAgICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAxLjBmIC0gbV9hbW91bnQ7
CkBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaHVl
Um90YXRlKGNvbnN0IENvbG9yCiAKIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9u
Ojp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8g
aHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShhc0NvbG9yQ29tcG9uZW50cyhj
b2xvciksIDAuNWYpOworICAgIGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJv
dGF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSwgMC41Zik7CiAgICAgCiAg
ICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBo
b3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUs
IDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMzE2LDcgKzMxNiw3IEBAIGJvb2wgSW52ZXJ0TGln
aHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3JtQwogICAgICAgICAtMC4wNDlm
LCAtMS4zNDdmLCAgMC4xNDZmLCAwLjBmLCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3
ZiwgLTEuMTA0ZiwgMC4wZiwgMS4yNWYKICAgICB9OwotICAgIGF1dG8gY29udmVydGVkVG9MaWdo
dE1vZGVDb21wb25lbnRzID0gdG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRvTGln
aHRNb2RlQ29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21w
b25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKIAogICAgIGF1dG8g
aHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShjb252ZXJ0ZWRUb0xpZ2h0TW9k
ZUNvbXBvbmVudHMsIDAuNWYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBA
QCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvbG9yJiBjb2xvcikgY28K
ICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0
byBzUkdCQUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CiAK
ICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAo
IW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkBAIC0xMzAsNyArMTMwLDcg
QEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3ImIGNv
CiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1
dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwog
CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYg
KCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
YXBwbHlQbGF0Zm9ybShjb25zdCBMaQogewogICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29s
b3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFj
ZSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9SZXNvbHZl
ZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsK
ICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0
UG9pbnQzRChyLCBnLCBiKTsKIAogICAgIGRhdGEubGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0Rh
dGEoKmRhdGEuZmlsdGVyLCAqZGF0YS5yZXN1bHQsIHBhaW50aW5nRGF0YSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjCiAgICAgc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSB7IHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OyB9
CiAgICAgc3RhdGljIGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21D
b2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25l
bnRzKSB7IHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdC
QTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsgfQogCi0gICAgc3RhdGljIGlubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBh
Y2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JB
KHBpeGVsKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4
ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpLnJlc29sdmVkKCkp
OyB9CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JN
YXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRp
YyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50
IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29s
dW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2
aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBDb2xvcjo6Q29sb3Io
Y29uc3QgR2RrUkdCQSYgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IC50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTQsNyArMjU0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29s
b3ImIGNvbG9yLCBmCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNv
bGlkQ29sb3IpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgZ2xVbmlmb3Jt
NGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBnbExpbmVXaWR0
aCh3aWR0aCk7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d051bWJlcihpbnQgbnVtYmVyLCBjb25zdCBDb2wKICAgICBjYWlyb190KiBjciA9IGNhaXJvX2Ny
ZWF0ZShzdXJmYWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBs
b2FkaW5nIGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAK
ICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDE1LDcg
KzQxNSw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJQcgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAg
IC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50
IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7Cisg
ICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9y
KCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgICAg
ICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAg
ICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBz
aGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAgICAg
ICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAt
NzM1LDcgKzczNSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25z
dCBGbG9hdFJlY3QmIAogICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJs
ZWQoKSkKICAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlw
U3RhY2soKS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJ
bnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvdW50
KCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVk
KGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAg
IGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAg
aWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFncyB8PSBTaG91bGRC
bGVuZDsKQEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlk
Q29sb3IoY29uc3QgRmxvYXRSZWN0JiAKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBnbENsZWFyQ29s
b3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTMgKzQwLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCiAKIENvbG9yOjpv
cGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBj
b25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwgYSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsNyArNTgsNyBAQCBJRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2go
SUQyRDFSZW5kZXJUYXJnZXQqIHIKICAgICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9zdG9wcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsK
ICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2Vz
LgotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICBncmFkaWVudFN0b3BzLmdy
YWRpZW50U3RvcHMudW5jaGVja2VkQXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNl
dCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnMKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gc3BlbGxpbmdQYXR0
ZXJuQ29sb3IgPSBDb2xvcjo6cmVkOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBncmFtbWFy
UGF0dGVybkNvbG9yID0gQ29sb3I6OmRhcmtHcmVlbjsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gc3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/
IGdyYW1tYXJQYXR0ZXJuQ29sb3IgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6
OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9yLnJlc29sdmVkKCkgOiBzcGVsbGluZ1BhdHRl
cm5Db2xvci5yZXNvbHZlZCgpOwogICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRl
eHQsIHIsIGcsIGIsIGEpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZSA9IGdl
dFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
NSw3ICszNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRl
KGZsb2F0IGFuZ2wKIAogRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xv
cldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVu
dEdsb2JhbEFscGhhKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTQsNyArMTU5NCw3IEBAIGNv
bnN0ZXhwciBmbG9hdCBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbgogQ29s
b3IgUmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvcihjb25zdCBDb2xvciYgdGV4
dENvbG9yLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBDb25zaWRlciB1c2luZyBMQ0hBPGZsb2F0PiByYXRoZXIgdGhhbiBIU0xBPGZsb2F0PiBm
b3IgYmV0dGVyIHBlcmNlcHR1YWwgcmVzdWx0cyBhbmQgdG8gYXZvaWQgY2xhbXBpbmcgdG8gc1JH
QiBnYW11dCwgd2hpY2ggaXMgd2hhdCBIU0xBIGRvZXMuCi0gICAgYXV0byBoc2xhID0gdGV4dENv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhID0gdGV4
dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBp
ZiAodGV4dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQog
ICAgICAgICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0Fk
anVzdG1lbnRGYWN0b3IgKiAoMTAwLjBmIC0gaHNsYS5saWdodG5lc3MpOwogICAgIGVsc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsxMzA3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VD
b252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBsdW1pbmFuY2UuCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5l
bCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0
Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFs
dWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5j
dGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVu
dCYsIGZsb2F0IHByb2dyZXNzLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVk
KQogICAgIHsKLSAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1v
ZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JB
TG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0
b0F0RW5kT2ZEdXJhdGlvbigpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRv
IHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1v
ZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2lt
cGxlVG8gPSBtX3RvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKKyAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0
aW9uKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAg
ICAgICAKICAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0
Q291bnQsIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5yZWQsIHNpbXBsZVRvQXRFbmRPZkR1cmF0
aW9uLnJlZCwgc2ltcGxlQW5pbWF0ZWQucmVkKTsKICAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNl
OjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxl
VG8uZ3JlZW4sIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuLCBzaW1wbGVBbmltYXRlZC5n
cmVlbik7CkBAIC0xMDMsOCArMTAzLDggQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlv
biA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgCi0gICAgICAgIGF1dG8gc2lt
cGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0
byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1
dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICBmbG9hdCBy
ZWQgPSBzaW1wbGVGcm9tLnJlZCAtIHNpbXBsZVRvLnJlZDsKICAgICAgICAgZmxvYXQgZ3JlZW4g
PSBzaW1wbGVGcm9tLmdyZWVuIC0gc2ltcGxlVG8uZ3JlZW47CkBAIC0xMTYsOCArMTE2LDggQEAg
Y2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiBw
cml2YXRlOgogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQmKSBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9
IG1fdG8udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAg
ICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0byAx
MDAlIG9wYXF1ZS4KICAgICAgICAgbV90byA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPHVpbnQ4X3Q+PihzaW1wbGVUby5yZWQgKyBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8uZ3Jl
ZW4gKyBzaW1wbGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ibHVlICsgc2ltcGxlRnJvbS5ibHVlKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDIyLTAxLTAyICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVzb2x2ZWQvdW5yZXNvbHZlZCBj
b2xvciB0eXBlIGFjY2Vzc29ycyB0byByZXF1aXJlIHVzZXJzIHRvIGJlIGV4cGxpY2l0IGFib3V0
IHdoZXRoZXIgdGhleSB3aWxsIGhhbmRsZSBtaXNzaW5nL25vbmUgY29sb3IgY29tcG9uZW50cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0Nzk4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSB1
c2VzIG9mIENvbG9yOjp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29sb3I6OnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8Pj4oKSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRvIHJlc29sdmVkKCkgdG8gYWNj
ZXNzIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcDoKKyAgICAgICAgKGRyYXdQYWdlQmFj
a2dyb3VuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgor
ICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGUubW06CisgICAgICAgIChXZWJLaXQ6OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisKIDIwMjEtMTIt
MjYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgV2Vi
S2l0L0NvY29hQ29sb3IuaCB3aXRoIFdlYkNvcmUvQ29sb3JDb2NvYS5oLCBub3QgY29uZnVzaW5n
IGF0IGFsbApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24v
V0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3Bw
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5
c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYWdlQmFja2dyb3VuZChjYWlyb190KiBjdHgs
IGNvbnN0IHN0ZAogICAgIGlmICghYmFja2dyb3VuZENvbG9yIHx8IGJhY2tncm91bmRDb2xvci52
YWx1ZSgpLmlzVmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnZhbHVlKCkudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGN0eCwgciwgZywgYiwgYSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGN0eCwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlz
aW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29s
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgd2Via2l0Q29sb3JG
aWxsRnJvbVdlYkNvcmVDb2xvcihjb25zdCBXZWJDb3JlOjpDbwogewogICAgIFJFTEVBU0VfQVNT
RVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlkKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3
ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gd2ViQ29yZUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVk
KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3ItPmdyZWVuID0gZzsKICAgICBjb2xv
ci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0YKICAgICAgICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3Qg
PSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4p
IHsKLSAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICNpZiBVU0UoR1RLNCkKICAgICAgICAgICAgICAgICBHZGtSR0JBIHJnYmEg
PSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdEdSZWYoZ3NrX2NvbG9yX25vZGVfbmV3KCZyZ2Jh
LCAmYm91bmRzKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBA
QCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcihkb3VibGUqIHJlZCwK
ICAgICBpZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0
Pj4oKS5yZXNvbHZlZCgpOwogICAgICpyZWQgPSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJs
dWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGUubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02ODEsNyArNjgxLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU09i
amVjdD4gYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWCiAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24oa2V5ZnJhbWVWYWx1ZSwKICAgICAgICAgWyZdKGNvbnN0IGZsb2F0IG51bWJlcikgLT4gUmV0
YWluUHRyPE5TT2JqZWN0PiB7IHJldHVybiBAKG51bWJlcik7IH0sCiAgICAgICAgIFsmXShjb25z
dCBXZWJDb3JlOjpDb2xvciBjb2xvcikgLT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7Ci0gICAgICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
KyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gIGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8
U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIHJldHVybiBAWyBAKHIp
LCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgICAgIH0sCiAgICAgICAgIFsmXShjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50M0QgcG9pbnQpIC0+IFJldGFpblB0cjxOU09iamVjdD4gewpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjg3NTIxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMjItMDEtMDIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCByZXNvbHZlZC91bnJlc29sdmVkIGNvbG9yIHR5cGUgYWNjZXNzb3JzIHRvIHJlcXVpcmUg
dXNlcnMgdG8gYmUgZXhwbGljaXQgYWJvdXQgd2hldGhlciB0aGV5IHdpbGwgaGFuZGxlIG1pc3Np
bmcvbm9uZSBjb2xvciBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzQ3OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3Rz
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBSZXBsYWNlIHVz
ZXMgb2YgQ29sb3I6OnRvU1JHQkFMb3NzeTw+KCkgd2l0aCBDb2xvcjo6dG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTw+PigpIGFuZCBhZGQKKyAgICAgICAgY2FsbHMgdG8gcmVzb2x2ZWQoKSB0byBhY2Nl
c3MgY29sb3IgY29tcG9uZW50cy4gQWxzbyB1cGRhdGUgdG8gbmV3IG5hbWUgb2YgY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKSwKKyAgICAgICAgY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21w
b25lbnRzKCkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2Ev
VGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpj
aGFuZ2VDb250ZXh0Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVzZSBv
ZiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIHdpdGggdGhlIG1vcmUgY29tbW9uIHRvQ29sb3JU
eXBlTG9zc3k8V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCkuCisKIDIwMjItMDEt
MDEgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWtlIFNo
YXJlZEJ1ZmZlcjo6Y29weSgpIHJldHVybiBhIGNvbnRpZ3VvdXMgU2hhcmVkQnVmZmVyCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3Bw
CShyZXZpc2lvbiAyODc0ODIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAK
LSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+
KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1
ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU3
LDcgKzU3LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29s
b3IgPSBDb2xvcjo6YmxhY2s7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKQEAgLTczLDcgKzczLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVk
KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OnJlZDsKIAotICAgIGF1dG8gaHNsYUNvbG9y
ID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFD
b2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC04OSw3ICs4OSw3IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmdyZWVu
OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8Zmxv
YXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMCwgaHNsYUNv
bG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24p
OwpAQCAtMTA1LDcgKzEwNSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiB7CiAgICAg
Q29sb3IgY29sb3IgPSBDb2xvcjo6Ymx1ZTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVY
UEVDVF9GTE9BVF9FUSgyNDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgx
MDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9EYXJrR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3Jh
eTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZs
b2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNM
QTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpA
QCAtMTM3LDcgKzEzNyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29s
b3IgY29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9D
b2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTUzLDcgKzE1Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0xpZ2h0R3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpsaWdodEdyYXk7CiAK
LSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+
KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1
ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4
MSw3ICsxODEsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIAogICAgIHZhbGlkQ29sb3IgPSBT
UkdCQTx1aW50OF90PiB7IDEsIDIsIDMsIDQgfTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9y
LmlzVmFsaWQoKSk7Ci0gICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3Iu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9
IHZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgp
OwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVD
VF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKHZhbGlk
Q29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMTg5LDcgKzE4OSw3IEBAIFRFU1QoQ29sb3Is
IFZhbGlkaXR5KQogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29sb3IoV1RGTW92ZSh2YWxp
ZENvbG9yKSk7CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgp
KTsKLSAgICBhdXRvIHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJW
YWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8geWV0QW5vdGhlclZh
bGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVy
VmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZh
bGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZh
bGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFRFU1QoQ29s
b3IsIFZhbGlkaXR5KQogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVy
VmFsaWRDb2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7
Ci0gICAgYXV0byBvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50
cyA9IG90aGVyVmFsaWRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJl
c29sdmVkKCk7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAx
KTsKICAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAg
ICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7CkBAIC0yMDks
MjAgKzIwOSwyMCBAQCBURVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KENvbG9yKENvbG9yOjpibGFjaykubHVtaW5hbmNlKCksIDApOwogICAgIEVYUEVDVF9GTE9BVF9F
UShDb2xvcihDb2xvcjo6d2hpdGUpLmx1bWluYW5jZSgpLCAxKTsKIAotICAgIGF1dG8gY0NvbXBv
bmVudHMgPSBTUkdCQTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH07CisgICAgYXV0byBjQ29tcG9u
ZW50cyA9IFNSR0JBPHVpbnQ4X3Q+IHsgODUsIDkwLCAxNjAgfS5yZXNvbHZlZCgpOwogICAgIEVY
UEVDVF9GTE9BVF9FUShDb2xvcihjQ29tcG9uZW50cykubHVtaW5hbmNlKCksIDAuMTE3ODE0NTUp
OwogCiAgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLnJlZCwgODUpOwogICAgIEVYUEVDVF9FUShj
Q29tcG9uZW50cy5ncmVlbiwgOTApOwogICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ibHVlLCAx
NjApOwogCi0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29tcG9uZW50cykubGlnaHRlbmVk
KCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihj
Q29tcG9uZW50cykubGlnaHRlbmVkKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjTGlndGVuZWQpLmx1bWlu
YW5jZSgpLCAwLjI5MTY4Mik7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWQsIDEzMCk7CiAg
ICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3KTsKICAgICBFWFBFQ1RfRVEoY0xpZ3Rl
bmVkLmJsdWUsIDI0NCk7CiAKLSAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGNDb21wb25lbnRz
KS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY0RhcmtlbmVk
ID0gQ29sb3IoY0NvbXBvbmVudHMpLmRhcmtlbmVkKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjRGFya2Vu
ZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjI0Mik7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5y
ZWQsIDQwKTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVuLCA0Myk7CkBAIC0yMzMsNyAr
MjMzLDcgQEAgVEVTVChDb2xvciwgQ29uc3RydWN0b3IpCiB7CiAgICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAKLSAgICBhdXRvIFtjb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IGMxLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAg
YXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5kUmVzb2x2ZWRD
b2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRz
OwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0yNDgsNyArMjQ4LDcgQEAgVEVT
VChDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIENvbG9yIGMyKGMxKTsKIAotICAgIGF1
dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRS
ZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNv
bXBvbmVudHM7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKQEAgLTI2Myw3ICsyNjMs
NyBAQCBURVNUKENvbG9yLCBBc3NpZ25tZW50KQogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZs
b2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIENvbG9yIGMyID0gYzE7CiAKLSAg
ICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNl
QW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0g
PSBjb21wb25lbnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0zMjMsNyAr
MzIzLDcgQEAgVEVTVChDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQogICAgIC8vIGFuZCBzZXQgYzEg
dG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAgICAgRVhQRUNU
X0ZBTFNFKGMxLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwg
Y29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsK
ICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKIAogICAg
IGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CkBAIC0zNDQsNyArMzQ0LDcgQEAg
VEVTVChDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlk
IHNvIHRoYXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KICAgICBFWFBFQ1RfRkFMU0UoYzEu
aXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29s
b3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIEVYUEVD
VF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogCiAgICAgYXV0byBbciwg
ZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKQEAgLTM3MCw3ICszNzAsNyBAQCBURVNUKENvbG9y
LCBSZXR1cm5WYWx1ZXMpCiBURVNUKENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAg
Q29sb3IgcDNDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9
IH07Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CisgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwg
MS4wZik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTMyODJm
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTEyNzQ4Zik7CkBA
IC0zODAsNyArMzgwLDcgQEAgVEVTVChDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogVEVTVChD
b2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAgQ29sb3IgbGluZWFyU1JH
QkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsK
LSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNS
R0JBQ29sb3IucmVkLCAxLjBmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ncmVl
biwgMC43MzUzNTY5MjdmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAw
LjUzNzA5ODcwNmYpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIFRFU1QoQ29sb3IsIENvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KQogCiAgICAgewogICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuNSk7Ci0gICAg
ICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbY29sb3JTcGFj
ZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5k
UmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2Us
IENvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVu
dHM7CiAgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CkBAIC00MDksNyArNDA5LDcgQEAg
VEVTVChDb2xvciwgQ29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkpCiAKICAgICB7CiAgICAgICAg
IENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29sb3IuY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkoMC4pOwotICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9
IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Cisg
ICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgICAg
IEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpTUkdCKTsKICAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwogICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4p
OwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFw
aGljc0NvbnRleHRHTENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQkocmV2aXNp
b24gMjg3NDgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rl
c3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw4
IEBAIHN0YXRpYyA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBjaGFuZ2VDb250ZXh0Q29udGVu
dAogewogICAgIGNvbnRleHQubWFya0NvbnRleHRDaGFuZ2VkKCk7CiAgICAgV2ViQ29yZTo6Q29s
b3IgZXhwZWN0ZWQgeyBpdGVyYXRpb24gJSAyID8gV2ViQ29yZTo6Q29sb3I6OmdyZWVuIDogV2Vi
Q29yZTo6Q29sb3I6OnllbGxvdyB9OwotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNd
ID0gZXhwZWN0ZWQuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKLSAgICBVTlVTRURfVkFSSUFC
TEUoY29sb3JTcGFjZSk7Ci0gICAgY29udGV4dC5jbGVhckNvbG9yKGNvbXBvbmVudHNbMF0sIGNv
bXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gZXhwZWN0ZWQudG9Db2xvclR5cGVMb3NzeTxXZWJDb3JlOjpTUkdCQTxmbG9h
dD4+KCkucmVzb2x2ZWQoKTsKKyAgICBjb250ZXh0LmNsZWFyQ29sb3IociwgZywgYiwgYSk7CiAg
ICAgY29udGV4dC5jbGVhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVS
X0JJVCk7CiAgICAgdWludDhfdCBnb3RWYWx1ZXNbNF0gPSB7IH07CiAgICAgYXV0byBzYW1wbGVB
dCA9IGNvbnRleHQuZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsK
</data>
<flag name="commit-queue"
          id="474020"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448194</attachid>
            <date>2022-01-02 17:47:52 -0800</date>
            <delta_ts>2022-01-02 18:40:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved5.diff</filename>
            <type>text/plain</type>
            <size>160264</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4CiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50Zigicmdi
ICU3LjVmICU3LjVmICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVl
KTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3Bp
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBj
b25zdAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKGF4T2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1
dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4
T2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOwogICAgIH0KQEAgLTgyNCwxMyArODI0
LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJp
bGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgaWYgKGJnQ29s
b3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLi50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci4udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjI4LDcgKzIy
NSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lkIHNldENvbG9yKFNSR0JBPHVp
bnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAgICAgdm9p
ZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xv
clNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAKLSAgICBT
UkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBhY2tlZENvbG9yOjpSR0JBIGFz
UGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBh
c091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogaW5saW5lIGJvb2wgb3V0T2ZM
aW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAg
ICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVy
biBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25l
bnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5mbGFncygpID09
IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEu
Y29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7
CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGluZSBib29sIG91dE9mTGluZUNv
bXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkg
JiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0g
Q29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgICAgIGF1dG8gYkZs
YWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRP
ZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkg
JiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50
cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGFGbGFncyA9PSBiRmxh
Z3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5l
KCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9yOjpDb2xvcihzdGQ6Om9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xv
clR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldE91dE9mTGluZUNvbXBvbmVu
dHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSks
IENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3Mp
KTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0
ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxD
b2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8Rmxh
Z3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoKmNvbG9y
KSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxh
Z3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRz
OjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVzb2x2ZWQoKSkpLCBDb2xvclNw
YWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAK
IGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5l
Q29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdz
KQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JT
cGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCku
dG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUs
IGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JT
cGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1
bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBj
YWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgp
LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gY2FsbFdp
dGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNw
YWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAK
QEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVu
dHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50
cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFz
SW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4g
Q29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Ci0gICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoYXNQ
YWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5lIFBhY2tlZENvbG9yOjpSR0JB
IENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUsNyArNTYyLDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgICAg
IGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1dG8mIG91dE9mTGluZUNvbXBv
bmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJlc29sdmVkQ29tcG9uZW50cygp
OwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVyIDw8IGMyOwogICAgICAg
ICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFj
a2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlzaWJsZSgpKQogICAgICAgICBy
ZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ry
b3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
YXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tk
cm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBz
b3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29s
dmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5n
QiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiByZXN1bHQ7CiAgICAgZm9yIChp
bnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJ
bmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNvbnRleHQucHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBwcmVt
dWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRv
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGll
ZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKIAogICAg
IGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxT
UkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5y
ZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAtMTE3LDggKzExNyw4IEBAIENv
bG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdAogICAg
IGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRvU1JHQiA9IHRvLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBhdXRvIGJsZW5kZWQg
PSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQpLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHN0cnVjdCBD
b2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1hcChGJiYgZnVuY3Rpb24pIGNv
bnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlvbihzdGQ6OmRlY2x2YWw8VD4o
KSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29u
c3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3Bl
cmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IrKFQp
IGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IvKFQpIGNvbnN0
OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBvbmVudHM8VCwgTj46Om9wZXJh
dG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAgICAgKnRoaXMgPSBtYXBDb2xv
ckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEgKyBjMjsgfSwgKnRoaXMsIHJo
cyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
Tj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBO
Pjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgqdGhpcyAvIHJocyk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBMQ0hMaWtlLCB0
eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xhckZvcm0oY29uc3QgTGFiTGlr
ZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
bGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRhbjIoY29sb3IuYiwgY29sb3Iu
YSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0bmVzcywKLSAgICAgICAgc3Rk
OjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVlID49IDAgPyBodWUgOiBodWUg
KyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAgICBmbG9hdCBodWUgPSByYWQy
ZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBzdGQ6Omh5cG90KGEsIGIpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+PSAwID8gaHVlIDogaHVlICsg
MzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYWJMaWtlLCB0eXBlbmFtZSBM
Q0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZvcm0oY29uc3QgTENITGlrZSYg
Y29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jbGNo
LXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRlZzJyYWQoY29sb3IuaHVlKTsK
KyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBj
b2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5j
aHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5hbHBoYQot
ICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChodWUpOworICAgIGZs
b2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpOworICAgIGZsb2F0IGIg
PSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOworCisgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBIU0wgY29udmVyc2lvbnMuCkBA
IC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCB7CiAgICAgZmxv
YXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0
ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW21pbiwgbWF4XSA9
IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47
CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1
bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsK
ICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IK
LSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAgICBhdXRvIFtodWUsIG1pbiwg
bWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAgICBmbG9hdCBsaWdodG5lc3Mg
PSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwpA
QCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0
PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9h
dD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCi0g
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOworICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IGxpZ2h0
bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1
bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3IucmVz
b2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWluICogMTAwLjBmOwogICAgIGF1
dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwogICAgIAotICAgIHJldHVybiB7
IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsg
aHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBI
V0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVz
cywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3aGl0ZW5lc3MgKyBibGFja25l
c3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAvIDEwMC4wZjsK
QEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1
ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IENvbG9y
Q29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+LCBMYWI8ZmxvYXQ+Pjo6Y29u
dmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBmbG9hdCBmMSA9IChjb2xvci5s
aWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQgZjAgPSBmMSArIChjb2xvci5h
IC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9yLmIgLyAyMDAuMGYpOworICAg
IGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAorICAg
IGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4wZjsKKyAgICBmbG9hdCBmMCA9
IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEgLSAoYiAvIDIwMC4wZik7CisK
ICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsKICAgICAgICAgZmxvYXQgdEN1
YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4gTEFCZSkKQEAgLTI0NywzMSAr
MjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJzaW9uPFhZ
WkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hpdGVWYWx1ZXNbMF0gKiBjb21w
dXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZhbHVlc1sxXSAqIGNvbXB1dGVZ
KGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29t
cHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hpdGVWYWx1ZXNbMl0gKiBjb21w
dXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAg
ICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Pjo6Y29udmVydChj
b25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvcikKIHsKLSAgICBmbG9hdCB4
ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZsb2F0IHkgPSBjb2xvci55IC8g
RDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9yLnogLyBENTBXaGl0ZVZhbHVl
c1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisg
ICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVzWzBdOworICAgIGZsb2F0IGFk
anVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBmbG9hdCBhZGp1c3RlZFogPSB6
IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFuc2Zvcm0gPSBbXShmbG9hdCB2
YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8gc3RkOjpjYnJ0KHZhbHVlKSA6
IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAgfTsKIAotICAgIGZsb2F0IGYw
ID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFuc2Zvcm0oeSk7Ci0gICAgZmxv
YXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3RlZFkpOworICAgIGZsb2F0IGYy
ID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQgbGlnaHRuZXNzID0gKDExNi4w
ZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYgKiAoZjAgLSBmMSk7CiAgICAg
ZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJldHVybiB7IGxpZ2h0bmVzcywg
YSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGFscGhh
IH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAgLTMwOCw5ICszMDksMTAgQEAg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAg
ICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0ODQxODIwOTQ5NjU3NTk2ODRm
LCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAgICBhdXRvIFtsaWdodG5lc3Ms
IGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAgICAvLyAxLiBUcmFuc2Zvcm0g
ZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0bmVzcy4KLSAgICBhdXRvIGNv
bXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7CisgICAgYXV0byBjb21wb25l
bnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0bmVzcyAvIDEwMC4wZiwgYSwg
YiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNvb3JkaW5hdGVzIGludG8gbm9u
LWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2VzIi4KICAgICBhdXRvIG5vbkxp
bmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
Y29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8gNC4gQ29udmVydCB0byBYWVou
CiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2NS50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxw
aGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBPS0xhYjxmbG9hdD4g
Q29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1
Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiYgY29sb3IpCkBA
IC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8Zmxv
YXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFmLCAgMC43ODI3NzE3NjYyZiwg
LTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwgeSwgeiwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFlaIGludG8gTE1TICJhcHByb3hp
bWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVh
ckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvciku
c3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0gWFlaRDY1VG9MaW5lYXJMTVMu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IHgs
IHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFyaXR5LgogICAgIGF1dG8gbm9u
TGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikgeyByZXR1cm4gc3RkOjpjYnJ0
KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9u
PE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFtsaWdodG5lc3MsIGEsIGJdID0g
Tm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhub25MaW5lYXJM
TVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBmcm9tIHVuaXQgbGlnaHRuZXNz
IHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4w
ZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MgKiAxMDAuMGYs
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNvbnZlcnNpb25zLgpAQCAtMzcx
LDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4s
IE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29s
b3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMs
IENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
Y29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3Bh
Y2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9y
U3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
aW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwgW291dHB1dENvbG9yU3BhY2Vd
IChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3aXRjaCAob3V0cHV0Q29sb3JT
cGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4UkdCPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0
ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZEE5OFJHQjxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4
dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWREaXNw
bGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3RvUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdC
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRSZWMyMDIwOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRl
ZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAyMDxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkU1JHQjoK
LSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhTTDoKLSAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxDSDoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8Zmxv
YXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpP
S0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFByb1Bob3RvUkdCPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAg
ICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8
ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUwOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENjU6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdo
aXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0
cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgcmV0dXJuIHBs
YXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGlucHV0Q29sb3JD
b21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwxOSArNDM0LDE5IEBAIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvcgogICAgIHJl
dHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNw
YWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAg
ICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpKSB7CiAgICAg
ICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdCOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xv
clNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAgICAgICBjYXNlIFBsYXRmb3Jt
Q29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQ
MzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgZW51bSBjbGFzcyBDb2xv
clNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5w
dXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKTsKIAogLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRzIHdpdGggYXNzb2NpYXRlZCBj
b2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFj
ZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNv
bXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSk7
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpOworQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVyIHRoYW4gWFlaQSBvciB0aG9z
ZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1lbnQKQEAgLTU3LDcgKzU3LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgPSB2
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IGlubGluZSBPdXRw
dXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3JD
b252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0KGNvbG9yKTsKKyAgICByZXR1cm4gQ29s
b3JDb252ZXJzaW9uPENhbm9uaWNhbENvbG9yVHlwZTxPdXRwdXQ+LCBDYW5vbmljYWxDb2xvclR5
cGU8SW5wdXQ+Pjo6Y29udmVydChjb2xvcik7CiB9CiAKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lPiBzdAogCiAg
ICAgICAgIHVzaW5nIElucHV0V2l0aFJlcGxhY2VtZW50ID0gQ29sb3JUeXBlV2l0aFJlcGxhY2Vt
ZW50Q29tcG9uZW50PElucHV0LCBmbG9hdD47CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8SW5wdXRXaXRoUmVwbGFjZW1lbnQsIE91dHB1dD4pCi0gICAgICAgICAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHZhbHVl
IC8gMjU1LjBmOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPElu
cHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKS5t
YXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUuMGY7IH0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxPdXRwdXQ+
KGNvbnZlcnRDb2xvcjxJbnB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CkBAIC0y
MTksMzEgKzIxOSwzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0
LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBPdXRwdXRXaXRoUmVwbGFjZW1lbnQgPSBD
b2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21wb25lbnQ8T3V0cHV0LCBmbG9hdD47CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3V0cHV0V2l0aFJlcGxhY2VtZW50LCBJbnB1
dD4pCi0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpLm1hcChbXShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7IHJldHVy
biBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOyB9KSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xvckNv
bXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90
IHsgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1
bCk7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxP
dXRwdXQ+KGNvbnZlcnRDb2xvcjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQ+KGNvbG9yKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0
ZXhwciBhdXRvIHRvTGluZWFyRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBl
bmFtZSBDb2xvclR5cGU6OkxpbmVhckNvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29sb3JUeXBlOjpUcmFu
c2ZlckZ1bmN0aW9uOjp0b0xpbmVhcihjMSksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6
dG9MaW5lYXIoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMzKSwg
YWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9HYW1tYUVuY29kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpHYW1tYUVuY29kZWRDb3VudGVycGFydAogICAg
IHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVy
biB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzEpLCBDb2xv
clR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMyKSwgQ29sb3JUeXBlOjpU
cmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMyksIGFscGhhIH07CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIHRvRXh0ZW5kZWQoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czx0
eXBlbmFtZSBDb2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9Cb3VuZGVkKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0CiAg
ICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhj
ZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5l
IGNvbnN0ZXhwciBPdXRwdXQgaGFuZGxlUkdCRmFtaWx5Q29udmVyc2lvbihjb25zdCBJbnB1dCYg
Y29sb3IpCkBAIC0zMTIsNyArMzEyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBl
bmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAgICAgICAgIC8vIGhhdmUgc3VmZmljaWVudCB0ZXN0
aW5nIGNvdmVyYWdlIHRvIG5vdGljZSBhbnkgYWR2ZXJzZSBlZmZlY3RzLgogCiAgICAgICAgIGF1
dG8gYXBwbHlNYXRyaWNlcyA9IFtdKGNvbnN0IElucHV0JiBjb2xvciwgYXV0by4uLiBtYXRyaWNl
cykgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpLCBtYXRyaWNlcy4uLikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIG1hdHJpY2Vz
Li4uKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgY29uc3RleHByIChJbnB1dDo6d2hpdGVQ
b2ludCA9PSBPdXRwdXQ6OndoaXRlUG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9s
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHRlbXBsYXRlPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbgogdHlwZW5hbWUgSW50ZXJw
b2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9u
ZW50cyhJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSBpbnRlcnBvbGF0aW9uTWV0aG9kQ29s
b3JTcGFjZSwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlw
ZSBjb2xvcjEsIGRvdWJsZSBjb2xvcjFNdWx0aXBsaWVyLCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9yMiwgZG91YmxlIGNvbG9yMk11bHRpcGxp
ZXIpCiB7CiAgICAgLy8gMS4gQXBwbHkgcHJlLWludGVycG9sYXRpb24gdHJhbnNmb3JtcyAoaHVl
IGZpeHVwIGZvciBwb2xhciBjb2xvciBzcGFjZXMsIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIGlm
IHJlcXVpcmVkKS4KLSAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JDb21wb25lbnRzMSwgbm9ybWFs
aXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlvbk5vcm1hbGl6YXRpb248YWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2UsIGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yMSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMikpOworICAgIGF1
dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29sb3JDb21wb25lbnRz
Ml0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11bHRpcGxpY2F0aW9u
PihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3Ix
LnJlc29sdmVkKCkpLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjIucmVzb2x2ZWQoKSkpOwogCiAg
ICAgLy8gMi4gSW50ZXJwb2xhdGUgdXNpbmcgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50cy4KICAg
ICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29tcG9uZW50cyA9IG1hcENvbG9yQ29tcG9uZW50cyhb
Jl0gKGF1dG8gY29tcG9uZW50RnJvbUNvbG9yMSwgYXV0byBjb21wb25lbnRGcm9tQ29sb3IyKSAt
PiBmbG9hdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1
bWluYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yTHVtaW5hbmNlLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgZG91YmxlIHJlbGF0
aXZlTHVtCiAgICAgLy8gdGhpcyBpbiBDb2xvckNvbnZlcnNpb24uaCBhcyBhIHNpYmxpbmcgZnVu
Y3Rpb24gdG8gY29udmVydENvbG9yIHdoaWNoIGNhbiBnZXQgYSBjaGFubmVsCiAgICAgLy8gb2Yg
YSBjb2xvciBpbiBhbm90aGVyIHNwYWNlIGluIHRoaXMga2luZCBvZiBvcHRpbWFsIHdheS4KIAot
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oY29s
b3IpLnk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpE
NjU+Pihjb2xvcikucmVzb2x2ZWQoKS55OwogfQogCiBpbmxpbmUgZG91YmxlIGNvbnRyYXN0UmF0
aW8oZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQSwgZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JNb2RlbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDkzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBSR0JCb3VuZGVkbmVzcyB7IEJvdW5kZWQsIEV4
dGVuZGVkIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lLCBSR0JCb3VuZGVkbmVzcz4gc3RydWN0IFJH
Qk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRyYWl0czsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvOwotdGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xN
b2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IExDSE1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2Rl
bDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IFhZWk1vZGVsOwogCisvLyBNQVJLOiBSZXNvbHZlZC9VbnJlc29sdmVkIERlZmlu
dGl0aW9ucwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yTW9k
ZWwgPSB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlOwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5
cGU8Q29sb3JUeXBlPiByZXNvbHZlZENvbG9yKENvbG9yVHlwZSBpbnB1dCkKK3sKKyAgICByZXR1
cm4gUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPiB1bnJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBVbnJl
c29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4geyBpbnB1dCB9OworfQorCitpbmxpbmUgY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAg
IHJldHVybiBjb2xvckNvbXBvbmVudHM7Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4mIGNvbG9yQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29sb3JDb21w
b25lbnRzLm1hcChbXSAoZmxvYXQgY29tcG9uZW50KSB7IHJldHVybiBzdGQ6OmlzbmFuKGNvbXBv
bmVudCkgPyAwLjBmIDogY29tcG9uZW50OyB9KTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0cnVjdCBSZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgcmVzb2x2ZWQoKSBvciB1bnJlc29s
dmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSByZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3
ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXRzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8g
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5cGU8Qz4gcmVz
b2x2ZWRDb2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlw
ZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgcmVzb2x2ZShjb2xvcikgfQorICAgIHsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIEM6OkNvbXBvbmVudFR5cGUsIGZsb2F0Pj4qID0gbnVs
bHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQorICAgIHsKKyAg
ICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gcmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhFeHBvc2VkQ29sb3JUeXBlPEMsIHR5cGVuYW1lIEM6Ok1vZGVsPiB7
IGNvbG9yIH0pKTsKKyAgICAgICAgcmV0dXJuIENvbG9yVHlwZSB7IGMxLCBjMiwgYzMsIGFscGhh
IH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDOjpDb21wb25lbnRUeXBlLCB1aW50OF90
Pj4qID0gbnVsbHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RydWN0IFVucmVzb2x2ZWRDb2xvclR5cGUgOiBFeHBvc2VkQ29sb3JU
eXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geworICAgIHVzaW5nIENh
bm9uaWNhbFR5cGUgPSBDb2xvclR5cGU7CisKKyAgICAvLyBDYWxsaW5nIHVucmVzb2x2ZWQoKSBv
biBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHVucmVzb2x2ZWQgaXMgYSBuby1vcCwgc28gd2UgY2Fu
CisgICAgLy8ganVzdCByZXR1cm4gb3V0c2VsdmVzLgorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVz
b2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxDPiB1bnJl
c29sdmVkQ29sb3IoQyk7CisKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9y
VHlwZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5
cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3IgfQorICAgIHsKKyAgICB9Cit9
OworCisKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgc3VwcG9ydCB0eXBlcy4KKwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IHRyYW5zcGFyZW50ID0gMC4wZjsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG9wYXF1ZSA9
IDEuMGY7CkBAIC02OCwxNyArMTQ0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bG9yQ29tcG9uZW50SW5mbyB7CiAgICAgQ29sb3JDb21wb25lbnRUeXBlIHR5cGU7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsPGZsb2F0PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVu
dEluZm8geyB7Ci0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25l
bnRUeXBlOjpOdW1iZXIgfSwKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xv
ckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KLSAgICB9IH07Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rh
bmd1bGFyT3J0aG9nb25hbDsKLX07CisvLyBNQVJLOiAtIENvbG9yIE1vZGVsIERlZmluaXRpdGlv
bnMKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
VXNlc0V4dGVuZGVkUkdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBFeHRlbmRlZFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT4+OworLy8gTUFSSzogSFNMTW9kZWwKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8Zmxv
YXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZv
PGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKQEAgLTkwLDggKzE1OCwyMiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2Fs
UG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOworICAgIHVz
aW5nIENvbG9yVHlwZTo6c2F0dXJhdGlvbjsKKyAgICB1c2luZyBDb2xvclR5cGU6OmxpZ2h0bmVz
czsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFz
Q29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIU0xNb2Rl
bDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlvbiwgYy5saWdodG5l
c3MsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc0hTTE1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CiAKKy8vIE1BUks6IEhXQk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1vZGVsPGZs
b2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5m
bzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgMzYwLCBDb2xvckNv
bXBvbmVudFR5cGU6OkFuZ2xlIH0sCkBAIC0xMDIsOCArMTg0LDIyIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEhXQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjp3aGl0ZW5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpibGFja25lc3M7CisgICAg
dXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29t
cG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFdCTW9kZWw8VD4+JiBj
KQoreworICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFja25lc3MsIGMuYWxw
aGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgVXNlc0hXQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbCwgSFdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKKy8v
IE1BUks6IExhYk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4s
IDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMTQs
OCArMjEwLDIyIEBAIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0
ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExhYk1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmE7CisgICAgdXNp
bmcgQ29sb3JUeXBlOjpiOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGUsIExhYk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5h
LCBjLmIsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgVXNlc0xhYk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUg
Q29sb3JUeXBlOjpNb2RlbCwgTGFiTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlPj47CiAKKy8vIE1BUks6IExDSE1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVs
PGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVy
IH0sCkBAIC0xMjYsOSArMjM2LDIzIEBAIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMQ0hN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpjaHJv
bWE7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBo
YTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgTENITW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMu
bGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0xDSE1vZGVsID0gc3Rk
Ojppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgTENITW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVs
PGZsb2F0PiB7CisvLyBNQVJLOiBSR0JNb2RlbAorCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2Rl
bDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7
IHsKICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAg
ICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMzgsNyArMjYyLDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpS
ZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1
aW50OF90PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90LCBSR0JCb3VuZGVk
bmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNv
bXBvbmVudEluZm88dWludDhfdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwg
MjU1LCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAgICB7IDAsIDI1NSwgQ29s
b3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTE0OCw4ICsyNzIsMzUgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFy
T3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNv
bnN0ZXhwciBib29sIFVzZXNSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9y
VHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+
OwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5kZWRuZXNzOjpFeHRl
bmRlZD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudElu
Zm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgeworICAgICAgICB7IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCisgICAgICAgIHsgLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKKyAgICAgICAg
eyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VD
b29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Cit9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIFJHQkJvdW5kZWRuZXNzIGJvdW5kZWRuZXNzPiBzdHJ1Y3QgRXhw
b3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZSwgYm91bmRlZG5lc3M+PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JU
eXBlOjpyZWQ7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpncmVlbjsKKyAgICB1c2luZyBDb2xvclR5
cGU6OmJsdWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3MgYm91bmRlZG5lc3M+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPFQsIGJvdW5kZWRuZXNzPj4mIGMp
Cit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2Vz
UkdCTW9kZWwgPQorICAgICAgIHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9k
ZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdCQm91bmRl
ZG5lc3M6OkJvdW5kZWQ+PgorICAgIHx8IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlw
ZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdC
Qm91bmRlZG5lc3M6OkV4dGVuZGVkPj47CisKKworLy8gTUFSSzogWFlaTW9kZWwKKwogdGVtcGxh
dGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAg
ICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJl
ciB9LApAQCAtMTYwLDYgKzMxMSw0OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JT
cGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBl
LCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlw
ZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp4OworICAgIHVzaW5nIENvbG9yVHlwZTo6eTsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Ono7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
Q29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBl
PENvbG9yVHlwZSwgWFlaTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMueCwgYy55LCBj
LnosIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc1hZWk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CisKKworLy8gZ2V0PD4gb3ZlcmxvYWQgKGFsb25nIHdpdGggc3RkOjp0dXBsZV9zaXplIGFu
ZCBzdGQ6OnR1cGxlX2VsZW1lbnQgYmVsb3cpIHRvIHN1cHBvcnQgZGVzdHJ1Y3R1cmluZyBvZiBl
eHBsaWNpdGx5IHJlc29sdmVkIGFuZCB1bnJlc29sdmVkIGNvbG9ycy4KKwordGVtcGxhdGU8c2l6
ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZSBnZXQoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGU+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpW0ldOworfQorCit9CisK
K25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0
dXBsZV9zaXplPFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGlj
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVf
dCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6
OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPjo6Q29tcG9u
ZW50VHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxl
X3NpemU8V2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiA6IHB1YmxpYyBz
dGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgND4geyB9OworCit0ZW1wbGF0ZTxzaXplX3Qg
SSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfZWxlbWVudDxJLCBXZWJDb3JlOjpV
bnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21w
b25lbnRUeXBlOworfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpCiB7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIGZsb2F0
Pik7CiAKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
Y29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMx
LCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigi
LCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywg
YzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTM3NCw3ICszNzQsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgSFdCQTxmbG8KIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxh
Yi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
bGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmlu
ZygibGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAt
Mzk1LDcgKzM5NSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChj
b25zdCBMQ0hBPGZsbwogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xv
ci00LyNzZXJpYWxpemluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsK
ICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAi
LCBhbHBoYSwgJyknKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1IKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgT0tMQ0hBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhh
LCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGNoKCIsIGMxLCAiJSAiLCBj
MiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsY2goIiwgYzEsICIl
ICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00NTIsNyArNDUyLDcgQEAg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IE9LTENIQTxmCiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IE9LTGFiPGZsb2F0PiYgY29sb3IsIGJv
b2wpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBb
YzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
Im9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0
cmluZygib2tsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7
CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU1JHQkE8dWlu
dDhfdD4gY29sb3IsIGJvb2wgCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7
CiAKLSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIHN3aXRj
aCAoYWxwaGEpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Jh
KCIsIHJlZCwgIiwgIiwgZ3JlZW4sICIsICIsIGJsdWUsICIsIDApIik7CkBAIC01NTksNyArNTU5
LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBi
b29sCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiAKLSAgICBhdXRvIFty
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChhbHBoYSA9PSAweEZGKQog
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQsIDIsIExvd2VyY2FzZSksIGhl
eChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWUsIDIsIExvd2VyY2FzZSkpOwogICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKQEAgLTU3MCw3ICs1NzAsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4KICAgICBp
ZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhIDwgMHhGRikKICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUs
IDIpLCBoZXgoYWxwaGEsIDIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQs
IDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvclNw
YWNlTWFwcGluZzxTUkdCQTxUPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3Bh
Y2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDUwPj4geyBzdGF0aWMgY29uc3RleHByIGF1
dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENTAgfTsgfTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRlUG9pbnQ6OkQ2NT4+
IHsgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpYWVpfRDY1
IH07IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yU3Bh
Y2UgQ29sb3JTcGFjZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENvbG9yVHlwZT46OmNvbG9yU3Bh
Y2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclNwYWNlIENv
bG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFwcGluZzxDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JU
eXBlPj46OmNvbG9yU3BhY2U7CiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVu
Y3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNhbGxXaXRoQ29sb3JUeXBlKGNvbnN0IENv
bG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBG
dW5jdG9yJiYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgs
MTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUsIFdoaXRlUG9pbnQ+IHN0cnVjdCBYWVpBOwogCiAvLyBN
QVJLOiBNYWtlIGZ1bmN0aW9ucy4KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8VCwgND4mIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lk
PiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJlciA9IGZhbHNlOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nhbm9uaWNhbFR5
cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q2Fub25pY2FsVHlwZT4+ID0gdHJ1
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBib29sIGhhc0Nvbm9uaWNhbFR5cGU+
IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXIgeyB1c2luZyB0eXBlID0gQ29sb3JUeXBl
OyB9OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgQ2Fub25pY2FsQ29sb3JU
eXBlSGVscGVyPENvbG9yVHlwZSwgdHJ1ZT4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgQ29sb3JU
eXBlOjpDYW5vbmljYWxUeXBlOyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHVz
aW5nIENhbm9uaWNhbENvbG9yVHlwZSA9IHR5cGVuYW1lIENhbm9uaWNhbENvbG9yVHlwZUhlbHBl
cjxDb2xvclR5cGUsIEhhc0Nhbm9uaWNhbFR5cGVNZW1iZXI8Q29sb3JUeXBlPj46OnR5cGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8g
bWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgYykKIHsKLSAg
ICByZXR1cm4gQ29sb3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworICAgIHJldHVy
biBDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlw
ZW5hbWUgVD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZQpAQCAtOTcsNDYgKzEwNSw1MCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2wKICAgICByZXR1cm4g
eyBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksIGNsYW1wZWRDb21w
b25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIDI+KGNvbXBvbmVudHMpLCBjb21wb25lbnRzWzNdIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRv
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYg
Y29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4o
Y2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBv
bmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50PENvbG9y
VHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBjbGFtcGVk
Q29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHND
bGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQogewogICAgIHJldHVybiBtYWtlRnJv
bUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50
PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBj
bGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBjbGFtcGVkQWxwaGE8VCwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0
PiYgY29tcG9uZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4g
Y29uc3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShjb25z
dCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29s
b3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBUIGMzLCBBbHBoYSBhbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxw
aGE+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGEo
VCBjMSwgVCBjMiwgVCBjMywgQWxwaGEgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGFscGhhIH0pOwogfQogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5S
YW5nZShUIGNvbG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgorY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShD
b2xvclR5cGUgY29sb3IpCiB7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjx0eXBl
bmFtZSBUOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVu
dHNbaV0gPj0gVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAiQ29tcG9uZW50IGF0IGlu
ZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4pOwotICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IFQ6Ok1vZGVsOjpjb21w
b25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3Jl
YXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6
TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4KTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBv
bmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhl
IGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJh
aXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6
Q29tcG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4g
dGhlIGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0
czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShj
b21wb25lbnRzW2ldID49IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAi
Q29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25l
bnRJbmZvW2ldLm1pbik7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tp
XSA8PSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBh
dCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0g
JWYiLCBpLCAgY29tcG9uZW50c1tpXSwgQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tp
XS5tYXgpOwogICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbM10gPj0g
QWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJl
bnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRy
YW5zcGFyZW50KSAlZiIsIGNvbXBvbmVudHNbM10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbXBvbmVudHNbM10gPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUg
YWxsb3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgdWludDhfdD4+KiA9IG51
bGxwdHI+Citjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKENvbG9yVHlwZSkKK3sKK30KKwog
I2Vsc2UKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5n
ZShUKQpAQCAtMTQ2LDcgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2
b2lkIGFzc2VydEluUmFuZ2UoVCkKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5h
bWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21w
b25lbnRzID0gZmFsc2U7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJv
b2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBl
KGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6ZGVjbHZhbDxUPigpKSk+PiA9IHRydWU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JD
b21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6
ZGVjbHZhbDxUPigpLnVucmVzb2x2ZWQoKSkpPj4gPSB0cnVlOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29tcG9uZW50VHlw
ZU1lbWJlciA9IGZhbHNlOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBi
b29sIEhhc0NvbXBvbmVudFR5cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q29t
cG9uZW50VHlwZT4+ID0gdHJ1ZTsKQEAgLTE2Niw5ICsxNzgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAKICAgICAvLyBlLmcuIGF1dG8g
eWVsbG93V2l0aDUwUGVyY2VudEFscGhhID0gQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYUJ5
dGUoMTI4KTsKICAgICBjb25zdGV4cHIgUGFyZW50IGNvbG9yV2l0aEFscGhhQnl0ZSh1aW50OF90
IG92ZXJyaWRlQWxwaGEpIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxQYXJlbnQ+KCkuYWxwaGEpLCB1aW50OF90
PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFBhcmVudDo6Q29tcG9u
ZW50VHlwZSwgdWludDhfdD4sICJPbmx5IHVpbnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1
cHBvcnRlZC4iKTsKIAotICAgICAgICBhdXRvIGNvcHkgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgUGFy
ZW50Kj4odGhpcyk7CisgICAgICAgIGF1dG8gY29weSA9IHN0YXRpY19jYXN0PGNvbnN0IFBhcmVu
dCo+KHRoaXMpLT51bnJlc29sdmVkKCk7CiAgICAgICAgIGNvcHkuYWxwaGEgPSBvdmVycmlkZUFs
cGhhOwogICAgICAgICByZXR1cm4gY29weTsKICAgICB9CkBAIC0xNzgsNyArMTkwLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1Y3QgQ29sb3JXaXRoQWxwaGFIZWxwZXIgCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252
ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yVHlwZSYgYSwgY29uc3QgQ29sb3JUeXBlJiBi
KQogewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYS51bnJlc29sdmVkKCkpID09IGFz
Q29sb3JDb21wb25lbnRzKGIudW5yZXNvbHZlZCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29udmVydGlibGVUb0NvbG9y
Q29tcG9uZW50czxDb2xvclR5cGU+PiogPSBudWxscHRyPgpAQCAtMjAzLDcgKzIxNSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Ci0g
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOworICAgICAgICBhc3NlcnRJblJhbmdlKCpzdGF0
aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7CiAgICAgfQogCiAgICAgY29uc3RleHBy
IFJHQkFUeXBlKCkKQEAgLTIxMSwyMSArMjIzLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAgIHsKICAgICB9CiAKKworICAgIGNv
bnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8
Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIHJlZDsKICAg
ICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBNLCB0eXBl
bmFtZSBURj4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50
cyhjb25zdCBSR0JBVHlwZTxULCBELCBDb2xvclR5cGUsIE0sIFRGPiYgYykKLXsKLSAgICByZXR1
cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Ci19Ci0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdC
QVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OkNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2Rl
ZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rp
b248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3Qg
Qm91bmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+
LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6
UkdCQVR5cGU7CiAKICAgICB1c2luZyBMaW5lYXJDb3VudGVycGFydCA9IEJvdW5kZWRMaW5lYXJF
bmNvZGVkPFQsIEQ+OwogICAgIHVzaW5nIEV4dGVuZGVkQ291bnRlcnBhcnQgPSBFeHRlbmRlZEdh
bW1hRW5jb2RlZDxULCBEPjsKQEAgLTIzNCw4ICsyNDUsOCBAQCBzdHJ1Y3QgQm91bmRlZEdhbW1h
RW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW0KIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlw
ZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1l
IEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNs
YW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9u
PFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJv
dW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBE
PiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1w
bGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46
OlJHQkFUeXBlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6
bGluZWFyVG9YWVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6
eHl6VG9MaW5lYXI7CkBAIC0yNDcsOCArMjU4LDggQEAgc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNv
ZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBEPgotc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OlVuY2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFU
eXBlOworc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5k
ZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRl
ZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5j
dGlvbk1vZGU6OlVuY2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRl
ZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVk
PiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0
aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRl
cnBhcnQgPSBFeHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgQm91bmRlZENv
dW50ZXJwYXJ0ID0gQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPjsKQEAgLTI1Niw4ICsyNjcsOCBA
QCBzdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEcK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRM
aW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+
LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0
aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdC
QVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVs
PFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVu
Y3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJF
bmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JN
b2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Cisg
ICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JN
b2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdC
QVR5cGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5l
YXJUb1hZWjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpU
b0xpbmVhcjsKQEAgLTQzNCwxNyArNDQ1LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBlcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4
cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9
CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2
ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQg
YTsKICAgICBUIGI7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGFi
PFQ+JiBjKQotewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0xhYiA9IHN0ZDo6aXNfc2FtZV92PExhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIExDSEEgQ29sb3IgVHlwZS4KQEAgLTQ2
OSwxNyArNDc5LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHBy
IGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7
IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQg
aHVlOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExDSEE8VD4mIGMp
Ci17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxMQ0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMYWIgQ29sb3IgVHlwZS4KQEAg
LTUwNCwxNyArNTEzLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xhYiA6IENv
bG9yV2l0aEFscGhhSGVscAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNv
bHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3Rl
eHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhp
cyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7
CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMYWI8VD4mIGMpCi17
Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzT0tMYWIg
PSBzdGQ6OmlzX3NhbWVfdjxPS0xhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIE9LTENIQSBDb2xvciBUeXBlLgpAQCAtNTM5LDE3
ICs1NDcsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9LTENIQSA6IENvbG9yV2l0
aEFscGhhSGVsCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkg
Y29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0
byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQor
Citwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7
CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMQ0hBPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
SXNPS0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxPS0xDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogCkBAIC01NzUsMTcgKzU4MiwxNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAg
ICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNv
bHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25z
dCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBU
IGh1ZTsKICAgICBUIHNhdHVyYXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwg
ND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBj
Lmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0hTTEEgPSBzdGQ6
OmlzX3NhbWVfdjxIU0xBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9y
VHlwZT47CiAKIC8vIE1BUks6IC0gSFdCQSBDb2xvciBUeXBlLgpAQCAtNjEwLDE3ICs2MTYsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhXQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBl
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0
ZWQ6CiAgICAgVCBodWU7CiAgICAgVCB3aGl0ZW5lc3M7CiAgICAgVCBibGFja25lc3M7CiAgICAg
VCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFdCQTxUPiYgYykKLXsKLSAgICBy
ZXR1cm4geyBjLmh1ZSwgYy53aGl0ZW5lc3MsIGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFdC
QSA9IHN0ZDo6aXNfc2FtZV92PEhXQkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
PiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBYWVogQ29sb3IgVHlwZS4KQEAgLTY0NSwxNyAr
NjUwLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9pbnQgVz4gc3RydWN0IFhZWkEg
OiBDb2xvcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKwor
cHJvdGVjdGVkOgogICAgIFQgeDsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CiB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBDb2xvckNv
bXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgWFlaQTxULCBXPiYgYykKLXsK
LSAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzWFlaQSA9IHN0ZDo6aXNf
c2FtZV92PFhZWkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBDb2xvclR5cGU6
OndoaXRlUG9pbnQ+LCBDb2xvclR5cGU+OwogCiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpAQCAt
NjY4LDExICs2NzIsMTYgQEAgc3RydWN0IFJHQkEgewogICAgIHsKICAgICB9CiAKLSAgICBjb25z
dGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIg
ZXhwbGljaXQgUkdCQShSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAg
ICAgICAgIDogdmFsdWUgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29sb3IucmVkIDw8IDI0IHwg
Y29sb3IuZ3JlZW4gPDwgMTYgfCBjb2xvci5ibHVlIDw8IDggfCBjb2xvci5hbHBoYSkgfQogICAg
IHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBj
b2xvcikKKyAgICAgICAgOiBSR0JBIHsgY29sb3IucmVzb2x2ZWQoKSB9CisgICAgeworICAgIH0K
KwogICAgIHVpbnQzMl90IHZhbHVlOwogfTsKIApAQCAtNjgyLDggKzY5MSwxMyBAQCBzdHJ1Y3Qg
QVJHQiB7CiAgICAgewogICAgIH0KIAotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yKQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFJlc29sdmVkQ29s
b3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19j
YXN0PHVpbnQzMl90Pihjb2xvci5hbHBoYSA8PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9y
LmdyZWVuIDw8IDggfCBjb2xvci5ibHVlKSB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgICAgICA6IEFSR0IgeyBj
b2xvci5yZXNvbHZlZCgpIH0KICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNSR0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICog
YSwgYSB9OwogfQogCiBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICBy
ZXR1cm4gY29sb3I7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8U1JHQkE8ZmxvYXQ+PihyIC8gYSwgZyAvIGEsIGIgLyBhLCBhKTsKQEAgLTQ0LDcgKzQ0
LDcgQEAgU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yCiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVy
biB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC01NCw3ICs1NCw3IEBAIFNS
R0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjbwogCiBT
UkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxp
bmUgdWludDE2X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aQogCiBTUkdCQTx1aW50
OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7CiAg
ICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8dWlu
dDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGll
ZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSks
IGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYs
MjEgQEAgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0
KTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29s
b3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0
b3ImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1
dG8gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYs
IEZ1bmN0b3ImJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENv
bG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhf
dCBvdmVycmlkZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlk
ZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJp
ZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFs
cGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxw
aGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRl
ZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJy
aWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxw
aGEpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4g
fHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlz
QmxhY2soY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4
dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0
cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8
Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xv
clR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xD
SE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+
IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENv
bG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4g
Y29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29s
b3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5
cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCkBAIC05MywzNSArOTMs
MzUgQEAgdGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4o
ZmxvCiAgICAgcmV0dXJuIGNsYW1wZWRBbHBoYSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmlu
Z0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYg
ZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4g
YXV0byBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgRnVuY3RvciYmIGZ1bmN0b3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXND
b2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAg
ICAgY29weVswXSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBvbmVudHNbMF0pOwogICAgIGNv
cHlbMV0gPSBzdGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzFdKTsKICAgICBjb3B5WzJd
ID0gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBjb21wb25lbnRz
WzJdKTsKLSAgICByZXR1cm4geyBjb3B5WzBdLCBjb3B5WzFdLCBjb3B5WzJdLCBjb3B5WzNdIH07
CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRo
T3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JX
aXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJp
ZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xv
ci51bnJlc29sdmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVy
biBjb3B5OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJp
ZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29s
dmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29s
b3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGlu
dmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVp
bnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIGF1dG8gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29s
b3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTEzMSwxMSArMTMxLDEx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZl
cgogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBpbnZlcnRlZENvbG9yV2l0aE92
ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KQogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsK
IAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAg
ICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDM7ICsraSkKQEAgLTE0NywxOSArMTQ3LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNv
bnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAg
IHJldHVybiBjb2xvci55ID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+
OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZWRDb2xvci55ID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBB
bHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8
IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBj
b25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0
dXJuIGNvbG9yLmxpZ2h0bmVzcyA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZs
b2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7
CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNzID09IDAgJiYgcmVzb2x2ZWRDb2xv
ci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxD
b2xvclR5cGU+fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2Rl
bDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0
byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBjb25zdGV4cHIg
YXV0byBjb21wb25lbnRJbmZvID0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mbzsKICAg
ICByZXR1cm4gYzEgPT0gY29tcG9uZW50SW5mb1swXS5taW4gJiYgYzIgPT0gY29tcG9uZW50SW5m
b1sxXS5taW4gJiYgYzMgPT0gY29tcG9uZW50SW5mb1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQpAQCAt
MTY3LDI0ICsxNjksMjcgQEAgY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNr
KGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmJsYWNrbmVzcyA9
PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAg
YXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2
ZWRDb2xvci5ibGFja25lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFU
cmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0
dXJuIGNvbG9yLnkgPT0gMSAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9w
YXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJl
dHVybiByZXNvbHZlZENvbG9yLnkgPT0gMSAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhh
VHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNl
c0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0
ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4g
Y29sb3IubGlnaHRuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOwor
ICAgIHJldHVybiByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xv
ci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxD
b2xvclR5cGU+IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9k
ZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHBy
IGF1dG8gY29tcG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAg
ICAgcmV0dXJuIGMxID09IGNvbXBvbmVudEluZm9bMF0ubWF4ICYmIGMyID09IGNvbXBvbmVudElu
Zm9bMV0ubWF4ICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWF4ICYmIGFscGhhID09IEFscGhh
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAg
LTE5Miw3ICsxOTcsOCBAQCBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUo
Y29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3Iud2hpdGVuZXNzID09
IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBh
dXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZl
ZENvbG9yLndoaXRlbmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRy
YWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyODc0ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUg
eyAocHVibGljKQogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KTsKKyAg
ICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuYWxwaGEpIHsKICAg
ICAgICAgICAgIHNldFBpeGVsKGRlc3QsIHIsIGcsIGIsIGEpOwpAQCAtMTYwLDcgKzE2MCw3IEBA
IGNsYXNzIEltYWdlQmFja2luZ1N0b3JlIHsgKHB1YmxpYykKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBs
aWVkRmxvb3JpbmcocGl4ZWwpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxv
b3JpbmcocGl4ZWwpLnJlc29sdmVkKCk7CiAKICAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBD
b2xvCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07
CiB9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0VG9WYWx1ZShjb25zdCBDb2xvciYKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHIpLCBA
KGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjwKICAgICAgICAgcmV0dXJu
OwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24u
Z2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsK
LSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBAW0AociksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcgogICAgIGlmIChhbmlt
YXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29tcG9uZW50
cyA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
ICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBj
b21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZl
Y3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFu
aW1hdGlvblNldEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CkBAIC00MjMs
NyArNDIzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKGNvbnN0
IFdlYkNvcmU6CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5y
ZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9
OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3Jl
YXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQo
KSwgdi5nZXQoKSk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
V2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlCiAgICAgICAgIAogICAgIFJldGFpblB0cjxD
Rk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAs
IHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlW2ldLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2
ZWQoKTsKICAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50
cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAgIFJl
dGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEp
KTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBz
cmNDciwgY2Fpcm9fdCogZHMKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3Qq
IGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIAogc3RhdGljIHZvaWQgYWRk
Q29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudENvbG9yU3Rv
cCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZz
ZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShj
YWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3As
IGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fp
cm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcs
IGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3BhY2VSZWYs
IENvbG9yQ29tcG9uZW50czxmbG9hCiAgICAgaWYgKCFjZ0NvbG9yU3BhY2UpIHsKICNpZiBIQVZF
KENPUkVfR1JBUEhJQ1NfRVhURU5ERURfU1JHQl9DT0xPUl9TUEFDRSkKICAgICAgICAgYXV0byBj
b21wb25lbnRzQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29t
cG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkU1JHQkE8Zmxv
YXQ+Pihjb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29sb3IpLnJlc29sdmVkKCkpOwogICAgICAg
ICB9KTsKICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRTUkdCQ29sb3JTcGFjZVJlZigpLCBjb21w
b25lbnRzQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBIH07CiAjZWxzZQogICAgICAgICBhdXRvIGNv
bXBvbmVudHNDb252ZXJ0ZWRUb1NSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29tcG9uZW50cywg
Y29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8Zmxv
YXQ+Pihjb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4geyBz
UkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzQ29udmVydGVkVG9TUkdCQSB9OwogI2VuZGlm
CkBAIC0xNjMsNyArMTYzLDcgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3BhY2VSZWYsIENv
bG9yQ29tcG9uZW50czxmbG9hCiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY3JlYXRl
Q0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3IuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCk7CiAgICAgYXV0byBbY2dDb2xvclNwYWNlLCBjZ0NvbXBhdGlibGVDb21wb25l
bnRzXSA9IGNvbnZlcnRUb0NHQ29tcGF0aWJsZUNvbXBvbmVudHMoY29sb3JTcGFjZSwgY29tcG9u
ZW50cyk7CiAgICAgCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYzRdID0gY2dDb21wYXRpYmxlQ29t
cG9uZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50UmVuZGVyZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDggKzQ3Miw3IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6
U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlRwogICAgIC8vIGV4dGVuZGVkIHNSR0Ig
Zm9yIGFsbCBncmFkaWVudHMuCiAgICAgaWYgKGhhc09ubHlCb3VuZGVkU1JHQkNvbG9yU3RvcHMo
c3RvcHMpKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKSB7Ci0gICAg
ICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKTsKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29t
cG9uZW50czsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgY29s
b3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9u
ZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5j
aGVja2VkQXBwZW5kKGIpOwpAQCAtNDg4LDkgKzQ4Nyw5IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6
U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlRwogCiAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgc3RvcCA6IHN0b3BzKSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNTX0VYVEVOREVEX1NS
R0JfQ09MT1JfU1BBQ0UpCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29s
b3IudG9Db2xvclR5cGVMb3NzeTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oKTsKKyAgICAgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PEV4dGVuZGVk
U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjZWxzZQotICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwor
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjZW5kaWYKICAgICAgICAgICAgIGNvbG9y
Q29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVu
dHMudW5jaGVja2VkQXBwZW5kKGcpOwpAQCAtNTQ2LDcgKzU0NSw3IEBAIHZvaWQgR3JhZGllbnRS
ZW5kZXJlckNHOjpTaGFkaW5nOjpzaGFkaW5nRnVuY3Rpb24odm9pZAogICAgICAgICBtYWtlRnJv
bUNvbXBvbmVudHM8SW50ZXJwb2xhdGlvblNwYWNlQ29sb3JUeXBlPihzdG9wMS5jb2xvckNvbXBv
bmVudHMpLCBvZmZzZXQpOwogCiAgICAgLy8gNC4gQ29udmVydCB0byB0aGUgb3V0cHV0IGNvbG9y
IHNwYWNlLgotICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091dHB1dFNwYWNl
ID0gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91dHB1dFNwYWNlQ29sb3JUeXBlPihp
bnRlcnBvbGF0ZWRDb2xvcikpOworICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRU
b091dHB1dFNwYWNlID0gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91dHB1dFNwYWNl
Q29sb3JUeXBlPihpbnRlcnBvbGF0ZWRDb2xvcikucmVzb2x2ZWQoKSk7CiAKICAgICAvLyA1LiBX
cml0ZSBjb2xvciBjb21wb25lbnRzIHRvICdvdXQnIHBvaW50ZXIuCiAgICAgZm9yIChzaXplX3Qg
Y29tcG9uZW50SW5kZXggPSAwOyBjb21wb25lbnRJbmRleCA8IGludGVycG9sYXRlZENvbG9yQ29u
dmVydGVkVG9PdXRwdXRTcGFjZS5zaXplKCk7ICsrY29tcG9uZW50SW5kZXgpCkBAIC01NjAsNyAr
NTU5LDcgQEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6
Om1ha2VTCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihjb2xvckludGVycG9sYXRp
b25NZXRob2QuY29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICBbJl0gKGF1dG8mIGNvbG9yU3Bh
Y2UpIC0+IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gewogICAgICAgICAgICAgICAgICAgICB1
c2luZyBDb2xvclR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxkZWNsdHlw
ZShjb2xvclNwYWNlKT46OkNvbG9yVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yLnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBl
PigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
LnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGkKICAgICAvLyBTZXQgbGlnaHQgc291cmNl
IGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7CiAKLSAgICBhdXRv
IGNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1
dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBjb2xvci5y
ZWQ7CiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IGNvbG9yLmdyZWVuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MiwxOSArOTIsMTkgQEAgYm9vbCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIEdSQVlTQ0FMRTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nPFNSR0JBPGZsb2F0Pj4oZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBj
b2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheXNjYWxl
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAg
Y29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29s
b3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAg
ICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGh1
ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgY2FzZSBTQVRVUkFURTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1f
YW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxm
bG9hdD4+KHNhdHVyYXRpb25Db2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9v
bCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1DCiB7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIE9QQUNJVFk6Ci0gICAgICAgIGNvbG9yLmFs
cGhhICo9IG1fYW1vdW50OworICAgICAgICBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBo
YShjb2xvciwgc3RkOjpjbGFtcDxmbG9hdD4oY29sb3IucmVzb2x2ZWQoKS5hbHBoYSAqIG1fYW1v
dW50LCAwLjBmLCAxLjBmKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgSU5WRVJU
OiB7CiAgICAgICAgIGZsb2F0IG9uZU1pbnVzQW1vdW50ID0gMS4wZiAtIG1fYW1vdW50OwpAQCAt
Mjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGh1ZVJvdGF0
ZShjb25zdCBDb2xvcgogCiBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJh
bnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIGh1ZVJv
dGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
LCAwLjVmKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIDAuNWYpOwogICAgIAogICAgIC8v
IEFwcGx5IHRoZSBtYXRyaXguIFNlZSByZGFyOi8vcHJvYmxlbS80MTE0NjY1MCBmb3IgaG93IHRo
aXMgbWF0cml4IHdhcyBkZXJpdmVkLgogICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDw1LCAzPiB0
b0RhcmtNb2RlTWF0cml4IHsKQEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEludmVydExpZ2h0bmVz
c0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUMKICAgICAgICAgLTAuMDQ5ZiwgLTEu
MzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0x
LjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2Rl
Q29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9k
ZUNvbXBvbmVudHMgPSB0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSk7CiAKICAgICBhdXRvIGh1ZVJv
dGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVDb21w
b25lbnRzLCAwLjVmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgYm9v
bCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDb2xvciYgY29sb3IpIGNvCiAgICAg
aWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gc1JH
QkFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwogCiAgICAg
Zm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVy
YXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIGJv
b2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yJiBjbwogICAg
IGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1
dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNS
R0JBQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKIAogICAg
IGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3Bl
cmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm0oY29uc3QgTGkKIHsKICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRv
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvUmVzb2x2ZWRDb2xv
ckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CiAgICAg
cGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50
M0QociwgZywgYik7CiAKICAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpk
YXRhLmZpbHRlciwgKmRhdGEucmVzdWx0LCBwYWludGluZ0RhdGEpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw3ICs2Myw3IEBAIGNsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlYwogICAgIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQg
eCwgaW50IHksIGludCB3aWR0aCkgeyByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsgfQogICAg
IHN0YXRpYyBpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykg
eyByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KGNvbXBvbmVudHMpIH07IH0KIAotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhl
bCkpOyB9CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFr
ZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKS5yZXNvbHZlZCgpKTsgfQog
ICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4
dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgQ29sb3I6OkNvbG9yKGNvbnN0
IEdka1JHQkEmIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSAudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQo
KTsKICAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcg
KzI1NCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZgogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRh
dGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENv
bG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0
byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgIGdsVW5pZm9ybTRmKHBy
b2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lk
dGgpOwogCkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1i
ZXIoaW50IG51bWJlciwgY29uc3QgQ29sCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUo
c3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGlu
ZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQxNSw3ICs0MTUs
NyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
UHIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBT
ZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0
dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJl
bXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgICAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAg
Z2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAg
ICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93
LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xV
bmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTczNSw3
ICs3MzUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxv
YXRSZWN0JiAKICAgICBpZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkp
CiAgICAgICAgIHByZXBhcmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNr
KCkucm91bmRlZFJlY3RDb21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJz
ZVRyYW5zZm9ybUNvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsK
IAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKICAgICBnbFVu
aWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChh
IDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7
CkBAIC03NDUsNyArNzQ1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYgCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZ2xDbGVhckNvbG9yKHIs
IGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0
MCwxMyBAQCBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0
b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihy
LCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CiAgICAgcmV0dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNyZWF0ZUJydXNoKElEMkQx
UmVuZGVyVGFyZ2V0KiByCiAgICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fc3RvcHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNlcy4KLSAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVu
dFN0b3BzLnVuY2hlY2tlZEFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQy
RDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjUsNyArMTY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNwZWxsaW5nUGF0dGVybkNv
bG9yID0gQ29sb3I6OnJlZDsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gZ3JhbW1hclBhdHRl
cm5Db2xvciA9IENvbG9yOjpkYXJrR3JlZW47CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFt
bWFyUGF0dGVybkNvbG9yIDogc3BlbGxpbmdQYXR0ZXJuQ29sb3I7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFt
bWFyID8gZ3JhbW1hclBhdHRlcm5Db2xvci5yZXNvbHZlZCgpIDogc3BlbGxpbmdQYXR0ZXJuQ29s
b3IucmVzb2x2ZWQoKTsKICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCBy
LCBnLCBiLCBhKTsKIAogICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2Vy
VG9CYXNlQ1RNKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyAr
MzY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9h
dCBhbmdsCiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRo
R2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsK
ICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9i
YWxBbHBoYSgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk0LDcgKzE1OTQsNyBAQCBjb25zdGV4
cHIgZmxvYXQgZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW4KIENvbG9yIFJl
bmRlclRoZW1lOjpkYXRlUGxhY2Vob2xkZXJUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xv
ciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgdXNpbmcgTENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJl
dHRlciBwZXJjZXB0dWFsIHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2Ft
dXQsIHdoaWNoIGlzIHdoYXQgSFNMQSBkb2VzLgotICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50
b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYSA9IHRleHRDb2xv
ci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgaWYgKHRl
eHRDb2xvci5sdW1pbmFuY2UoKSA8IGJhY2tncm91bmRDb2xvci5sdW1pbmFuY2UoKSkKICAgICAg
ICAgaHNsYS5saWdodG5lc3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3Rt
ZW50RmFjdG9yICogKDEwMC4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEzMDcsNyArMTMwNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50
QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZAogc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29udmV4
R3JhZGllbnQoY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFs
cGhhQ2hhbm5lbCA8IDAuNTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVu
Y3Rpb25JbXBsLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtODEsMTAgKzgxLDEwIEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24g
OiBwdWJsaWMgU1ZHQW5pbWF0aW9uQQogCiAgICAgdm9pZCBhbmltYXRlKFNWR0VsZW1lbnQmLCBm
bG9hdCBwcm9ncmVzcywgdW5zaWduZWQgcmVwZWF0Q291bnQsIENvbG9yJiBhbmltYXRlZCkKICAg
ICB7Ci0gICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09
IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVu
ZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1w
bGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCku
cmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09
IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9Db2xvclR5cGVM
b3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRv
ID0gbV90by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7Cisg
ICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigp
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAg
CiAgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50
LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8ucmVkLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5y
ZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7CiAgICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5p
bWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdy
ZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVlbiwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4p
OwpAQCAtMTAzLDggKzEwMyw4IEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBw
dWJsaWMgU1ZHQW5pbWF0aW9uQQogICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIAotICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBmcm9tQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2lt
cGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNp
bXBsZUZyb20gPSBmcm9tQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICAgICAgZmxvYXQgcmVkID0g
c2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5yZWQ7CiAgICAgICAgIGZsb2F0IGdyZWVuID0gc2lt
cGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdyZWVuOwpAQCAtMTE2LDggKzExNiw4IEBAIGNsYXNz
IFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQQogcHJpdmF0
ZToKICAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50Jikgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhf
dD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3Rv
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgICAg
ICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBv
cGFxdWUuCiAgICAgICAgIG1fdG8gPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1
aW50OF90Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsg
c2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0wMS0wMiAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2ZWQgY29sb3Ig
dHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBhYm91dCB3aGV0
aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdXNlcyBv
ZiBDb2xvcjo6dG9TUkdCQUxvc3N5PD4oKSB3aXRoIENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPD4+KCkgYW5kIGFkZAorICAgICAgICBjYWxscyB0byByZXNvbHZlZCgpIHRvIGFjY2VzcyBj
b2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9u
L1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHA6CisgICAgICAgIChkcmF3UGFnZUJhY2tncm91
bmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAg
ICAgKHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmll
d0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1t
OgorICAgICAgICAoV2ViS2l0OjphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIxLTEyLTI2ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIFdlYktpdC9D
b2NvYUNvbG9yLmggd2l0aCBXZWJDb3JlL0NvbG9yQ29jb2EuaCwgbm90IGNvbmZ1c2luZyBhdCBh
bGwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFn
ZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAkocmV2
aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRp
b24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UGFnZUJhY2tncm91bmQoY2Fpcm9fdCogY3R4LCBjb25z
dCBzdGQKICAgICBpZiAoIWJhY2tncm91bmRDb2xvciB8fCBiYWNrZ3JvdW5kQ29sb3IudmFsdWUo
KS5pc1Zpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGNhaXJvX3NldF9zb3VyY2Vf
cmdiYShjdHgsIHIsIGcsIGIsIGEpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjdHgsIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZy
b21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6Q28KIHsKICAgICBSRUxFQVNFX0FTU0VSVCh3
ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29y
ZUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdl
YkNvcmVDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIGNvbG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAgY29sb3ItPmJs
dWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGCiAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkp
IHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gY29s
b3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CiAjaWYgVVNFKEdUSzQpCiAgICAgICAgICAgICAgICAgR2RrUkdCQSByZ2JhID0geyBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OwogICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBl
U25hcHNob3RQYXR0ZXJuID0gYWRvcHRHUmVmKGdza19jb2xvcl9ub2RlX25ldygmcmdiYSwgJmJv
dW5kcykpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgYm9v
bCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91YmxlKiByZWQsCiAgICAg
aWYgKCFiZ0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICAqcmVkID0gcjsKICAgICAqZ3JlZW4gPSBnOwogICAgICpibHVlID0g
YjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNPYmplY3Q+
IGFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVgogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGtl
eWZyYW1lVmFsdWUsCiAgICAgICAgIFsmXShjb25zdCBmbG9hdCBudW1iZXIpIC0+IFJldGFpblB0
cjxOU09iamVjdD4geyByZXR1cm4gQChudW1iZXIpOyB9LAogICAgICAgICBbJl0oY29uc3QgV2Vi
Q29yZTo6Q29sb3IgY29sb3IpIC0+IFJldGFpblB0cjxOU09iamVjdD4gewotICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSAgY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICByZXR1cm4gQFsgQChyKSwgQChn
KSwgQChiKSwgQChhKSBdOwogICAgICAgICB9LAogICAgICAgICBbJl0oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludDNEIHBvaW50KSAtPiBSZXRhaW5QdHI8TlNPYmplY3Q+IHsKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzUy
MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDIyLTAxLTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
cmVzb2x2ZWQvdW5yZXNvbHZlZCBjb2xvciB0eXBlIGFjY2Vzc29ycyB0byByZXF1aXJlIHVzZXJz
IHRvIGJlIGV4cGxpY2l0IGFib3V0IHdoZXRoZXIgdGhleSB3aWxsIGhhbmRsZSBtaXNzaW5nL25v
bmUgY29sb3IgY29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9m
IENvbG9yOjp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29sb3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8Pj4oKSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRvIHJlc29sdmVkKCkgdG8gYWNjZXNzIGNv
bG9yIGNvbXBvbmVudHMuIEFsc28gdXBkYXRlIHRvIG5ldyBuYW1lIG9mIGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCksCisgICAgICAgIGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50
cygpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RH
cmFwaGljc0NvbnRleHRHTENvY29hLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hhbmdl
Q29udGV4dENvbnRlbnRzKToKKyAgICAgICAgUmVwbGFjZSB1bm5lY2Vzc2FyeSB1c2Ugb2YgY29s
b3JTcGFjZUFuZENvbXBvbmVudHMoKSB3aXRoIHRoZSBtb3JlIGNvbW1vbiB0b0NvbG9yVHlwZUxv
c3N5PFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpLgorCiAyMDIyLTAxLTAxICBK
ZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgbWFrZSBTaGFyZWRC
dWZmZXI6OmNvcHkoKSByZXR1cm4gYSBjb250aWd1b3VzIFNoYXJlZEJ1ZmZlcgpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2
aXNpb24gMjg3NDgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OndoaXRlOwogCi0gICAg
YXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwor
ICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4o
KS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC01Nyw3ICs1
Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxv
c3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5
cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0
dXJhdGlvbik7CkBAIC03Myw3ICs3Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsK
ICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpyZWQ7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3Ig
PSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtODksNyArODksNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9HcmVlbikKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmVlbjsKIAot
ICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4o
KTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9h
dD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAsIGhzbGFDb2xvci5o
dWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAg
LTEwNSw3ICsxMDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewogICAgIENvbG9y
IGNvbG9yID0gQ29sb3I6OmJsdWU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50
b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMjQwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBo
c2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMjEsNyArMTIxLDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfRGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAK
LSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+
KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1
ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEz
Nyw3ICsxMzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogewogICAgIENvbG9yIGNv
bG9yID0gQ29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9M
aWdodEdyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAg
YXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwor
ICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4o
KS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xODEsNyAr
MTgxLDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAKICAgICB2YWxpZENvbG9yID0gU1JHQkE8
dWludDhfdD4geyAxLCAyLCAzLCA0IH07CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1Zh
bGlkKCkpOwotICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENvbG9yLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxp
ZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEo
dmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9y
Q29tcG9uZW50cy5ibHVlLCAzKTsKQEAgLTE4OSw3ICsxODksNyBAQCBURVNUKENvbG9yLCBWYWxp
ZGl0eSkKIAogICAgIENvbG9yIHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xv
cikpOwogICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0g
ICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5ZXRBbm90aGVyVmFsaWRD
b2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIHlldEFub3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlk
Q29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBURVNUKENvbG9yLCBW
YWxpZGl0eSkKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlk
Q29sb3IpOwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAg
IGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JB
TG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBv
dGhlclZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAg
ICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwogICAgIEVY
UEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMjA5LDIwICsy
MDksMjAgQEAgVEVTVChDb2xvciwgTHVtaW5hbmNlKQogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xv
cihDb2xvcjo6YmxhY2spLmx1bWluYW5jZSgpLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29s
b3IoQ29sb3I6OndoaXRlKS5sdW1pbmFuY2UoKSwgMSk7CiAKLSAgICBhdXRvIGNDb21wb25lbnRz
ID0gU1JHQkE8dWludDhfdD4geyA4NSwgOTAsIDE2MCB9OworICAgIGF1dG8gY0NvbXBvbmVudHMg
PSBTUkdCQTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH0ucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoQ29sb3IoY0NvbXBvbmVudHMpLmx1bWluYW5jZSgpLCAwLjExNzgxNDU1KTsKIAog
ICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKICAgICBFWFBFQ1RfRVEoY0NvbXBv
bmVudHMuZ3JlZW4sIDkwKTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsK
IAotICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmxpZ2h0ZW5lZCgpLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBv
bmVudHMpLmxpZ2h0ZW5lZCgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVz
b2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFuY2Uo
KSwgMC4yOTE2ODIpOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkLCAxMzApOwogICAgIEVY
UEVDVF9FUShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5i
bHVlLCAyNDQpOwogCi0gICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjQ29tcG9uZW50cykuZGFy
a2VuZWQoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENv
bG9yKGNDb21wb25lbnRzKS5kYXJrZW5lZCgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5s
dW1pbmFuY2UoKSwgMC4wMjcwMDYyNDIpOwogICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0
MCk7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVlbiwgNDMpOwpAQCAtMjMzLDcgKzIzMyw3
IEBAIFRFU1QoQ29sb3IsIENvbnN0cnVjdG9yKQogewogICAgIENvbG9yIGMxIHsgRGlzcGxheVAz
PGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogCi0gICAgYXV0byBbY29sb3JTcGFj
ZSwgY29tcG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8g
W2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzEuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKIAog
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIFRFU1QoQ29s
b3IsIENvcHlDb25zdHJ1Y3RvcikKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xvciBjMihjMSk7CiAKLSAgICBhdXRvIFtj
b2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Cisg
ICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2
ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25l
bnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0yNjMsNyArMjYzLDcgQEAg
VEVTVChDb2xvciwgQXNzaWdubWVudCkKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xvciBjMiA9IGMxOwogCi0gICAgYXV0
byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
OworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJl
c29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29t
cG9uZW50czsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMzIzLDcgKzMyMyw3
IEBAIFRFU1QoQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKICAgICAvLyBhbmQgc2V0IGMxIHRvIGlu
dmFsaWQgc28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRlbGV0aW9uLgogICAgIEVYUEVDVF9GQUxT
RShjMS5pc1ZhbGlkKCkpOwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBj
Mi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBv
bmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAg
RVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAKICAgICBhdXRv
IFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIFRFU1Qo
Q29sb3IsIE1vdmVBc3NpZ25tZW50KQogICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0
aGF0IGl0IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAgICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFs
aWQoKSk7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBj
Mi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKIAogICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGNvbXBvbmVudHM7CkBAIC0zNzAsNyArMzcwLDcgQEAgVEVTVChDb2xvciwgUmV0
dXJuVmFsdWVzKQogVEVTVChDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogewogICAgIENvbG9y
IHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9Owot
ICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+
KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYp
OwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzMjgyZik7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxMjc0OGYpOwpAQCAtMzgw
LDcgKzM4MCw3IEBAIFRFU1QoQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIFRFU1QoQ29sb3Is
IExpbmVhclNSR0JDb252ZXJzaW9uVG9TUkdCKQogewogICAgIENvbG9yIGxpbmVhclNSR0JBQ29s
b3IgeyBMaW5lYXJTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAg
YXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CisgICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNv
bG9yLnJlZCwgMS4wZik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAu
NzM1MzU2OTI3Zik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC41Mzcw
OTg3MDZmKTsKQEAgLTM5OCw3ICszOTgsNyBAQCBURVNUKENvbG9yLCBDb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeSkKIAogICAgIHsKICAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLjUpOwotICAgICAgICBh
dXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNv
bXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZFJlc29s
dmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xv
clNwYWNlOjpTUkdCKTsKICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwog
ICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwpAQCAtNDA5LDcgKzQwOSw3IEBAIFRFU1Qo
Q29sb3IsIENvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KQogCiAgICAgewogICAgICAgICBDb2xv
ciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KDAuKTsKLSAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgICAg
ICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5LmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgICAgICBFWFBF
Q1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gY29tcG9uZW50czsKICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHIsIDAuKTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0JKHJldmlzaW9uIDI4
NzQ4MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3Jh
cGhpY3NDb250ZXh0R0xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOCBAQCBz
dGF0aWMgOjp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgY2hhbmdlQ29udGV4dENvbnRlbnQKIHsK
ICAgICBjb250ZXh0Lm1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgIFdlYkNvcmU6OkNvbG9yIGV4
cGVjdGVkIHsgaXRlcmF0aW9uICUgMiA/IFdlYkNvcmU6OkNvbG9yOjpncmVlbiA6IFdlYkNvcmU6
OkNvbG9yOjp5ZWxsb3cgfTsKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGV4
cGVjdGVkLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKGNv
bG9yU3BhY2UpOwotICAgIGNvbnRleHQuY2xlYXJDb2xvcihjb21wb25lbnRzWzBdLCBjb21wb25l
bnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGV4cGVjdGVkLnRvQ29sb3JUeXBlTG9zc3k8V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CisgICAgY29udGV4dC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGNv
bnRleHQuY2xlYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQp
OwogICAgIHVpbnQ4X3QgZ290VmFsdWVzWzRdID0geyB9OwogICAgIGF1dG8gc2FtcGxlQXQgPSBj
b250ZXh0LmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7Cg==
</data>
<flag name="commit-queue"
          id="474021"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448197</attachid>
            <date>2022-01-02 18:02:47 -0800</date>
            <delta_ts>2022-01-02 19:34:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved6.diff</filename>
            <type>text/plain</type>
            <size>160263</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4CiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50Zigicmdi
ICU3LjVmICU3LjVmICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVl
KTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3Bp
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBj
b25zdAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKGF4T2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1
dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4
T2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOwogICAgIH0KQEAgLTgyNCwxMyArODI0
LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJp
bGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgaWYgKGJnQ29s
b3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLi50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci4udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjI4LDcgKzIy
NSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lkIHNldENvbG9yKFNSR0JBPHVp
bnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAgICAgdm9p
ZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xv
clNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAKLSAgICBT
UkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBhY2tlZENvbG9yOjpSR0JBIGFz
UGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBh
c091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogaW5saW5lIGJvb2wgb3V0T2ZM
aW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAg
ICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVy
biBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25l
bnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5mbGFncygpID09
IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEu
Y29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7
CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGluZSBib29sIG91dE9mTGluZUNv
bXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkg
JiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0g
Q29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgICAgIGF1dG8gYkZs
YWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRP
ZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkg
JiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50
cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGFGbGFncyA9PSBiRmxh
Z3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5l
KCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9yOjpDb2xvcihzdGQ6Om9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xv
clR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldE91dE9mTGluZUNvbXBvbmVu
dHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSks
IENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3Mp
KTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0
ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxD
b2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8Rmxh
Z3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoKmNvbG9y
KSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxh
Z3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRz
OjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVzb2x2ZWQoKSkpLCBDb2xvclNw
YWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAK
IGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5l
Q29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdz
KQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JT
cGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCku
dG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUs
IGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JT
cGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1
bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBj
YWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgp
LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gY2FsbFdp
dGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNw
YWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAK
QEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVu
dHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50
cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFz
SW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4g
Q29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Ci0gICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoYXNQ
YWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5lIFBhY2tlZENvbG9yOjpSR0JB
IENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUsNyArNTYyLDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgICAg
IGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1dG8mIG91dE9mTGluZUNvbXBv
bmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJlc29sdmVkQ29tcG9uZW50cygp
OwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVyIDw8IGMyOwogICAgICAg
ICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFj
a2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlzaWJsZSgpKQogICAgICAgICBy
ZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ry
b3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
YXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tk
cm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBz
b3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29s
dmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5n
QiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiByZXN1bHQ7CiAgICAgZm9yIChp
bnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJ
bmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNvbnRleHQucHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBwcmVt
dWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRv
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGll
ZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKIAogICAg
IGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxT
UkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5y
ZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAtMTE3LDggKzExNyw4IEBAIENv
bG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdAogICAg
IGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRvU1JHQiA9IHRvLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBhdXRvIGJsZW5kZWQg
PSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQpLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHN0cnVjdCBD
b2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1hcChGJiYgZnVuY3Rpb24pIGNv
bnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlvbihzdGQ6OmRlY2x2YWw8VD4o
KSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29u
c3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3Bl
cmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IrKFQp
IGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IvKFQpIGNvbnN0
OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBvbmVudHM8VCwgTj46Om9wZXJh
dG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAgICAgKnRoaXMgPSBtYXBDb2xv
ckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEgKyBjMjsgfSwgKnRoaXMsIHJo
cyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
Tj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBO
Pjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgqdGhpcyAvIHJocyk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBMQ0hMaWtlLCB0
eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xhckZvcm0oY29uc3QgTGFiTGlr
ZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
bGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRhbjIoY29sb3IuYiwgY29sb3Iu
YSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0bmVzcywKLSAgICAgICAgc3Rk
OjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVlID49IDAgPyBodWUgOiBodWUg
KyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAgICBmbG9hdCBodWUgPSByYWQy
ZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBzdGQ6Omh5cG90KGEsIGIpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+PSAwID8gaHVlIDogaHVlICsg
MzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYWJMaWtlLCB0eXBlbmFtZSBM
Q0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZvcm0oY29uc3QgTENITGlrZSYg
Y29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jbGNo
LXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRlZzJyYWQoY29sb3IuaHVlKTsK
KyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBj
b2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5j
aHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5hbHBoYQot
ICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChodWUpOworICAgIGZs
b2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpOworICAgIGZsb2F0IGIg
PSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOworCisgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBIU0wgY29udmVyc2lvbnMuCkBA
IC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCB7CiAgICAgZmxv
YXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0
ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW21pbiwgbWF4XSA9
IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47
CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1
bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsK
ICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IK
LSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAgICBhdXRvIFtodWUsIG1pbiwg
bWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAgICBmbG9hdCBsaWdodG5lc3Mg
PSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwpA
QCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0
PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9h
dD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCi0g
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOworICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IGxpZ2h0
bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1
bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3IucmVz
b2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWluICogMTAwLjBmOwogICAgIGF1
dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwogICAgIAotICAgIHJldHVybiB7
IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsg
aHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBI
V0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVz
cywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3aGl0ZW5lc3MgKyBibGFja25l
c3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAvIDEwMC4wZjsK
QEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1
ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IENvbG9y
Q29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+LCBMYWI8ZmxvYXQ+Pjo6Y29u
dmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBmbG9hdCBmMSA9IChjb2xvci5s
aWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQgZjAgPSBmMSArIChjb2xvci5h
IC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9yLmIgLyAyMDAuMGYpOworICAg
IGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAorICAg
IGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4wZjsKKyAgICBmbG9hdCBmMCA9
IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEgLSAoYiAvIDIwMC4wZik7CisK
ICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsKICAgICAgICAgZmxvYXQgdEN1
YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4gTEFCZSkKQEAgLTI0NywzMSAr
MjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJzaW9uPFhZ
WkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hpdGVWYWx1ZXNbMF0gKiBjb21w
dXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZhbHVlc1sxXSAqIGNvbXB1dGVZ
KGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29t
cHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hpdGVWYWx1ZXNbMl0gKiBjb21w
dXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAg
ICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Pjo6Y29udmVydChj
b25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvcikKIHsKLSAgICBmbG9hdCB4
ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZsb2F0IHkgPSBjb2xvci55IC8g
RDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9yLnogLyBENTBXaGl0ZVZhbHVl
c1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisg
ICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVzWzBdOworICAgIGZsb2F0IGFk
anVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBmbG9hdCBhZGp1c3RlZFogPSB6
IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFuc2Zvcm0gPSBbXShmbG9hdCB2
YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8gc3RkOjpjYnJ0KHZhbHVlKSA6
IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAgfTsKIAotICAgIGZsb2F0IGYw
ID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFuc2Zvcm0oeSk7Ci0gICAgZmxv
YXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3RlZFkpOworICAgIGZsb2F0IGYy
ID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQgbGlnaHRuZXNzID0gKDExNi4w
ZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYgKiAoZjAgLSBmMSk7CiAgICAg
ZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJldHVybiB7IGxpZ2h0bmVzcywg
YSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGFscGhh
IH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAgLTMwOCw5ICszMDksMTAgQEAg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAg
ICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0ODQxODIwOTQ5NjU3NTk2ODRm
LCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAgICBhdXRvIFtsaWdodG5lc3Ms
IGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAgICAvLyAxLiBUcmFuc2Zvcm0g
ZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0bmVzcy4KLSAgICBhdXRvIGNv
bXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7CisgICAgYXV0byBjb21wb25l
bnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0bmVzcyAvIDEwMC4wZiwgYSwg
YiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNvb3JkaW5hdGVzIGludG8gbm9u
LWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2VzIi4KICAgICBhdXRvIG5vbkxp
bmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
Y29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8gNC4gQ29udmVydCB0byBYWVou
CiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2NS50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxw
aGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBPS0xhYjxmbG9hdD4g
Q29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1
Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiYgY29sb3IpCkBA
IC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8Zmxv
YXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFmLCAgMC43ODI3NzE3NjYyZiwg
LTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwgeSwgeiwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFlaIGludG8gTE1TICJhcHByb3hp
bWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVh
ckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvciku
c3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0gWFlaRDY1VG9MaW5lYXJMTVMu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IHgs
IHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFyaXR5LgogICAgIGF1dG8gbm9u
TGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikgeyByZXR1cm4gc3RkOjpjYnJ0
KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9u
PE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFtsaWdodG5lc3MsIGEsIGJdID0g
Tm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhub25MaW5lYXJM
TVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBmcm9tIHVuaXQgbGlnaHRuZXNz
IHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4w
ZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MgKiAxMDAuMGYs
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNvbnZlcnNpb25zLgpAQCAtMzcx
LDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4s
IE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29s
b3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMs
IENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
Y29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3Bh
Y2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9y
U3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
aW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwgW291dHB1dENvbG9yU3BhY2Vd
IChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3aXRjaCAob3V0cHV0Q29sb3JT
cGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4UkdCPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0
ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZEE5OFJHQjxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4
dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWREaXNw
bGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3RvUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdC
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRSZWMyMDIwOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRl
ZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAyMDxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkU1JHQjoK
LSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhTTDoKLSAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxDSDoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8Zmxv
YXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpP
S0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFByb1Bob3RvUkdCPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAg
ICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8
ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUwOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENjU6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdo
aXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0
cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgcmV0dXJuIHBs
YXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGlucHV0Q29sb3JD
b21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwxOSArNDM0LDE5IEBAIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvcgogICAgIHJl
dHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNw
YWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAg
ICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpKSB7CiAgICAg
ICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdCOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xv
clNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAgICAgICBjYXNlIFBsYXRmb3Jt
Q29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQ
MzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgZW51bSBjbGFzcyBDb2xv
clNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5w
dXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKTsKIAogLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRzIHdpdGggYXNzb2NpYXRlZCBj
b2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFj
ZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNv
bXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSk7
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpOworQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVyIHRoYW4gWFlaQSBvciB0aG9z
ZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1lbnQKQEAgLTU3LDcgKzU3LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgPSB2
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IGlubGluZSBPdXRw
dXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3JD
b252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0KGNvbG9yKTsKKyAgICByZXR1cm4gQ29s
b3JDb252ZXJzaW9uPENhbm9uaWNhbENvbG9yVHlwZTxPdXRwdXQ+LCBDYW5vbmljYWxDb2xvclR5
cGU8SW5wdXQ+Pjo6Y29udmVydChjb2xvcik7CiB9CiAKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lPiBzdAogCiAg
ICAgICAgIHVzaW5nIElucHV0V2l0aFJlcGxhY2VtZW50ID0gQ29sb3JUeXBlV2l0aFJlcGxhY2Vt
ZW50Q29tcG9uZW50PElucHV0LCBmbG9hdD47CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8SW5wdXRXaXRoUmVwbGFjZW1lbnQsIE91dHB1dD4pCi0gICAgICAgICAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHZhbHVl
IC8gMjU1LjBmOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPElu
cHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKS5t
YXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUuMGY7IH0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxPdXRwdXQ+
KGNvbnZlcnRDb2xvcjxJbnB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CkBAIC0y
MTksMzEgKzIxOSwzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0
LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBPdXRwdXRXaXRoUmVwbGFjZW1lbnQgPSBD
b2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21wb25lbnQ8T3V0cHV0LCBmbG9hdD47CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3V0cHV0V2l0aFJlcGxhY2VtZW50LCBJbnB1
dD4pCi0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpLm1hcChbXShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7IHJldHVy
biBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOyB9KSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xvckNv
bXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90
IHsgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1
bCk7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxP
dXRwdXQ+KGNvbnZlcnRDb2xvcjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQ+KGNvbG9yKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0
ZXhwciBhdXRvIHRvTGluZWFyRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBl
bmFtZSBDb2xvclR5cGU6OkxpbmVhckNvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29sb3JUeXBlOjpUcmFu
c2ZlckZ1bmN0aW9uOjp0b0xpbmVhcihjMSksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6
dG9MaW5lYXIoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMzKSwg
YWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9HYW1tYUVuY29kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpHYW1tYUVuY29kZWRDb3VudGVycGFydAogICAg
IHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVy
biB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzEpLCBDb2xv
clR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMyKSwgQ29sb3JUeXBlOjpU
cmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMyksIGFscGhhIH07CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIHRvRXh0ZW5kZWQoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czx0
eXBlbmFtZSBDb2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9Cb3VuZGVkKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0CiAg
ICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhj
ZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5l
IGNvbnN0ZXhwciBPdXRwdXQgaGFuZGxlUkdCRmFtaWx5Q29udmVyc2lvbihjb25zdCBJbnB1dCYg
Y29sb3IpCkBAIC0zMTIsNyArMzEyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBl
bmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAgICAgICAgIC8vIGhhdmUgc3VmZmljaWVudCB0ZXN0
aW5nIGNvdmVyYWdlIHRvIG5vdGljZSBhbnkgYWR2ZXJzZSBlZmZlY3RzLgogCiAgICAgICAgIGF1
dG8gYXBwbHlNYXRyaWNlcyA9IFtdKGNvbnN0IElucHV0JiBjb2xvciwgYXV0by4uLiBtYXRyaWNl
cykgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpLCBtYXRyaWNlcy4uLikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIG1hdHJpY2Vz
Li4uKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgY29uc3RleHByIChJbnB1dDo6d2hpdGVQ
b2ludCA9PSBPdXRwdXQ6OndoaXRlUG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9s
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHRlbXBsYXRlPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbgogdHlwZW5hbWUgSW50ZXJw
b2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9u
ZW50cyhJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSBpbnRlcnBvbGF0aW9uTWV0aG9kQ29s
b3JTcGFjZSwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlw
ZSBjb2xvcjEsIGRvdWJsZSBjb2xvcjFNdWx0aXBsaWVyLCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9yMiwgZG91YmxlIGNvbG9yMk11bHRpcGxp
ZXIpCiB7CiAgICAgLy8gMS4gQXBwbHkgcHJlLWludGVycG9sYXRpb24gdHJhbnNmb3JtcyAoaHVl
IGZpeHVwIGZvciBwb2xhciBjb2xvciBzcGFjZXMsIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIGlm
IHJlcXVpcmVkKS4KLSAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JDb21wb25lbnRzMSwgbm9ybWFs
aXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlvbk5vcm1hbGl6YXRpb248YWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2UsIGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yMSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMikpOworICAgIGF1
dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29sb3JDb21wb25lbnRz
Ml0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11bHRpcGxpY2F0aW9u
PihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3Ix
LnJlc29sdmVkKCkpLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjIucmVzb2x2ZWQoKSkpOwogCiAg
ICAgLy8gMi4gSW50ZXJwb2xhdGUgdXNpbmcgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50cy4KICAg
ICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29tcG9uZW50cyA9IG1hcENvbG9yQ29tcG9uZW50cyhb
Jl0gKGF1dG8gY29tcG9uZW50RnJvbUNvbG9yMSwgYXV0byBjb21wb25lbnRGcm9tQ29sb3IyKSAt
PiBmbG9hdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1
bWluYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yTHVtaW5hbmNlLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgZG91YmxlIHJlbGF0
aXZlTHVtCiAgICAgLy8gdGhpcyBpbiBDb2xvckNvbnZlcnNpb24uaCBhcyBhIHNpYmxpbmcgZnVu
Y3Rpb24gdG8gY29udmVydENvbG9yIHdoaWNoIGNhbiBnZXQgYSBjaGFubmVsCiAgICAgLy8gb2Yg
YSBjb2xvciBpbiBhbm90aGVyIHNwYWNlIGluIHRoaXMga2luZCBvZiBvcHRpbWFsIHdheS4KIAot
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oY29s
b3IpLnk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpE
NjU+Pihjb2xvcikucmVzb2x2ZWQoKS55OwogfQogCiBpbmxpbmUgZG91YmxlIGNvbnRyYXN0UmF0
aW8oZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQSwgZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JNb2RlbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDkzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBSR0JCb3VuZGVkbmVzcyB7IEJvdW5kZWQsIEV4
dGVuZGVkIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lLCBSR0JCb3VuZGVkbmVzcz4gc3RydWN0IFJH
Qk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRyYWl0czsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvOwotdGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xN
b2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IExDSE1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2Rl
bDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IFhZWk1vZGVsOwogCisvLyBNQVJLOiBSZXNvbHZlZC9VbnJlc29sdmVkIERlZmlu
dGl0aW9ucwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yTW9k
ZWwgPSB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlOwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5
cGU8Q29sb3JUeXBlPiByZXNvbHZlZENvbG9yKENvbG9yVHlwZSBpbnB1dCkKK3sKKyAgICByZXR1
cm4gUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPiB1bnJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBVbnJl
c29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4geyBpbnB1dCB9OworfQorCitpbmxpbmUgY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAg
IHJldHVybiBjb2xvckNvbXBvbmVudHM7Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4mIGNvbG9yQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29sb3JDb21w
b25lbnRzLm1hcChbXSAoZmxvYXQgY29tcG9uZW50KSB7IHJldHVybiBzdGQ6OmlzbmFuKGNvbXBv
bmVudCkgPyAwLjBmIDogY29tcG9uZW50OyB9KTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0cnVjdCBSZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgcmVzb2x2ZWQoKSBvciB1bnJlc29s
dmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSByZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3
ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXRzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8g
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5cGU8Qz4gcmVz
b2x2ZWRDb2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlw
ZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgcmVzb2x2ZShjb2xvcikgfQorICAgIHsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIEM6OkNvbXBvbmVudFR5cGUsIGZsb2F0Pj4qID0gbnVs
bHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQorICAgIHsKKyAg
ICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gcmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhFeHBvc2VkQ29sb3JUeXBlPEMsIHR5cGVuYW1lIEM6Ok1vZGVsPiB7
IGNvbG9yIH0pKTsKKyAgICAgICAgcmV0dXJuIENvbG9yVHlwZSB7IGMxLCBjMiwgYzMsIGFscGhh
IH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDOjpDb21wb25lbnRUeXBlLCB1aW50OF90
Pj4qID0gbnVsbHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RydWN0IFVucmVzb2x2ZWRDb2xvclR5cGUgOiBFeHBvc2VkQ29sb3JU
eXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geworICAgIHVzaW5nIENh
bm9uaWNhbFR5cGUgPSBDb2xvclR5cGU7CisKKyAgICAvLyBDYWxsaW5nIHVucmVzb2x2ZWQoKSBv
biBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHVucmVzb2x2ZWQgaXMgYSBuby1vcCwgc28gd2UgY2Fu
CisgICAgLy8ganVzdCByZXR1cm4gb3V0c2VsdmVzLgorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVz
b2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxDPiB1bnJl
c29sdmVkQ29sb3IoQyk7CisKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9y
VHlwZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5
cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3IgfQorICAgIHsKKyAgICB9Cit9
OworCisKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgc3VwcG9ydCB0eXBlcy4KKwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IHRyYW5zcGFyZW50ID0gMC4wZjsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG9wYXF1ZSA9
IDEuMGY7CkBAIC02OCwxNyArMTQ0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bG9yQ29tcG9uZW50SW5mbyB7CiAgICAgQ29sb3JDb21wb25lbnRUeXBlIHR5cGU7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsPGZsb2F0PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVu
dEluZm8geyB7Ci0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25l
bnRUeXBlOjpOdW1iZXIgfSwKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xv
ckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KLSAgICB9IH07Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rh
bmd1bGFyT3J0aG9nb25hbDsKLX07CisvLyBNQVJLOiAtIENvbG9yIE1vZGVsIERlZmluaXRpdGlv
bnMKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
VXNlc0V4dGVuZGVkUkdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBFeHRlbmRlZFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT4+OworLy8gTUFSSzogSFNMTW9kZWwKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8Zmxv
YXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZv
PGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKQEAgLTkwLDggKzE1OCwyMiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2Fs
UG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOworICAgIHVz
aW5nIENvbG9yVHlwZTo6c2F0dXJhdGlvbjsKKyAgICB1c2luZyBDb2xvclR5cGU6OmxpZ2h0bmVz
czsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFz
Q29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIU0xNb2Rl
bDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlvbiwgYy5saWdodG5l
c3MsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc0hTTE1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CiAKKy8vIE1BUks6IEhXQk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1vZGVsPGZs
b2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5m
bzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgMzYwLCBDb2xvckNv
bXBvbmVudFR5cGU6OkFuZ2xlIH0sCkBAIC0xMDIsOCArMTg0LDIyIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEhXQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjp3aGl0ZW5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpibGFja25lc3M7CisgICAg
dXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29t
cG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFdCTW9kZWw8VD4+JiBj
KQoreworICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFja25lc3MsIGMuYWxw
aGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgVXNlc0hXQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbCwgSFdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKKy8v
IE1BUks6IExhYk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4s
IDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMTQs
OCArMjEwLDIyIEBAIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0
ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExhYk1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmE7CisgICAgdXNp
bmcgQ29sb3JUeXBlOjpiOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGUsIExhYk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5h
LCBjLmIsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgVXNlc0xhYk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUg
Q29sb3JUeXBlOjpNb2RlbCwgTGFiTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlPj47CiAKKy8vIE1BUks6IExDSE1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVs
PGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVy
IH0sCkBAIC0xMjYsOSArMjM2LDIzIEBAIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMQ0hN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpjaHJv
bWE7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBo
YTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgTENITW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMu
bGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0xDSE1vZGVsID0gc3Rk
Ojppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgTENITW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVs
PGZsb2F0PiB7CisvLyBNQVJLOiBSR0JNb2RlbAorCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2Rl
bDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7
IHsKICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAg
ICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMzgsNyArMjYyLDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpS
ZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1
aW50OF90PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90LCBSR0JCb3VuZGVk
bmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNv
bXBvbmVudEluZm88dWludDhfdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwg
MjU1LCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAgICB7IDAsIDI1NSwgQ29s
b3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTE0OCw4ICsyNzIsMzUgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFy
T3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNv
bnN0ZXhwciBib29sIFVzZXNSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9y
VHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+
OwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5kZWRuZXNzOjpFeHRl
bmRlZD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudElu
Zm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgeworICAgICAgICB7IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCisgICAgICAgIHsgLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKKyAgICAgICAg
eyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VD
b29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Cit9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIFJHQkJvdW5kZWRuZXNzIGJvdW5kZWRuZXNzPiBzdHJ1Y3QgRXhw
b3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZSwgYm91bmRlZG5lc3M+PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JU
eXBlOjpyZWQ7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpncmVlbjsKKyAgICB1c2luZyBDb2xvclR5
cGU6OmJsdWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3MgYm91bmRlZG5lc3M+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPFQsIGJvdW5kZWRuZXNzPj4mIGMp
Cit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2Vz
UkdCTW9kZWwgPQorICAgICAgIHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9k
ZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdCQm91bmRl
ZG5lc3M6OkJvdW5kZWQ+PgorICAgIHx8IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlw
ZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdC
Qm91bmRlZG5lc3M6OkV4dGVuZGVkPj47CisKKworLy8gTUFSSzogWFlaTW9kZWwKKwogdGVtcGxh
dGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAg
ICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJl
ciB9LApAQCAtMTYwLDYgKzMxMSw0OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JT
cGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBl
LCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlw
ZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp4OworICAgIHVzaW5nIENvbG9yVHlwZTo6eTsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Ono7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
Q29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBl
PENvbG9yVHlwZSwgWFlaTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMueCwgYy55LCBj
LnosIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc1hZWk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CisKKworLy8gZ2V0PD4gb3ZlcmxvYWQgKGFsb25nIHdpdGggc3RkOjp0dXBsZV9zaXplIGFu
ZCBzdGQ6OnR1cGxlX2VsZW1lbnQgYmVsb3cpIHRvIHN1cHBvcnQgZGVzdHJ1Y3R1cmluZyBvZiBl
eHBsaWNpdGx5IHJlc29sdmVkIGFuZCB1bnJlc29sdmVkIGNvbG9ycy4KKwordGVtcGxhdGU8c2l6
ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZSBnZXQoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGU+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpW0ldOworfQorCit9CisK
K25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0
dXBsZV9zaXplPFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGlj
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVf
dCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6
OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPjo6Q29tcG9u
ZW50VHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxl
X3NpemU8V2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiA6IHB1YmxpYyBz
dGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgND4geyB9OworCit0ZW1wbGF0ZTxzaXplX3Qg
SSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfZWxlbWVudDxJLCBXZWJDb3JlOjpV
bnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21w
b25lbnRUeXBlOworfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpCiB7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIGZsb2F0
Pik7CiAKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
Y29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMx
LCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigi
LCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywg
YzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTM3NCw3ICszNzQsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgSFdCQTxmbG8KIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxh
Yi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
bGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmlu
ZygibGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAt
Mzk1LDcgKzM5NSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChj
b25zdCBMQ0hBPGZsbwogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xv
ci00LyNzZXJpYWxpemluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsK
ICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAi
LCBhbHBoYSwgJyknKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1IKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgT0tMQ0hBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhh
LCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGNoKCIsIGMxLCAiJSAiLCBj
MiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsY2goIiwgYzEsICIl
ICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00NTIsNyArNDUyLDcgQEAg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IE9LTENIQTxmCiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IE9LTGFiPGZsb2F0PiYgY29sb3IsIGJv
b2wpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBb
YzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
Im9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0
cmluZygib2tsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7
CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU1JHQkE8dWlu
dDhfdD4gY29sb3IsIGJvb2wgCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7
CiAKLSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIHN3aXRj
aCAoYWxwaGEpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Jh
KCIsIHJlZCwgIiwgIiwgZ3JlZW4sICIsICIsIGJsdWUsICIsIDApIik7CkBAIC01NTksNyArNTU5
LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBi
b29sCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiAKLSAgICBhdXRvIFty
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChhbHBoYSA9PSAweEZGKQog
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQsIDIsIExvd2VyY2FzZSksIGhl
eChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWUsIDIsIExvd2VyY2FzZSkpOwogICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKQEAgLTU3MCw3ICs1NzAsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4KICAgICBp
ZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhIDwgMHhGRikKICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUs
IDIpLCBoZXgoYWxwaGEsIDIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQs
IDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvclNw
YWNlTWFwcGluZzxTUkdCQTxUPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3Bh
Y2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDUwPj4geyBzdGF0aWMgY29uc3RleHByIGF1
dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENTAgfTsgfTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRlUG9pbnQ6OkQ2NT4+
IHsgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpYWVpfRDY1
IH07IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yU3Bh
Y2UgQ29sb3JTcGFjZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENvbG9yVHlwZT46OmNvbG9yU3Bh
Y2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclNwYWNlIENv
bG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFwcGluZzxDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JU
eXBlPj46OmNvbG9yU3BhY2U7CiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVu
Y3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNhbGxXaXRoQ29sb3JUeXBlKGNvbnN0IENv
bG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBG
dW5jdG9yJiYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgs
MTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUsIFdoaXRlUG9pbnQ+IHN0cnVjdCBYWVpBOwogCiAvLyBN
QVJLOiBNYWtlIGZ1bmN0aW9ucy4KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8VCwgND4mIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lk
PiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJlciA9IGZhbHNlOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nhbm9uaWNhbFR5
cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q2Fub25pY2FsVHlwZT4+ID0gdHJ1
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBib29sIGhhc0Nvbm9uaWNhbFR5cGU+
IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXIgeyB1c2luZyB0eXBlID0gQ29sb3JUeXBl
OyB9OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgQ2Fub25pY2FsQ29sb3JU
eXBlSGVscGVyPENvbG9yVHlwZSwgdHJ1ZT4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgQ29sb3JU
eXBlOjpDYW5vbmljYWxUeXBlOyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHVz
aW5nIENhbm9uaWNhbENvbG9yVHlwZSA9IHR5cGVuYW1lIENhbm9uaWNhbENvbG9yVHlwZUhlbHBl
cjxDb2xvclR5cGUsIEhhc0Nhbm9uaWNhbFR5cGVNZW1iZXI8Q29sb3JUeXBlPj46OnR5cGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8g
bWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgYykKIHsKLSAg
ICByZXR1cm4gQ29sb3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworICAgIHJldHVy
biBDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlw
ZW5hbWUgVD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZQpAQCAtOTcsNDYgKzEwNSw1MCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2wKICAgICByZXR1cm4g
eyBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksIGNsYW1wZWRDb21w
b25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIDI+KGNvbXBvbmVudHMpLCBjb21wb25lbnRzWzNdIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRv
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYg
Y29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4o
Y2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBv
bmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50PENvbG9y
VHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBjbGFtcGVk
Q29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHND
bGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQogewogICAgIHJldHVybiBtYWtlRnJv
bUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50
PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBj
bGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBjbGFtcGVkQWxwaGE8VCwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0
PiYgY29tcG9uZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4g
Y29uc3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShjb25z
dCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29s
b3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBUIGMzLCBBbHBoYSBhbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxw
aGE+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGEo
VCBjMSwgVCBjMiwgVCBjMywgQWxwaGEgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGFscGhhIH0pOwogfQogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5S
YW5nZShUIGNvbG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgorY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShD
b2xvclR5cGUgY29sb3IpCiB7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjx0eXBl
bmFtZSBUOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVu
dHNbaV0gPj0gVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAiQ29tcG9uZW50IGF0IGlu
ZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4pOwotICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IFQ6Ok1vZGVsOjpjb21w
b25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3Jl
YXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6
TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4KTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBv
bmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhl
IGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJh
aXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6
Q29tcG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4g
dGhlIGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0
czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShj
b21wb25lbnRzW2ldID49IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAi
Q29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25l
bnRJbmZvW2ldLm1pbik7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tp
XSA8PSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBh
dCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0g
JWYiLCBpLCAgY29tcG9uZW50c1tpXSwgQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tp
XS5tYXgpOwogICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbM10gPj0g
QWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJl
bnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRy
YW5zcGFyZW50KSAlZiIsIGNvbXBvbmVudHNbM10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbXBvbmVudHNbM10gPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUg
YWxsb3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgdWludDhfdD4+KiA9IG51
bGxwdHI+Citjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKENvbG9yVHlwZSkKK3sKK30KKwog
I2Vsc2UKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5n
ZShUKQpAQCAtMTQ2LDcgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2
b2lkIGFzc2VydEluUmFuZ2UoVCkKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5h
bWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21w
b25lbnRzID0gZmFsc2U7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJv
b2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBl
KGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6ZGVjbHZhbDxUPigpKSk+PiA9IHRydWU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JD
b21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6
ZGVjbHZhbDxUPigpLnVucmVzb2x2ZWQoKSkpPj4gPSB0cnVlOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29tcG9uZW50VHlw
ZU1lbWJlciA9IGZhbHNlOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBi
b29sIEhhc0NvbXBvbmVudFR5cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q29t
cG9uZW50VHlwZT4+ID0gdHJ1ZTsKQEAgLTE2Niw5ICsxNzgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAKICAgICAvLyBlLmcuIGF1dG8g
eWVsbG93V2l0aDUwUGVyY2VudEFscGhhID0gQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYUJ5
dGUoMTI4KTsKICAgICBjb25zdGV4cHIgUGFyZW50IGNvbG9yV2l0aEFscGhhQnl0ZSh1aW50OF90
IG92ZXJyaWRlQWxwaGEpIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxQYXJlbnQ+KCkuYWxwaGEpLCB1aW50OF90
PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFBhcmVudDo6Q29tcG9u
ZW50VHlwZSwgdWludDhfdD4sICJPbmx5IHVpbnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1
cHBvcnRlZC4iKTsKIAotICAgICAgICBhdXRvIGNvcHkgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgUGFy
ZW50Kj4odGhpcyk7CisgICAgICAgIGF1dG8gY29weSA9IHN0YXRpY19jYXN0PGNvbnN0IFBhcmVu
dCo+KHRoaXMpLT51bnJlc29sdmVkKCk7CiAgICAgICAgIGNvcHkuYWxwaGEgPSBvdmVycmlkZUFs
cGhhOwogICAgICAgICByZXR1cm4gY29weTsKICAgICB9CkBAIC0xNzgsNyArMTkwLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1Y3QgQ29sb3JXaXRoQWxwaGFIZWxwZXIgCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252
ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yVHlwZSYgYSwgY29uc3QgQ29sb3JUeXBlJiBi
KQogewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYS51bnJlc29sdmVkKCkpID09IGFz
Q29sb3JDb21wb25lbnRzKGIudW5yZXNvbHZlZCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29udmVydGlibGVUb0NvbG9y
Q29tcG9uZW50czxDb2xvclR5cGU+PiogPSBudWxscHRyPgpAQCAtMjAzLDcgKzIxNSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Ci0g
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOworICAgICAgICBhc3NlcnRJblJhbmdlKCpzdGF0
aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7CiAgICAgfQogCiAgICAgY29uc3RleHBy
IFJHQkFUeXBlKCkKQEAgLTIxMSwyMSArMjIzLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAgIHsKICAgICB9CiAKKworICAgIGNv
bnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8
Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIHJlZDsKICAg
ICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBNLCB0eXBl
bmFtZSBURj4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50
cyhjb25zdCBSR0JBVHlwZTxULCBELCBDb2xvclR5cGUsIE0sIFRGPiYgYykKLXsKLSAgICByZXR1
cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Ci19Ci0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdC
QVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OkNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2Rl
ZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rp
b248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3Qg
Qm91bmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+
LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6
UkdCQVR5cGU7CiAKICAgICB1c2luZyBMaW5lYXJDb3VudGVycGFydCA9IEJvdW5kZWRMaW5lYXJF
bmNvZGVkPFQsIEQ+OwogICAgIHVzaW5nIEV4dGVuZGVkQ291bnRlcnBhcnQgPSBFeHRlbmRlZEdh
bW1hRW5jb2RlZDxULCBEPjsKQEAgLTIzNCw4ICsyNDUsOCBAQCBzdHJ1Y3QgQm91bmRlZEdhbW1h
RW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW0KIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlw
ZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1l
IEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNs
YW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9u
PFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJv
dW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBE
PiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1w
bGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46
OlJHQkFUeXBlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6
bGluZWFyVG9YWVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6
eHl6VG9MaW5lYXI7CkBAIC0yNDcsOCArMjU4LDggQEAgc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNv
ZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBEPgotc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OlVuY2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFU
eXBlOworc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5k
ZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRl
ZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5j
dGlvbk1vZGU6OlVuY2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRl
ZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVk
PiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0
aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRl
cnBhcnQgPSBFeHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgQm91bmRlZENv
dW50ZXJwYXJ0ID0gQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPjsKQEAgLTI1Niw4ICsyNjcsOCBA
QCBzdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEcK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRM
aW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+
LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0
aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdC
QVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVs
PFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVu
Y3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJF
bmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JN
b2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Cisg
ICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JN
b2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdC
QVR5cGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5l
YXJUb1hZWjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpU
b0xpbmVhcjsKQEAgLTQzNCwxNyArNDQ1LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBlcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4
cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9
CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2
ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQg
YTsKICAgICBUIGI7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGFi
PFQ+JiBjKQotewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0xhYiA9IHN0ZDo6aXNfc2FtZV92PExhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIExDSEEgQ29sb3IgVHlwZS4KQEAgLTQ2
OSwxNyArNDc5LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHBy
IGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7
IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQg
aHVlOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExDSEE8VD4mIGMp
Ci17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxMQ0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMYWIgQ29sb3IgVHlwZS4KQEAg
LTUwNCwxNyArNTEzLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xhYiA6IENv
bG9yV2l0aEFscGhhSGVscAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNv
bHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3Rl
eHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhp
cyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7
CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMYWI8VD4mIGMpCi17
Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzT0tMYWIg
PSBzdGQ6OmlzX3NhbWVfdjxPS0xhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIE9LTENIQSBDb2xvciBUeXBlLgpAQCAtNTM5LDE3
ICs1NDcsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9LTENIQSA6IENvbG9yV2l0
aEFscGhhSGVsCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkg
Y29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0
byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQor
Citwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7
CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMQ0hBPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
SXNPS0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxPS0xDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogCkBAIC01NzUsMTcgKzU4MiwxNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAg
ICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNv
bHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25z
dCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBU
IGh1ZTsKICAgICBUIHNhdHVyYXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwg
ND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBj
Lmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0hTTEEgPSBzdGQ6
OmlzX3NhbWVfdjxIU0xBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9y
VHlwZT47CiAKIC8vIE1BUks6IC0gSFdCQSBDb2xvciBUeXBlLgpAQCAtNjEwLDE3ICs2MTYsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhXQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBl
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0
ZWQ6CiAgICAgVCBodWU7CiAgICAgVCB3aGl0ZW5lc3M7CiAgICAgVCBibGFja25lc3M7CiAgICAg
VCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFdCQTxUPiYgYykKLXsKLSAgICBy
ZXR1cm4geyBjLmh1ZSwgYy53aGl0ZW5lc3MsIGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFdC
QSA9IHN0ZDo6aXNfc2FtZV92PEhXQkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
PiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBYWVogQ29sb3IgVHlwZS4KQEAgLTY0NSwxNyAr
NjUwLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9pbnQgVz4gc3RydWN0IFhZWkEg
OiBDb2xvcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKwor
cHJvdGVjdGVkOgogICAgIFQgeDsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CiB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBDb2xvckNv
bXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgWFlaQTxULCBXPiYgYykKLXsK
LSAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzWFlaQSA9IHN0ZDo6aXNf
c2FtZV92PFhZWkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBDb2xvclR5cGU6
OndoaXRlUG9pbnQ+LCBDb2xvclR5cGU+OwogCiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpAQCAt
NjY4LDExICs2NzIsMTYgQEAgc3RydWN0IFJHQkEgewogICAgIHsKICAgICB9CiAKLSAgICBjb25z
dGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIg
ZXhwbGljaXQgUkdCQShSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAg
ICAgICAgIDogdmFsdWUgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29sb3IucmVkIDw8IDI0IHwg
Y29sb3IuZ3JlZW4gPDwgMTYgfCBjb2xvci5ibHVlIDw8IDggfCBjb2xvci5hbHBoYSkgfQogICAg
IHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBj
b2xvcikKKyAgICAgICAgOiBSR0JBIHsgY29sb3IucmVzb2x2ZWQoKSB9CisgICAgeworICAgIH0K
KwogICAgIHVpbnQzMl90IHZhbHVlOwogfTsKIApAQCAtNjgyLDggKzY5MSwxMyBAQCBzdHJ1Y3Qg
QVJHQiB7CiAgICAgewogICAgIH0KIAotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yKQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFJlc29sdmVkQ29s
b3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19j
YXN0PHVpbnQzMl90Pihjb2xvci5hbHBoYSA8PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9y
LmdyZWVuIDw8IDggfCBjb2xvci5ibHVlKSB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgICAgICA6IEFSR0IgeyBj
b2xvci5yZXNvbHZlZCgpIH0KICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNSR0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICog
YSwgYSB9OwogfQogCiBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICBy
ZXR1cm4gY29sb3I7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8U1JHQkE8ZmxvYXQ+PihyIC8gYSwgZyAvIGEsIGIgLyBhLCBhKTsKQEAgLTQ0LDcgKzQ0
LDcgQEAgU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yCiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVy
biB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC01NCw3ICs1NCw3IEBAIFNS
R0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjbwogCiBT
UkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxp
bmUgdWludDE2X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aQogCiBTUkdCQTx1aW50
OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7CiAg
ICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8dWlu
dDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGll
ZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSks
IGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYs
MjEgQEAgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0
KTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29s
b3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0
b3ImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1
dG8gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYs
IEZ1bmN0b3ImJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENv
bG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhf
dCBvdmVycmlkZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlk
ZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJp
ZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFs
cGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxw
aGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRl
ZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJy
aWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxw
aGEpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4g
fHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlz
QmxhY2soY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4
dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0
cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8
Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xv
clR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xD
SE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+
IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENv
bG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4g
Y29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29s
b3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5
cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCkBAIC05MywzNSArOTMs
MzUgQEAgdGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4o
ZmxvCiAgICAgcmV0dXJuIGNsYW1wZWRBbHBoYSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmlu
Z0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYg
ZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4g
YXV0byBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgRnVuY3RvciYmIGZ1bmN0b3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXND
b2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAg
ICAgY29weVswXSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBvbmVudHNbMF0pOwogICAgIGNv
cHlbMV0gPSBzdGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzFdKTsKICAgICBjb3B5WzJd
ID0gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBjb21wb25lbnRz
WzJdKTsKLSAgICByZXR1cm4geyBjb3B5WzBdLCBjb3B5WzFdLCBjb3B5WzJdLCBjb3B5WzNdIH07
CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRo
T3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JX
aXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJp
ZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xv
ci51bnJlc29sdmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVy
biBjb3B5OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJp
ZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29s
dmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29s
b3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGlu
dmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVp
bnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIGF1dG8gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29s
b3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTEzMSwxMSArMTMxLDEx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZl
cgogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBpbnZlcnRlZENvbG9yV2l0aE92
ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KQogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsK
IAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAg
ICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDM7ICsraSkKQEAgLTE0NywxOSArMTQ3LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNv
bnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAg
IHJldHVybiBjb2xvci55ID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+
OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZWRDb2xvci55ID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBB
bHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8
IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBj
b25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0
dXJuIGNvbG9yLmxpZ2h0bmVzcyA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZs
b2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7
CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNzID09IDAgJiYgcmVzb2x2ZWRDb2xv
ci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxD
b2xvclR5cGU+fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2Rl
bDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0
byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBjb25zdGV4cHIg
YXV0byBjb21wb25lbnRJbmZvID0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mbzsKICAg
ICByZXR1cm4gYzEgPT0gY29tcG9uZW50SW5mb1swXS5taW4gJiYgYzIgPT0gY29tcG9uZW50SW5m
b1sxXS5taW4gJiYgYzMgPT0gY29tcG9uZW50SW5mb1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQpAQCAt
MTY3LDI0ICsxNjksMjcgQEAgY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNr
KGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmJsYWNrbmVzcyA9
PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAg
YXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2
ZWRDb2xvci5ibGFja25lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFU
cmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0
dXJuIGNvbG9yLnkgPT0gMSAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9w
YXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJl
dHVybiByZXNvbHZlZENvbG9yLnkgPT0gMSAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhh
VHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNl
c0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0
ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4g
Y29sb3IubGlnaHRuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOwor
ICAgIHJldHVybiByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xv
ci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxD
b2xvclR5cGU+IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9k
ZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHBy
IGF1dG8gY29tcG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAg
ICAgcmV0dXJuIGMxID09IGNvbXBvbmVudEluZm9bMF0ubWF4ICYmIGMyID09IGNvbXBvbmVudElu
Zm9bMV0ubWF4ICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWF4ICYmIGFscGhhID09IEFscGhh
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAg
LTE5Miw3ICsxOTcsOCBAQCBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUo
Y29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3Iud2hpdGVuZXNzID09
IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBh
dXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZl
ZENvbG9yLndoaXRlbmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRy
YWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyODc0ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUg
eyAocHVibGljKQogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KTsKKyAg
ICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuYWxwaGEpIHsKICAg
ICAgICAgICAgIHNldFBpeGVsKGRlc3QsIHIsIGcsIGIsIGEpOwpAQCAtMTYwLDcgKzE2MCw3IEBA
IGNsYXNzIEltYWdlQmFja2luZ1N0b3JlIHsgKHB1YmxpYykKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBs
aWVkRmxvb3JpbmcocGl4ZWwpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxv
b3JpbmcocGl4ZWwpLnJlc29sdmVkKCk7CiAKICAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBD
b2xvCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07
CiB9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0VG9WYWx1ZShjb25zdCBDb2xvciYKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHIpLCBA
KGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjwKICAgICAgICAgcmV0dXJu
OwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24u
Z2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsK
LSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBAW0AociksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcgogICAgIGlmIChhbmlt
YXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29tcG9uZW50
cyA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
ICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBj
b21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZl
Y3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFu
aW1hdGlvblNldEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CkBAIC00MjMs
NyArNDIzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKGNvbnN0
IFdlYkNvcmU6CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5y
ZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9
OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3Jl
YXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQo
KSwgdi5nZXQoKSk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
V2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlCiAgICAgICAgIAogICAgIFJldGFpblB0cjxD
Rk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAs
IHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlW2ldLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2
ZWQoKTsKICAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50
cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAgIFJl
dGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEp
KTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBz
cmNDciwgY2Fpcm9fdCogZHMKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3Qq
IGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIAogc3RhdGljIHZvaWQgYWRk
Q29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudENvbG9yU3Rv
cCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZz
ZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShj
YWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3As
IGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fp
cm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcs
IGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3BhY2VSZWYs
IENvbG9yQ29tcG9uZW50czxmbG9hCiAgICAgaWYgKCFjZ0NvbG9yU3BhY2UpIHsKICNpZiBIQVZF
KENPUkVfR1JBUEhJQ1NfRVhURU5ERURfU1JHQl9DT0xPUl9TUEFDRSkKICAgICAgICAgYXV0byBj
b21wb25lbnRzQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29t
cG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkU1JHQkE8Zmxv
YXQ+Pihjb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29sb3IpLnJlc29sdmVkKCkpOwogICAgICAg
ICB9KTsKICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRTUkdCQ29sb3JTcGFjZVJlZigpLCBjb21w
b25lbnRzQ29udmVydGVkVG9FeHRlbmRlZFNSR0JBIH07CiAjZWxzZQogICAgICAgICBhdXRvIGNv
bXBvbmVudHNDb252ZXJ0ZWRUb1NSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29tcG9uZW50cywg
Y29sb3JTcGFjZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8Zmxv
YXQ+Pihjb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4geyBz
UkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzQ29udmVydGVkVG9TUkdCQSB9OwogI2VuZGlm
CkBAIC0xNjMsNyArMTYzLDcgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3BhY2VSZWYsIENv
bG9yQ29tcG9uZW50czxmbG9hCiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY3JlYXRl
Q0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3IuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCk7CiAgICAgYXV0byBbY2dDb2xvclNwYWNlLCBjZ0NvbXBhdGlibGVDb21wb25l
bnRzXSA9IGNvbnZlcnRUb0NHQ29tcGF0aWJsZUNvbXBvbmVudHMoY29sb3JTcGFjZSwgY29tcG9u
ZW50cyk7CiAgICAgCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYzRdID0gY2dDb21wYXRpYmxlQ29t
cG9uZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50UmVuZGVyZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDggKzQ3Miw3IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6
U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlRwogICAgIC8vIGV4dGVuZGVkIHNSR0Ig
Zm9yIGFsbCBncmFkaWVudHMuCiAgICAgaWYgKGhhc09ubHlCb3VuZGVkU1JHQkNvbG9yU3RvcHMo
c3RvcHMpKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKSB7Ci0gICAg
ICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKTsKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29t
cG9uZW50czsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgY29s
b3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9u
ZW50cy51bmNoZWNrZWRBcHBlbmQoZyk7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5j
aGVja2VkQXBwZW5kKGIpOwpAQCAtNDg4LDkgKzQ4Nyw5IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6
U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlRwogCiAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgc3RvcCA6IHN0b3BzKSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNTX0VYVEVOREVEX1NS
R0JfQ09MT1JfU1BBQ0UpCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29s
b3IudG9Db2xvclR5cGVMb3NzeTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oKTsKKyAgICAgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PEV4dGVuZGVk
U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjZWxzZQotICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwor
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAjZW5kaWYKICAgICAgICAgICAgIGNvbG9y
Q29tcG9uZW50cy51bmNoZWNrZWRBcHBlbmQocik7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVu
dHMudW5jaGVja2VkQXBwZW5kKGcpOwpAQCAtNTQ2LDcgKzU0NSw3IEBAIHZvaWQgR3JhZGllbnRS
ZW5kZXJlckNHOjpTaGFkaW5nOjpzaGFkaW5nRnVuY3Rpb24odm9pZAogICAgICAgICBtYWtlRnJv
bUNvbXBvbmVudHM8SW50ZXJwb2xhdGlvblNwYWNlQ29sb3JUeXBlPihzdG9wMS5jb2xvckNvbXBv
bmVudHMpLCBvZmZzZXQpOwogCiAgICAgLy8gNC4gQ29udmVydCB0byB0aGUgb3V0cHV0IGNvbG9y
IHNwYWNlLgotICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091dHB1dFNwYWNl
ID0gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91dHB1dFNwYWNlQ29sb3JUeXBlPihp
bnRlcnBvbGF0ZWRDb2xvcikpOworICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRU
b091dHB1dFNwYWNlID0gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91dHB1dFNwYWNl
Q29sb3JUeXBlPihpbnRlcnBvbGF0ZWRDb2xvcikucmVzb2x2ZWQoKSk7CiAKICAgICAvLyA1LiBX
cml0ZSBjb2xvciBjb21wb25lbnRzIHRvICdvdXQnIHBvaW50ZXIuCiAgICAgZm9yIChzaXplX3Qg
Y29tcG9uZW50SW5kZXggPSAwOyBjb21wb25lbnRJbmRleCA8IGludGVycG9sYXRlZENvbG9yQ29u
dmVydGVkVG9PdXRwdXRTcGFjZS5zaXplKCk7ICsrY29tcG9uZW50SW5kZXgpCkBAIC01NjAsNyAr
NTU5LDcgQEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6
Om1ha2VTCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihjb2xvckludGVycG9sYXRp
b25NZXRob2QuY29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICBbJl0gKGF1dG8mIGNvbG9yU3Bh
Y2UpIC0+IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gewogICAgICAgICAgICAgICAgICAgICB1
c2luZyBDb2xvclR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxkZWNsdHlw
ZShjb2xvclNwYWNlKT46OkNvbG9yVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yLnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBl
PigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
LnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICk7CiAgICAgICAgIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGkKICAgICAvLyBTZXQgbGlnaHQgc291cmNl
IGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7CiAKLSAgICBhdXRv
IGNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1
dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBjb2xvci5y
ZWQ7CiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IGNvbG9yLmdyZWVuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MiwxOSArOTIsMTkgQEAgYm9vbCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIEdSQVlTQ0FMRTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nPFNSR0JBPGZsb2F0Pj4oZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBj
b2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheXNjYWxl
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAg
Y29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29s
b3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAg
ICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGh1
ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgY2FzZSBTQVRVUkFURTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1f
YW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxm
bG9hdD4+KHNhdHVyYXRpb25Db2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9v
bCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1DCiB7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIE9QQUNJVFk6Ci0gICAgICAgIGNvbG9yLmFs
cGhhICo9IG1fYW1vdW50OworICAgICAgICBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBo
YShjb2xvciwgc3RkOjpjbGFtcDxmbG9hdD4oY29sb3IucmVzb2x2ZWQoKS5hbHBoYSAqIG1fYW1v
dW50LCAwLjBmLCAxLjBmKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgSU5WRVJU
OiB7CiAgICAgICAgIGZsb2F0IG9uZU1pbnVzQW1vdW50ID0gMS4wZiAtIG1fYW1vdW50OwpAQCAt
Mjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGh1ZVJvdGF0
ZShjb25zdCBDb2xvcgogCiBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJh
bnNmb3JtQ29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIGh1ZVJv
dGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
LCAwLjVmKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIDAuNWYpOwogICAgIAogICAgIC8v
IEFwcGx5IHRoZSBtYXRyaXguIFNlZSByZGFyOi8vcHJvYmxlbS80MTE0NjY1MCBmb3IgaG93IHRo
aXMgbWF0cml4IHdhcyBkZXJpdmVkLgogICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDw1LCAzPiB0
b0RhcmtNb2RlTWF0cml4IHsKQEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEludmVydExpZ2h0bmVz
c0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9ybUMKICAgICAgICAgLTAuMDQ5ZiwgLTEu
MzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0x
LjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2Rl
Q29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9k
ZUNvbXBvbmVudHMgPSB0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSk7CiAKICAgICBhdXRvIGh1ZVJv
dGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVDb21w
b25lbnRzLCAwLjVmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgYm9v
bCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDb2xvciYgY29sb3IpIGNvCiAgICAg
aWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gc1JH
QkFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwogCiAgICAg
Zm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVy
YXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIGJv
b2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yJiBjbwogICAg
IGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1
dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNS
R0JBQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKIAogICAg
IGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3Bl
cmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm0oY29uc3QgTGkKIHsKICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRv
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvUmVzb2x2ZWRDb2xv
ckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CiAgICAg
cGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50
M0QociwgZywgYik7CiAKICAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpk
YXRhLmZpbHRlciwgKmRhdGEucmVzdWx0LCBwYWludGluZ0RhdGEpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw3ICs2Myw3IEBAIGNsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlYwogICAgIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQg
eCwgaW50IHksIGludCB3aWR0aCkgeyByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsgfQogICAg
IHN0YXRpYyBpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykg
eyByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KGNvbXBvbmVudHMpIH07IH0KIAotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhl
bCkpOyB9CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFr
ZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKS5yZXNvbHZlZCgpKTsgfQog
ICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4
dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgQ29sb3I6OkNvbG9yKGNvbnN0
IEdka1JHQkEmIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgp
OwogICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyAr
MjU0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0
YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29s
b3IpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgZ2xVbmlmb3JtNGYocHJv
Z3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBnbExpbmVXaWR0aCh3aWR0
aCk7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJl
cihpbnQgbnVtYmVyLCBjb25zdCBDb2wKICAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShz
dXJmYWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5n
IGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAKICAgICBj
YWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDE1LDcgKzQxNSw3
IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQ
cgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNl
Y29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1
cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVt
dWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICBn
bFVuaWZvcm00Zihwcm9ncmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAg
ICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cu
c3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVu
aWZvcm0yZihwcm9ncmFtLnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNzM1LDcg
KzczNSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25zdCBGbG9h
dFJlY3QmIAogICAgIGlmIChjbGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkK
ICAgICAgICAgcHJlcGFyZVJvdW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3RhY2so
KS5yb3VuZGVkUmVjdENvbXBvbmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbnZlcnNl
VHJhbnNmb3JtQ29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvdW50KCkpOwog
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgIGdsVW5p
Zm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEg
PCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsK
QEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3Io
Y29uc3QgRmxvYXRSZWN0JiAKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBnbENsZWFyQ29sb3Iociwg
ZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJl
Y3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQw
LDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRv
ciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdC
QUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIs
IGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdAog
ewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwgYSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
ZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNyBAQCBJRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFS
ZW5kZXJUYXJnZXQqIHIKICAgICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9zdG9wcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgotICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
KyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICBncmFkaWVudFN0b3BzLmdyYWRpZW50
U3RvcHMudW5jaGVja2VkQXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJE
MTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
R1dpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnMKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gc3BlbGxpbmdQYXR0ZXJuQ29s
b3IgPSBDb2xvcjo6cmVkOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBncmFtbWFyUGF0dGVy
bkNvbG9yID0gQ29sb3I6OmRhcmtHcmVlbjsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3R5
bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1t
YXJQYXR0ZXJuQ29sb3IgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1t
YXIgPyBncmFtbWFyUGF0dGVybkNvbG9yLnJlc29sdmVkKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xv
ci5yZXNvbHZlZCgpOwogICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHIs
IGcsIGIsIGEpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZSA9IGdldFVzZXJU
b0Jhc2VDVE0oY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSw3ICsz
NjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0
IGFuZ2wKIAogRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xvcldpdGhH
bG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2Jh
bEFscGhhKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTQsNyArMTU5NCw3IEBAIGNvbnN0ZXhw
ciBmbG9hdCBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbgogQ29sb3IgUmVu
ZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvcihjb25zdCBDb2xvciYgdGV4dENvbG9y
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBD
b25zaWRlciB1c2luZyBMQ0hBPGZsb2F0PiByYXRoZXIgdGhhbiBIU0xBPGZsb2F0PiBmb3IgYmV0
dGVyIHBlcmNlcHR1YWwgcmVzdWx0cyBhbmQgdG8gYXZvaWQgY2xhbXBpbmcgdG8gc1JHQiBnYW11
dCwgd2hpY2ggaXMgd2hhdCBIU0xBIGRvZXMuCi0gICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBpZiAodGV4
dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQogICAgICAg
ICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1l
bnRGYWN0b3IgKiAoMTAwLjBmIC0gaHNsYS5saWdodG5lc3MpOwogICAgIGVsc2UKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwNyw3ICsxMzA3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRC
dXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb252ZXhH
cmFkaWVudChjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBsdW1pbmFuY2UuCi0gICAgYXV0byBbciwgZywg
YiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0
ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxw
aGFDaGFubmVsIDwgMC41OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5j
dGlvbkltcGwuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MSwxMCArODEsMTAgQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6
IHB1YmxpYyBTVkdBbmltYXRpb25BCiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVudCYsIGZs
b2F0IHByb2dyZXNzLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVkKQogICAg
IHsKLSAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0g
QW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5k
T2ZEdXJhdGlvbigpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBs
ZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0g
QW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8g
PSBtX3RvLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAg
ICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0aW9uKCku
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAK
ICAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5yZWQsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLnJl
ZCwgc2ltcGxlQW5pbWF0ZWQucmVkKTsKICAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmlt
YXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uZ3Jl
ZW4sIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuLCBzaW1wbGVBbmltYXRlZC5ncmVlbik7
CkBAIC0xMDMsOCArMTAzLDggQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1
YmxpYyBTVkdBbmltYXRpb25BCiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgCi0gICAgICAgIGF1dG8gc2ltcGxlRnJv
bSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1w
bGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2lt
cGxlRnJvbSA9IGZyb21Db2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJl
c29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICBmbG9hdCByZWQgPSBz
aW1wbGVGcm9tLnJlZCAtIHNpbXBsZVRvLnJlZDsKICAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1w
bGVGcm9tLmdyZWVuIC0gc2ltcGxlVG8uZ3JlZW47CkBAIC0xMTYsOCArMTE2LDggQEAgY2xhc3Mg
U1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiBwcml2YXRl
OgogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQmKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8u
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgICAg
IC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0byAxMDAlIG9w
YXF1ZS4KICAgICAgICAgbV90byA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVp
bnQ4X3Q+PihzaW1wbGVUby5yZWQgKyBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8uZ3JlZW4gKyBz
aW1wbGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ibHVlICsgc2ltcGxlRnJvbS5ibHVlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDIyLTAxLTAyICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVzb2x2ZWQvdW5yZXNvbHZlZCBjb2xvciB0
eXBlIGFjY2Vzc29ycyB0byByZXF1aXJlIHVzZXJzIHRvIGJlIGV4cGxpY2l0IGFib3V0IHdoZXRo
ZXIgdGhleSB3aWxsIGhhbmRsZSBtaXNzaW5nL25vbmUgY29sb3IgY29tcG9uZW50cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0Nzk4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9m
IENvbG9yOjp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29sb3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8Pj4oKSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRvIHJlc29sdmVkKCkgdG8gYWNjZXNzIGNv
bG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24v
V0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcDoKKyAgICAgICAgKGRyYXdQYWdlQmFja2dyb3Vu
ZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAg
ICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNz
L2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW06
CisgICAgICAgIChXZWJLaXQ6OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisKIDIwMjEtMTItMjYgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgV2ViS2l0L0Nv
Y29hQ29sb3IuaCB3aXRoIFdlYkNvcmUvQ29sb3JDb2NvYS5oLCBub3QgY29uZnVzaW5nIGF0IGFs
bApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdl
UHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlv
bi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYWdlQmFja2dyb3VuZChjYWlyb190KiBjdHgsIGNvbnN0
IHN0ZAogICAgIGlmICghYmFja2dyb3VuZENvbG9yIHx8IGJhY2tncm91bmRDb2xvci52YWx1ZSgp
LmlzVmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnZhbHVlKCkudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2JhKGN0eCwgciwgZywgYiwgYSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGN0eCwgcmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgd2Via2l0Q29sb3JGaWxsRnJv
bVdlYkNvcmVDb2xvcihjb25zdCBXZWJDb3JlOjpDbwogewogICAgIFJFTEVBU0VfQVNTRVJUKHdl
YkNvcmVDb2xvci5pc1ZhbGlkKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3Jl
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2Vi
Q29yZUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAg
ICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3ItPmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1
ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250
cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
Vmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
YmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0YKICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkg
ewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBjb2xv
cjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKICNpZiBVU0UoR1RLNCkKICAgICAgICAgICAgICAgICBHZGtSR0JBIHJnYmEgPSB7IHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVT
bmFwc2hvdFBhdHRlcm4gPSBhZG9wdEdSZWYoZ3NrX2NvbG9yX25vZGVfbmV3KCZyZ2JhLCAmYm91
bmRzKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQCBib29s
IFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcihkb3VibGUqIHJlZCwKICAgICBp
ZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gYmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogICAgICpyZWQgPSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUgPSBi
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODEsNyArNjgxLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU09iamVjdD4g
YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oa2V5
ZnJhbWVWYWx1ZSwKICAgICAgICAgWyZdKGNvbnN0IGZsb2F0IG51bWJlcikgLT4gUmV0YWluUHRy
PE5TT2JqZWN0PiB7IHJldHVybiBAKG51bWJlcik7IH0sCiAgICAgICAgIFsmXShjb25zdCBXZWJD
b3JlOjpDb2xvciBjb2xvcikgLT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7Ci0gICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAg
ICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gIGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIHJldHVybiBAWyBAKHIpLCBAKGcp
LCBAKGIpLCBAKGEpIF07CiAgICAgICAgIH0sCiAgICAgICAgIFsmXShjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50M0QgcG9pbnQpIC0+IFJldGFpblB0cjxOU09iamVjdD4gewpJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NTIx
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjItMDEtMDIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBy
ZXNvbHZlZC91bnJlc29sdmVkIGNvbG9yIHR5cGUgYWNjZXNzb3JzIHRvIHJlcXVpcmUgdXNlcnMg
dG8gYmUgZXhwbGljaXQgYWJvdXQgd2hldGhlciB0aGV5IHdpbGwgaGFuZGxlIG1pc3Npbmcvbm9u
ZSBjb2xvciBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzQ3OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBSZXBsYWNlIHVzZXMgb2Yg
Q29sb3I6OnRvU1JHQkFMb3NzeTw+KCkgd2l0aCBDb2xvcjo6dG9Db2xvclR5cGVMb3NzeTxTUkdC
QTw+PigpIGFuZCBhZGQKKyAgICAgICAgY2FsbHMgdG8gcmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29s
b3IgY29tcG9uZW50cy4gQWxzbyB1cGRhdGUgdG8gbmV3IG5hbWUgb2YgY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKSwKKyAgICAgICAgY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRz
KCkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdy
YXBoaWNzQ29udGV4dEdMQ29jb2EubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGFuZ2VD
b250ZXh0Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVzZSBvZiBjb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpIHdpdGggdGhlIG1vcmUgY29tbW9uIHRvQ29sb3JUeXBlTG9z
c3k8V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCkuCisKIDIwMjItMDEtMDEgIEpl
YW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWtlIFNoYXJlZEJ1
ZmZlcjo6Y29weSgpIHJldHVybiBhIGNvbnRpZ3VvdXMgU2hhcmVkQnVmZmVyCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfV2hpdGUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBh
dXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7Cisg
ICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU3LDcgKzU3
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3IgPSBD
b2xvcjo6YmxhY2s7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlw
ZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTczLDcgKzczLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogewog
ICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OnJlZDsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29s
b3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9
IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC04OSw3ICs4OSw3IEBAIFRFU1QoQ29sb3Is
IFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmdyZWVuOwogCi0g
ICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+Pigp
OworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0
Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMCwgaHNsYUNvbG9yLmh1
ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAt
MTA1LDcgKzEwNSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3Ig
Y29sb3IgPSBDb2xvcjo6Ymx1ZTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9G
TE9BVF9FUSgyNDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBURVNUKENvbG9yLCBSR0JU
b0hTTF9EYXJrR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAot
ICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4o
KTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9h
dD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVl
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTM3
LDcgKzEzNyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29s
b3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5
cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOwpAQCAtMTUzLDcgKzE1Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xp
Z2h0R3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpsaWdodEdyYXk7CiAKLSAgICBh
dXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7Cisg
ICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4MSw3ICsx
ODEsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIAogICAgIHZhbGlkQ29sb3IgPSBTUkdCQTx1
aW50OF90PiB7IDEsIDIsIDMsIDQgfTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFs
aWQoKSk7Ci0gICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3IudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlk
Q29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAg
IEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh2
YWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JD
b21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMTg5LDcgKzE4OSw3IEBAIFRFU1QoQ29sb3IsIFZhbGlk
aXR5KQogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29sb3IoV1RGTW92ZSh2YWxpZENvbG9y
KSk7CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAg
ICBhdXRvIHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENv
bG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8geWV0QW5vdGhlclZhbGlkQ29s
b3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRD
b2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29s
b3JDb21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29s
b3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFRFU1QoQ29sb3IsIFZh
bGlkaXR5KQogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRD
b2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAg
YXV0byBvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgIGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90
aGVyVmFsaWRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVk
KCk7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAg
ICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQ
RUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7CkBAIC0yMDksMjAgKzIw
OSwyMCBAQCBURVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9y
KENvbG9yOjpibGFjaykubHVtaW5hbmNlKCksIDApOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xv
cihDb2xvcjo6d2hpdGUpLmx1bWluYW5jZSgpLCAxKTsKIAotICAgIGF1dG8gY0NvbXBvbmVudHMg
PSBTUkdCQTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH07CisgICAgYXV0byBjQ29tcG9uZW50cyA9
IFNSR0JBPHVpbnQ4X3Q+IHsgODUsIDkwLCAxNjAgfS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9G
TE9BVF9FUShDb2xvcihjQ29tcG9uZW50cykubHVtaW5hbmNlKCksIDAuMTE3ODE0NTUpOwogCiAg
ICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLnJlZCwgODUpOwogICAgIEVYUEVDVF9FUShjQ29tcG9u
ZW50cy5ncmVlbiwgOTApOwogICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ibHVlLCAxNjApOwog
Ci0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29tcG9uZW50cykubGlnaHRlbmVkKCkudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29tcG9u
ZW50cykubGlnaHRlbmVkKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNv
bHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjTGlndGVuZWQpLmx1bWluYW5jZSgp
LCAwLjI5MTY4Mik7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWQsIDEzMCk7CiAgICAgRVhQ
RUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3KTsKICAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJs
dWUsIDI0NCk7CiAKLSAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5kYXJr
ZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY0RhcmtlbmVkID0gQ29s
b3IoY0NvbXBvbmVudHMpLmRhcmtlbmVkKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjRGFya2VuZWQpLmx1
bWluYW5jZSgpLCAwLjAyNzAwNjI0Mik7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5yZWQsIDQw
KTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVuLCA0Myk7CkBAIC0yMzMsNyArMjMzLDcg
QEAgVEVTVChDb2xvciwgQ29uc3RydWN0b3IpCiB7CiAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8
ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAKLSAgICBhdXRvIFtjb2xvclNwYWNl
LCBjb21wb25lbnRzXSA9IGMxLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBb
Y29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNv
bXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwogCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0yNDgsNyArMjQ4LDcgQEAgVEVTVChDb2xv
ciwgQ29weUNvbnN0cnVjdG9yKQogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEu
MCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIENvbG9yIGMyKGMxKTsKIAotICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAg
ICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZl
ZENvbG9yQ29tcG9uZW50cygpOwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVu
dHM7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCBU
RVNUKENvbG9yLCBBc3NpZ25tZW50KQogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7
IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIENvbG9yIGMyID0gYzE7CiAKLSAgICBhdXRv
IFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7
CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVz
b2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21w
b25lbnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0zMjMsNyArMzIzLDcg
QEAgVEVTVChDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQogICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52
YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAgICAgRVhQRUNUX0ZBTFNF
KGMxLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMy
LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9u
ZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBF
WFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKIAogICAgIGF1dG8g
W3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CkBAIC0zNDQsNyArMzQ0LDcgQEAgVEVTVChD
b2xvciwgTW92ZUFzc2lnbm1lbnQpCiAgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRo
YXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxp
ZCgpKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMy
LmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIEVYUEVDVF9FUShj
b2xvclNwYWNlLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogCiAgICAgYXV0byBbciwgZywgYiwg
YWxwaGFdID0gY29tcG9uZW50czsKQEAgLTM3MCw3ICszNzAsNyBAQCBURVNUKENvbG9yLCBSZXR1
cm5WYWx1ZXMpCiBURVNUKENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAgQ29sb3Ig
cDNDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0g
ICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAg
YXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4o
KS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwgMS4wZik7
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTMyODJmKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTEyNzQ4Zik7CkBAIC0zODAs
NyArMzgwLDcgQEAgVEVTVChDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogVEVTVChDb2xvciwg
TGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAgQ29sb3IgbGluZWFyU1JHQkFDb2xv
ciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBh
dXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
KyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8
U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29s
b3IucmVkLCAxLjBmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ncmVlbiwgMC43
MzUzNTY5MjdmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5
ODcwNmYpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIFRFU1QoQ29sb3IsIENvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KQogCiAgICAgewogICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuNSk7Ci0gICAgICAgIGF1
dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnku
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5kUmVzb2x2
ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9y
U3BhY2U6OlNSR0IpOwogICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CiAg
ICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CkBAIC00MDksNyArNDA5LDcgQEAgVEVTVChD
b2xvciwgQ29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkpCiAKICAgICB7CiAgICAgICAgIENvbG9y
IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoMC4pOwotICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgICAgIEVYUEVD
VF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpTUkdCKTsKICAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb21wb25lbnRzOwogICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0Nv
bnRleHRHTENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQkocmV2aXNpb24gMjg3
NDgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFw
aGljc0NvbnRleHRHTENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw4IEBAIHN0
YXRpYyA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBjaGFuZ2VDb250ZXh0Q29udGVudAogewog
ICAgIGNvbnRleHQubWFya0NvbnRleHRDaGFuZ2VkKCk7CiAgICAgV2ViQ29yZTo6Q29sb3IgZXhw
ZWN0ZWQgeyBpdGVyYXRpb24gJSAyID8gV2ViQ29yZTo6Q29sb3I6OmdyZWVuIDogV2ViQ29yZTo6
Q29sb3I6OnllbGxvdyB9OwotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gZXhw
ZWN0ZWQuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKLSAgICBVTlVTRURfVkFSSUFCTEUoY29s
b3JTcGFjZSk7Ci0gICAgY29udGV4dC5jbGVhckNvbG9yKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVu
dHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gZXhwZWN0ZWQudG9Db2xvclR5cGVMb3NzeTxXZWJDb3JlOjpTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKKyAgICBjb250ZXh0LmNsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgY29u
dGV4dC5jbGVhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCk7
CiAgICAgdWludDhfdCBnb3RWYWx1ZXNbNF0gPSB7IH07CiAgICAgYXV0byBzYW1wbGVBdCA9IGNv
bnRleHQuZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsK
</data>
<flag name="commit-queue"
          id="474025"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448199</attachid>
            <date>2022-01-02 18:40:18 -0800</date>
            <delta_ts>2022-01-02 20:14:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved7.diff</filename>
            <type>text/plain</type>
            <size>161328</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4CiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50Zigicmdi
ICU3LjVmICU3LjVmICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVl
KTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3Bp
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBj
b25zdAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKGF4T2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1
dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4
T2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOwogICAgIH0KQEAgLTgyNCwxMyArODI0
LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJp
bGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgaWYgKGJnQ29s
b3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLi50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci4udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjI4LDcgKzIy
NSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lkIHNldENvbG9yKFNSR0JBPHVp
bnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAgICAgdm9p
ZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xv
clNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAKLSAgICBT
UkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBhY2tlZENvbG9yOjpSR0JBIGFz
UGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBh
c091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogaW5saW5lIGJvb2wgb3V0T2ZM
aW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAg
ICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVy
biBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25l
bnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5mbGFncygpID09
IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEu
Y29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7
CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGluZSBib29sIG91dE9mTGluZUNv
bXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkg
JiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0g
Q29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgICAgIGF1dG8gYkZs
YWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRP
ZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkg
JiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50
cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGFGbGFncyA9PSBiRmxh
Z3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5l
KCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9yOjpDb2xvcihzdGQ6Om9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xv
clR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldE91dE9mTGluZUNvbXBvbmVu
dHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSks
IENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3Mp
KTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0
ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxD
b2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8Rmxh
Z3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoKmNvbG9y
KSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxh
Z3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRz
OjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVzb2x2ZWQoKSkpLCBDb2xvclNw
YWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAK
IGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5l
Q29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdz
KQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JT
cGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCku
dG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUs
IGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JT
cGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1
bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBj
YWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgp
LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gY2FsbFdp
dGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNw
YWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAK
QEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVu
dHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50
cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFz
SW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4g
Q29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Ci0gICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoYXNQ
YWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5lIFBhY2tlZENvbG9yOjpSR0JB
IENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUsNyArNTYyLDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgICAg
IGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1dG8mIG91dE9mTGluZUNvbXBv
bmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJlc29sdmVkQ29tcG9uZW50cygp
OwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVyIDw8IGMyOwogICAgICAg
ICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFj
a2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlzaWJsZSgpKQogICAgICAgICBy
ZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ry
b3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
YXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tk
cm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBz
b3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29s
dmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5n
QiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiByZXN1bHQ7CiAgICAgZm9yIChp
bnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJ
bmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNvbnRleHQucHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBwcmVt
dWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRv
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGll
ZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKIAogICAg
IGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxT
UkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5y
ZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAtMTE3LDggKzExNyw4IEBAIENv
bG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdAogICAg
IGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRvU1JHQiA9IHRvLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBhdXRvIGJsZW5kZWQg
PSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQpLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHN0cnVjdCBD
b2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1hcChGJiYgZnVuY3Rpb24pIGNv
bnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlvbihzdGQ6OmRlY2x2YWw8VD4o
KSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29u
c3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3Bl
cmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IrKFQp
IGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IvKFQpIGNvbnN0
OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBvbmVudHM8VCwgTj46Om9wZXJh
dG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAgICAgKnRoaXMgPSBtYXBDb2xv
ckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEgKyBjMjsgfSwgKnRoaXMsIHJo
cyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
Tj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBO
Pjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgqdGhpcyAvIHJocyk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBMQ0hMaWtlLCB0
eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xhckZvcm0oY29uc3QgTGFiTGlr
ZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
bGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRhbjIoY29sb3IuYiwgY29sb3Iu
YSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0bmVzcywKLSAgICAgICAgc3Rk
OjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVlID49IDAgPyBodWUgOiBodWUg
KyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAgICBmbG9hdCBodWUgPSByYWQy
ZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBzdGQ6Omh5cG90KGEsIGIpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+PSAwID8gaHVlIDogaHVlICsg
MzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYWJMaWtlLCB0eXBlbmFtZSBM
Q0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZvcm0oY29uc3QgTENITGlrZSYg
Y29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jbGNo
LXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRlZzJyYWQoY29sb3IuaHVlKTsK
KyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBj
b2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5j
aHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5hbHBoYQot
ICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChodWUpOworICAgIGZs
b2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpOworICAgIGZsb2F0IGIg
PSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOworCisgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBIU0wgY29udmVyc2lvbnMuCkBA
IC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCB7CiAgICAgZmxv
YXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0
ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW21pbiwgbWF4XSA9
IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47
CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1
bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsK
ICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IK
LSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAgICBhdXRvIFtodWUsIG1pbiwg
bWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAgICBmbG9hdCBsaWdodG5lc3Mg
PSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwpA
QCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0
PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9h
dD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCi0g
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOworICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IGxpZ2h0
bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1
bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3IucmVz
b2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWluICogMTAwLjBmOwogICAgIGF1
dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwogICAgIAotICAgIHJldHVybiB7
IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsg
aHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBI
V0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVz
cywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3aGl0ZW5lc3MgKyBibGFja25l
c3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAvIDEwMC4wZjsK
QEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1
ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IENvbG9y
Q29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+LCBMYWI8ZmxvYXQ+Pjo6Y29u
dmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBmbG9hdCBmMSA9IChjb2xvci5s
aWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQgZjAgPSBmMSArIChjb2xvci5h
IC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9yLmIgLyAyMDAuMGYpOworICAg
IGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAorICAg
IGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4wZjsKKyAgICBmbG9hdCBmMCA9
IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEgLSAoYiAvIDIwMC4wZik7CisK
ICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsKICAgICAgICAgZmxvYXQgdEN1
YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4gTEFCZSkKQEAgLTI0NywzMSAr
MjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJzaW9uPFhZ
WkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hpdGVWYWx1ZXNbMF0gKiBjb21w
dXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZhbHVlc1sxXSAqIGNvbXB1dGVZ
KGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29t
cHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hpdGVWYWx1ZXNbMl0gKiBjb21w
dXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAg
ICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Pjo6Y29udmVydChj
b25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvcikKIHsKLSAgICBmbG9hdCB4
ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZsb2F0IHkgPSBjb2xvci55IC8g
RDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9yLnogLyBENTBXaGl0ZVZhbHVl
c1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisg
ICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVzWzBdOworICAgIGZsb2F0IGFk
anVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBmbG9hdCBhZGp1c3RlZFogPSB6
IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFuc2Zvcm0gPSBbXShmbG9hdCB2
YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8gc3RkOjpjYnJ0KHZhbHVlKSA6
IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAgfTsKIAotICAgIGZsb2F0IGYw
ID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFuc2Zvcm0oeSk7Ci0gICAgZmxv
YXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3RlZFkpOworICAgIGZsb2F0IGYy
ID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQgbGlnaHRuZXNzID0gKDExNi4w
ZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYgKiAoZjAgLSBmMSk7CiAgICAg
ZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJldHVybiB7IGxpZ2h0bmVzcywg
YSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGFscGhh
IH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAgLTMwOCw5ICszMDksMTAgQEAg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAg
ICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0ODQxODIwOTQ5NjU3NTk2ODRm
LCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAgICBhdXRvIFtsaWdodG5lc3Ms
IGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAgICAvLyAxLiBUcmFuc2Zvcm0g
ZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0bmVzcy4KLSAgICBhdXRvIGNv
bXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7CisgICAgYXV0byBjb21wb25l
bnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0bmVzcyAvIDEwMC4wZiwgYSwg
YiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNvb3JkaW5hdGVzIGludG8gbm9u
LWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2VzIi4KICAgICBhdXRvIG5vbkxp
bmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
Y29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8gNC4gQ29udmVydCB0byBYWVou
CiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2NS50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxw
aGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBPS0xhYjxmbG9hdD4g
Q29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1
Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiYgY29sb3IpCkBA
IC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8Zmxv
YXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFmLCAgMC43ODI3NzE3NjYyZiwg
LTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwgeSwgeiwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFlaIGludG8gTE1TICJhcHByb3hp
bWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVh
ckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvciku
c3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0gWFlaRDY1VG9MaW5lYXJMTVMu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IHgs
IHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFyaXR5LgogICAgIGF1dG8gbm9u
TGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikgeyByZXR1cm4gc3RkOjpjYnJ0
KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9u
PE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFtsaWdodG5lc3MsIGEsIGJdID0g
Tm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhub25MaW5lYXJM
TVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBmcm9tIHVuaXQgbGlnaHRuZXNz
IHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4w
ZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MgKiAxMDAuMGYs
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNvbnZlcnNpb25zLgpAQCAtMzcx
LDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4s
IE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29s
b3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMs
IENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
Y29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3Bh
Y2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9y
U3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
aW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwgW291dHB1dENvbG9yU3BhY2Vd
IChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3aXRjaCAob3V0cHV0Q29sb3JT
cGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4UkdCPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0
ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZEE5OFJHQjxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4
dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWREaXNw
bGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3RvUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdC
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRSZWMyMDIwOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRl
ZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAyMDxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkU1JHQjoK
LSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhTTDoKLSAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxDSDoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8Zmxv
YXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpP
S0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFByb1Bob3RvUkdCPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAg
ICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8
ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUwOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENjU6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdo
aXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0
cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgcmV0dXJuIHBs
YXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGlucHV0Q29sb3JD
b21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwxOSArNDM0LDE5IEBAIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvcgogICAgIHJl
dHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNw
YWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAg
ICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpKSB7CiAgICAg
ICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdCOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xv
clNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAgICAgICBjYXNlIFBsYXRmb3Jt
Q29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQ
MzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgZW51bSBjbGFzcyBDb2xv
clNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5w
dXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKTsKIAogLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRzIHdpdGggYXNzb2NpYXRlZCBj
b2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFj
ZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNv
bXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSk7
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpOworQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVyIHRoYW4gWFlaQSBvciB0aG9z
ZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1lbnQKQEAgLTU3LDcgKzU3LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgPSB2
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IGlubGluZSBPdXRw
dXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3JD
b252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0KGNvbG9yKTsKKyAgICByZXR1cm4gQ29s
b3JDb252ZXJzaW9uPENhbm9uaWNhbENvbG9yVHlwZTxPdXRwdXQ+LCBDYW5vbmljYWxDb2xvclR5
cGU8SW5wdXQ+Pjo6Y29udmVydChjb2xvcik7CiB9CiAKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lPiBzdAogCiAg
ICAgICAgIHVzaW5nIElucHV0V2l0aFJlcGxhY2VtZW50ID0gQ29sb3JUeXBlV2l0aFJlcGxhY2Vt
ZW50Q29tcG9uZW50PElucHV0LCBmbG9hdD47CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8SW5wdXRXaXRoUmVwbGFjZW1lbnQsIE91dHB1dD4pCi0gICAgICAgICAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHZhbHVl
IC8gMjU1LjBmOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPElu
cHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKS5t
YXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUuMGY7IH0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxPdXRwdXQ+
KGNvbnZlcnRDb2xvcjxJbnB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CkBAIC0y
MTksMzEgKzIxOSwzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0
LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBPdXRwdXRXaXRoUmVwbGFjZW1lbnQgPSBD
b2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21wb25lbnQ8T3V0cHV0LCBmbG9hdD47CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3V0cHV0V2l0aFJlcGxhY2VtZW50LCBJbnB1
dD4pCi0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpLm1hcChbXShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7IHJldHVy
biBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOyB9KSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xvckNv
bXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90
IHsgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1
bCk7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxP
dXRwdXQ+KGNvbnZlcnRDb2xvcjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQ+KGNvbG9yKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0
ZXhwciBhdXRvIHRvTGluZWFyRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBl
bmFtZSBDb2xvclR5cGU6OkxpbmVhckNvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29sb3JUeXBlOjpUcmFu
c2ZlckZ1bmN0aW9uOjp0b0xpbmVhcihjMSksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6
dG9MaW5lYXIoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMzKSwg
YWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9HYW1tYUVuY29kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpHYW1tYUVuY29kZWRDb3VudGVycGFydAogICAg
IHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVy
biB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzEpLCBDb2xv
clR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMyKSwgQ29sb3JUeXBlOjpU
cmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMyksIGFscGhhIH07CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIHRvRXh0ZW5kZWQoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czx0
eXBlbmFtZSBDb2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9Cb3VuZGVkKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0CiAg
ICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhj
ZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5l
IGNvbnN0ZXhwciBPdXRwdXQgaGFuZGxlUkdCRmFtaWx5Q29udmVyc2lvbihjb25zdCBJbnB1dCYg
Y29sb3IpCkBAIC0zMTIsNyArMzEyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBl
bmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAgICAgICAgIC8vIGhhdmUgc3VmZmljaWVudCB0ZXN0
aW5nIGNvdmVyYWdlIHRvIG5vdGljZSBhbnkgYWR2ZXJzZSBlZmZlY3RzLgogCiAgICAgICAgIGF1
dG8gYXBwbHlNYXRyaWNlcyA9IFtdKGNvbnN0IElucHV0JiBjb2xvciwgYXV0by4uLiBtYXRyaWNl
cykgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpLCBtYXRyaWNlcy4uLikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIG1hdHJpY2Vz
Li4uKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgY29uc3RleHByIChJbnB1dDo6d2hpdGVQ
b2ludCA9PSBPdXRwdXQ6OndoaXRlUG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9s
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHRlbXBsYXRlPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbgogdHlwZW5hbWUgSW50ZXJw
b2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9u
ZW50cyhJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSBpbnRlcnBvbGF0aW9uTWV0aG9kQ29s
b3JTcGFjZSwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlw
ZSBjb2xvcjEsIGRvdWJsZSBjb2xvcjFNdWx0aXBsaWVyLCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9yMiwgZG91YmxlIGNvbG9yMk11bHRpcGxp
ZXIpCiB7CiAgICAgLy8gMS4gQXBwbHkgcHJlLWludGVycG9sYXRpb24gdHJhbnNmb3JtcyAoaHVl
IGZpeHVwIGZvciBwb2xhciBjb2xvciBzcGFjZXMsIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIGlm
IHJlcXVpcmVkKS4KLSAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JDb21wb25lbnRzMSwgbm9ybWFs
aXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlvbk5vcm1hbGl6YXRpb248YWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2UsIGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yMSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMikpOworICAgIGF1
dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29sb3JDb21wb25lbnRz
Ml0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11bHRpcGxpY2F0aW9u
PihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3Ix
LnJlc29sdmVkKCkpLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjIucmVzb2x2ZWQoKSkpOwogCiAg
ICAgLy8gMi4gSW50ZXJwb2xhdGUgdXNpbmcgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50cy4KICAg
ICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29tcG9uZW50cyA9IG1hcENvbG9yQ29tcG9uZW50cyhb
Jl0gKGF1dG8gY29tcG9uZW50RnJvbUNvbG9yMSwgYXV0byBjb21wb25lbnRGcm9tQ29sb3IyKSAt
PiBmbG9hdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1
bWluYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yTHVtaW5hbmNlLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgZG91YmxlIHJlbGF0
aXZlTHVtCiAgICAgLy8gdGhpcyBpbiBDb2xvckNvbnZlcnNpb24uaCBhcyBhIHNpYmxpbmcgZnVu
Y3Rpb24gdG8gY29udmVydENvbG9yIHdoaWNoIGNhbiBnZXQgYSBjaGFubmVsCiAgICAgLy8gb2Yg
YSBjb2xvciBpbiBhbm90aGVyIHNwYWNlIGluIHRoaXMga2luZCBvZiBvcHRpbWFsIHdheS4KIAot
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oY29s
b3IpLnk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpE
NjU+Pihjb2xvcikucmVzb2x2ZWQoKS55OwogfQogCiBpbmxpbmUgZG91YmxlIGNvbnRyYXN0UmF0
aW8oZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQSwgZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JNb2RlbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDkzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBSR0JCb3VuZGVkbmVzcyB7IEJvdW5kZWQsIEV4
dGVuZGVkIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lLCBSR0JCb3VuZGVkbmVzcz4gc3RydWN0IFJH
Qk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRyYWl0czsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvOwotdGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xN
b2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IExDSE1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2Rl
bDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IFhZWk1vZGVsOwogCisvLyBNQVJLOiBSZXNvbHZlZC9VbnJlc29sdmVkIERlZmlu
dGl0aW9ucwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yTW9k
ZWwgPSB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlOwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5
cGU8Q29sb3JUeXBlPiByZXNvbHZlZENvbG9yKENvbG9yVHlwZSBpbnB1dCkKK3sKKyAgICByZXR1
cm4gUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPiB1bnJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBVbnJl
c29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4geyBpbnB1dCB9OworfQorCitpbmxpbmUgY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAg
IHJldHVybiBjb2xvckNvbXBvbmVudHM7Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4mIGNvbG9yQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29sb3JDb21w
b25lbnRzLm1hcChbXSAoZmxvYXQgY29tcG9uZW50KSB7IHJldHVybiBzdGQ6OmlzbmFuKGNvbXBv
bmVudCkgPyAwLjBmIDogY29tcG9uZW50OyB9KTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0cnVjdCBSZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgcmVzb2x2ZWQoKSBvciB1bnJlc29s
dmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSByZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3
ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXRzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8g
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5cGU8Qz4gcmVz
b2x2ZWRDb2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlw
ZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgcmVzb2x2ZShjb2xvcikgfQorICAgIHsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIEM6OkNvbXBvbmVudFR5cGUsIGZsb2F0Pj4qID0gbnVs
bHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQorICAgIHsKKyAg
ICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gcmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhFeHBvc2VkQ29sb3JUeXBlPEMsIHR5cGVuYW1lIEM6Ok1vZGVsPiB7
IGNvbG9yIH0pKTsKKyAgICAgICAgcmV0dXJuIENvbG9yVHlwZSB7IGMxLCBjMiwgYzMsIGFscGhh
IH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDOjpDb21wb25lbnRUeXBlLCB1aW50OF90
Pj4qID0gbnVsbHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RydWN0IFVucmVzb2x2ZWRDb2xvclR5cGUgOiBFeHBvc2VkQ29sb3JU
eXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geworICAgIHVzaW5nIENh
bm9uaWNhbFR5cGUgPSBDb2xvclR5cGU7CisKKyAgICAvLyBDYWxsaW5nIHVucmVzb2x2ZWQoKSBv
biBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHVucmVzb2x2ZWQgaXMgYSBuby1vcCwgc28gd2UgY2Fu
CisgICAgLy8ganVzdCByZXR1cm4gb3V0c2VsdmVzLgorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVz
b2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxDPiB1bnJl
c29sdmVkQ29sb3IoQyk7CisKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9y
VHlwZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5
cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3IgfQorICAgIHsKKyAgICB9Cit9
OworCisKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgc3VwcG9ydCB0eXBlcy4KKwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IHRyYW5zcGFyZW50ID0gMC4wZjsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG9wYXF1ZSA9
IDEuMGY7CkBAIC02OCwxNyArMTQ0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bG9yQ29tcG9uZW50SW5mbyB7CiAgICAgQ29sb3JDb21wb25lbnRUeXBlIHR5cGU7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsPGZsb2F0PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVu
dEluZm8geyB7Ci0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25l
bnRUeXBlOjpOdW1iZXIgfSwKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xv
ckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KLSAgICB9IH07Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rh
bmd1bGFyT3J0aG9nb25hbDsKLX07CisvLyBNQVJLOiAtIENvbG9yIE1vZGVsIERlZmluaXRpdGlv
bnMKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
VXNlc0V4dGVuZGVkUkdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBFeHRlbmRlZFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT4+OworLy8gTUFSSzogSFNMTW9kZWwKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8Zmxv
YXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZv
PGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKQEAgLTkwLDggKzE1OCwyMiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2Fs
UG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOworICAgIHVz
aW5nIENvbG9yVHlwZTo6c2F0dXJhdGlvbjsKKyAgICB1c2luZyBDb2xvclR5cGU6OmxpZ2h0bmVz
czsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFz
Q29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIU0xNb2Rl
bDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlvbiwgYy5saWdodG5l
c3MsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc0hTTE1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CiAKKy8vIE1BUks6IEhXQk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1vZGVsPGZs
b2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5m
bzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgMzYwLCBDb2xvckNv
bXBvbmVudFR5cGU6OkFuZ2xlIH0sCkBAIC0xMDIsOCArMTg0LDIyIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEhXQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjp3aGl0ZW5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpibGFja25lc3M7CisgICAg
dXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29t
cG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFdCTW9kZWw8VD4+JiBj
KQoreworICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFja25lc3MsIGMuYWxw
aGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgVXNlc0hXQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbCwgSFdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKKy8v
IE1BUks6IExhYk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4s
IDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMTQs
OCArMjEwLDIyIEBAIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0
ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExhYk1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmE7CisgICAgdXNp
bmcgQ29sb3JUeXBlOjpiOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGUsIExhYk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5h
LCBjLmIsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgVXNlc0xhYk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUg
Q29sb3JUeXBlOjpNb2RlbCwgTGFiTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlPj47CiAKKy8vIE1BUks6IExDSE1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVs
PGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVy
IH0sCkBAIC0xMjYsOSArMjM2LDIzIEBAIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMQ0hN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpjaHJv
bWE7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBo
YTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgTENITW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMu
bGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0xDSE1vZGVsID0gc3Rk
Ojppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgTENITW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVs
PGZsb2F0PiB7CisvLyBNQVJLOiBSR0JNb2RlbAorCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2Rl
bDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7
IHsKICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAg
ICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMzgsNyArMjYyLDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpS
ZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1
aW50OF90PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90LCBSR0JCb3VuZGVk
bmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNv
bXBvbmVudEluZm88dWludDhfdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwg
MjU1LCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAgICB7IDAsIDI1NSwgQ29s
b3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTE0OCw4ICsyNzIsMzUgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFy
T3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNv
bnN0ZXhwciBib29sIFVzZXNSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9y
VHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+
OwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5kZWRuZXNzOjpFeHRl
bmRlZD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudElu
Zm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgeworICAgICAgICB7IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCisgICAgICAgIHsgLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKKyAgICAgICAg
eyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VD
b29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Cit9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIFJHQkJvdW5kZWRuZXNzIGJvdW5kZWRuZXNzPiBzdHJ1Y3QgRXhw
b3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZSwgYm91bmRlZG5lc3M+PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JU
eXBlOjpyZWQ7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpncmVlbjsKKyAgICB1c2luZyBDb2xvclR5
cGU6OmJsdWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3MgYm91bmRlZG5lc3M+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPFQsIGJvdW5kZWRuZXNzPj4mIGMp
Cit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2Vz
UkdCTW9kZWwgPQorICAgICAgIHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9k
ZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdCQm91bmRl
ZG5lc3M6OkJvdW5kZWQ+PgorICAgIHx8IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlw
ZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdC
Qm91bmRlZG5lc3M6OkV4dGVuZGVkPj47CisKKworLy8gTUFSSzogWFlaTW9kZWwKKwogdGVtcGxh
dGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAg
ICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJl
ciB9LApAQCAtMTYwLDYgKzMxMSw0OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JT
cGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBl
LCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlw
ZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp4OworICAgIHVzaW5nIENvbG9yVHlwZTo6eTsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Ono7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
Q29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBl
PENvbG9yVHlwZSwgWFlaTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMueCwgYy55LCBj
LnosIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc1hZWk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CisKKworLy8gZ2V0PD4gb3ZlcmxvYWQgKGFsb25nIHdpdGggc3RkOjp0dXBsZV9zaXplIGFu
ZCBzdGQ6OnR1cGxlX2VsZW1lbnQgYmVsb3cpIHRvIHN1cHBvcnQgZGVzdHJ1Y3R1cmluZyBvZiBl
eHBsaWNpdGx5IHJlc29sdmVkIGFuZCB1bnJlc29sdmVkIGNvbG9ycy4KKwordGVtcGxhdGU8c2l6
ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZSBnZXQoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGU+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpW0ldOworfQorCit9CisK
K25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0
dXBsZV9zaXplPFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGlj
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVf
dCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6
OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPjo6Q29tcG9u
ZW50VHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxl
X3NpemU8V2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiA6IHB1YmxpYyBz
dGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgND4geyB9OworCit0ZW1wbGF0ZTxzaXplX3Qg
SSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfZWxlbWVudDxJLCBXZWJDb3JlOjpV
bnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21w
b25lbnRUeXBlOworfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpCiB7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIGZsb2F0
Pik7CiAKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
Y29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMx
LCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigi
LCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywg
YzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTM3NCw3ICszNzQsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgSFdCQTxmbG8KIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxh
Yi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
bGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmlu
ZygibGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAt
Mzk1LDcgKzM5NSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChj
b25zdCBMQ0hBPGZsbwogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xv
ci00LyNzZXJpYWxpemluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsK
ICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAi
LCBhbHBoYSwgJyknKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1IKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgT0tMQ0hBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhh
LCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGNoKCIsIGMxLCAiJSAiLCBj
MiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsY2goIiwgYzEsICIl
ICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00NTIsNyArNDUyLDcgQEAg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IE9LTENIQTxmCiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IE9LTGFiPGZsb2F0PiYgY29sb3IsIGJv
b2wpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBb
YzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
Im9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0
cmluZygib2tsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7
CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU1JHQkE8dWlu
dDhfdD4gY29sb3IsIGJvb2wgCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7
CiAKLSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIHN3aXRj
aCAoYWxwaGEpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Jh
KCIsIHJlZCwgIiwgIiwgZ3JlZW4sICIsICIsIGJsdWUsICIsIDApIik7CkBAIC01NTksNyArNTU5
LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBi
b29sCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiAKLSAgICBhdXRvIFty
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChhbHBoYSA9PSAweEZGKQog
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQsIDIsIExvd2VyY2FzZSksIGhl
eChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWUsIDIsIExvd2VyY2FzZSkpOwogICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKQEAgLTU3MCw3ICs1NzAsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4KICAgICBp
ZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhIDwgMHhGRikKICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUs
IDIpLCBoZXgoYWxwaGEsIDIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQs
IDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvclNw
YWNlTWFwcGluZzxTUkdCQTxUPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3Bh
Y2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDUwPj4geyBzdGF0aWMgY29uc3RleHByIGF1
dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENTAgfTsgfTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRlUG9pbnQ6OkQ2NT4+
IHsgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpYWVpfRDY1
IH07IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yU3Bh
Y2UgQ29sb3JTcGFjZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENvbG9yVHlwZT46OmNvbG9yU3Bh
Y2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclNwYWNlIENv
bG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFwcGluZzxDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JU
eXBlPj46OmNvbG9yU3BhY2U7CiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVu
Y3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNhbGxXaXRoQ29sb3JUeXBlKGNvbnN0IENv
bG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBG
dW5jdG9yJiYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgs
MTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUsIFdoaXRlUG9pbnQ+IHN0cnVjdCBYWVpBOwogCiAvLyBN
QVJLOiBNYWtlIGZ1bmN0aW9ucy4KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8VCwgND4mIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lk
PiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJlciA9IGZhbHNlOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nhbm9uaWNhbFR5
cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q2Fub25pY2FsVHlwZT4+ID0gdHJ1
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBib29sIGhhc0Nvbm9uaWNhbFR5cGU+
IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXIgeyB1c2luZyB0eXBlID0gQ29sb3JUeXBl
OyB9OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgQ2Fub25pY2FsQ29sb3JU
eXBlSGVscGVyPENvbG9yVHlwZSwgdHJ1ZT4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgQ29sb3JU
eXBlOjpDYW5vbmljYWxUeXBlOyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHVz
aW5nIENhbm9uaWNhbENvbG9yVHlwZSA9IHR5cGVuYW1lIENhbm9uaWNhbENvbG9yVHlwZUhlbHBl
cjxDb2xvclR5cGUsIEhhc0Nhbm9uaWNhbFR5cGVNZW1iZXI8Q29sb3JUeXBlPj46OnR5cGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8g
bWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgYykKIHsKLSAg
ICByZXR1cm4gQ29sb3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworICAgIHJldHVy
biBDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlw
ZW5hbWUgVD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZQpAQCAtOTcsNDYgKzEwNSw1MCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2wKICAgICByZXR1cm4g
eyBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksIGNsYW1wZWRDb21w
b25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIDI+KGNvbXBvbmVudHMpLCBjb21wb25lbnRzWzNdIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRv
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYg
Y29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4o
Y2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBv
bmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50PENvbG9y
VHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBjbGFtcGVk
Q29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHND
bGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQogewogICAgIHJldHVybiBtYWtlRnJv
bUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50
PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBj
bGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBjbGFtcGVkQWxwaGE8VCwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0
PiYgY29tcG9uZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4g
Y29uc3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShjb25z
dCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29s
b3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBUIGMzLCBBbHBoYSBhbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxw
aGE+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGEo
VCBjMSwgVCBjMiwgVCBjMywgQWxwaGEgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGFscGhhIH0pOwogfQogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5S
YW5nZShUIGNvbG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgorY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShD
b2xvclR5cGUgY29sb3IpCiB7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjx0eXBl
bmFtZSBUOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVu
dHNbaV0gPj0gVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAiQ29tcG9uZW50IGF0IGlu
ZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4pOwotICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IFQ6Ok1vZGVsOjpjb21w
b25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3Jl
YXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6
TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4KTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBv
bmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhl
IGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJh
aXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6
Q29tcG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4g
dGhlIGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0
czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShj
b21wb25lbnRzW2ldID49IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAi
Q29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25l
bnRJbmZvW2ldLm1pbik7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tp
XSA8PSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBh
dCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0g
JWYiLCBpLCAgY29tcG9uZW50c1tpXSwgQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tp
XS5tYXgpOwogICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbM10gPj0g
QWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJl
bnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRy
YW5zcGFyZW50KSAlZiIsIGNvbXBvbmVudHNbM10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbXBvbmVudHNbM10gPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUg
YWxsb3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgdWludDhfdD4+KiA9IG51
bGxwdHI+Citjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKENvbG9yVHlwZSkKK3sKK30KKwog
I2Vsc2UKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5n
ZShUKQpAQCAtMTQ2LDcgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2
b2lkIGFzc2VydEluUmFuZ2UoVCkKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5h
bWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21w
b25lbnRzID0gZmFsc2U7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJv
b2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBl
KGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6ZGVjbHZhbDxUPigpKSk+PiA9IHRydWU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JD
b21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6
ZGVjbHZhbDxUPigpLnVucmVzb2x2ZWQoKSkpPj4gPSB0cnVlOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29tcG9uZW50VHlw
ZU1lbWJlciA9IGZhbHNlOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBi
b29sIEhhc0NvbXBvbmVudFR5cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q29t
cG9uZW50VHlwZT4+ID0gdHJ1ZTsKQEAgLTE2Niw5ICsxNzgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAKICAgICAvLyBlLmcuIGF1dG8g
eWVsbG93V2l0aDUwUGVyY2VudEFscGhhID0gQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYUJ5
dGUoMTI4KTsKICAgICBjb25zdGV4cHIgUGFyZW50IGNvbG9yV2l0aEFscGhhQnl0ZSh1aW50OF90
IG92ZXJyaWRlQWxwaGEpIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxQYXJlbnQ+KCkuYWxwaGEpLCB1aW50OF90
PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFBhcmVudDo6Q29tcG9u
ZW50VHlwZSwgdWludDhfdD4sICJPbmx5IHVpbnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1
cHBvcnRlZC4iKTsKIAotICAgICAgICBhdXRvIGNvcHkgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgUGFy
ZW50Kj4odGhpcyk7CisgICAgICAgIGF1dG8gY29weSA9IHN0YXRpY19jYXN0PGNvbnN0IFBhcmVu
dCo+KHRoaXMpLT51bnJlc29sdmVkKCk7CiAgICAgICAgIGNvcHkuYWxwaGEgPSBvdmVycmlkZUFs
cGhhOwogICAgICAgICByZXR1cm4gY29weTsKICAgICB9CkBAIC0xNzgsNyArMTkwLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1Y3QgQ29sb3JXaXRoQWxwaGFIZWxwZXIgCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252
ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yVHlwZSYgYSwgY29uc3QgQ29sb3JUeXBlJiBi
KQogewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYS51bnJlc29sdmVkKCkpID09IGFz
Q29sb3JDb21wb25lbnRzKGIudW5yZXNvbHZlZCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29udmVydGlibGVUb0NvbG9y
Q29tcG9uZW50czxDb2xvclR5cGU+PiogPSBudWxscHRyPgpAQCAtMjAzLDcgKzIxNSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Ci0g
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOworICAgICAgICBhc3NlcnRJblJhbmdlKCpzdGF0
aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7CiAgICAgfQogCiAgICAgY29uc3RleHBy
IFJHQkFUeXBlKCkKQEAgLTIxMSwyMSArMjIzLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAgIHsKICAgICB9CiAKKworICAgIGNv
bnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8
Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIHJlZDsKICAg
ICBUIGdyZWVuOwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBNLCB0eXBl
bmFtZSBURj4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50
cyhjb25zdCBSR0JBVHlwZTxULCBELCBDb2xvclR5cGUsIE0sIFRGPiYgYykKLXsKLSAgICByZXR1
cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Ci19Ci0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdC
QVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OkNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2Rl
ZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rp
b248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3Qg
Qm91bmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+
LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6
UkdCQVR5cGU7CiAKICAgICB1c2luZyBMaW5lYXJDb3VudGVycGFydCA9IEJvdW5kZWRMaW5lYXJF
bmNvZGVkPFQsIEQ+OwogICAgIHVzaW5nIEV4dGVuZGVkQ291bnRlcnBhcnQgPSBFeHRlbmRlZEdh
bW1hRW5jb2RlZDxULCBEPjsKQEAgLTIzNCw4ICsyNDUsOCBAQCBzdHJ1Y3QgQm91bmRlZEdhbW1h
RW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW0KIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlw
ZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1l
IEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNs
YW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9u
PFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJv
dW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6
dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBl
ZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBE
PiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1w
bGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46
OlJHQkFUeXBlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6
bGluZWFyVG9YWVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6
eHl6VG9MaW5lYXI7CkBAIC0yNDcsOCArMjU4LDggQEAgc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNv
ZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBEPgotc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OlVuY2xhbXBlZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFU
eXBlOworc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5k
ZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRl
ZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5j
dGlvbk1vZGU6OlVuY2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRl
ZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVk
PiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0
aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRl
cnBhcnQgPSBFeHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgQm91bmRlZENv
dW50ZXJwYXJ0ID0gQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPjsKQEAgLTI1Niw4ICsyNjcsOCBA
QCBzdHJ1Y3QgRXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEcK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRM
aW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+
LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0
aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdC
QVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVs
PFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVu
Y3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJF
bmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JN
b2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Cisg
ICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JN
b2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBU
cmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdC
QVR5cGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5l
YXJUb1hZWjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpU
b0xpbmVhcjsKQEAgLTQzNCwxNyArNDQ1LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBlcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4
cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9
CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2
ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQg
YTsKICAgICBUIGI7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGFi
PFQ+JiBjKQotewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0xhYiA9IHN0ZDo6aXNfc2FtZV92PExhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIExDSEEgQ29sb3IgVHlwZS4KQEAgLTQ2
OSwxNyArNDc5LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHBy
IGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7
IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQg
aHVlOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExDSEE8VD4mIGMp
Ci17Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBJc0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxMQ0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMYWIgQ29sb3IgVHlwZS4KQEAg
LTUwNCwxNyArNTEzLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xhYiA6IENv
bG9yV2l0aEFscGhhSGVscAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNv
bHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3Rl
eHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhp
cyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7
CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMYWI8VD4mIGMpCi17
Ci0gICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzT0tMYWIg
PSBzdGQ6OmlzX3NhbWVfdjxPS0xhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIE9LTENIQSBDb2xvciBUeXBlLgpAQCAtNTM5LDE3
ICs1NDcsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9LTENIQSA6IENvbG9yV2l0
aEFscGhhSGVsCiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkg
Y29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0
byB1bnJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQor
Citwcm90ZWN0ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7
CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMQ0hBPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
SXNPS0xDSEEgPSBzdGQ6OmlzX3NhbWVfdjxPS0xDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPiwgQ29sb3JUeXBlPjsKIAogCkBAIC01NzUsMTcgKzU4MiwxNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAg
ICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNv
bHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25z
dCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBU
IGh1ZTsKICAgICBUIHNhdHVyYXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwg
ND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBj
Lmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0hTTEEgPSBzdGQ6
OmlzX3NhbWVfdjxIU0xBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9y
VHlwZT47CiAKIC8vIE1BUks6IC0gSFdCQSBDb2xvciBUeXBlLgpAQCAtNjEwLDE3ICs2MTYsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhXQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBl
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0
ZWQ6CiAgICAgVCBodWU7CiAgICAgVCB3aGl0ZW5lc3M7CiAgICAgVCBibGFja25lc3M7CiAgICAg
VCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFdCQTxUPiYgYykKLXsKLSAgICBy
ZXR1cm4geyBjLmh1ZSwgYy53aGl0ZW5lc3MsIGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFdC
QSA9IHN0ZDo6aXNfc2FtZV92PEhXQkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
PiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBYWVogQ29sb3IgVHlwZS4KQEAgLTY0NSwxNyAr
NjUwLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9pbnQgVz4gc3RydWN0IFhZWkEg
OiBDb2xvcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKwor
cHJvdGVjdGVkOgogICAgIFQgeDsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CiB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBDb2xvckNv
bXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgWFlaQTxULCBXPiYgYykKLXsK
LSAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzWFlaQSA9IHN0ZDo6aXNf
c2FtZV92PFhZWkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBDb2xvclR5cGU6
OndoaXRlUG9pbnQ+LCBDb2xvclR5cGU+OwogCiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpAQCAt
NjY4LDExICs2NzIsMTYgQEAgc3RydWN0IFJHQkEgewogICAgIHsKICAgICB9CiAKLSAgICBjb25z
dGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIg
ZXhwbGljaXQgUkdCQShSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAg
ICAgICAgIDogdmFsdWUgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29sb3IucmVkIDw8IDI0IHwg
Y29sb3IuZ3JlZW4gPDwgMTYgfCBjb2xvci5ibHVlIDw8IDggfCBjb2xvci5hbHBoYSkgfQogICAg
IHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBj
b2xvcikKKyAgICAgICAgOiBSR0JBIHsgY29sb3IucmVzb2x2ZWQoKSB9CisgICAgeworICAgIH0K
KwogICAgIHVpbnQzMl90IHZhbHVlOwogfTsKIApAQCAtNjgyLDggKzY5MSwxMyBAQCBzdHJ1Y3Qg
QVJHQiB7CiAgICAgewogICAgIH0KIAotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yKQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFJlc29sdmVkQ29s
b3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19j
YXN0PHVpbnQzMl90Pihjb2xvci5hbHBoYSA8PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9y
LmdyZWVuIDw8IDggfCBjb2xvci5ibHVlKSB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhw
ciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgICAgICA6IEFSR0IgeyBj
b2xvci5yZXNvbHZlZCgpIH0KICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNSR0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICog
YSwgYSB9OwogfQogCiBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICBy
ZXR1cm4gY29sb3I7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8U1JHQkE8ZmxvYXQ+PihyIC8gYSwgZyAvIGEsIGIgLyBhLCBhKTsKQEAgLTQ0LDcgKzQ0
LDcgQEAgU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yCiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVy
biB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC01NCw3ICs1NCw3IEBAIFNS
R0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjbwogCiBT
UkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxp
bmUgdWludDE2X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aQogCiBTUkdCQTx1aW50
OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29s
dmVkKCk7CiAgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7CiAg
ICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8dWlu
dDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGll
ZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSks
IGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYs
MjEgQEAgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0
KTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29s
b3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0
b3ImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1
dG8gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYs
IEZ1bmN0b3ImJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENv
bG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhf
dCBvdmVycmlkZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlk
ZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJp
ZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFs
cGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxw
aGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRl
ZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJy
aWRlQWxwaGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxw
aGEpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4g
fHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlz
QmxhY2soY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4
dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0
cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8
Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xv
clR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xD
SE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+
IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENv
bG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4g
Y29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29s
b3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5
cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCkBAIC05MywzNSArOTMs
MzUgQEAgdGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4o
ZmxvCiAgICAgcmV0dXJuIGNsYW1wZWRBbHBoYSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmlu
Z0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYg
ZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4g
YXV0byBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgRnVuY3RvciYmIGZ1bmN0b3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXND
b2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAg
ICAgY29weVswXSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBvbmVudHNbMF0pOwogICAgIGNv
cHlbMV0gPSBzdGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzFdKTsKICAgICBjb3B5WzJd
ID0gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBjb21wb25lbnRz
WzJdKTsKLSAgICByZXR1cm4geyBjb3B5WzBdLCBjb3B5WzFdLCBjb3B5WzJdLCBjb3B5WzNdIH07
CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRo
T3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JX
aXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJp
ZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xv
ci51bnJlc29sdmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVy
biBjb3B5OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xv
cldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJp
ZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29s
dmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29s
b3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGlu
dmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVp
bnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIGF1dG8gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29s
b3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTEzMSwxMSArMTMxLDEx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZl
cgogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhP
dmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBpbnZlcnRlZENvbG9yV2l0aE92
ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KQogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsK
IAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAg
ICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDM7ICsraSkKQEAgLTE0NywxOSArMTQ3LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNv
bnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAg
IHJldHVybiBjb2xvci55ID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+
OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZWRDb2xvci55ID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBB
bHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8
IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBj
b25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0
dXJuIGNvbG9yLmxpZ2h0bmVzcyA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZs
b2F0Pjo6b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7
CisgICAgcmV0dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNzID09IDAgJiYgcmVzb2x2ZWRDb2xv
ci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxD
b2xvclR5cGU+fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2Rl
bDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0
byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBjb25zdGV4cHIg
YXV0byBjb21wb25lbnRJbmZvID0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mbzsKICAg
ICByZXR1cm4gYzEgPT0gY29tcG9uZW50SW5mb1swXS5taW4gJiYgYzIgPT0gY29tcG9uZW50SW5m
b1sxXS5taW4gJiYgYzMgPT0gY29tcG9uZW50SW5mb1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQpAQCAt
MTY3LDI0ICsxNjksMjcgQEAgY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNr
KGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmJsYWNrbmVzcyA9
PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAg
YXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2
ZWRDb2xvci5ibGFja25lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFU
cmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0
dXJuIGNvbG9yLnkgPT0gMSAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9w
YXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJl
dHVybiByZXNvbHZlZENvbG9yLnkgPT0gMSAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhh
VHJhaXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNl
c0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0
ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4g
Y29sb3IubGlnaHRuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOwor
ICAgIHJldHVybiByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xv
ci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxD
b2xvclR5cGU+IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9k
ZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUm
IGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHBy
IGF1dG8gY29tcG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAg
ICAgcmV0dXJuIGMxID09IGNvbXBvbmVudEluZm9bMF0ubWF4ICYmIGMyID09IGNvbXBvbmVudElu
Zm9bMV0ubWF4ICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWF4ICYmIGFscGhhID09IEFscGhh
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAg
LTE5Miw3ICsxOTcsOCBAQCBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUo
Y29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3Iud2hpdGVuZXNzID09
IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBh
dXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZl
ZENvbG9yLndoaXRlbmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRy
YWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyODc0ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUg
eyAocHVibGljKQogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KTsKKyAg
ICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuYWxwaGEpIHsKICAg
ICAgICAgICAgIHNldFBpeGVsKGRlc3QsIHIsIGcsIGIsIGEpOwpAQCAtMTYwLDcgKzE2MCw3IEBA
IGNsYXNzIEltYWdlQmFja2luZ1N0b3JlIHsgKHB1YmxpYykKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBs
aWVkRmxvb3JpbmcocGl4ZWwpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxv
b3JpbmcocGl4ZWwpLnJlc29sdmVkKCk7CiAKICAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBD
b2xvCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07
CiB9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0VG9WYWx1ZShjb25zdCBDb2xvciYKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHIpLCBA
KGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjwKICAgICAgICAgcmV0dXJu
OwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24u
Z2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsK
LSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBAW0AociksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcgogICAgIGlmIChhbmlt
YXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29tcG9uZW50
cyA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
ICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBj
b21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZl
Y3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFu
aW1hdGlvblNldEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CkBAIC00MjMs
NyArNDIzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKGNvbnN0
IFdlYkNvcmU6CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5y
ZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9
OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3Jl
YXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQo
KSwgdi5nZXQoKSk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
V2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlCiAgICAgICAgIAogICAgIFJldGFpblB0cjxD
Rk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAs
IHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlW2ldLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2
ZWQoKTsKICAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50
cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAgIFJl
dGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEp
KTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBz
cmNDciwgY2Fpcm9fdCogZHMKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3Qq
IGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIAogc3RhdGljIHZvaWQgYWRk
Q29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudENvbG9yU3Rv
cCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZz
ZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShj
YWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3As
IGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fp
cm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcs
IGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBA
IHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbgog
ICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihk
YXRhU3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbG9naWNh
bFNpemUoKS53aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJv
dyArIHg7Ci0gICAgICAgICAgICBhdXRvIHBpeGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGll
ZChhc1NSR0JBKFBhY2tlZENvbG9yOjpBUkdCIHsgKnBpeGVsIH0pKTsKKyAgICAgICAgICAgIGF1
dG8gcGl4ZWxDb21wb25lbnRzID0gdW5wcmVtdWx0aXBsaWVkKGFzU1JHQkEoUGFja2VkQ29sb3I6
OkFSR0IgeyAqcGl4ZWwgfSkpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICBwaXhlbENvbXBvbmVu
dHMgPSB7IGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5yZWRdLCBsb29rVXBUYWJsZVtwaXhl
bENvbXBvbmVudHMuZ3JlZW5dLCBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMuYmx1ZV0sIHBp
eGVsQ29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICAgICAgKnBpeGVsID0gUGFja2VkQ29sb3I6
OkFSR0IgeyBwcmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVudHMpIH0udmFsdWU7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9y
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcs
MTIgQEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3BhY2VSZWYsIENvbG9yQ29tcG9uZW50czxm
bG9hCiAgICAgaWYgKCFjZ0NvbG9yU3BhY2UpIHsKICNpZiBIQVZFKENPUkVfR1JBUEhJQ1NfRVhU
RU5ERURfU1JHQl9DT0xPUl9TUEFDRSkKICAgICAgICAgYXV0byBjb21wb25lbnRzQ29udmVydGVk
VG9FeHRlbmRlZFNSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29tcG9uZW50cywgY29sb3JTcGFj
ZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNS
R0JBPGZsb2F0Pj4oY29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuIHsgZXh0ZW5kZWRTUkdCQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzQ29udmVydGVkVG9F
eHRlbmRlZFNSR0JBIH07CiAjZWxzZQogICAgICAgICBhdXRvIGNvbXBvbmVudHNDb252ZXJ0ZWRU
b1NSR0JBID0gY2FsbFdpdGhDb2xvclR5cGUoY29tcG9uZW50cywgY29sb3JTcGFjZSwgW10gKGNv
bnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb2xvcikucmVzb2x2
ZWQoKSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4geyBzUkdCQ29sb3JTcGFjZVJlZigp
LCBjb21wb25lbnRzQ29udmVydGVkVG9TUkdCQSB9OwogI2VuZGlmCkBAIC0xNjMsNyArMTYzLDcg
QEAgc3RhdGljIHN0ZDo6cGFpcjxDR0NvbG9yU3BhY2VSZWYsIENvbG9yQ29tcG9uZW50czxmbG9h
CiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY3JlYXRlQ0dDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvci5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gY29sb3IuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAg
YXV0byBbY2dDb2xvclNwYWNlLCBjZ0NvbXBhdGlibGVDb21wb25lbnRzXSA9IGNvbnZlcnRUb0NH
Q29tcGF0aWJsZUNvbXBvbmVudHMoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7CiAgICAgCiAgICAg
YXV0byBbYzEsIGMyLCBjMywgYzRdID0gY2dDb21wYXRpYmxlQ29tcG9uZW50czsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRSZW5kZXJlckNHLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcyLDggKzQ3Miw3IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRS
ZW5kZXJlckNHOjptYWtlRwogICAgIC8vIGV4dGVuZGVkIHNSR0IgZm9yIGFsbCBncmFkaWVudHMu
CiAgICAgaWYgKGhhc09ubHlCb3VuZGVkU1JHQkNvbG9yU3RvcHMoc3RvcHMpKSB7CiAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKSB7Ci0gICAgICAgICAgICBhdXRvIFtjb2xv
clNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KTsKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKKyAgICAgICAg
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hl
Y2tlZEFwcGVuZChyKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRBcHBl
bmQoZyk7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5kKGIpOwpA
QCAtNDg4LDkgKzQ4Nyw5IEBAIEdyYWRpZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRS
ZW5kZXJlckNHOjptYWtlRwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3Bz
KSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNTX0VYVEVOREVEX1NSR0JfQ09MT1JfU1BBQ0UpCi0g
ICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PigpLnJl
c29sdmVkKCk7CiAjZWxzZQotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOworICAgICAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CiAjZW5kaWYKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNr
ZWRBcHBlbmQocik7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2VkQXBwZW5k
KGcpOwpAQCAtNTQ2LDcgKzU0NSw3IEBAIHZvaWQgR3JhZGllbnRSZW5kZXJlckNHOjpTaGFkaW5n
OjpzaGFkaW5nRnVuY3Rpb24odm9pZAogICAgICAgICBtYWtlRnJvbUNvbXBvbmVudHM8SW50ZXJw
b2xhdGlvblNwYWNlQ29sb3JUeXBlPihzdG9wMS5jb2xvckNvbXBvbmVudHMpLCBvZmZzZXQpOwog
CiAgICAgLy8gNC4gQ29udmVydCB0byB0aGUgb3V0cHV0IGNvbG9yIHNwYWNlLgotICAgIGF1dG8g
aW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091dHB1dFNwYWNlID0gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPE91dHB1dFNwYWNlQ29sb3JUeXBlPihpbnRlcnBvbGF0ZWRDb2xvcikp
OworICAgIGF1dG8gaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRUb091dHB1dFNwYWNlID0gYXND
b2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE91dHB1dFNwYWNlQ29sb3JUeXBlPihpbnRlcnBv
bGF0ZWRDb2xvcikucmVzb2x2ZWQoKSk7CiAKICAgICAvLyA1LiBXcml0ZSBjb2xvciBjb21wb25l
bnRzIHRvICdvdXQnIHBvaW50ZXIuCiAgICAgZm9yIChzaXplX3QgY29tcG9uZW50SW5kZXggPSAw
OyBjb21wb25lbnRJbmRleCA8IGludGVycG9sYXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFj
ZS5zaXplKCk7ICsrY29tcG9uZW50SW5kZXgpCkBAIC01NjAsNyArNTU5LDcgQEAgR3JhZGllbnRS
ZW5kZXJlckNHOjpTdHJhdGVneSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VTCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihjb2xvckludGVycG9sYXRpb25NZXRob2QuY29sb3JTcGFj
ZSwKICAgICAgICAgICAgICAgICBbJl0gKGF1dG8mIGNvbG9yU3BhY2UpIC0+IENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gewogICAgICAgICAgICAgICAgICAgICB1c2luZyBDb2xvclR5cGUgPSB0
eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxkZWNsdHlwZShjb2xvclNwYWNlKT46OkNv
bG9yVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yLnRlbXBsYXRlIHRvQ29sb3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnRlbXBsYXRlIHRvQ29sb3JU
eXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICk7CiAgICAgICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGlu
Z05FT04uaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVv
bihjb25zdCBMaWdodGkKICAgICAvLyBTZXQgbGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBm
bG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7CiAKLSAgICBhdXRvIGNvbG9yID0gbV9saWdodGlu
Z0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29sb3IgPSBtX2xpZ2h0
aW5nQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwog
CiAgICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBjb2xvci5yZWQ7CiAgICAgZmxvYXRBcmd1
bWVudHMuY29sb3JHcmVlbiA9IGNvbG9yLmdyZWVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOSAr
OTIsMTkgQEAgYm9vbCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1D
b2xvcihTCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlTQ0FMRTogewot
ICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4o
Z3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91
bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJl
c29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElB
OiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8Zmxv
YXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQp
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29s
dmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RB
VEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxm
bG9hdD4+KGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZUNvbG9yTWF0cml4
KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvci5yZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2Fz
ZSBTQVRVUkFURTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29s
b3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNhdHVyYXRpb25D
b2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNv
bXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGRlZmF1bHQ6CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1DCiB7CiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIE9QQUNJVFk6Ci0gICAgICAgIGNvbG9yLmFscGhhICo9IG1fYW1vdW50Owor
ICAgICAgICBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb2xvciwgc3RkOjpjbGFt
cDxmbG9hdD4oY29sb3IucmVzb2x2ZWQoKS5hbHBoYSAqIG1fYW1vdW50LCAwLjBmLCAxLjBmKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgSU5WRVJUOiB7CiAgICAgICAgIGZsb2F0
IG9uZU1pbnVzQW1vdW50ID0gMS4wZiAtIG1fYW1vdW50OwpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0
YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGh1ZVJvdGF0ZShjb25zdCBDb2xvcgogCiBi
b29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoU1JHQkE8
ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVu
dHMgPSBodWVSb3RhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLCAwLjVmKTsKKyAgICBhdXRv
IGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IucmVzb2x2ZWQoKSksIDAuNWYpOwogICAgIAogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXgu
IFNlZSByZGFyOi8vcHJvYmxlbS80MTE0NjY1MCBmb3IgaG93IHRoaXMgbWF0cml4IHdhcyBkZXJp
dmVkLgogICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDw1LCAzPiB0b0RhcmtNb2RlTWF0cml4IHsK
QEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6
aW52ZXJzZVRyYW5zZm9ybUMKICAgICAgICAgLTAuMDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4w
ZiwgMS4yNWYsCiAgICAgICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVm
CiAgICAgfTsKLSAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlQ29tcG9uZW50cyA9IHRvTGln
aHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0b0xp
Z2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvci5yZXNvbHZlZCgpKSk7CiAKICAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVu
dHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRzLCAwLjVmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25z
Ojp0cmFuc2Zvcm1Db2xvcihDb2xvciYgY29sb3IpIGNvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50
aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0gY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRp
b24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNv
bG9yKHNSR0JBQ29sb3IpKQpAQCAtMTMwLDcgKzEzMCw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9u
czo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKENvbG9yJiBjbwogICAgIGlmIChjb2xvci5pc1NlbWFu
dGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0
aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJh
bnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBA
QCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgTGkK
IHsKICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKIAotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5D
b2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNvbG9y
U3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRp
YWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywgYik7CiAKICAg
ICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmZpbHRlciwgKmRhdGEu
cmVzdWx0LCBwYWludGluZ0RhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGNs
YXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlYwogICAg
IHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0
aCkgeyByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsgfQogICAgIHN0YXRpYyBpbmxpbmUgUGFj
a2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykgeyByZXR1cm4gUGFja2VkQ29s
b3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMp
IH07IH0KIAotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1h
a2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkg
eyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOyB9CisgICAgc3RhdGlj
IGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zy
b21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhhc1NSR0JBKHBpeGVsKS5yZXNvbHZlZCgpKTsgfQogICAgIHN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDcgQEAgQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGNvbG9yKQog
CiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIHJldHVybiB7IHIs
IGcsIGIsIGEgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmCiAgICAgUmVmPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dy
YW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwogICAgIGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHBy
ZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9h
dD4+KCkpLnJlc29sdmVkKCk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlv
bigpLCByLCBnLCBiLCBhKTsKICAgICBnbExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3Niw3ICsy
NzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtYmVyLCBjb25z
dCBDb2wKICAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKIAogICAgIC8v
IFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5nIGEgdGV4dHVyZSwgcGFpbnQg
d2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJvX3Nl
dF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAKICAgICBjYWlyb19yZWN0YW5nbGUoY3Is
IDAsIDAsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDE1LDcgKzQxNSw3IEBAIHN0YXRpYyB2b2lkIHBy
ZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVk
IHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5n
LgotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5j
b2xvcigpLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFt
LmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihw
cm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBm
bG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNo
YWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNzM1LDcgKzczNSw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmIAogICAgIGlmIChj
bGlwU3RhY2soKS5pc1JvdW5kZWRSZWN0Q2xpcEVuYWJsZWQoKSkKICAgICAgICAgcHJlcGFyZVJv
dW5kZWRSZWN0Q2xpcChwcm9ncmFtLmdldCgpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvbXBv
bmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RJbnZlcnNlVHJhbnNmb3JtQ29tcG9uZW50
cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdENvdW50KCkpOwogCi0gICAgYXV0byBbciwgZywg
YiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8
U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNv
bG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdB
bGxvd2VkKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKQEAgLTc0NSw3ICs3NDUsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiAK
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9h
dD4+KCkucmVzb2x2ZWQoKTsKICAgICBnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgZ2xD
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRp
cmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIENvbG9yOjpDb2xv
cihEMkQxX0NPTE9SX0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBj
b25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwogfQogCiBD
b2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4g
RDJEMTo6VmVjdG9yNEYociwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBJ
RDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqIHIKICAg
ICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwog
ICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgotICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogICAgICAgICBncmFkaWVudFN0b3BzLmdyYWRpZW50U3RvcHMudW5jaGVja2VkQXBw
ZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIs
IGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnMKICAgICBz
dGF0aWMgY29uc3RleHByIGF1dG8gc3BlbGxpbmdQYXR0ZXJuQ29sb3IgPSBDb2xvcjo6cmVkOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBncmFtbWFyUGF0dGVybkNvbG9yID0gQ29sb3I6OmRh
cmtHcmVlbjsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3R5bGUubW9kZSA9PSBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IgOiBz
cGVsbGluZ1BhdHRlcm5Db2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0eWxlLm1vZGUg
PT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVy
bkNvbG9yLnJlc29sdmVkKCkgOiBzcGVsbGluZ1BhdHRlcm5Db2xvci5yZXNvbHZlZCgpOwogICAg
IENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogCiAgICAg
Q0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI4NzQ4MikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2wKIAogRDJEMV9DT0xP
Ul9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBD
b2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIHJldHVybiBEMkQxOjpD
b2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1OTQsNyArMTU5NCw3IEBAIGNvbnN0ZXhwciBmbG9hdCBkYXRlUGxhY2Vo
b2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbgogQ29sb3IgUmVuZGVyVGhlbWU6OmRhdGVQbGFj
ZWhvbGRlclRleHRDb2xvcihjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciB1c2luZyBMQ0hB
PGZsb2F0PiByYXRoZXIgdGhhbiBIU0xBPGZsb2F0PiBmb3IgYmV0dGVyIHBlcmNlcHR1YWwgcmVz
dWx0cyBhbmQgdG8gYXZvaWQgY2xhbXBpbmcgdG8gc1JHQiBnYW11dCwgd2hpY2ggaXMgd2hhdCBI
U0xBIGRvZXMuCi0gICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNM
QTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8
SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBpZiAodGV4dENvbG9yLmx1bWluYW5jZSgp
IDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQogICAgICAgICBoc2xhLmxpZ2h0bmVzcyAr
PSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbnRGYWN0b3IgKiAoMTAwLjBm
IC0gaHNsYS5saWdodG5lc3MpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3
ICsxMzA3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb252ZXhHcmFkaWVudChjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSBiZSB1c2luZyBsdW1pbmFuY2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5k
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFj
a2dyb3VuZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9
KTsKICAgICByZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41Owog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9u
QWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEs
MTAgQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRp
b25BCiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVudCYsIGZsb2F0IHByb2dyZXNzLCB1bnNp
Z25lZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAgYXV0byBz
aW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAg
ICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8g
PyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAg
ICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAg
IGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0
ZWQudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAg
ICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8g
PyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVU
b0F0RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0aW9uKCkudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAKICAgICAgICAgZmxvYXQgcmVk
ID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20ucmVkLCBz
aW1wbGVUby5yZWQsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLnJlZCwgc2ltcGxlQW5pbWF0ZWQu
cmVkKTsKICAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBl
YXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uZ3JlZW4sIHNpbXBsZVRvQXRFbmRP
ZkR1cmF0aW9uLmdyZWVuLCBzaW1wbGVBbmltYXRlZC5ncmVlbik7CkBAIC0xMDMsOCArMTAzLDgg
QEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25B
CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICAgICAgCi0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAg
IGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+
KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICBmbG9hdCByZWQgPSBzaW1wbGVGcm9tLnJlZCAtIHNp
bXBsZVRvLnJlZDsKICAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuIC0gc2lt
cGxlVG8uZ3JlZW47CkBAIC0xMTYsOCArMTE2LDggQEAgY2xhc3MgU1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbiA6IHB1YmxpYyBTVkdBbmltYXRpb25BCiBwcml2YXRlOgogICAgIHZvaWQgYWRkRnJv
bUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQmKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgYXV0byBz
aW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRv
IHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBz
aW1wbGVGcm9tID0gbV9mcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVz
b2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFs
cGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0byAxMDAlIG9wYXF1ZS4KICAgICAgICAgbV90
byA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihzaW1wbGVUby5y
ZWQgKyBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8uZ3JlZW4gKyBzaW1wbGVGcm9tLmdyZWVuLCBz
aW1wbGVUby5ibHVlICsgc2ltcGxlRnJvbS5ibHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDIyLTAxLTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgcmVzb2x2ZWQvdW5yZXNvbHZlZCBjb2xvciB0eXBlIGFjY2Vzc29ycyB0byBy
ZXF1aXJlIHVzZXJzIHRvIGJlIGV4cGxpY2l0IGFib3V0IHdoZXRoZXIgdGhleSB3aWxsIGhhbmRs
ZSBtaXNzaW5nL25vbmUgY29sb3IgY29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIENvbG9yOjp0b1NSR0JBTG9z
c3k8PigpIHdpdGggQ29sb3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4oKSBhbmQgYWRkCisg
ICAgICAgIGNhbGxzIHRvIHJlc29sdmVkKCkgdG8gYWNjZXNzIGNvbG9yIGNvbXBvbmVudHMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlT
dGF0aW9uLmNwcDoKKyAgICAgICAgKGRyYXdQYWdlQmFja2dyb3VuZCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JGaWxs
RnJvbVdlYkNvcmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNv
bnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OmJlZ2luU3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAgIChXZWJLaXQ6
OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1
bWVudEJhY2tncm91bmRDb2xvcik6CisKIDIwMjEtMTItMjYgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgV2ViS2l0L0NvY29hQ29sb3IuaCB3aXRoIFdl
YkNvcmUvQ29sb3JDb2NvYS5oLCBub3QgY29uZnVzaW5nIGF0IGFsbApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3Rh
dGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxh
eVN0YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHN0YXRpYyB2b2lk
IGRyYXdQYWdlQmFja2dyb3VuZChjYWlyb190KiBjdHgsIGNvbnN0IHN0ZAogICAgIGlmICghYmFj
a2dyb3VuZENvbG9yIHx8IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLmlzVmlzaWJsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci52
YWx1ZSgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
YmFja2dyb3VuZENvbG9yLnZhbHVlKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogCiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGN0eCwgciwgZywgYiwg
YSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGN0eCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw3IEBAIHZvaWQgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb25z
dCBXZWJDb3JlOjpDbwogewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlk
KCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY29sb3ItPnJlZCA9IHI7
CiAgICAgY29sb3ItPmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9s
bGVyR3RrLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw3
ICszNTQsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUo
V2ViQmFja0YKICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9i
YWNrZ3JvdW5kQ29sb3JGb3JDdXJyZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlm
ICghbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAgICAgICBhdXRv
IFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNpZiBVU0UoR1RL
NCkKICAgICAgICAgICAgICAgICBHZGtSR0JBIHJnYmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhIH07CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBh
ZG9wdEdSZWYoZ3NrX2NvbG9yX25vZGVfbmV3KCZyZ2JhLCAmYm91bmRzKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQCBib29sIFdlYkZyYW1lOjpnZXREb2N1
bWVudEJhY2tncm91bmRDb2xvcihkb3VibGUqIHJlZCwKICAgICBpZiAoIWJnQ29sb3IuaXNWYWxp
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJn
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdD
b2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgICpy
ZWQgPSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODEs
NyArNjgxLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU09iamVjdD4gYW5pbWF0aW9uVmFsdWVGcm9t
S2V5ZnJhbWVWCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oa2V5ZnJhbWVWYWx1ZSwKICAgICAg
ICAgWyZdKGNvbnN0IGZsb2F0IG51bWJlcikgLT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7IHJldHVy
biBAKG51bWJlcik7IH0sCiAgICAgICAgIFsmXShjb25zdCBXZWJDb3JlOjpDb2xvciBjb2xvcikg
LT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7Ci0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
ICBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gIGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2
ZWQoKTsKICAgICAgICAgICAgIHJldHVybiBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAg
ICAgICAgIH0sCiAgICAgICAgIFsmXShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QgcG9pbnQp
IC0+IFJldGFpblB0cjxOU09iamVjdD4gewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NTIxKQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjItMDEtMDIgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZXNvbHZlZC91bnJlc29sdmVk
IGNvbG9yIHR5cGUgYWNjZXNzb3JzIHRvIHJlcXVpcmUgdXNlcnMgdG8gYmUgZXhwbGljaXQgYWJv
dXQgd2hldGhlciB0aGV5IHdpbGwgaGFuZGxlIG1pc3Npbmcvbm9uZSBjb2xvciBjb21wb25lbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3OTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQ29sb3I6OnRvU1JHQkFMb3Nz
eTw+KCkgd2l0aCBDb2xvcjo6dG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+PigpIGFuZCBhZGQKKyAg
ICAgICAgY2FsbHMgdG8gcmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29sb3IgY29tcG9uZW50cy4gQWxz
byB1cGRhdGUgdG8gbmV3IG5hbWUgb2YgY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSwKKyAgICAg
ICAgY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29j
b2EubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGFuZ2VDb250ZXh0Q29udGVudHMpOgor
ICAgICAgICBSZXBsYWNlIHVubmVjZXNzYXJ5IHVzZSBvZiBjb2xvclNwYWNlQW5kQ29tcG9uZW50
cygpIHdpdGggdGhlIG1vcmUgY29tbW9uIHRvQ29sb3JUeXBlTG9zc3k8V2ViQ29yZTo6U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCkuCisKIDIwMjItMDEtMDEgIEplYW4tWXZlcyBBdmVuYXJkICA8
anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWtlIFNoYXJlZEJ1ZmZlcjo6Y29weSgpIHJldHVy
biBhIGNvbnRpZ3VvdXMgU2hhcmVkQnVmZmVyCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3Ig
PSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU3LDcgKzU3LDcgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6YmxhY2s7CiAKLSAg
ICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7
CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+
PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTczLDcg
KzczLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OnJlZDsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0
dXJhdGlvbik7CkBAIC04OSw3ICs4OSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQog
ewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmdyZWVuOwogCi0gICAgYXV0byBoc2xhQ29sb3Ig
PSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNv
bG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEyMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTA1LDcgKzEwNSw3IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Ymx1
ZTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZs
b2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNM
QTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAsIGhzbGFD
b2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9u
KTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIHsK
ICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9y
ID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFD
b2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTM3LDcgKzEzNyw3IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JheTsK
IAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0
Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iu
aHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAt
MTUzLDcgKzE1Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIHsKICAgICBD
b2xvciBjb2xvciA9IENvbG9yOjpsaWdodEdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3Ig
PSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4MSw3ICsxODEsNyBAQCBURVNUKENvbG9y
LCBWYWxpZGl0eSkKIAogICAgIHZhbGlkQ29sb3IgPSBTUkdCQTx1aW50OF90PiB7IDEsIDIsIDMs
IDQgfTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0byB2
YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3IudG9Db2xvclR5cGVM
b3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9FUSh2YWxpZENv
bG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50
cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMp
OwpAQCAtMTg5LDcgKzE4OSw3IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQogCiAgICAgQ29sb3Ig
eWV0QW5vdGhlclZhbGlkQ29sb3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7CiAgICAgRVhQRUNUX1RS
VUUoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBhdXRvIHlldEFub3RoZXJW
YWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOworICAgIGF1dG8geWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0geWV0
QW5vdGhlclZhbGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNv
bHZlZCgpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVk
LCAxKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVu
LCAyKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUs
IDMpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQogCiAgICAgb3Ro
ZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRDb2xvcik7CiAgICAgRVhQRUNU
X1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0byBvdGhlclZhbGlkQ29s
b3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0VR
KG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEob3RoZXJW
YWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRD
b2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7CkBAIC0yMDksMjAgKzIwOSwyMCBAQCBURVNUKENvbG9y
LCBMdW1pbmFuY2UpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKENvbG9yOjpibGFjaykubHVt
aW5hbmNlKCksIDApOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihDb2xvcjo6d2hpdGUpLmx1
bWluYW5jZSgpLCAxKTsKIAotICAgIGF1dG8gY0NvbXBvbmVudHMgPSBTUkdCQTx1aW50OF90PiB7
IDg1LCA5MCwgMTYwIH07CisgICAgYXV0byBjQ29tcG9uZW50cyA9IFNSR0JBPHVpbnQ4X3Q+IHsg
ODUsIDkwLCAxNjAgfS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjQ29t
cG9uZW50cykubHVtaW5hbmNlKCksIDAuMTE3ODE0NTUpOwogCiAgICAgRVhQRUNUX0VRKGNDb21w
b25lbnRzLnJlZCwgODUpOwogICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ncmVlbiwgOTApOwog
ICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ibHVlLCAxNjApOwogCi0gICAgYXV0byBjTGlndGVu
ZWQgPSBDb2xvcihjQ29tcG9uZW50cykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29tcG9uZW50cykubGlnaHRlbmVkKCku
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVD
VF9GTE9BVF9FUShDb2xvcihjTGlndGVuZWQpLmx1bWluYW5jZSgpLCAwLjI5MTY4Mik7CiAgICAg
RVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWQsIDEzMCk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5n
cmVlbiwgMTM3KTsKICAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWUsIDI0NCk7CiAKLSAgICBh
dXRvIGNEYXJrZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmRh
cmtlbmVkKCkudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjRGFya2VuZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAw
NjI0Mik7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5yZWQsIDQwKTsKICAgICBFWFBFQ1RfRVEo
Y0RhcmtlbmVkLmdyZWVuLCA0Myk7CkBAIC0yMzMsNyArMjMzLDcgQEAgVEVTVChDb2xvciwgQ29u
c3RydWN0b3IpCiB7CiAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMx
LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9u
ZW50c10gPSBjMS5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBh
dXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDEuMCwgcik7CkBAIC0yNDgsNyArMjQ4LDcgQEAgVEVTVChDb2xvciwgQ29weUNvbnN0cnVjdG9y
KQogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OwogICAgIENvbG9yIGMyKGMxKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNl
LCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygp
OwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMS4wLCByKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCBURVNUKENvbG9yLCBBc3NpZ25t
ZW50KQogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAx
LjAgfSB9OwogICAgIENvbG9yIGMyID0gYzE7CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21w
b25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JT
cGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVu
dHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwogCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0zMjMsNyArMzIzLDcgQEAgVEVTVChDb2xvciwgTW92
ZUNvbnN0cnVjdG9yKQogICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0IGRv
ZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAgICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7CiAK
LSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21w
b25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNw
YWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBFWFBFQ1RfRVEoY29sb3JTcGFj
ZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9
IGNvbXBvbmVudHM7CkBAIC0zNDQsNyArMzQ0LDcgQEAgVEVTVChDb2xvciwgTW92ZUFzc2lnbm1l
bnQpCiAgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQgZG9lc24ndCBjYXVz
ZSBkZWxldGlvbi4KICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8g
W2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsK
KyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNv
bHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpOwogCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50
czsKQEAgLTM3MCw3ICszNzAsNyBAQCBURVNUKENvbG9yLCBSZXR1cm5WYWx1ZXMpCiBURVNUKENv
bG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAgQ29sb3IgcDNDb2xvciB7IERpc3BsYXlQ
MzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAgYXV0byBzUkdCQUNvbG9y
ID0gcDNDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0g
cDNDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAg
IEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwgMS4wZik7CiAgICAgRVhQRUNUX0ZMT0FU
X0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTMyODJmKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEo
c1JHQkFDb2xvci5ibHVlLCAwLjE0OTEyNzQ4Zik7CkBAIC0zODAsNyArMzgwLDcgQEAgVEVTVChD
b2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogVEVTVChDb2xvciwgTGluZWFyU1JHQkNvbnZlcnNp
b25Ub1NSR0IpCiB7CiAgICAgQ29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZs
b2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBs
aW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JBQ29s
b3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJl
c29sdmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKTsKICAgICBF
WFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpOwpAQCAtMzk4LDcg
KzM5OCw3IEBAIFRFU1QoQ29sb3IsIENvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KQogCiAgICAg
ewogICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuNSk7Ci0gICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNv
bXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZENvbXBv
bmVudHMoKTsKKyAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMo
KTsKICAgICAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OlNSR0IpOwogICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CiAgICAgICAgIEVYUEVDVF9GTE9B
VF9FUShyLCAwLik7CkBAIC00MDksNyArNDA5LDcgQEAgVEVTVChDb2xvciwgQ29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkpCiAKICAgICB7CiAgICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5ID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMC4pOwotICAgICAg
ICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2Us
IGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZFJl
c29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBD
b2xvclNwYWNlOjpTUkdCKTsKICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRz
OwogICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0
R3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw4IEBAIHN0YXRpYyA6OnRlc3Rpbmc6OkFz
c2VydGlvblJlc3VsdCBjaGFuZ2VDb250ZXh0Q29udGVudAogewogICAgIGNvbnRleHQubWFya0Nv
bnRleHRDaGFuZ2VkKCk7CiAgICAgV2ViQ29yZTo6Q29sb3IgZXhwZWN0ZWQgeyBpdGVyYXRpb24g
JSAyID8gV2ViQ29yZTo6Q29sb3I6OmdyZWVuIDogV2ViQ29yZTo6Q29sb3I6OnllbGxvdyB9Owot
ICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gZXhwZWN0ZWQuY29sb3JTcGFjZUFu
ZENvbXBvbmVudHMoKTsKLSAgICBVTlVTRURfVkFSSUFCTEUoY29sb3JTcGFjZSk7Ci0gICAgY29u
dGV4dC5jbGVhckNvbG9yKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNb
Ml0sIGNvbXBvbmVudHNbM10pOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZXhwZWN0ZWQudG9D
b2xvclR5cGVMb3NzeTxXZWJDb3JlOjpTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBj
b250ZXh0LmNsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgY29udGV4dC5jbGVhcihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgdWludDhfdCBnb3RW
YWx1ZXNbNF0gPSB7IH07CiAgICAgYXV0byBzYW1wbGVBdCA9IGNvbnRleHQuZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKTsK
</data>
<flag name="commit-queue"
          id="474026"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448201</attachid>
            <date>2022-01-02 19:34:23 -0800</date>
            <delta_ts>2022-01-02 21:00:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved8.diff</filename>
            <type>text/plain</type>
            <size>161738</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4CiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50Zigicmdi
ICU3LjVmICU3LjVmICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVl
KTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3Bp
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBj
b25zdAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKGF4T2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1
dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4
T2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOwogICAgIH0KQEAgLTgyNCwxMyArODI0
LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJp
bGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgaWYgKGJnQ29s
b3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLi50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci4udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjI4LDcgKzIy
NSw3IEBAIGNsYXNzIENvbG9yIHsgKHB1YmxpYykKICAgICB2b2lkIHNldENvbG9yKFNSR0JBPHVp
bnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAgICAgdm9p
ZCBzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xv
clNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAKLSAgICBT
UkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBhY2tlZENvbG9yOjpSR0JBIGFz
UGFja2VkSW5saW5lKCkgY29uc3Q7CiAKICAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBh
c091dE9mTGluZSgpIGNvbnN0OwpAQCAtMjkyLDcgKzI4OSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogaW5saW5lIGJvb2wgb3V0T2ZM
aW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAg
ICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVy
biBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25l
bnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5mbGFncygpID09
IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29t
cG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEu
Y29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7
CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGlubGluZSBib29sIG91dE9mTGluZUNv
bXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwogICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkg
JiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0g
Q29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgICAgIGF1dG8gYkZs
YWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRP
ZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkg
JiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50
cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGFGbGFncyA9PSBiRmxh
Z3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5l
KCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5lIENvbG9yOjpDb2xvcihzdGQ6Om9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xv
clR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldE91dE9mTGluZUNvbXBvbmVu
dHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSks
IENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3Mp
KTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0
ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxD
b2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8Rmxh
Z3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoKmNvbG9y
KSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxh
Z3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRz
OjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3ItPnVucmVzb2x2ZWQoKSkpLCBDb2xvclNw
YWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAK
IGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5l
Q29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdz
KQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JT
cGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCku
dG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUs
IGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JT
cGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1
bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBj
YWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgp
LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gY2FsbFdp
dGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNw
YWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAK
QEAgLTQ1OCwxMCArNDU1LDEwIEBAIGlubGluZSBSZWY8Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVu
dHM+IENvbG9yOjphc091dE9mTAogICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50
cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFz
SW5saW5lKCkgY29uc3QKK2lubGluZSBSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4g
Q29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Ci0gICAg
cmV0dXJuIGFzU1JHQkEoYXNQYWNrZWRJbmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoYXNQ
YWNrZWRJbmxpbmUoKSkucmVzb2x2ZWQoKTsKIH0KIAogaW5saW5lIFBhY2tlZENvbG9yOjpSR0JB
IENvbG9yOjphc1BhY2tlZElubGluZSgpIGNvbnN0CkBAIC01NjUsNyArNTYyLDcgQEAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgICAg
IGVuY29kZXIgPDwgY29sb3JTcGFjZSgpOwogCiAgICAgICAgIGF1dG8mIG91dE9mTGluZUNvbXBv
bmVudHMgPSBhc091dE9mTGluZSgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBvdXRPZkxpbmVDb21wb25lbnRzLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29tcG9uZW50cy51bnJlc29sdmVkQ29tcG9uZW50cygp
OwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVyIDw8IGMyOwogICAgICAg
ICBlbmNvZGVyIDw8IGMzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSw4IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFj
a2Ryb3AsIGNvbnN0IENvbAogICAgIGlmICghc291cmNlLmlzVmlzaWJsZSgpKQogICAgICAgICBy
ZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ry
b3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
YXV0byBbc291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tk
cm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBz
b3VyY2VBXSA9IHNvdXJjZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29s
dmVkKCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5n
QiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+
PigpLnJlc29sdmVkKCk7CiAKICAgICBTUkdCQTx1aW50OF90PiByZXN1bHQ7CiAgICAgZm9yIChp
bnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJ
bmNyZW1lbnQpIHsKQEAgLTk3LDggKzk3LDggQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZy
b20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgCiAgICAgaWYgKGNvbnRleHQucHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBwcmVt
dWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWQoZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKSk7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRv
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKKyAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKS5yZXNvbHZlZCgpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGll
ZCh0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKIAogICAg
IGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxT
UkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5y
ZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIGNvbnRleHQpLApAQCAtMTE3LDggKzExNyw4IEBAIENv
bG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdAogICAg
IGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8ZmxvYXQ+PigpOwotICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKKyAgICBhdXRvIHRvU1JHQiA9IHRvLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBhdXRvIGJsZW5kZWQg
PSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQpLApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHN0cnVjdCBD
b2xvckNvbXBvbmVudHMgewogICAgIGNvbnN0ZXhwciBhdXRvIG1hcChGJiYgZnVuY3Rpb24pIGNv
bnN0IC0+IENvbG9yQ29tcG9uZW50czxkZWNsdHlwZShmdW5jdGlvbihzdGQ6OmRlY2x2YWw8VD4o
KSkpLCBOPjsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29u
c3QgQ29sb3JDb21wb25lbnRzJik7CisgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3Bl
cmF0b3IvPShUKTsKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IrKFQp
IGNvbnN0OwogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IvKFQpIGNvbnN0
OwpAQCAtOTgsNiArOTksMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIE4+JiBDb2xvckNvbXBvbmVudHM8VCwgTj46Om9wZXJh
dG9yKz0oY29uc3QgQ29sb3JDb21wb25lbnRzJiByaHMpCiB7CiAgICAgKnRoaXMgPSBtYXBDb2xv
ckNvbXBvbmVudHMoW10oVCBjMSwgVCBjMikgeyByZXR1cm4gYzEgKyBjMjsgfSwgKnRoaXMsIHJo
cyk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
Tj4KK2NvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBO
Pjo6b3BlcmF0b3IvPShUIHJocykKK3sKKyAgICAqdGhpcyA9ICgqdGhpcyAvIHJocyk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDI4ICszOSwyNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBMQ0hMaWtlLCB0
eXBlbmFtZSBMYWJMaWtlPgogTENITGlrZSBjb252ZXJ0VG9Qb2xhckZvcm0oY29uc3QgTGFiTGlr
ZSYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
bGFiLXRvLWxjaAotICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRhbjIoY29sb3IuYiwgY29sb3Iu
YSkpOworICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQo
KTsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIGNvbG9yLmxpZ2h0bmVzcywKLSAgICAgICAgc3Rk
OjpoeXBvdChjb2xvci5hLCBjb2xvci5iKSwKLSAgICAgICAgaHVlID49IDAgPyBodWUgOiBodWUg
KyAzNjAsCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsKKyAgICBmbG9hdCBodWUgPSByYWQy
ZGVnKGF0YW4yKGIsIGEpKTsKKyAgICBmbG9hdCBjaHJvbWEgPSBzdGQ6Omh5cG90KGEsIGIpOwor
CisgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBjaHJvbWEsIGh1ZSA+PSAwID8gaHVlIDogaHVlICsg
MzYwLCBhbHBoYSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYWJMaWtlLCB0eXBlbmFtZSBM
Q0hMaWtlPgogTGFiTGlrZSBjb252ZXJ0VG9SZWN0YW5ndWxhckZvcm0oY29uc3QgTENITGlrZSYg
Y29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jbGNo
LXRvLWxhYgotICAgIGZsb2F0IGh1ZUFuZ2xlUmFkaWFucyA9IGRlZzJyYWQoY29sb3IuaHVlKTsK
KyAgICBhdXRvIFtsaWdodG5lc3MsIGNocm9tYSwgaHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCi0gICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBj
b2xvci5jaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5j
aHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpLAotICAgICAgICBjb2xvci5hbHBoYQot
ICAgIH07CisgICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChodWUpOworICAgIGZs
b2F0IGEgPSBjaHJvbWEgKiBzdGQ6OmNvcyhodWVBbmdsZVJhZGlhbnMpOworICAgIGZsb2F0IGIg
PSBjaHJvbWEgKiBzdGQ6OnNpbihodWVBbmdsZVJhZGlhbnMpOworCisgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBhLCBiLCBhbHBoYSB9OwogfQogCiAvLyBNQVJLOiBIU0wgY29udmVyc2lvbnMuCkBA
IC03Miw5ICs2OSw4IEBAIHN0cnVjdCBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCB7CiAgICAgZmxv
YXQgY2hyb21hOwogfTsKIAotc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0
ZUhTTEh1ZShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQorc3RhdGljIEhTTEh1ZUNhbGN1bGF0
aW9uUmVzdWx0IGNhbGN1bGF0ZUhTTEh1ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW21pbiwgbWF4XSA9
IHN0ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47
CiAKQEAgLTk3LDggKzkzLDggQEAgc3RhdGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1
bGF0ZUhTTEh1ZShjb25zdCBTCiBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9h
dD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsK
ICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IK
LSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKLSAgICBhdXRvIFtodWUsIG1pbiwg
bWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwgZywgYik7CiAKICAgICBmbG9hdCBsaWdodG5lc3Mg
PSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwpA
QCAtMTE1LDcgKzExMSw3IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0
PiwgU1JHQkE8ZmxvYXQ+PgogU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9h
dD4sIEhTTEE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCi0g
ICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOworICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogCiAgICAgaWYgKCFzYXR1cmF0aW9uKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IGxpZ2h0
bmVzcyAvIDEwMC4wZjsKQEAgLTE2MiwxNyArMTU4LDE4IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248U1JHQkE8ZmxvYXQ+LCBIU0xBPGZsb2F0PgogSFdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPEhXQkE8ZmxvYXQ+LCBTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IFNSR0JBPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xv
ci00LyNyZ2ItdG8taHdiCi0gICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1
bGF0ZUhTTEh1ZShjb2xvcik7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29sb3IucmVz
b2x2ZWQoKTsKKyAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKHIsIGcsIGIpOwogICAgIGF1dG8gd2hpdGVuZXNzID0gbWluICogMTAwLjBmOwogICAgIGF1
dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwogICAgIAotICAgIHJldHVybiB7
IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CisgICAgcmV0dXJuIHsg
aHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IENv
bG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdD4sIEhXQkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBI
V0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci00LyNod2ItdG8tcmdiCi0gICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVz
cywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAogICAgIGlmICh3aGl0ZW5lc3MgKyBibGFja25l
c3MgPT0gMTAwLjBmKSB7CiAgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAvIDEwMC4wZjsK
QEAgLTIyNSwxMCArMjIyLDEyIEBAIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgRDUwV2hpdGVWYWx1
ZXNbXSA9IHsgMC45NjQyMmYsIAogCiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IENvbG9y
Q29udmVyc2lvbjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+LCBMYWI8ZmxvYXQ+Pjo6Y29u
dmVydChjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBmbG9hdCBmMSA9IChjb2xvci5s
aWdodG5lc3MgKyAxNi4wZikgLyAxMTYuMGY7Ci0gICAgZmxvYXQgZjAgPSBmMSArIChjb2xvci5h
IC8gNTAwLjBmKTsKLSAgICBmbG9hdCBmMiA9IGYxIC0gKGNvbG9yLmIgLyAyMDAuMGYpOworICAg
IGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKIAorICAg
IGZsb2F0IGYxID0gKGxpZ2h0bmVzcyArIDE2LjBmKSAvIDExNi4wZjsKKyAgICBmbG9hdCBmMCA9
IGYxICsgKGEgLyA1MDAuMGYpOworICAgIGZsb2F0IGYyID0gZjEgLSAoYiAvIDIwMC4wZik7CisK
ICAgICBhdXRvIGNvbXB1dGVYQW5kWiA9IFtdKGZsb2F0IHQpIHsKICAgICAgICAgZmxvYXQgdEN1
YmVkID0gdCAqIHQgKiB0OwogICAgICAgICBpZiAodEN1YmVkID4gTEFCZSkKQEAgLTI0NywzMSAr
MjQ2LDMzIEBAIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJzaW9uPFhZ
WkE8ZmxvYQogICAgIH07CiAKICAgICBmbG9hdCB4ID0gRDUwV2hpdGVWYWx1ZXNbMF0gKiBjb21w
dXRlWEFuZFooZjApOwotICAgIGZsb2F0IHkgPSBENTBXaGl0ZVZhbHVlc1sxXSAqIGNvbXB1dGVZ
KGNvbG9yLmxpZ2h0bmVzcyk7CisgICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29t
cHV0ZVkobGlnaHRuZXNzKTsKICAgICBmbG9hdCB6ID0gRDUwV2hpdGVWYWx1ZXNbMl0gKiBjb21w
dXRlWEFuZFooZjIpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxwaGEgfTsKKyAg
ICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBMYWI8ZmxvYXQ+IENvbG9yQ29udmVy
c2lvbjxMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+Pjo6Y29udmVydChj
b25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+JiBjb2xvcikKIHsKLSAgICBmbG9hdCB4
ID0gY29sb3IueCAvIEQ1MFdoaXRlVmFsdWVzWzBdOwotICAgIGZsb2F0IHkgPSBjb2xvci55IC8g
RDUwV2hpdGVWYWx1ZXNbMV07Ci0gICAgZmxvYXQgeiA9IGNvbG9yLnogLyBENTBXaGl0ZVZhbHVl
c1syXTsKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisg
ICAgZmxvYXQgYWRqdXN0ZWRYID0geCAvIEQ1MFdoaXRlVmFsdWVzWzBdOworICAgIGZsb2F0IGFk
anVzdGVkWSA9IHkgLyBENTBXaGl0ZVZhbHVlc1sxXTsKKyAgICBmbG9hdCBhZGp1c3RlZFogPSB6
IC8gRDUwV2hpdGVWYWx1ZXNbMl07CisKICAgICBhdXRvIGZUcmFuc2Zvcm0gPSBbXShmbG9hdCB2
YWx1ZSkgewogICAgICAgICByZXR1cm4gdmFsdWUgPiBMQUJlID8gc3RkOjpjYnJ0KHZhbHVlKSA6
IChMQUJrICogdmFsdWUgKyAxNi4wZikgLyAxMTYuMGY7CiAgICAgfTsKIAotICAgIGZsb2F0IGYw
ID0gZlRyYW5zZm9ybSh4KTsKLSAgICBmbG9hdCBmMSA9IGZUcmFuc2Zvcm0oeSk7Ci0gICAgZmxv
YXQgZjIgPSBmVHJhbnNmb3JtKHopOworICAgIGZsb2F0IGYwID0gZlRyYW5zZm9ybShhZGp1c3Rl
ZFgpOworICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybShhZGp1c3RlZFkpOworICAgIGZsb2F0IGYy
ID0gZlRyYW5zZm9ybShhZGp1c3RlZFopOwogCiAgICAgZmxvYXQgbGlnaHRuZXNzID0gKDExNi4w
ZiAqIGYxKSAtIDE2LjBmOwogICAgIGZsb2F0IGEgPSA1MDAuMGYgKiAoZjAgLSBmMSk7CiAgICAg
ZmxvYXQgYiA9IDIwMC4wZiAqIChmMSAtIGYyKTsKIAotICAgIHJldHVybiB7IGxpZ2h0bmVzcywg
YSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGFscGhh
IH07CiB9CiAKIC8vIE1BUks6IExDSCBjb252ZXJzaW9ucy4KQEAgLTMwOCw5ICszMDksMTAgQEAg
WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAg
ICAgICAgIDEuMDAwMDAwMDU0NjcyNDEwOTE3N2YsICAtMC4wODk0ODQxODIwOTQ5NjU3NTk2ODRm
LCAtMS4yOTE0ODU1Mzc4NjQwOTE3Mzk5ZgogICAgIH07CiAKKyAgICBhdXRvIFtsaWdodG5lc3Ms
IGEsIGIsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CisKICAgICAvLyAxLiBUcmFuc2Zvcm0g
ZnJvbSBwcmVjZW50YWdlIGxpZ2h0bmVzcyB0byB1bml0IGxpZ2h0bmVzcy4KLSAgICBhdXRvIGNv
bXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikuc3Vic2V0PDAsIDM+KCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyAxMDAuMGY7CisgICAgYXV0byBjb21wb25l
bnRzID0gQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IGxpZ2h0bmVzcyAvIDEwMC4wZiwgYSwg
YiB9OwogCiAgICAgLy8gMi4gVHJhbnNmb3JtIGZyb20gTGFiLWNvb3JkaW5hdGVzIGludG8gbm9u
LWxpbmVhciBMTVMgImFwcHJveGltYXRlIGNvbmUgcmVzcG9uc2VzIi4KICAgICBhdXRvIG5vbkxp
bmVhckxNUyA9IE9LTGFiVG9Ob25MaW5lYXJMTVMudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
Y29tcG9uZW50cyk7CkBAIC0zMjEsNyArMzIzLDcgQEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6
RDY1PiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9hCiAgICAgLy8gNC4gQ29udmVydCB0byBYWVou
CiAgICAgYXV0byBbeCwgeSwgel0gPSBMaW5lYXJMTVNUb1hZWkQ2NS50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhsaW5lYXJMTVMpOwogCi0gICAgcmV0dXJuIHsgeCwgeSwgeiwgY29sb3IuYWxw
aGEgfTsKKyAgICByZXR1cm4geyB4LCB5LCB6LCBhbHBoYSB9OwogfQogCiBPS0xhYjxmbG9hdD4g
Q29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1
Pj46OmNvbnZlcnQoY29uc3QgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1PiYgY29sb3IpCkBA
IC0zNDQsOCArMzQ2LDEwIEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8Zmxv
YXQ+LCBYWVpBPGZsb2F0LAogICAgICAgICAwLjAyNTkwNDAzNzFmLCAgMC43ODI3NzE3NjYyZiwg
LTAuODA4Njc1NzY2MGYKICAgICB9OwogCisgICAgYXV0byBbeCwgeSwgeiwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIENvbnZlcnQgWFlaIGludG8gTE1TICJhcHByb3hp
bWF0ZSBjb25lIHJlc3BvbnNlcyIuCi0gICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVh
ckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvciku
c3Vic2V0PDAsIDM+KCkpOworICAgIGF1dG8gbGluZWFyTE1TID0gWFlaRDY1VG9MaW5lYXJMTVMu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCAzPiB7IHgs
IHksIHogfSk7CiAKICAgICAvLyAyLiBBcHBseSBub24tbGluZWFyaXR5LgogICAgIGF1dG8gbm9u
TGluZWFyTE1TID0gbGluZWFyTE1TLm1hcChbXSAoZmxvYXQgdikgeyByZXR1cm4gc3RkOjpjYnJ0
KHYpOyB9KTsKQEAgLTM1NCw3ICszNTgsNyBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9u
PE9LTGFiPGZsb2F0PiwgWFlaQTxmbG9hdCwKICAgICBhdXRvIFtsaWdodG5lc3MsIGEsIGJdID0g
Tm9uTGluZWFyTE1TVG9PS0xhYi50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhub25MaW5lYXJM
TVMpOwogCiAgICAgLy8gNC4gVHJhbnNmb3JtIGxpZ2h0bmVzcyBmcm9tIHVuaXQgbGlnaHRuZXNz
IHRvIHBlcmNlbnRhZ2UgbGlnaHRuZXNzLgotICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4w
ZiwgYSwgYiwgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBsaWdodG5lc3MgKiAxMDAuMGYs
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IE9LTENIIGNvbnZlcnNpb25zLgpAQCAtMzcx
LDU4ICszNzUsNTggQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4s
IE9LTENIQTxmbG9hCiAKIC8vIE1BUks6IENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29s
b3IgY29tcG9uZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgogCi1Db2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMs
IENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
Y29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3Bh
Y2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9y
U3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSkKIHsKICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
aW5wdXRDb2xvckNvbXBvbmVudHMsIGlucHV0Q29sb3JTcGFjZSwgW291dHB1dENvbG9yU3BhY2Vd
IChjb25zdCBhdXRvJiBpbnB1dENvbG9yKSB7CiAgICAgICAgIHN3aXRjaCAob3V0cHV0Q29sb3JT
cGFjZSkgewogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkE5OFJHQjoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8QTk4UkdCPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0
ZW5kZWRBOThSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVy
dENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZEE5OFJHQjxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4
dGVuZGVkRGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNv
bnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWREaXNw
bGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xv
clNwYWNlOjpFeHRlbmRlZExpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEV4dGVuZGVkTGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3RvUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdC
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRSZWMyMDIwOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRl
ZFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAyMDxmbG9hdD4+KGlucHV0Q29s
b3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkU1JHQjoK
LSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkhTTDoKLSAgICAgICAgICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFNMQTxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29s
b3I8SFNMQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OkhXQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8SFdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxDSDoKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TENIQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
TENIQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9y
U3BhY2U6OkxhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8TGluZWFyU1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpPS0xDSDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T0tMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8Zmxv
YXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpP
S0xhYjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29udmVydENvbG9yPE9LTGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6UHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFByb1Bob3RvUkdCPGZsb2F0Pj4o
aW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRDb2xvcjxQcm9QaG90b1JHQjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAg
ICAgICBjYXNlIENvbG9yU3BhY2U6OlJlYzIwMjA6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFJlYzIwMjA8
ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpYWVpfRDUwOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+KGlucHV0Q29sb3Ip
LnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENjU6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdo
aXRlUG9pbnQ6OkQ2NT4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgIH0pOwogfQogCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0
cHV0Q29sb3JTcGFjZSkKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgcmV0dXJuIHBs
YXRmb3JtQ29udmVydENvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGlucHV0Q29sb3JD
b21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKQEAgLTQzMCwxOSArNDM0LDE5IEBAIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvcgogICAgIHJl
dHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENvbG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNw
YWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAg
ICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpKSB7CiAgICAg
ICAgIGNhc2UgUGxhdGZvcm1Db2xvclNwYWNlOjpOYW1lOjpTUkdCOgotICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29s
b3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xv
clNwYWNlOjpOYW1lOjpMaW5lYXJTUkdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGluZWFyU1JH
QkE8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQogICAgICAgICBjYXNlIFBsYXRmb3Jt
Q29sb3JTcGFjZTo6TmFtZTo6RGlzcGxheVAzOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1dENvbG9yKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQ
MzxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0
Q29sb3IpLnJlc29sdmVkKCkpOwogICAgIH0pOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgZW51bSBjbGFzcyBDb2xv
clNwYWNlIDogdWludDhfdDsKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5w
dXQ+IE91dHB1dCBjb252ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKTsKIAogLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21wb25lbnRzIHdpdGggYXNzb2NpYXRlZCBj
b2xvciBzcGFjZXMuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBv
bmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7Ci1D
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFj
ZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNv
bXBvbmVudHMsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSk7
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25l
bnRzKENvbG9yU3BhY2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IGlucHV0Q29sb3JDb21wb25lbnRzLCBDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpOworQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKTsKIAogCiAvLyBBbGwgY29sb3IgdHlwZXMsIG90aGVyIHRoYW4gWFlaQSBvciB0aG9z
ZSBpbmhlcml0aW5nIGZyb20gUkdCVHlwZSwgbXVzdCBpbXBsZW1lbnQKQEAgLTU3LDcgKzU3LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgPSB2
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQ+IGlubGluZSBPdXRw
dXQgY29udmVydENvbG9yKGNvbnN0IElucHV0JiBjb2xvcikKIHsKLSAgICByZXR1cm4gQ29sb3JD
b252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0KGNvbG9yKTsKKyAgICByZXR1cm4gQ29s
b3JDb252ZXJzaW9uPENhbm9uaWNhbENvbG9yVHlwZTxPdXRwdXQ+LCBDYW5vbmljYWxDb2xvclR5
cGU8SW5wdXQ+Pjo6Y29udmVydChjb2xvcik7CiB9CiAKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lPiBzdAogCiAg
ICAgICAgIHVzaW5nIElucHV0V2l0aFJlcGxhY2VtZW50ID0gQ29sb3JUeXBlV2l0aFJlcGxhY2Vt
ZW50Q29tcG9uZW50PElucHV0LCBmbG9hdD47CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8SW5wdXRXaXRoUmVwbGFjZW1lbnQsIE91dHB1dD4pCi0gICAgICAgICAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPElucHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHZhbHVl
IC8gMjU1LjBmOyB9KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPElu
cHV0V2l0aFJlcGxhY2VtZW50Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKS5t
YXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUuMGY7IH0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxPdXRwdXQ+
KGNvbnZlcnRDb2xvcjxJbnB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CkBAIC0y
MTksMzEgKzIxOSwzMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0
LCB0eXBlbmFtZT4gc3QKIAogICAgICAgICB1c2luZyBPdXRwdXRXaXRoUmVwbGFjZW1lbnQgPSBD
b2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21wb25lbnQ8T3V0cHV0LCBmbG9hdD47CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8T3V0cHV0V2l0aFJlcGxhY2VtZW50LCBJbnB1
dD4pCi0gICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpLm1hcChbXShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7IHJldHVy
biBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOyB9KSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPE91dHB1dD4oYXNDb2xvckNv
bXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSkubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90
IHsgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1
bCk7IH0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxP
dXRwdXQ+KGNvbnZlcnRDb2xvcjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQ+KGNvbG9yKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0
ZXhwciBhdXRvIHRvTGluZWFyRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBl
bmFtZSBDb2xvclR5cGU6OkxpbmVhckNvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29sb3JUeXBlOjpUcmFu
c2ZlckZ1bmN0aW9uOjp0b0xpbmVhcihjMSksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6
dG9MaW5lYXIoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvTGluZWFyKGMzKSwg
YWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9HYW1tYUVuY29kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpHYW1tYUVuY29kZWRDb3VudGVycGFydAogICAg
IHsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVy
biB7IENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzEpLCBDb2xv
clR5cGU6OlRyYW5zZmVyRnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMyKSwgQ29sb3JUeXBlOjpU
cmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMyksIGFscGhhIH07CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIHRvRXh0ZW5kZWQoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0CiAgICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPHR5cGVuYW1lIENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czx0
eXBlbmFtZSBDb2xvclR5cGU6OkV4dGVuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9Cb3VuZGVkKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0CiAg
ICAgewotICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhj
ZXB0QWxwaGE8dHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQ+KGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5l
IGNvbnN0ZXhwciBPdXRwdXQgaGFuZGxlUkdCRmFtaWx5Q29udmVyc2lvbihjb25zdCBJbnB1dCYg
Y29sb3IpCkBAIC0zMTIsNyArMzEyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBl
bmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAgICAgICAgIC8vIGhhdmUgc3VmZmljaWVudCB0ZXN0
aW5nIGNvdmVyYWdlIHRvIG5vdGljZSBhbnkgYWR2ZXJzZSBlZmZlY3RzLgogCiAgICAgICAgIGF1
dG8gYXBwbHlNYXRyaWNlcyA9IFtdKGNvbnN0IElucHV0JiBjb2xvciwgYXV0by4uLiBtYXRyaWNl
cykgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0
QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpLCBtYXRyaWNlcy4uLikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8T3V0cHV0PihhcHBseU1hdHJpY2VzVG9Db2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSksIG1hdHJpY2Vz
Li4uKSk7CiAgICAgICAgIH07CiAKICAgICAgICAgaWYgY29uc3RleHByIChJbnB1dDo6d2hpdGVQ
b2ludCA9PSBPdXRwdXQ6OndoaXRlUG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oCShyZXZpc2lvbiAy
ODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckludGVycG9s
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHRlbXBsYXRlPEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbgogdHlwZW5hbWUgSW50ZXJw
b2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlwZSBpbnRlcnBvbGF0ZUNvbG9yQ29tcG9u
ZW50cyhJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSBpbnRlcnBvbGF0aW9uTWV0aG9kQ29s
b3JTcGFjZSwgdHlwZW5hbWUgSW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2U6OkNvbG9yVHlw
ZSBjb2xvcjEsIGRvdWJsZSBjb2xvcjFNdWx0aXBsaWVyLCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9yMiwgZG91YmxlIGNvbG9yMk11bHRpcGxp
ZXIpCiB7CiAgICAgLy8gMS4gQXBwbHkgcHJlLWludGVycG9sYXRpb24gdHJhbnNmb3JtcyAoaHVl
IGZpeHVwIGZvciBwb2xhciBjb2xvciBzcGFjZXMsIGFscGhhIHByZW11bHRpcGxpY2F0aW9uIGlm
IHJlcXVpcmVkKS4KLSAgICBhdXRvIFtub3JtYWxpemVkQ29sb3JDb21wb25lbnRzMSwgbm9ybWFs
aXplZENvbG9yQ29tcG9uZW50czJdID0gcHJlSW50ZXJwb2xhdGlvbk5vcm1hbGl6YXRpb248YWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4oaW50ZXJwb2xhdGlvbk1ldGhvZENvbG9yU3BhY2UsIGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yMSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMikpOworICAgIGF1
dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29sb3JDb21wb25lbnRz
Ml0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11bHRpcGxpY2F0aW9u
PihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3Ix
LnJlc29sdmVkKCkpLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjIucmVzb2x2ZWQoKSkpOwogCiAg
ICAgLy8gMi4gSW50ZXJwb2xhdGUgdXNpbmcgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50cy4KICAg
ICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29tcG9uZW50cyA9IG1hcENvbG9yQ29tcG9uZW50cyhb
Jl0gKGF1dG8gY29tcG9uZW50RnJvbUNvbG9yMSwgYXV0byBjb21wb25lbnRGcm9tQ29sb3IyKSAt
PiBmbG9hdCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckx1
bWluYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yTHVtaW5hbmNlLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgZG91YmxlIHJlbGF0
aXZlTHVtCiAgICAgLy8gdGhpcyBpbiBDb2xvckNvbnZlcnNpb24uaCBhcyBhIHNpYmxpbmcgZnVu
Y3Rpb24gdG8gY29udmVydENvbG9yIHdoaWNoIGNhbiBnZXQgYSBjaGFubmVsCiAgICAgLy8gb2Yg
YSBjb2xvciBpbiBhbm90aGVyIHNwYWNlIGluIHRoaXMga2luZCBvZiBvcHRpbWFsIHdheS4KIAot
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDY1Pj4oY29s
b3IpLnk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpE
NjU+Pihjb2xvcikucmVzb2x2ZWQoKS55OwogfQogCiBpbmxpbmUgZG91YmxlIGNvbnRyYXN0UmF0
aW8oZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQSwgZG91YmxlIHJlbGF0aXZlTHVtaW5hbmNlQikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JNb2RlbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDkzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBSR0JCb3VuZGVkbmVzcyB7IEJvdW5kZWQsIEV4
dGVuZGVkIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lLCBSR0JCb3VuZGVkbmVzcz4gc3RydWN0IFJH
Qk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRyYWl0czsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRJbmZvOwotdGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xN
b2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IExDSE1vZGVsOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2Rl
bDsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IFhZWk1vZGVsOwogCisvLyBNQVJLOiBSZXNvbHZlZC9VbnJlc29sdmVkIERlZmlu
dGl0aW9ucwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIENvbG9yTW9k
ZWwgPSB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlOwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5
cGU8Q29sb3JUeXBlPiByZXNvbHZlZENvbG9yKENvbG9yVHlwZSBpbnB1dCkKK3sKKyAgICByZXR1
cm4gUmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JU
eXBlPiB1bnJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBVbnJl
c29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4geyBpbnB1dCB9OworfQorCitpbmxpbmUgY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAg
IHJldHVybiBjb2xvckNvbXBvbmVudHM7Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiByZXNvbHZlQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4mIGNvbG9yQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29sb3JDb21w
b25lbnRzLm1hcChbXSAoZmxvYXQgY29tcG9uZW50KSB7IHJldHVybiBzdGQ6OmlzbmFuKGNvbXBv
bmVudCkgPyAwLjBmIDogY29tcG9uZW50OyB9KTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0cnVjdCBSZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgcmVzb2x2ZWQoKSBvciB1bnJlc29s
dmVkKCkgb24gYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSByZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3
ZSBjYW4KKyAgICAvLyBqdXN0IHJldHVybiBvdXJzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8g
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgUmVzb2x2ZWRDb2xvclR5cGU8Qz4gcmVz
b2x2ZWRDb2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlw
ZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgcmVzb2x2ZShjb2xvcikgfQorICAgIHsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIEM6OkNvbXBvbmVudFR5cGUsIGZsb2F0Pj4qID0gbnVs
bHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQorICAgIHsKKyAg
ICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gcmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhFeHBvc2VkQ29sb3JUeXBlPEMsIHR5cGVuYW1lIEM6Ok1vZGVsPiB7
IGNvbG9yIH0pKTsKKyAgICAgICAgcmV0dXJuIENvbG9yVHlwZSB7IGMxLCBjMiwgYzMsIGFscGhh
IH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDOjpDb21wb25lbnRUeXBlLCB1aW50OF90
Pj4qID0gbnVsbHB0cj4KKyAgICBzdGF0aWMgY29uc3RleHByIEMgcmVzb2x2ZShDIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gc3RydWN0IFVucmVzb2x2ZWRDb2xvclR5cGUgOiBFeHBvc2VkQ29sb3JU
eXBlPENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geworICAgIHVzaW5nIENh
bm9uaWNhbFR5cGUgPSBDb2xvclR5cGU7CisKKyAgICAvLyBDYWxsaW5nIHVucmVzb2x2ZWQoKSBv
biBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHVucmVzb2x2ZWQgaXMgYSBuby1vcCwgc28gd2UgY2Fu
CisgICAgLy8ganVzdCByZXR1cm4gb3Vyc2VsdmVzLgorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVz
b2x2ZWQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEM+IGZyaWVuZCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxDPiB1bnJl
c29sdmVkQ29sb3IoQyk7CisKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9y
VHlwZShDb2xvclR5cGUgY29sb3IpCisgICAgICAgIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5
cGUsIHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsgY29sb3IgfQorICAgIHsKKyAgICB9Cit9
OworCisKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgc3VwcG9ydCB0eXBlcy4KKwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IHRyYW5zcGFyZW50ID0gMC4wZjsKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG9wYXF1ZSA9
IDEuMGY7CkBAIC02OCwxNyArMTQ0LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bG9yQ29tcG9uZW50SW5mbyB7CiAgICAgQ29sb3JDb21wb25lbnRUeXBlIHR5cGU7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFeHRlbmRlZFJHQk1vZGVsPGZsb2F0PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVu
dEluZm8geyB7Ci0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25l
bnRUeXBlOjpOdW1iZXIgfSwKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xv
ckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KLSAgICB9IH07Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rh
bmd1bGFyT3J0aG9nb25hbDsKLX07CisvLyBNQVJLOiAtIENvbG9yIE1vZGVsIERlZmluaXRpdGlv
bnMKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
VXNlc0V4dGVuZGVkUkdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBFeHRlbmRlZFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT4+OworLy8gTUFSSzogSFNMTW9kZWwKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8Zmxv
YXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZv
PGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKQEAgLTkwLDggKzE1OCwyMiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OkN5bGluZHJpY2Fs
UG9sYXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9yVHlwZTo6aHVlOworICAgIHVz
aW5nIENvbG9yVHlwZTo6c2F0dXJhdGlvbjsKKyAgICB1c2luZyBDb2xvclR5cGU6OmxpZ2h0bmVz
czsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFz
Q29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIU0xNb2Rl
bDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5odWUsIGMuc2F0dXJhdGlvbiwgYy5saWdodG5l
c3MsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc0hTTE1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgSFNMTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CiAKKy8vIE1BUks6IEhXQk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1vZGVsPGZs
b2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5m
bzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgMzYwLCBDb2xvckNv
bXBvbmVudFR5cGU6OkFuZ2xlIH0sCkBAIC0xMDIsOCArMTg0LDIyIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEhXQk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjp3aGl0ZW5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpibGFja25lc3M7CisgICAg
dXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29t
cG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgSFdCTW9kZWw8VD4+JiBj
KQoreworICAgIHJldHVybiB7IGMuaHVlLCBjLndoaXRlbmVzcywgYy5ibGFja25lc3MsIGMuYWxw
aGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgVXNlc0hXQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbCwgSFdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKKy8v
IE1BUks6IExhYk1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9hdD4s
IDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMTQs
OCArMjEwLDIyIEBAIHRlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0
ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExhYk1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmE7CisgICAgdXNp
bmcgQ29sb3JUeXBlOjpiOworICAgIHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBv
bmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGUsIExhYk1vZGVsPFQ+PiYgYykKK3sKKyAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5h
LCBjLmIsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgVXNlc0xhYk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUg
Q29sb3JUeXBlOjpNb2RlbCwgTGFiTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlPj47CiAKKy8vIE1BUks6IExDSE1vZGVsCisKIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVs
PGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzxmbG9hdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVy
IH0sCkBAIC0xMjYsOSArMjM2LDIzIEBAIHRlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0
PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNw
YWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBMQ0hN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlwZSB7Cisg
ICAgdXNpbmcgQ29sb3JUeXBlOjpsaWdodG5lc3M7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpjaHJv
bWE7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBo
YTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgTENITW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMu
bGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgVXNlc0xDSE1vZGVsID0gc3Rk
Ojppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgTENITW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVs
PGZsb2F0PiB7CisvLyBNQVJLOiBSR0JNb2RlbAorCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2Rl
bDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+IHsKICAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7
IHsKICAgICAgICAgeyAwLCAxLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAg
ICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBAIC0xMzgsNyArMjYyLDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpS
ZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1
aW50OF90PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90LCBSR0JCb3VuZGVk
bmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNv
bXBvbmVudEluZm88dWludDhfdD4sIDM+IGNvbXBvbmVudEluZm8geyB7CiAgICAgICAgIHsgMCwg
MjU1LCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAogICAgICAgICB7IDAsIDI1NSwgQ29s
b3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTE0OCw4ICsyNzIsMzUgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBj
b29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFy
T3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNv
bnN0ZXhwciBib29sIFVzZXNSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9y
VHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+
OwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQsIFJHQkJvdW5kZWRuZXNzOjpFeHRl
bmRlZD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudElu
Zm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgeworICAgICAgICB7IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCisgICAgICAgIHsgLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKKyAgICAgICAg
eyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VD
b29yZGluYXRlU3lzdGVtOjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7Cit9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIFJHQkJvdW5kZWRuZXNzIGJvdW5kZWRuZXNzPiBzdHJ1Y3QgRXhw
b3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZSwgYm91bmRlZG5lc3M+PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JU
eXBlOjpyZWQ7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpncmVlbjsKKyAgICB1c2luZyBDb2xvclR5
cGU6OmJsdWU7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3MgYm91bmRlZG5lc3M+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
RXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFJHQk1vZGVsPFQsIGJvdW5kZWRuZXNzPj4mIGMp
Cit7CisgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2Vz
UkdCTW9kZWwgPQorICAgICAgIHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9k
ZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdCQm91bmRl
ZG5lc3M6OkJvdW5kZWQ+PgorICAgIHx8IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlw
ZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgUkdC
Qm91bmRlZG5lc3M6OkV4dGVuZGVkPj47CisKKworLy8gTUFSSzogWFlaTW9kZWwKKwogdGVtcGxh
dGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAg
ICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJl
ciB9LApAQCAtMTYwLDYgKzMxMSw0OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9h
dD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JT
cGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBl
LCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PiA6IENvbG9yVHlw
ZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp4OworICAgIHVzaW5nIENvbG9yVHlwZTo6eTsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Ono7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
Q29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBl
PENvbG9yVHlwZSwgWFlaTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMueCwgYy55LCBj
LnosIGMuYWxwaGEgfTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgVXNlc1hZWk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgWFlaTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj47CisKKworLy8gZ2V0PD4gb3ZlcmxvYWQgKGFsb25nIHdpdGggc3RkOjp0dXBsZV9zaXplIGFu
ZCBzdGQ6OnR1cGxlX2VsZW1lbnQgYmVsb3cpIHRvIHN1cHBvcnQgZGVzdHJ1Y3R1cmluZyBvZiBl
eHBsaWNpdGx5IHJlc29sdmVkIGFuZCB1bnJlc29sdmVkIGNvbG9ycy4KKwordGVtcGxhdGU8c2l6
ZV90IEksIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZSBnZXQoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGU+JiBjb2xv
cikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpW0ldOworfQorCit9CisK
K25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0
dXBsZV9zaXplPFdlYkNvcmU6OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGlj
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVf
dCBJLCB0eXBlbmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6
OlJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPjo6Q29tcG9u
ZW50VHlwZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxl
X3NpemU8V2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+PiA6IHB1YmxpYyBz
dGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgND4geyB9OworCit0ZW1wbGF0ZTxzaXplX3Qg
SSwgdHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfZWxlbWVudDxJLCBXZWJDb3JlOjpV
bnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBl
ID0gdHlwZW5hbWUgV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21w
b25lbnRUeXBlOworfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6YXRpCiB7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUsIGZsb2F0
Pik7CiAKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
Y29sb3IoIiwgc2VyaWFsaXphdGlvbihDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4pLCAnICcsIGMx
LCAnICcsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigi
LCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywg
YzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTM3NCw3ICszNzQsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgSFdCQTxmbG8KIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3NlcmlhbGl6aW5nLWxh
Yi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
bGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmlu
ZygibGNoKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAt
Mzk1LDcgKzM5NSw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChj
b25zdCBMQ0hBPGZsbwogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGFiPGZsb2F0
PiYgY29sb3IsIGJvb2wpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xv
ci00LyNzZXJpYWxpemluZy1sYWItbGNoCi0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsK
ICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICcpJyk7CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImxhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAi
LCBhbHBoYSwgJyknKTsKQEAgLTQzMiw3ICs0MzIsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1IKIAogU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgT0tMQ0hBPGZsb2F0PiYgY29sb3IsIGJvb2wpCiB7Ci0gICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhh
LCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIm9rbGNoKCIsIGMxLCAiJSAiLCBj
MiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsY2goIiwgYzEsICIl
ICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC00NTIsNyArNDUyLDcgQEAg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IE9LTENIQTxmCiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IE9LTGFiPGZsb2F0PiYgY29sb3IsIGJv
b2wpCiB7Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBb
YzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
Im9rbGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1cm4gbWFrZVN0
cmluZygib2tsYWIoIiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7
CkBAIC01NDMsNyArNTQzLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU1JHQkE8dWlu
dDhfdD4gY29sb3IsIGJvb2wgCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
KQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7
CiAKLSAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIHN3aXRj
aCAoYWxwaGEpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Jh
KCIsIHJlZCwgIiwgIiwgZ3JlZW4sICIsICIsIGJsdWUsICIsIDApIik7CkBAIC01NTksNyArNTU5
LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBi
b29sCiAgICAgaWYgKHVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbihjb2xvcik7CiAKLSAgICBhdXRvIFty
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChhbHBoYSA9PSAweEZGKQog
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQsIDIsIExvd2VyY2FzZSksIGhl
eChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWUsIDIsIExvd2VyY2FzZSkpOwogICAgIHJl
dHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKQEAgLTU3MCw3ICs1NzAsNyBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4KICAgICBp
ZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJpYWxp
emF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhIDwgMHhGRikKICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUs
IDIpLCBoZXgoYWxwaGEsIDIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQs
IDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvclNw
YWNlTWFwcGluZzxTUkdCQTxUPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3Bh
Y2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDUwPj4geyBzdGF0aWMgY29uc3RleHByIGF1
dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENTAgfTsgfTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb2xvclNwYWNlTWFwcGluZzxYWVpBPFQsIFdoaXRlUG9pbnQ6OkQ2NT4+
IHsgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpYWVpfRDY1
IH07IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yU3Bh
Y2UgQ29sb3JTcGFjZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENvbG9yVHlwZT46OmNvbG9yU3Bh
Y2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclNwYWNlIENv
bG9yU3BhY2VGb3IgPSBDb2xvclNwYWNlTWFwcGluZzxDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JU
eXBlPj46OmNvbG9yU3BhY2U7CiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVu
Y3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNhbGxXaXRoQ29sb3JUeXBlKGNvbnN0IENv
bG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBG
dW5jdG9yJiYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgs
MTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUsIFdoaXRlUG9pbnQ+IHN0cnVjdCBYWVpBOwogCiAvLyBN
QVJLOiBNYWtlIGZ1bmN0aW9ucy4KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8VCwgND4mIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lk
PiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJlciA9IGZhbHNlOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0Nhbm9uaWNhbFR5
cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q2Fub25pY2FsVHlwZT4+ID0gdHJ1
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCBib29sIGhhc0Nvbm9uaWNhbFR5cGU+
IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxwZXIgeyB1c2luZyB0eXBlID0gQ29sb3JUeXBl
OyB9OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgQ2Fub25pY2FsQ29sb3JU
eXBlSGVscGVyPENvbG9yVHlwZSwgdHJ1ZT4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgQ29sb3JU
eXBlOjpDYW5vbmljYWxUeXBlOyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHVz
aW5nIENhbm9uaWNhbENvbG9yVHlwZSA9IHR5cGVuYW1lIENhbm9uaWNhbENvbG9yVHlwZUhlbHBl
cjxDb2xvclR5cGUsIEhhc0Nhbm9uaWNhbFR5cGVNZW1iZXI8Q29sb3JUeXBlPj46OnR5cGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8g
bWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgYykKIHsKLSAg
ICByZXR1cm4gQ29sb3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworICAgIHJldHVy
biBDYW5vbmljYWxDb2xvclR5cGU8Q29sb3JUeXBlPiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlw
ZW5hbWUgVD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZQpAQCAtOTcsNDYgKzEwNSw1MCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2wKICAgICByZXR1cm4g
eyBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksIGNsYW1wZWRDb21w
b25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIDI+KGNvbXBvbmVudHMpLCBjb21wb25lbnRzWzNdIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZyhjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRv
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYg
Y29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4o
Y2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBv
bmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50PENvbG9y
VHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBjbGFtcGVk
Q29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHND
bGFtcGluZyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQogewogICAgIHJldHVybiBtYWtlRnJv
bUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeyBjbGFtcGVkQ29tcG9uZW50
PENvbG9yVHlwZSwgMD4oYzEpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLCBj
bGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLCBjbGFtcGVkQWxwaGE8VCwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0
PiYgY29tcG9uZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4g
Y29uc3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShjb25z
dCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29s
b3JUeXBlPihjb21wb25lbnRzKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBUIGMzLCBBbHBoYSBhbHBo
YSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxw
aGE+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGEo
VCBjMSwgVCBjMiwgVCBjMywgQWxwaGEgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29t
cG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGFscGhhIH0pOwogfQogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5S
YW5nZShUIGNvbG9yKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgorY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShD
b2xvclR5cGUgY29sb3IpCiB7Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjx0eXBl
bmFtZSBUOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVu
dHNbaV0gPj0gVDo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAiQ29tcG9uZW50IGF0IGlu
ZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4pOwotICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IFQ6Ok1vZGVsOjpjb21w
b25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3Jl
YXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6
TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4KTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBv
bmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhl
IGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJh
aXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6
Q29tcG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4g
dGhlIGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0
czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29sdmVkKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShj
b21wb25lbnRzW2ldID49IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWluLCAi
Q29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25l
bnRJbmZvW2ldLm1pbik7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tp
XSA8PSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCwgIkNvbXBvbmVudCBh
dCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0g
JWYiLCBpLCAgY29tcG9uZW50c1tpXSwgQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tp
XS5tYXgpOwogICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbM10gPj0g
QWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJl
bnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxvd2VkIG1pbmltdW0gKHRy
YW5zcGFyZW50KSAlZiIsIGNvbXBvbmVudHNbM10sIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbXBvbmVudHNbM10gPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21w
b25lbnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUg
YWxsb3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgdWludDhfdD4+KiA9IG51
bGxwdHI+Citjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKENvbG9yVHlwZSkKK3sKK30KKwog
I2Vsc2UKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5n
ZShUKQpAQCAtMTQ2LDcgKzE1OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2
b2lkIGFzc2VydEluUmFuZ2UoVCkKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5h
bWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21w
b25lbnRzID0gZmFsc2U7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJv
b2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBl
KGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6ZGVjbHZhbDxUPigpKSk+PiA9IHRydWU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNDb252ZXJ0aWJsZVRvQ29sb3JD
b21wb25lbnRzPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKGFzQ29sb3JDb21wb25lbnRzKHN0ZDo6
ZGVjbHZhbDxUPigpLnVucmVzb2x2ZWQoKSkpPj4gPSB0cnVlOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29tcG9uZW50VHlw
ZU1lbWJlciA9IGZhbHNlOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBi
b29sIEhhc0NvbXBvbmVudFR5cGVNZW1iZXI8VCwgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgVDo6Q29t
cG9uZW50VHlwZT4+ID0gdHJ1ZTsKQEAgLTE2Niw5ICsxNzgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAKICAgICAvLyBlLmcuIGF1dG8g
eWVsbG93V2l0aDUwUGVyY2VudEFscGhhID0gQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYUJ5
dGUoMTI4KTsKICAgICBjb25zdGV4cHIgUGFyZW50IGNvbG9yV2l0aEFscGhhQnl0ZSh1aW50OF90
IG92ZXJyaWRlQWxwaGEpIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxQYXJlbnQ+KCkuYWxwaGEpLCB1aW50OF90
PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFBhcmVudDo6Q29tcG9u
ZW50VHlwZSwgdWludDhfdD4sICJPbmx5IHVpbnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1
cHBvcnRlZC4iKTsKIAotICAgICAgICBhdXRvIGNvcHkgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgUGFy
ZW50Kj4odGhpcyk7CisgICAgICAgIGF1dG8gY29weSA9IHN0YXRpY19jYXN0PGNvbnN0IFBhcmVu
dCo+KHRoaXMpLT51bnJlc29sdmVkKCk7CiAgICAgICAgIGNvcHkuYWxwaGEgPSBvdmVycmlkZUFs
cGhhOwogICAgICAgICByZXR1cm4gY29weTsKICAgICB9CkBAIC0xNzgsNyArMTkwLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1Y3QgQ29sb3JXaXRoQWxwaGFIZWxwZXIgCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252
ZXJ0aWJsZVRvQ29sb3JDb21wb25lbnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yVHlwZSYgYSwgY29uc3QgQ29sb3JUeXBlJiBi
KQogewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYS51bnJlc29sdmVkKCkpID09IGFz
Q29sb3JDb21wb25lbnRzKGIudW5yZXNvbHZlZCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29udmVydGlibGVUb0NvbG9y
Q29tcG9uZW50czxDb2xvclR5cGU+PiogPSBudWxscHRyPgpAQCAtMjAzLDcgKzIxNSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Ci0g
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOworICAgICAgICBhc3NlcnRJblJhbmdlKCpzdGF0
aWNfY2FzdDxjb25zdCBDb2xvclR5cGUqPih0aGlzKSk7CiAgICAgfQogCiAgICAgY29uc3RleHBy
IFJHQkFUeXBlKCkKQEAgLTIxMSwyMSArMjIzLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdAogICAgIHsKICAgICB9CiAKKyAgICBjb25z
dGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnN0YXRp
Y19jYXN0PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnN0YXRpY19jYXN0PGNv
bnN0IENvbG9yVHlwZSo+KHRoaXMpKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCByZWQ7CiAgICAg
VCBncmVlbjsKICAgICBUIGJsdWU7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQsIHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgTSwgdHlwZW5h
bWUgVEY+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMo
Y29uc3QgUkdCQVR5cGU8VCwgRCwgQ29sb3JUeXBlLCBNLCBURj4mIGMpCi17Ci0gICAgcmV0dXJu
IHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwotfQotCi0KIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFU
eXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFt
ZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpD
bGFtcGVkPj4gewotICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8
VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9u
PFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJv
dW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQs
IEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+
PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwg
UkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0
ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJH
QkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRlcnBhcnQgPSBCb3VuZGVkTGluZWFyRW5j
b2RlZDxULCBEPjsKICAgICB1c2luZyBFeHRlbmRlZENvdW50ZXJwYXJ0ID0gRXh0ZW5kZWRHYW1t
YUVuY29kZWQ8VCwgRD47CkBAIC0yMzQsOCArMjQ0LDggQEAgc3RydWN0IEJvdW5kZWRHYW1tYUVu
Y29kZWQgOiBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBEPgotc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNvZGVkIDogUkdCQVR5cGU8
VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBE
Ojp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFt
cGVkPj4gewotICAgIHVzaW5nIFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQs
IEQ+LCBSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxU
LCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+OjpSR0JBVHlwZTsKK3N0cnVjdCBCb3Vu
ZGVkTGluZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQs
IEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+
PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4s
IFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxh
dGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+OjpS
R0JBVHlwZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBsaW5lYXJUb1hZWiA9IEQ6Omxp
bmVhclRvWFlaOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB4eXpUb0xpbmVhciA9IEQ6Onh5
elRvTGluZWFyOwpAQCAtMjQ3LDggKzI1Nyw4IEBAIHN0cnVjdCBCb3VuZGVkTGluZWFyRW5jb2Rl
ZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRMaQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRD4KLXN0cnVjdCBFeHRlbmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQs
IEV4dGVuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBlbmFt
ZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpV
bmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRHYW1tYUVuY29k
ZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5z
ZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBlZD4+OjpSR0JBVHlw
ZTsKK3N0cnVjdCBFeHRlbmRlZEdhbW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVk
R2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBSR0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+
LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rp
b25Nb2RlOjpVbmNsYW1wZWQ+PiB7CisgICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRH
YW1tYUVuY29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4s
IHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlv
bk1vZGU6OlVuY2xhbXBlZD4+OjpSR0JBVHlwZTsKIAogICAgIHVzaW5nIExpbmVhckNvdW50ZXJw
YXJ0ID0gRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+OwogICAgIHVzaW5nIEJvdW5kZWRDb3Vu
dGVycGFydCA9IEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD47CkBAIC0yNTYsOCArMjY2LDggQEAg
c3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRHCiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotc3RydWN0IEV4dGVuZGVkTGlu
ZWFyRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwg
RXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlv
bjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj4gewotICAgIHVzaW5nIFJHQkFU
eXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgRXh0ZW5kZWRSR0JNb2RlbDxU
PiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0
aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEV4dGVuZGVkTGluZWFyRW5j
b2RlZCA6IFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9k
ZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj4geworICAg
IHVzaW5nIFJHQkFUeXBlPFQsIEQsIEV4dGVuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9k
ZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJh
bnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFU
eXBlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6bGluZWFy
VG9YWVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6eHl6VG9M
aW5lYXI7CkBAIC00MzQsMTcgKzQ0NCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
TGFiIDogQ29sb3JXaXRoQWxwaGFIZWxwZXIKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHBy
IGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQor
ICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVk
Q29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGE7
CiAgICAgVCBiOwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExhYjxU
PiYgYykKLXsKLSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEgfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
SXNMYWIgPSBzdGQ6OmlzX3NhbWVfdjxMYWI8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlPiwgQ29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBMQ0hBIENvbG9yIFR5cGUuCkBAIC00Njks
MTcgKzQ3OCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTENIQSA6IENvbG9yV2l0
aEFscGhhSGVscGUKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQo
KSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBh
dXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9
CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGNocm9tYTsKICAgICBUIGh1
ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBMQ0hBPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wg
SXNMQ0hBID0gc3RkOjppc19zYW1lX3Y8TENIQTx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+LCBDb2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIE9LTGFiIENvbG9yIFR5cGUuCkBAIC01
MDQsMTcgKzUxMiwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT0tMYWIgOiBDb2xv
cldpdGhBbHBoYUhlbHAKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2
ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhw
ciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMp
OyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGxpZ2h0bmVzczsKICAgICBUIGE7CiAgICAgVCBiOwog
ICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JD
b21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IE9LTGFiPFQ+JiBjKQotewot
ICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9OwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc09LTGFiID0g
c3RkOjppc19zYW1lX3Y8T0tMYWI8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwg
Q29sb3JUeXBlPjsKIAogLy8gTUFSSzogLSBPS0xDSEEgQ29sb3IgVHlwZS4KQEAgLTUzOSwxNyAr
NTQ2LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xDSEEgOiBDb2xvcldpdGhB
bHBoYUhlbAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKwor
cHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQgaHVlOwog
ICAgIFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JD
b21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IE9LTENIQTxUPiYgYykKLXsK
LSAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5jaHJvbWEsIGMuaHVlLCBjLmFscGhhIH07Ci19
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElz
T0tMQ0hBID0gc3RkOjppc19zYW1lX3Y8T0tMQ0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4sIENvbG9yVHlwZT47CiAKIApAQCAtNTc1LDE3ICs1ODEsMTYgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlCiAgICAgewogICAg
IH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2
ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29uc3Qg
eyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAgVCBo
dWU7CiAgICAgVCBzYXR1cmF0aW9uOwogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYWxwaGE7CiB9
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+
IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEhTTEE8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgYy5o
dWUsIGMuc2F0dXJhdGlvbiwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKLX0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNIU0xBID0gc3RkOjpp
c19zYW1lX3Y8SFNMQTx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5
cGU+OwogCiAvLyBNQVJLOiAtIEhXQkEgQ29sb3IgVHlwZS4KQEAgLTYxMCwxNyArNjE1LDE2IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIV0JBIDogQ29sb3JXaXRoQWxwaGFIZWxwZQog
ICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0
dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVk
OgogICAgIFQgaHVlOwogICAgIFQgd2hpdGVuZXNzOwogICAgIFQgYmxhY2tuZXNzOwogICAgIFQg
YWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEhXQkE8VD4mIGMpCi17Ci0gICAgcmV0
dXJuIHsgYy5odWUsIGMud2hpdGVuZXNzLCBjLmJsYWNrbmVzcywgYy5hbHBoYSB9OwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0hXQkEg
PSBzdGQ6OmlzX3NhbWVfdjxIV0JBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4s
IENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gWFlaIENvbG9yIFR5cGUuCkBAIC02NDUsMTcgKzY0
OSwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IHN0cnVjdCBYWVpBIDog
Q29sb3IKICAgICB7CiAgICAgfQogCisgICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25z
dCB7IHJldHVybiByZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVu
cmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3By
b3RlY3RlZDoKICAgICBUIHg7CiAgICAgVCB5OwogICAgIFQgejsKICAgICBUIGFscGhhOwogfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgV2hpdGVQb2ludCBXPiBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFhZWkE8VCwgVz4mIGMpCi17Ci0g
ICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc1hZWkEgPSBzdGQ6OmlzX3Nh
bWVfdjxYWVpBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgQ29sb3JUeXBlOjp3
aGl0ZVBvaW50PiwgQ29sb3JUeXBlPjsKIAogLy8gUGFja2VkIENvbG9yIEZvcm1hdHMKQEAgLTY2
OCwxMSArNjcxLDE2IEBAIHN0cnVjdCBSR0JBIHsKICAgICB7CiAgICAgfQogCi0gICAgY29uc3Rl
eHByIGV4cGxpY2l0IFJHQkEoU1JHQkE8dWludDhfdD4gY29sb3IpCisgICAgY29uc3RleHByIGV4
cGxpY2l0IFJHQkEoUmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8dWludDhfdD4+IGNvbG9yKQogICAg
ICAgICA6IHZhbHVlIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9yLnJlZCA8PCAyNCB8IGNv
bG9yLmdyZWVuIDw8IDE2IHwgY29sb3IuYmx1ZSA8PCA4IHwgY29sb3IuYWxwaGEpIH0KICAgICB7
CiAgICAgfQogCisgICAgY29uc3RleHByIGV4cGxpY2l0IFJHQkEoU1JHQkE8dWludDhfdD4gY29s
b3IpCisgICAgICAgIDogUkdCQSB7IGNvbG9yLnJlc29sdmVkKCkgfQorICAgIHsKKyAgICB9CisK
ICAgICB1aW50MzJfdCB2YWx1ZTsKIH07CiAKQEAgLTY4Miw4ICs2OTAsMTMgQEAgc3RydWN0IEFS
R0IgewogICAgIHsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgZXhwbGljaXQgQVJHQihTUkdCQTx1
aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgQVJHQihSZXNvbHZlZENvbG9y
VHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAgICAgICAgIDogdmFsdWUgeyBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oY29sb3IuYWxwaGEgPDwgMjQgfCBjb2xvci5yZWQgPDwgMTYgfCBjb2xvci5n
cmVlbiA8PCA4IHwgY29sb3IuYmx1ZSkgfQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4cHIg
ZXhwbGljaXQgQVJHQihTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICAgICAgOiBBUkdCIHsgY29s
b3IucmVzb2x2ZWQoKSB9CiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjg3
NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIHJldHVybiB7IHIgKiBhLCBnICogYSwgYiAqIGEs
IGEgfTsKIH0KIAogU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmICghYSkKICAgICAgICAgcmV0
dXJuIGNvbG9yOwogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFs
cGhhPFNSR0JBPGZsb2F0Pj4ociAvIGEsIGcgLyBhLCBiIC8gYSwgYSk7CkBAIC00NCw3ICs0NCw3
IEBAIFNSR0JBPGZsb2F0PiB1bnByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xv
cgogCiBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHQkE8dWludDhfdD4g
Y29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4g
eyAwLCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQpAQCAtNTQsNyArNTQsNyBAQCBTUkdC
QTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHQkE8dWludDhfdD4gY28KIAogU1JH
QkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4geyAwLCAwLCAw
LCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgaW5saW5l
IHVpbnQxNl90IHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUodWkKIAogU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci5yZXNvbHZl
ZCgpOwogICAgIGlmICghYSB8fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAg
IHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4
X3Q+Pih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIsIGEpLCB1bnByZW11bHRpcGxpZWRD
b21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGIsIGEpLCBh
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMjEgKzQ2LDIx
IEBAIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZShmbG9hdCk7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRCeXRlQWxwaGFUbyh1aW50OF90KTsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0QWxwaGFUbyhmbG9hdCk7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9y
QnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmLCBGdW5jdG9y
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBhdXRv
IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmLCBG
dW5jdG9yJiYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xv
clR5cGUgY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qg
b3ZlcnJpZGVBbHBoYSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBj
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVB
bHBoYSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBhdXRvIGNvbG9y
V2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxw
aGEpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGNvbG9yV2l0aE92ZXJyaWRk
ZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JX
aXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBo
YSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9y
V2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gaW52ZXJ0ZWRD
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlk
ZUFscGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBpbnZlcnRlZENvbG9y
V2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNMQ0hNb2RlbDxDb2xvclR5cGU+IHx8
IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBjb25zdGV4cHIgYm9vbCBpc0Js
YWNrKGNvbnN0IENvbG9yVHlwZSYpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNFeHRl
bmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxh
Y2soY29uc3QgQ29sb3JUeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+
IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0hXQk1vZGVsPENv
bG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JU
eXBlJik7CiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29u
c3QgWFlaQTxmbG9hdCwgVz4mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNMQ0hN
b2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+PiogPSBudWxscHRyPiBj
b25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xv
clR5cGU+IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNv
bnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9y
VHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBl
Jik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
X3Q8VXNlc0hXQk1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlz
V2hpdGUoY29uc3QgQ29sb3JUeXBlJik7CiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhw
ciBib29sIGlzV2hpdGUoY29uc3QgWFlaQTxmbG9hdCwgVz4mKTsKIApAQCAtOTMsMzUgKzkzLDM1
IEBAIHRlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhhVG88ZmxvYXQ+KGZs
bwogICAgIHJldHVybiBjbGFtcGVkQWxwaGEodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xvckJ5TW9kaWZpbmdF
YWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgRnVuY3RvciYmIGZ1
bmN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1
dG8gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQogewotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogICAg
IGNvcHlbMF0gPSBzdGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzBdKTsKICAgICBjb3B5
WzFdID0gc3RkOjppbnZva2UoZnVuY3RvciwgY29tcG9uZW50c1sxXSk7CiAgICAgY29weVsyXSA9
IHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgY29tcG9uZW50c1sy
XSk7Ci0gICAgcmV0dXJuIHsgY29weVswXSwgY29weVsxXSwgY29weVsyXSwgY29weVszXSB9Owor
ICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92
ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxw
aGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBhdXRvIGNvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRl
QWxwaGEpCiB7Ci0gICAgYXV0byBjb3B5ID0gY29sb3I7CisgICAgYXV0byBjb3B5ID0gY29sb3Iu
dW5yZXNvbHZlZCgpOwogICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFscGhhVG88dHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4g
Y29weTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgY29sb3JX
aXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRl
QWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJp
ZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCiB7
Ci0gICAgYXV0byBjb3B5ID0gY29sb3I7CisgICAgYXV0byBjb3B5ID0gY29sb3IudW5yZXNvbHZl
ZCgpOwogICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAgcmV0dXJuIGNvcHk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZl
cnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50
OF90IG92ZXJyaWRlQWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhw
ciBhdXRvIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KENvbG9y
VHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CiAKLSAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBv
bmVudHMoY29sb3IucmVzb2x2ZWQoKSk7CiAgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCkBAIC0xMzEsMTEgKzEzMSwxMSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXIK
ICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gaW52ZXJ0ZWRDb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKICAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CiAK
LSAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0
byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IucmVzb2x2ZWQoKSk7CiAgICAg
YXV0byBjb3B5ID0gY29tcG9uZW50czsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAz
OyArK2kpCkBAIC0xNDcsMTkgKzE0NywyMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2kKIAogdGVtcGxhdGU8V2hpdGVQb2ludCBXPiBjb25z
dGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IFhZWkE8ZmxvYXQsIFc+JiBjb2xvcikKIHsKLSAgICBy
ZXR1cm4gY29sb3IueSA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6
b3BhcXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAg
cmV0dXJuIHJlc29sdmVkQ29sb3IueSA9PSAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxw
aGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzTGFiTW9kZWw8Q29sb3JUeXBlPiB8fCBV
c2VzTENITW9kZWw8Q29sb3JUeXBlPiB8fCBVc2VzSFNMTW9kZWw8Q29sb3JUeXBlPj4qPgogY29u
c3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIHJldHVy
biBjb2xvci5saWdodG5lc3MgPT0gMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOwor
ICAgIHJldHVybiByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAwICYmIHJlc29sdmVkQ29sb3Iu
YWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29s
b3JUeXBlPnx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8
Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNv
bG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8g
W2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHByIGF1
dG8gY29tcG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAgICAg
cmV0dXJuIGMxID09IGNvbXBvbmVudEluZm9bMF0ubWluICYmIGMyID09IGNvbXBvbmVudEluZm9b
MV0ubWluICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWluICYmIGFscGhhID09IEFscGhhVHJh
aXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAgLTE2
NywyNCArMTY5LDI3IEBAIGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5ibGFja25lc3MgPT0g
MTAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOworICAgIGF1
dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0dXJuIHJlc29sdmVk
Q29sb3IuYmxhY2tuZXNzID09IDEwMCAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJh
aXRzPGZsb2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhw
ciBib29sIGlzV2hpdGUoY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAgIHJldHVy
biBjb2xvci55ID09IDEgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFx
dWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1
cm4gcmVzb2x2ZWRDb2xvci55ID09IDEgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRy
YWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNM
Q0hNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4
cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNv
bG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+
OjpvcGFxdWU7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZWRDb2xvci5saWdodG5lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3Iu
YWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29s
b3JUeXBlPiB8fCBVc2VzRXh0ZW5kZWRSR0JNb2RlbDxDb2xvclR5cGU+Pio+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVs
PENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRv
IFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGNvbnN0ZXhwciBh
dXRvIGNvbXBvbmVudEluZm8gPSBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvOwogICAg
IHJldHVybiBjMSA9PSBjb21wb25lbnRJbmZvWzBdLm1heCAmJiBjMiA9PSBjb21wb25lbnRJbmZv
WzFdLm1heCAmJiBjMyA9PSBjb21wb25lbnRJbmZvWzJdLm1heCAmJiBhbHBoYSA9PSBBbHBoYVRy
YWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWU7CiB9CkBAIC0x
OTIsNyArMTk3LDggQEAgY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNv
bG9yKQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zl90PFVzZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNv
bnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLndoaXRlbmVzcyA9PSAx
MDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0
byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRD
b2xvci53aGl0ZW5lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFp
dHM8ZmxvYXQ+OjpvcGFxdWU7CiB9CiAKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlC
eTI1NSh1aW50MTZfdCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGNsYXNzIEltYWdlQmFja2luZ1N0b3JlIHsg
KHB1YmxpYykKICAgICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGF1dG8gcGl4ZWwgPSBhc1NSR0JBKFBhY2tlZENvbG9yOjpBUkdCIHsgKmRlc3QgfSk7CisgICAg
ICAgIGF1dG8gcGl4ZWwgPSBhc1NSR0JBKFBhY2tlZENvbG9yOjpBUkdCIHsgKmRlc3QgfSkucmVz
b2x2ZWQoKTsKIAogICAgICAgICBpZiAoYSA+PSAyNTUgfHwgIXBpeGVsLmFscGhhKSB7CiAgICAg
ICAgICAgICBzZXRQaXhlbChkZXN0LCByLCBnLCBiLCBhKTsKQEAgLTE2MCw3ICsxNjAsNyBAQCBj
bGFzcyBJbWFnZUJhY2tpbmdTdG9yZSB7IChwdWJsaWMpCiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0gcHJlbXVsdGlwbGll
ZEZsb29yaW5nKHBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsID0gcHJlbXVsdGlwbGllZEZsb29y
aW5nKHBpeGVsKS5yZXNvbHZlZCgpOwogCiAgICAgICAgIHVpbnQ4X3QgZCA9IDI1NSAtIGE7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1Bs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUoY29uc3QgQ29s
bwogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+
KCkucmVzb2x2ZWQoKTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2Fu
aW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwgQChhKV1dOwog
fQogCkBAIC00NjcsNyArNDY3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dFRvVmFsdWUoY29uc3QgQ29sb3ImCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVM
b3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJh
c2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChn
KSwgQChiKSwgQChhKV1dOwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8CiAgICAgICAgIHJldHVybjsK
IAogICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdl
dCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0g
ICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVtcGxhdGUgdG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVtcGxhdGUgdG9D
b2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICByZXR1
cm4gQFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXTsKICAgICB9KS5nZXQoKV07CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlv
bldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlv
bldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25XaW46OnNldEZyb21WYWx1ZShjb25zdCBXZWJDb3IKICAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbXBvbmVu
dHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbXBvbmVudHMg
PSB2YWx1ZS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAg
ICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29t
cG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0
b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmlt
YXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYuZ2V0KCkpOwpAQCAtNDIzLDcg
KzQyMyw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VG9WYWx1ZShjb25zdCBX
ZWJDb3JlOgogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWlu
dDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVk
LCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsK
ICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0
ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRpb24uZ2V0KCks
IHYuZ2V0KCkpOwpAQCAtNDkzLDcgKzQ5Myw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZQogICAgICAgICAKICAgICBSZXRhaW5QdHI8Q0ZN
dXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2
YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gY29tcG9uZW50cyA9
IHZhbHVlW2ldLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIGNvbXBvbmVu
dHMgPSB2YWx1ZVtpXS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVk
KCk7CiAgICAgICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMu
Z3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICBSZXRh
aW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7
CiAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBjb3B5Q29udGV4dFByb3BlcnRpZXMoY2Fpcm9fdCogc3Jj
Q3IsIGNhaXJvX3QqIGRzCiAKIHZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBj
b250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBj
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIHZvaWQgR3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCiAKIHN0YXRpYyB2b2lkIGFkZENv
bG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGllbnRDb2xvclN0b3Ag
c3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0
b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0
LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVk
ZWYgc3RydWN0IHBvaW50X3QgewogCiBzdGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fp
cm9fcGF0dGVybl90KiBncmFkaWVudCwgaW50IGlkLCBHcmFkaWVudENvbG9yU3RvcCBzdG9wLCBm
bG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJv
X21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBi
LCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMsOSBAQCB2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW4KICAg
ICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0
YVNyYyArIHN0cmlkZSAqIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGxvZ2ljYWxT
aXplKCkud2lkdGgoKTsgeCsrKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cg
KyB4OwotICAgICAgICAgICAgYXV0byBwaXhlbENvbXBvbmVudHMgPSB1bnByZW11bHRpcGxpZWQo
YXNTUkdCQShQYWNrZWRDb2xvcjo6QVJHQiB7ICpwaXhlbCB9KSk7Ci0gICAgICAgICAgICBwaXhl
bENvbXBvbmVudHMgPSB7IGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5yZWRdLCBsb29rVXBU
YWJsZVtwaXhlbENvbXBvbmVudHMuZ3JlZW5dLCBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMu
Ymx1ZV0sIHBpeGVsQ29tcG9uZW50cy5hbHBoYSB9OwotICAgICAgICAgICAgKnBpeGVsID0gUGFj
a2VkQ29sb3I6OkFSR0IgeyBwcmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVudHMpIH0u
dmFsdWU7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGll
ZChhc1NSR0JBKFBhY2tlZENvbG9yOjpBUkdCIHsgKnBpeGVsIH0pKS5yZXNvbHZlZCgpOworICAg
ICAgICAgICAgYXV0byB0cmFuc2Zvcm1lZFBpeGVsQ29tcG9uZW50cyA9IFNSR0JBPHVpbnQ4X3Q+
IHsgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLnJlZF0sIGxvb2tVcFRhYmxlW3BpeGVsQ29t
cG9uZW50cy5ncmVlbl0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ibHVlXSwgcGl4ZWxD
b21wb25lbnRzLmFscGhhIH07CisgICAgICAgICAgICAqcGl4ZWwgPSBQYWNrZWRDb2xvcjo6QVJH
QiB7IHByZW11bHRpcGxpZWRDZWlsaW5nKHRyYW5zZm9ybWVkUGl4ZWxDb21wb25lbnRzKSB9LnZh
bHVlOwogICAgICAgICB9CiAgICAgfQogICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0
YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2lj
YWxTaXplKCkuaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDcsMTIgKzE0NywxMiBAQCBzdGF0aWMgc3RkOjpwYWlyPENHQ29sb3JTcGFjZVJlZiwgQ29sb3JD
b21wb25lbnRzPGZsb2EKICAgICBpZiAoIWNnQ29sb3JTcGFjZSkgewogI2lmIEhBVkUoQ09SRV9H
UkFQSElDU19FWFRFTkRFRF9TUkdCX0NPTE9SX1NQQUNFKQogICAgICAgICBhdXRvIGNvbXBvbmVu
dHNDb252ZXJ0ZWRUb0V4dGVuZGVkU1JHQkEgPSBjYWxsV2l0aENvbG9yVHlwZShjb21wb25lbnRz
LCBjb2xvclNwYWNlLCBbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAgICAgIHJldHVy
biBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KGNv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PEV4dGVuZGVkU1JHQkE8ZmxvYXQ+Pihjb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIH0pOwog
ICAgICAgICByZXR1cm4geyBleHRlbmRlZFNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHND
b252ZXJ0ZWRUb0V4dGVuZGVkU1JHQkEgfTsKICNlbHNlCiAgICAgICAgIGF1dG8gY29tcG9uZW50
c0NvbnZlcnRlZFRvU1JHQkEgPSBjYWxsV2l0aENvbG9yVHlwZShjb21wb25lbnRzLCBjb2xvclNw
YWNlLCBbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb2xvcikpOworICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNv
bG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB7IHNSR0JDb2xv
clNwYWNlUmVmKCksIGNvbXBvbmVudHNDb252ZXJ0ZWRUb1NSR0JBIH07CiAjZW5kaWYKQEAgLTE2
Myw3ICsxNjMsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPENHQ29sb3JTcGFjZVJlZiwgQ29sb3JDb21w
b25lbnRzPGZsb2EKIAogc3RhdGljIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjcmVhdGVDR0NvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFj
ZSwgY29tcG9uZW50c10gPSBjb2xvci5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVu
dHMoKTsKICAgICBhdXRvIFtjZ0NvbG9yU3BhY2UsIGNnQ29tcGF0aWJsZUNvbXBvbmVudHNdID0g
Y29udmVydFRvQ0dDb21wYXRpYmxlQ29tcG9uZW50cyhjb2xvclNwYWNlLCBjb21wb25lbnRzKTsK
ICAgICAKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBjNF0gPSBjZ0NvbXBhdGlibGVDb21wb25lbnRz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5k
ZXJlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzIsOCArNDcyLDcgQEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVn
eSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VHCiAgICAgLy8gZXh0ZW5kZWQgc1JHQiBmb3IgYWxs
IGdyYWRpZW50cy4KICAgICBpZiAoaGFzT25seUJvdW5kZWRTUkdCQ29sb3JTdG9wcyhzdG9wcykp
IHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdG9wIDogc3RvcHMpIHsKLSAgICAgICAgICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gc3RvcC5jb2xvci5jb2xvclNwYWNlQW5k
Q29tcG9uZW50cygpOwotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRz
OworICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICBjb2xvckNvbXBv
bmVudHMudW5jaGVja2VkQXBwZW5kKHIpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVu
Y2hlY2tlZEFwcGVuZChnKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNoZWNrZWRB
cHBlbmQoYik7CkBAIC00ODgsOSArNDg3LDkgQEAgR3JhZGllbnRSZW5kZXJlckNHOjpTdHJhdGVn
eSBHcmFkaWVudFJlbmRlcmVyQ0c6Om1ha2VHCiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBz
dG9wIDogc3RvcHMpIHsKICNpZiBIQVZFKENPUkVfR1JBUEhJQ1NfRVhURU5ERURfU1JHQl9DT0xP
Ul9TUEFDRSkKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0Nv
bG9yVHlwZUxvc3N5PEV4dGVuZGVkU1JHQkE8ZmxvYXQ+PigpOworICAgICAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8RXh0ZW5kZWRTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICNlbHNlCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICNlbmRpZgogICAgICAgICAgICAgY29sb3JDb21wb25l
bnRzLnVuY2hlY2tlZEFwcGVuZChyKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51bmNo
ZWNrZWRBcHBlbmQoZyk7CkBAIC01NDYsNyArNTQ1LDcgQEAgdm9pZCBHcmFkaWVudFJlbmRlcmVy
Q0c6OlNoYWRpbmc6OnNoYWRpbmdGdW5jdGlvbih2b2lkCiAgICAgICAgIG1ha2VGcm9tQ29tcG9u
ZW50czxJbnRlcnBvbGF0aW9uU3BhY2VDb2xvclR5cGU+KHN0b3AxLmNvbG9yQ29tcG9uZW50cyks
IG9mZnNldCk7CiAKICAgICAvLyA0LiBDb252ZXJ0IHRvIHRoZSBvdXRwdXQgY29sb3Igc3BhY2Uu
Ci0gICAgYXV0byBpbnRlcnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0U3BhY2UgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T3V0cHV0U3BhY2VDb2xvclR5cGU+KGludGVycG9s
YXRlZENvbG9yKSk7CisgICAgYXV0byBpbnRlcnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0
U3BhY2UgPSBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8T3V0cHV0U3BhY2VDb2xvclR5
cGU+KGludGVycG9sYXRlZENvbG9yKS5yZXNvbHZlZCgpKTsKIAogICAgIC8vIDUuIFdyaXRlIGNv
bG9yIGNvbXBvbmVudHMgdG8gJ291dCcgcG9pbnRlci4KICAgICBmb3IgKHNpemVfdCBjb21wb25l
bnRJbmRleCA9IDA7IGNvbXBvbmVudEluZGV4IDwgaW50ZXJwb2xhdGVkQ29sb3JDb252ZXJ0ZWRU
b091dHB1dFNwYWNlLnNpemUoKTsgKytjb21wb25lbnRJbmRleCkKQEAgLTU2MCw3ICs1NTksNyBA
QCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVMK
ICAgICAgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhv
ZC5jb2xvclNwYWNlLAogICAgICAgICAgICAgICAgIFsmXSAoYXV0byYgY29sb3JTcGFjZSkgLT4g
Q29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB7CiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIENv
bG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKGNvbG9y
U3BhY2UpPjo6Q29sb3JUeXBlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoY29sb3IudGVtcGxhdGUgdG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29sb3IudGVtcGxh
dGUgdG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgKTsKICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVy
cy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRm
b3JtQXBwbHlOZW9uKGNvbnN0IExpZ2h0aQogICAgIC8vIFNldCBsaWdodCBzb3VyY2UgYXJndW1l
bnRzLgogICAgIGZsb2F0QXJndW1lbnRzLmNvbnN0T25lID0gMTsKIAotICAgIGF1dG8gY29sb3Ig
PSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjb2xv
ciA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJl
c29sdmVkKCk7CiAKICAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IGNvbG9yLnJlZDsKICAg
ICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gY29sb3IuZ3JlZW47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDE5ICs5MiwxOSBAQCBib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246
OnRyYW5zZm9ybUNvbG9yKFMKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JB
WVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JH
QkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1h
dHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGNhc2UgU0VQSUE6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGlu
ZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29s
b3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJp
eChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNh
c2UgSFVFX1JPVEFURTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBj
b2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRl
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25l
bnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQp
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwor
ICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4o
c2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUMKIHsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgT1BBQ0lUWToKLSAgICAgICAgY29sb3IuYWxwaGEgKj0g
bV9hbW91bnQ7CisgICAgICAgIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbG9y
LCBzdGQ6OmNsYW1wPGZsb2F0Pihjb2xvci5yZXNvbHZlZCgpLmFscGhhICogbV9hbW91bnQsIDAu
MGYsIDEuMGYpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAg
ICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAxLjBmIC0gbV9hbW91bnQ7CkBAIC0yOTYsNyAr
Mjk2LDcgQEAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaHVlUm90YXRlKGNvbnN0
IENvbG9yCiAKIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1D
b2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHVlUm90YXRlZFNS
R0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvciksIDAuNWYp
OworICAgIGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShhc0NvbG9y
Q29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSwgMC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkg
dGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRy
aXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01v
ZGVNYXRyaXggewpAQCAtMzE2LDcgKzMxNiw3IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVy
T3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3JtQwogICAgICAgICAtMC4wNDlmLCAtMS4zNDdmLCAg
MC4xNDZmLCAwLjBmLCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3ZiwgLTEuMTA0Ziwg
MC4wZiwgMS4yNWYKICAgICB9OwotICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGVDb21wb25l
bnRzID0gdG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlQ29tcG9u
ZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKTsKIAogICAgIGF1dG8gaHVlUm90YXRlZFNS
R0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMs
IDAuNWYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4NzQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBib29sIEZpbHRl
ck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvbG9yJiBjb2xvcikgY28KICAgICBpZiAoY29s
b3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JB
Q29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9y
ID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CiAKICAgICBmb3IgKGF1
dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+
dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkBAIC0xMzAsNyArMTMwLDcgQEAgYm9vbCBGaWx0
ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3ImIGNvCiAgICAgaWYgKGNv
bG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdC
QUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gc1JHQkFDb2xv
ciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwogCiAgICAgZm9yIChh
dXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24t
PmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAkocmV2aXNpb24g
Mjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2
LDcgKzMyNiw3IEBAIHZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShjb25zdCBMaQogewogICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9Db2xvckNv
bXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CisgICAgYXV0
byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9SZXNvbHZlZENvbG9yQ29tcG9u
ZW50c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKICAgICBwYWludGlu
Z0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBn
LCBiKTsKIAogICAgIGRhdGEubGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKmRhdGEuZmls
dGVyLCAqZGF0YS5yZXN1bHQsIHBhaW50aW5nRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBw
bGllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgY2xhc3MgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRl
ckVmZmVjCiAgICAgc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKSB7IHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OyB9CiAgICAgc3RhdGlj
IGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVu
dHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKSB7IHJldHVy
biBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4o
Y29tcG9uZW50cykgfTsgfQogCi0gICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpS
R0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7IH0K
KyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JD
b21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpLnJlc29sdmVkKCkpOyB9CiAgICAgc3Rh
dGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwogICAgIHN0YXRpYyBpbmxpbmUgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3
aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYg
a2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdC
QSYgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKIHsKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAg
cmV0dXJuIHsgciwgZywgYiwgYSB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAko
cmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGYK
ICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0
U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcik7CiAg
ICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5j
b2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApA
QCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKGludCBu
dW1iZXIsIGNvbnN0IENvbAogICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2Up
OwogCiAgICAgLy8gU2luY2Ugd2Ugd29uJ3Qgc3dhcCBSK0Igd2hlbiB1cGxvYWRpbmcgYSB0ZXh0
dXJlLCBwYWludCB3aXRoIHRoZSBzd2FwcGVkIFIrQiBjb2xvci4KLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBiLCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3Jl
Y3RhbmdsZShjciwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CkBAIC00MTUsNyArNDE1LDcgQEAgc3Rh
dGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBh
c3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3Ig
Y29tcG9zaXRpbmcuCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxp
ZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKKyAgICAgICAgICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIGdsVW5pZm9y
bTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIGds
VW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZp
YXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJm
KHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7CkBAIC03MzUsNyArNzM1LDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYg
CiAgICAgaWYgKGNsaXBTdGFjaygpLmlzUm91bmRlZFJlY3RDbGlwRW5hYmxlZCgpKQogICAgICAg
ICBwcmVwYXJlUm91bmRlZFJlY3RDbGlwKHByb2dyYW0uZ2V0KCksIGNsaXBTdGFjaygpLnJvdW5k
ZWRSZWN0Q29tcG9uZW50cygpLCBjbGlwU3RhY2soKS5yb3VuZGVkUmVjdEludmVyc2VUcmFuc2Zv
cm1Db21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0Q291bnQoKSk7CiAKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJlc29sdmVkKCk7CiAgICAgZ2xVbmlmb3JtNGYo
cHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAoYSA8IDEgJiYg
aXNCbGVuZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwpAQCAtNzQ1
LDcgKzc0NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25zdCBG
bG9hdFJlY3QmIAogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTMgQEAg
Q29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFf
Q09MT1JfRigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwg
YSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIHJldHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERp
cmVjdDJELmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCw3IEBAIElEMkQxQnJ1c2gqIEdyYWRpZW50OjpjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRh
cmdldCogcgogICAgIGdyYWRpZW50U3RvcHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0b3Bz
LnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewogICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vbi1zUkdCQSBjb2xvciBzcGFjZXMuCi0gICAgICAgIGF1
dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Zmxv
YXQ+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIGdyYWRpZW50U3RvcHMuZ3JhZGllbnRTdG9wcy51
bmNoZWNrZWRBcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xv
ckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2
NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29ucwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBzcGVsbGluZ1BhdHRlcm5Db2xvciA9IENv
bG9yOjpyZWQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGdyYW1tYXJQYXR0ZXJuQ29sb3Ig
PSBDb2xvcjo6ZGFya0dyZWVuOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdHlsZS5tb2Rl
ID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3JhbW1hclBhdHRl
cm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdy
YW1tYXJQYXR0ZXJuQ29sb3IucmVzb2x2ZWQoKSA6IHNwZWxsaW5nUGF0dGVybkNvbG9yLnJlc29s
dmVkKCk7CiAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgciwgZywgYiwg
YSk7CiAKICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlID0gZ2V0VXNlclRvQmFzZUNU
TShjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDcgKzM2NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbAog
CiBEMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFs
cGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0
dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAko
cmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5NCw3ICsxNTk0LDcgQEAgY29uc3RleHByIGZsb2F0
IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVuCiBDb2xvciBSZW5kZXJUaGVt
ZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVy
IHVzaW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFuIEhTTEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVy
Y2VwdHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBjbGFtcGluZyB0byBzUkdCIGdhbXV0LCB3aGlj
aCBpcyB3aGF0IEhTTEEgZG9lcy4KLSAgICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5
cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGlmICh0ZXh0Q29sb3Iu
bHVtaW5hbmNlKCkgPCBiYWNrZ3JvdW5kQ29sb3IubHVtaW5hbmNlKCkpCiAgICAgICAgIGhzbGEu
bGlnaHRuZXNzICs9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3Rv
ciAqICgxMDAuMGYgLSBoc2xhLmxpZ2h0bmVzcyk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzA3LDcgKzEzMDcsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRl
Y29yYXRpb25zKGNvbnN0IFJlbmQKIHN0YXRpYyBib29sIHNob3VsZFVzZUNvbnZleEdyYWRpZW50
KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgo
eyByLCBnLCBiIH0pOwogICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5u
ZWwgPCAwLjU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1w
bC5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDEwICs4MSwxMCBAQCBjbGFzcyBTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uIDogcHVibGlj
IFNWR0FuaW1hdGlvbkEKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50JiwgZmxvYXQgcHJv
Z3Jlc3MsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAg
ICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRp
b25Nb2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKLSAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0
aW9uKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0
ZWQgPSBhbmltYXRlZC50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVk
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRp
b25Nb2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8u
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBh
dXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIAogICAgICAg
ICBmbG9hdCByZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxl
RnJvbS5yZWQsIHNpbXBsZVRvLnJlZCwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkLCBzaW1w
bGVBbmltYXRlZC5yZWQpOwogICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJv
Z3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ncmVlbiwgc2lt
cGxlVG9BdEVuZE9mRHVyYXRpb24uZ3JlZW4sIHNpbXBsZUFuaW1hdGVkLmdyZWVuKTsKQEAgLTEw
Myw4ICsxMDMsOCBAQCBjbGFzcyBTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uIDogcHVibGljIFNW
R0FuaW1hdGlvbkEKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJv
bUNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0g
dG9Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9t
ID0gZnJvbUNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdC
QTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgICAgIGZsb2F0IHJlZCA9IHNpbXBsZUZy
b20ucmVkIC0gc2ltcGxlVG8ucmVkOwogICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20u
Z3JlZW4gLSBzaW1wbGVUby5ncmVlbjsKQEAgLTExNiw4ICsxMTYsOCBAQCBjbGFzcyBTVkdBbmlt
YXRpb25Db2xvckZ1bmN0aW9uIDogcHVibGljIFNWR0FuaW1hdGlvbkEKIHByaXZhdGU6CiAgICAg
dm9pZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCYpIG92ZXJyaWRlCiAgICAgewotICAg
ICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50
OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICAgICAgLy8gSWdu
b3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgog
ICAgICAgICBtX3RvID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+
KHNpbXBsZVRvLnJlZCArIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZy
b20uZ3JlZW4sIHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOwpJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjItMDEtMDIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCByZXNvbHZlZC91bnJlc29sdmVkIGNvbG9yIHR5cGUgYWNj
ZXNzb3JzIHRvIHJlcXVpcmUgdXNlcnMgdG8gYmUgZXhwbGljaXQgYWJvdXQgd2hldGhlciB0aGV5
IHdpbGwgaGFuZGxlIG1pc3Npbmcvbm9uZSBjb2xvciBjb21wb25lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3OTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHVzZXMgb2YgQ29sb3I6
OnRvU1JHQkFMb3NzeTw+KCkgd2l0aCBDb2xvcjo6dG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pigp
IGFuZCBhZGQKKyAgICAgICAgY2FsbHMgdG8gcmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29sb3IgY29t
cG9uZW50cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQ
cml2YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJr
aXRDb2xvckZpbGxGcm9tV2ViQ29yZUNvbG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1Zp
ZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAg
ICAgKFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKToKKwogMjAyMS0xMi0yNiAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBXZWJLaXQvQ29jb2FDb2xv
ci5oIHdpdGggV2ViQ29yZS9Db2xvckNvY29hLmgsIG5vdCBjb25mdXNpbmcgYXQgYWxsCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRl
UGxheVN0YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFn
ZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
c3RhdGljIHZvaWQgZHJhd1BhZ2VCYWNrZ3JvdW5kKGNhaXJvX3QqIGN0eCwgY29uc3Qgc3RkCiAg
ICAgaWYgKCFiYWNrZ3JvdW5kQ29sb3IgfHwgYmFja2dyb3VuZENvbG9yLnZhbHVlKCkuaXNWaXNp
YmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dy
b3VuZENvbG9yLnZhbHVlKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3R4
LCByLCBnLCBiLCBhKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3R4LCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29y
ZUNvbG9yKGNvbnN0IFdlYkNvcmU6OkNvCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQod2ViQ29yZUNv
bG9yLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBjb2xv
ci0+cmVkID0gcjsKICAgICBjb2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2Vz
dHVyZUNvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3
aXBlR2VzdHVyZShXZWJCYWNrRgogICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAgICAg
ICAgICAgICBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9yOwogICAg
ICAgICAgICAgaWYgKCFtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAgICAgICAg
ICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKKyAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YV0gPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwog
I2lmIFVTRShHVEs0KQogICAgICAgICAgICAgICAgIEdka1JHQkEgcmdiYSA9IHsgcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEgfTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90
UGF0dGVybiA9IGFkb3B0R1JlZihnc2tfY29sb3Jfbm9kZV9uZXcoJnJnYmEsICZib3VuZHMpKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIGJvb2wgV2ViRnJh
bWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKGRvdWJsZSogcmVkLAogICAgIGlmICghYmdD
b2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVk
KCk7CiAgICAgKnJlZCA9IHI7CiAgICAgKmdyZWVuID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5t
bQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTY4MSw3ICs2ODEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TT2JqZWN0PiBhbmltYXRp
b25WYWx1ZUZyb21LZXlmcmFtZVYKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlmcmFtZVZh
bHVlLAogICAgICAgICBbJl0oY29uc3QgZmxvYXQgbnVtYmVyKSAtPiBSZXRhaW5QdHI8TlNPYmpl
Y3Q+IHsgcmV0dXJuIEAobnVtYmVyKTsgfSwKICAgICAgICAgWyZdKGNvbnN0IFdlYkNvcmU6OkNv
bG9yIGNvbG9yKSAtPiBSZXRhaW5QdHI8TlNPYmplY3Q+IHsKLSAgICAgICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gIGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSAgY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90
Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgcmV0dXJuIEBbIEAociksIEAoZyksIEAoYiks
IEAoYSkgXTsKICAgICAgICAgfSwKICAgICAgICAgWyZdKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQzRCBwb2ludCkgLT4gUmV0YWluUHRyPE5TT2JqZWN0PiB7CkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODc1MjEpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAyMi0wMS0w
MiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVk
L3VucmVzb2x2ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBl
eHBsaWNpdCBhYm91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9y
IGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBDb2xvcjo6
dG9TUkdCQUxvc3N5PD4oKSB3aXRoIENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPD4+KCkg
YW5kIGFkZAorICAgICAgICBjYWxscyB0byByZXNvbHZlZCgpIHRvIGFjY2VzcyBjb2xvciBjb21w
b25lbnRzLiBBbHNvIHVwZGF0ZSB0byBuZXcgbmFtZSBvZiBjb2xvclNwYWNlQW5kQ29tcG9uZW50
cygpLAorICAgICAgICBjb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoYW5nZUNvbnRleHRD
b250ZW50cyk6CisgICAgICAgIFJlcGxhY2UgdW5uZWNlc3NhcnkgdXNlIG9mIGNvbG9yU3BhY2VB
bmRDb21wb25lbnRzKCkgd2l0aCB0aGUgbW9yZSBjb21tb24gdG9Db2xvclR5cGVMb3NzeTxXZWJD
b3JlOjpTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKS4KKwogMjAyMi0wMS0wMSAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIG1ha2UgU2hhcmVkQnVmZmVyOjpj
b3B5KCkgcmV0dXJuIGEgY29udGlndW91cyBTaGFyZWRCdWZmZXIKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI4
NzQ4MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9X
aGl0ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8gaHNs
YUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRv
IGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNTcsNyArNTcsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpi
bGFjazsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8
SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24p
OwpAQCAtNzMsNyArNzMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7CiAgICAgQ29s
b3IgY29sb3IgPSBDb2xvcjo6cmVkOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3Iu
dG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTg5LDcgKzg5LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfR3JlZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JlZW47CiAKLSAgICBhdXRv
IGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAg
YXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJl
c29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTIwLCBoc2xhQ29sb3IuaHVlKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMDUsNyAr
MTA1LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBjb2xvciA9
IENvbG9yOjpibHVlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxv
c3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5
cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDI0MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOwpAQCAtMTIxLDcgKzEyMSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0Rh
cmtHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmRhcmtHcmF5OwogCi0gICAgYXV0
byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAg
IGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMzcsNyArMTM3
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENv
bG9yOjpncmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5
PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVM
b3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAs
IGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJh
dGlvbik7CkBAIC0xNTMsNyArMTUzLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5
KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gaHNs
YUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAgICBhdXRv
IGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTgxLDcgKzE4MSw3IEBA
IFRFU1QoQ29sb3IsIFZhbGlkaXR5KQogCiAgICAgdmFsaWRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+
IHsgMSwgMiwgMywgNCB9OwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
LSAgICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50
b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNU
X0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKHZhbGlkQ29s
b3JDb21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVu
dHMuYmx1ZSwgMyk7CkBAIC0xODksNyArMTg5LDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAK
ICAgICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3IpKTsKICAg
ICBFWFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIGF1dG8g
eWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29sb3IudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBv
bmVudHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4
X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBv
bmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBv
bmVudHMuYmx1ZSwgMyk7CkBAIC0xOTcsNyArMTk3LDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkp
CiAKICAgICBvdGhlclZhbGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJWYWxpZENvbG9yKTsK
ICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBhdXRvIG90
aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CisgICAgYXV0byBvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxp
ZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVD
VF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsKICAgICBFWFBFQ1RfRVEo
b3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKQEAgLTIwOSwyMCArMjA5LDIwIEBA
IFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoQ29sb3I6
OmJsYWNrKS5sdW1pbmFuY2UoKSwgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKENvbG9y
Ojp3aGl0ZSkubHVtaW5hbmNlKCksIDEpOwogCi0gICAgYXV0byBjQ29tcG9uZW50cyA9IFNSR0JB
PHVpbnQ4X3Q+IHsgODUsIDkwLCAxNjAgfTsKKyAgICBhdXRvIGNDb21wb25lbnRzID0gU1JHQkE8
dWludDhfdD4geyA4NSwgOTAsIDE2MCB9LnJlc29sdmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KENvbG9yKGNDb21wb25lbnRzKS5sdW1pbmFuY2UoKSwgMC4xMTc4MTQ1NSk7CiAKICAgICBFWFBF
Q1RfRVEoY0NvbXBvbmVudHMucmVkLCA4NSk7CiAgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmdy
ZWVuLCA5MCk7CiAgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmJsdWUsIDE2MCk7CiAKLSAgICBh
dXRvIGNMaWd0ZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5saWdodGVuZWQoKS50b1NSR0JBTG9z
c3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNMaWd0ZW5lZCA9IENvbG9yKGNDb21wb25lbnRzKS5s
aWdodGVuZWQoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNMaWd0ZW5lZCkubHVtaW5hbmNlKCksIDAuMjkx
NjgyKTsKICAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLnJlZCwgMTMwKTsKICAgICBFWFBFQ1RfRVEo
Y0xpZ3RlbmVkLmdyZWVuLCAxMzcpOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQuYmx1ZSwgMjQ0
KTsKIAotICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmRhcmtlbmVkKCku
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjQ29t
cG9uZW50cykuZGFya2VuZWQoKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJl
c29sdmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNEYXJrZW5lZCkubHVtaW5hbmNl
KCksIDAuMDI3MDA2MjQyKTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLnJlZCwgNDApOwogICAg
IEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW4sIDQzKTsKQEAgLTIzMyw3ICsyMzMsNyBAQCBURVNU
KENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBv
bmVudHNdID0gYzEuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNw
YWNlLCBjb21wb25lbnRzXSA9IGMxLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50
cygpOwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CiAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMS4wLCByKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBURVNUKENvbG9yLCBDb3B5
Q29uc3RydWN0b3IpCiAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CiAgICAgQ29sb3IgYzIoYzEpOwogCi0gICAgYXV0byBbY29sb3JTcGFj
ZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8g
W2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKIAog
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIFRFU1QoQ29s
b3IsIEFzc2lnbm1lbnQpCiAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAw
LjUsIDAuMjUsIDEuMCB9IH07CiAgICAgQ29sb3IgYzIgPSBjMTsKIAotICAgIGF1dG8gW2NvbG9y
U3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBh
dXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENv
bG9yQ29tcG9uZW50cygpOwogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKQEAgLTMyMyw3ICszMjMsNyBAQCBURVNU
KENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiAgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNv
IHRoYXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KICAgICBFWFBFQ1RfRkFMU0UoYzEuaXNW
YWxpZCgpKTsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9
IGMyLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgIEVYUEVDVF9F
UShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogCiAgICAgYXV0byBbciwgZywg
YiwgYWxwaGFdID0gY29tcG9uZW50czsKQEAgLTM0NCw3ICszNDQsNyBAQCBURVNUKENvbG9yLCBN
b3ZlQXNzaWdubWVudCkKICAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQgc28gdGhhdCBpdCBk
b2Vzbid0IGNhdXNlIGRlbGV0aW9uLgogICAgIEVYUEVDVF9GQUxTRShjMS5pc1ZhbGlkKCkpOwog
Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JT
cGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgRVhQRUNUX0VRKGNvbG9yU3Bh
Y2UsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0g
PSBjb21wb25lbnRzOwpAQCAtMzcwLDcgKzM3MCw3IEBAIFRFU1QoQ29sb3IsIFJldHVyblZhbHVl
cykKIFRFU1QoQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKICAgICBDb2xvciBwM0NvbG9y
IHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBhdXRv
IHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNS
R0JBQ29sb3IgPSBwM0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKICAgICBF
WFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1MzI4MmYpOwogICAgIEVYUEVD
VF9GTE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTI3NDhmKTsKQEAgLTM4MCw3ICszODAs
NyBAQCBURVNUKENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiBURVNUKENvbG9yLCBMaW5lYXJT
UkdCQ29udmVyc2lvblRvU1JHQikKIHsKICAgICBDb2xvciBsaW5lYXJTUkdCQUNvbG9yIHsgTGlu
ZWFyU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwotICAgIGF1dG8gc1JH
QkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1
dG8gc1JHQkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQs
IDEuMGYpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1Njky
N2YpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2Zik7
CkBAIC0zOTgsNyArMzk4LDcgQEAgVEVTVChDb2xvciwgQ29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkpCiAKICAgICB7CiAgICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0g
Y29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMC41KTsKLSAgICAgICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOwogICAgICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6
U1JHQik7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKICAgICAgICAg
RVhQRUNUX0ZMT0FUX0VRKHIsIDAuKTsKQEAgLTQwOSw3ICs0MDksNyBAQCBURVNUKENvbG9yLCBD
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSkKIAogICAgIHsKICAgICAgICAgQ29sb3IgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgw
Lik7Ci0gICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byBb
Y29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xv
clNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICAgICAgRVhQRUNUX0VRKGNv
bG9yU3BhY2UsIENvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbXBvbmVudHM7CiAgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NvY29hL1Rlc3RHcmFwaGljc0NvbnRleHRHTENvY29hLm1tCShyZXZpc2lvbiAyODc0ODIpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvVGVzdEdyYXBoaWNzQ29u
dGV4dEdMQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDggQEAgc3RhdGljIDo6
dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IGNoYW5nZUNvbnRleHRDb250ZW50CiB7CiAgICAgY29u
dGV4dC5tYXJrQ29udGV4dENoYW5nZWQoKTsKICAgICBXZWJDb3JlOjpDb2xvciBleHBlY3RlZCB7
IGl0ZXJhdGlvbiAlIDIgPyBXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gOiBXZWJDb3JlOjpDb2xvcjo6
eWVsbG93IH07Ci0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBleHBlY3RlZC5j
b2xvclNwYWNlQW5kQ29tcG9uZW50cygpOwotICAgIFVOVVNFRF9WQVJJQUJMRShjb2xvclNwYWNl
KTsKLSAgICBjb250ZXh0LmNsZWFyQ29sb3IoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwg
Y29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBl
eHBlY3RlZC50b0NvbG9yVHlwZUxvc3N5PFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOworICAgIGNvbnRleHQuY2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBjb250ZXh0LmNs
ZWFyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUKTsKICAgICB1
aW50OF90IGdvdFZhbHVlc1s0XSA9IHsgfTsKICAgICBhdXRvIHNhbXBsZUF0ID0gY29udGV4dC5n
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwo=
</data>
<flag name="commit-queue"
          id="474028"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448202</attachid>
            <date>2022-01-02 21:00:09 -0800</date>
            <delta_ts>2022-01-03 09:59:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved9.diff</filename>
            <type>text/plain</type>
            <size>160885</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcGVydHVuaXR5IHRvIHJlcGxhY2UgYWxsIGl0cyB1c2VzIHdpdGggdGhlIGdl
bmVyaWMgdG9Db2xvclR5cGVMb3NzeTxTUkdCQTw+Pi4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yTW9kZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnVucmVzb2x2ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlw
ZTo6UmVzb2x2ZWRDb2xvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlOjpV
bnJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmFzQ29sb3JDb21wb25lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIEFkZHMgUmVzb2x2ZWRDb2xvclR5
cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZ2VuZXJpYyB0eXBlcy4gVGhleSBib3RoIGluaGVy
aXQgZnJvbQorICAgICAgICB0aGUgaGVscGVyIHR5cGUgRXhwb3NlZENvbG9yVHlwZSB3aGljaCBp
cyBzcGVjaWFsaXplZCBmb3IgZWFjaCBjb2xvciBtb2RlbCBhbmQgZG9lcworICAgICAgICB0aGUg
d29yayBvZiBleHBvc2luZyB0aGUgY29tcG9uZW50cyB2aWEgcHVibGljICd1c2luZyBDb2xvclR5
cGU6OmNvbXBvbmVudE5hbWUnLiBUaGVzZQorICAgICAgICB0eXBlcyBhbHNvIGhhdmUgb3ZlcnJp
ZGVzIG9mIHRoZSBuZXcgcmVzb2x2ZWQoKS91bnJlc29sdmVkKCkgbWVtYmVyIGZ1bmN0aW9ucyBv
biBjb2xvcgorICAgICAgICB0eXBlcyAod2VsbCwgb25seSB1bnJlc29sdmVkKCkgZm9yIFVucmVz
b2x2ZWRDb2xvclR5cGUpIHRvIGFsbG93IGdlbmVyaWMgY29kZSB0byBub3QKKyAgICAgICAgY2Fy
ZSBhYm91dCB3aGV0aGVyIGl0IGFscmVhZHkgaGFzIHJlc29sdmVkIG9yIHVucmVzb2x2ZWQgY29s
b3IgdHlwZSwgYW5kIGp1c3QgdXNlIHRoZQorICAgICAgICBhY2Nlc3NvciBpdCB3YW50cyB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IGR1cGxpY2F0ZWQgcmVzb2x1dGlvbi4KKyAgICAgICAgCisgICAg
ICAgIFNpbmNlIGFzQ29sb3JDb21wb25lbnRzKCkgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggZXhw
b3NlZCBjb2xvciB0eXBlcywgdGhvc2UgZnVuY3Rpb25zCisgICAgICAgIGhhdmUgYmVlbiBtb3Zl
ZCBoZXJlIGZyb20gQ29sb3JUeXBlcy5oIHRvIG1ha2UgdGhlaXIgcmVsYXRpb25zaGlwIG1vcmUg
Y2xlYXIuIFdlIGFsc28KKyAgICAgICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHRoZXNlIG92ZXJs
b2FkcyBhcyB3ZSBub3cganVzdCBoYXZlIG9uZSBwZXIgY29sb3IgbW9kZWwgKHdlIHByZXZpb3Vz
bHkKKyAgICAgICAgaGFkIG9uZSBwZXIgY29sb3IgdHlwZSkuCisKKyAgICAgICAgQWxzbyB0b29r
IHRoZSBvcGVydHVuaXR5IHRvIG1lcmdlIEV4dGVuZGVkUkdCTW9kZWwgYW5kIFJHQk1vZGVsIGlu
dG8gYSBzaW5nbGUgdHlwZQorICAgICAgICBwYXJhbWV0ZXJpemVkIGJ5IGFuIFJHQkJvdW5kZWRu
ZXNzIGVudW0uIFRoaXMgYWxsb3dlZCBmZXdlciBFeHBvc2VkQ29sb3JUeXBlIHNwZWNpYWxpemF0
aW9ucworICAgICAgICBhbmQgYXNDb2xvckNvbXBvbmVudHMoKSBvdmVybG9hZHMgKGFuZCB0byBy
ZW1vdmUgc29tZSB1c2VzIG9mIFVzZXNFeHRlbmRlZFJHQk1vZGVsPD4pLgorCisgICAgICAgIE9u
ZSB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0aGUgbW9yZSBjb21wbGV4IHR5cGUgaGllcmFy
Y2h5IGlzIHRoYXQgd2Ugbm8gbG9uZ2VyIGdldAorICAgICAgICBkZXN0cnVjdHVyaW5nIGZvciBm
cmVlLCBzbyB0byBhZGQgdGhhdCBiYWNrLCBhIGdlbmVyaWMgZ2V0PD4gb3ZlcmxvYWQgaXMgYWRk
ZWQgYXMgd2VsbAorICAgICAgICBhcyB0aGUgcmVxdWlyZWQgc3RkOjp0dXBsZV9zaXplL3N0ZDo6
dHVwbGVfZWxlbWVudCBzcGVjaWFsaXphdGlvbnMgb2YgUmVzb2x2ZWRDb2xvclR5cGUKKyAgICAg
ICAgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgKHRoZSBtb3N0IGRlcml2ZWQgY2xhc3MgbXVzdCBi
ZSB1c2VkIGZvciBzcGVjaWFsaXphdGlvbnMsIHNvCisgICAgICAgIGEgc2luZ2xlIEV4cG9zZWRD
b2xvclR5cGUgc3BlY2lhbGl6YXRpb24gd2FzIG5vdCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJv
bUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yV2l0aEFscGhhSGVscGVyOjpjb2xvcldpdGhBbHBoYUJ5dGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQVR5cGU6OnVucmVzb2x2ZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENI
QTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TENIQTo6dW5yZXNvbHZlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xhYjo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6T0tMYWI6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
T0tMQ0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPS0xDSEE6OnVucmVz
b2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTo6cmVzb2x2ZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFNMQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpIV0JBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBOjp1bnJl
c29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnJlc29sdmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhZWkE6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFja2VkQ29sb3I6OlJHQkE6OlJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UGFja2Vk
Q29sb3I6OkFSR0I6OkFSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICBNYWtlcyB0aGUgY29tcG9uZW50IG1lbWViZXJzIG9mIGVhY2gg
Y29sb3IgdHlwZSBwcm90ZWN0ZWQsIHNvIHRoYXQgb25seQorICAgICAgICB0aGUgUmVzb2x2ZWRD
b2xvclR5cGUgYW5kIFVucmVzb2x2ZWRDb2xvclR5cGUgZGVyaXZlZCB0eXBlcyBjYW4gYWNjZXNz
CisgICAgICAgIGFuZCByZS1leHBvc2UgdGhlbS4gVG8gYWNjZXNzIHRob3NlLCByZXNvbHZlZCgp
IGFuZCB1bnJlc29sdmVkKCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRv
IG1ha2UgaXQgZWFzeSwgYnV0IGV4cGxpY2l0LgorCisgICAgICAgIEFsc28gYWRkZWQgYSBuZXcg
dHlwZSB0cmFpdCBoZWxwZXIsIENhbm9uaWNhbENvbG9yVHlwZTw+IHdoaWNoIHdpbGwgcmV0dXJu
CisgICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCBuYW1lIGZvciBhIGNvbG9yIHR5cGUuIEZvciBl
eGFtcGxlOgorICAgICAgICAKKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8U1JHQkE8
ZmxvYXQ+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAgICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8
UmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+Pj4gPT0gU1JHQkE8ZmxvYXQ+CisgICAgICAg
ICAgICAgQ2Fub25pY2FsQ29sb3JUeXBlPFVucmVzb2x2ZWRDb2xvclR5cGU8U1JHQkE8ZmxvYXQ+
Pj4gPT0gU1JHQkE8ZmxvYXQ+CisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGdl
bmVyaWMgY29kZSB0byBub3QgY2FyZSB3aGV0aGVyIGl0IGlzIHBhcmFtdGVyaXplZCB1c2VkCisg
ICAgICAgIHRoZSBiYXNlL2Nhbm9uaWNhbCB0eXBlIG9yIG9uZSBvZiB0aGUgZGVyaXZlZCBvbmVz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNP
cGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9z
c3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBBZGQgcmVzb2x1dGlvbiB3aGVyZSBuZWVkZWQs
IGJ1dCBrZWVwIHRoZSBjb21wb25lbnRzIHVucmVzb2x2ZWQgZm9yIHN0b3JhZ2UgaW4gCisgICAg
ICAgIHRoZSBPdXRPZkxpbmVDb21wb25lbnRzIG9iamVjdC4gQWxzbyB1cGRhdGVzIHNvbWUgbmFt
ZXMgb2YgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisgICAgICAgIENvbG9yQ29tcG9uZW50cyB0aGF0
IHRoZXkgZXhwbGljaXRseSByZXR1cm4gcmVzb2x2ZWQgY29sb3IgY29tcG9uZW50cy4gSWYgbmVl
ZAorICAgICAgICB2YXJpYW50cyB0aGF0IHJldHVybiB1bnJlc29sdmVkIGNvbXBvbmVudHMsIHdl
IGNhbiBhZGQgdGhlbSBhcyBuZWNlc3Nhcnkgc2luY2UKKyAgICAgICAgdGhlIHN0b3JhZ2UgcmVt
YWlucyB1bnJlc29sdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmg6CisgICAgICAgIEFkZCBvcGVyYXRvci89KFQpIHRvIG1ha2Ugc29tZSBjb2RlIGlu
IFBhZ2VDb2xvclNhbXBsZXIuY3BwIG11Y2ggc2ltcGxlci4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFN3aXRj
aCB0byB0b0NvbG9yVHlwZUxvc3N5LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OnZhbHVlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlDb2xvclN0cmluZ1ZhbHVlXSk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VS
ZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xvckZ1bmN0aW9uRm9yWFlaVHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjptaXhDb2xv
ckNvbXBvbmVudHNVc2luZ0NvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VPdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvUG9sYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Jl
Y3Rhbmd1bGFyRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVIU0xIdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1JHQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIU0xBPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFdCQTxmbG9hdD4+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYjxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok9LTGFiPGZsb2F0Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2hpdGVQ
b2ludDo6RDY1Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFJlc29s
dmVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJz
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9C
eXRlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvTGlu
ZWFyRW5jb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvR2FtbWFF
bmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9FeHRlbmRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OnRvQm91bmRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvckNvbnZlcnNpb246OmhhbmRsZU1hdHJpeENvbnZlcnNpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpyZWxhdGl2ZUx1
bWluYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjp1
bnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvblVzaW5nQ29sb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5BbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0JsYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NHQ29tcGF0
aWJsZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0dDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRSZW5kZXJlckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZUdyYWRpZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6U2hhZGluZzo6c2hhZGluZ0Z1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50UmVuZGVyZXJDRzo6bWFrZVNoYWRpbmcg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBh
cmVGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUJydXNoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDb2xvciBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkVXNlQ29udmV4R3JhZGllbnQpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICBBZGQgY2FsbHMgdG8gcmVz
b2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cy4gU29tZSBvZiB0aGVzZSAocGFydGljdWxhcmxs
eSBpbiBzZXJpYWxpemF0aW9uLCBjb252ZXJzaW9uIGFuZAorICAgICAgICBpbnRlcnBvbGF0aW9u
IHJlbGF0ZWQgY2FsbHMpIHdpbGwgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gdXNlIHVucmVzb2x2
ZWQoKSBldmVudHVhbGx5LCBidXQgZmlyc3QgdGhleSB3aWxsCisgICAgICAgIG5lZWQgdG8gaGFu
ZGxlIHRoZSBOYU4gY2FzZSBwcm9wZXJseS4KKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2Ft
cGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6YXZlcmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBs
ZXI6OnNhbXBsZVRvcCk6CisgICAgICAgIFJld29yayBjb2RlIGEgYml0IHRvIHVzZSBtb2Rlcm4g
V2ViS2l0IGlkaW9tcyAoc3RkOjphcnJheSwgU3BhbiwgQ29sb3JDb21wb25lbnRzKS4KKwogMjAy
MS0xMi0yOSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11b
SUZDXSBDb2xsYXBzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtYXkgaW50cm9kdWNlIHN0cmF5IGlu
bGluZSBib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAgU1JHQkE8dWludDhfdD4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAK
LSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0Nv
bG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8U1JH
QkE8dWludDhfdD4+KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJ
KHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCBpbmxpbmUgQVhDb3JlT2JqZWN0OjpBWFZhbHVlIEFYQ29yZU9iamVjdDo6dmFsdWUoKQog
ICAgICAgICByZXR1cm4gaXNTZWxlY3RlZCgpOwogCiAgICAgaWYgKGlzQ29sb3JXZWxsKCkpIHsK
LSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yVmFs
dWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihj
b2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Ig
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLnJlZCwgNiwgS2Vl
cFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lv
bihjb2xvci5ncmVlbiwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpLCAiICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdGaXhlZFByZWNpc2lvbihjb2xvci5ibHVlLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyks
ICIgMSIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
NCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNj
ZXNzaWJpbGl0CiAKICAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvQ29sb3JU
eXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJl
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAg
IENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
KSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkBAIC00MzksNyArNDM5LDcgQEAgc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4CiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50Zigicmdi
ICU3LjVmICU3LjVmICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVl
KTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3Bp
LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoKSBj
b25zdAogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgaWYgKGF4T2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1
dG8gY29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4
T2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gY29sb3JTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpKTsKICAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29sb3JTdHJpbmcuZ2V0KCkpOwogICAgIH0KQEAgLTgyNCwxMyArODI0
LDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJp
bGl0eQogCiAgICAgICAgICAgICBhdXRvIGJnQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICAgICAgaWYgKGJnQ29s
b3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLi50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gZmdDb2xvciA9IHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgICAgIGlmIChmZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
ICAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci4udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjkyLDcgKzI4
OSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKQogaW5saW5lIGJvb2wgb3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYg
YSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0
T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09
IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xv
clNwYWNlKCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYm
IGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8
IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBA
IGlubGluZSBib29sIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwog
ICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1
dG8gYUZsYWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2Vt
YW50aWM7CiAgICAgICAgIGF1dG8gYkZsYWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5j
bHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCku
Y29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNw
YWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0
dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxp
bmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JT
cGFjZSgpICYmIGFGbGFncyA9PSBiRmxhZ3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRP
ZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5lKCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5l
IENvbG9yOjpDb2xvcihzdGQ6Om9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewot
ICAgIHNldE91dE9mTGluZUNvbXBvbmVudHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFn
c0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91
dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29s
dmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0
ZShmbGFncykpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZs
b2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlw
ZT4mIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAg
ICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUo
YXNDb2xvckNvbXBvbmVudHMoKmNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9G
bGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3It
PnVucmVzb2x2ZWQoKSkpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRp
bmdQcml2YXRlKGZsYWdzKSk7CiB9CiAKIGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGlu
ZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5lQ29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xv
cjo6fkNvbG9yKCkKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGlu
ZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2goYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygp
LCBjb2xvclNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNo
KGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3
ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JTcGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5k
ZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZM
aW5lKCkpCi0gICAgICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNv
bXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OworICAgICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29s
dmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAKQEAgLTU2NSw3ICs1NjIsNyBAQCB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW4KICAgICAgICAgZW5jb2Rl
ciA8PCBjb2xvclNwYWNlKCk7CiAKICAgICAgICAgYXV0byYgb3V0T2ZMaW5lQ29tcG9uZW50cyA9
IGFzT3V0T2ZMaW5lKCk7Ci0gICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IG91dE9m
TGluZUNvbXBvbmVudHMuY29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBh
bHBoYV0gPSBvdXRPZkxpbmVDb21wb25lbnRzLnVucmVzb2x2ZWRDb21wb25lbnRzKCk7CiAgICAg
ICAgIGVuY29kZXIgPDwgYzE7CiAgICAgICAgIGVuY29kZXIgPDwgYzI7CiAgICAgICAgIGVuY29k
ZXIgPDwgYzM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJs
ZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDggQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENvbG9yJiBiYWNrZHJvcCwg
Y29uc3QgQ29sCiAgICAgaWYgKCFzb3VyY2UuaXNWaXNpYmxlKCkpCiAgICAgICAgIHJldHVybiBi
YWNrZHJvcDsKIAotICAgIGF1dG8gW2JhY2tkcm9wUiwgYmFja2Ryb3BHLCBiYWNrZHJvcEIsIGJh
Y2tkcm9wQV0gPSBiYWNrZHJvcC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICBhdXRvIFtz
b3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBi
YWNrZHJvcEFdID0gYmFja2Ryb3AudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOworICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJjZUIsIHNvdXJjZUFd
ID0gc291cmNlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIGludCBkID0gMHhGRiAqIChiYWNrZHJvcEEgKyBzb3VyY2VBKSAtIGJhY2tkcm9wQSAq
IHNvdXJjZUE7CiAgICAgaW50IGEgPSBkIC8gMHhGRjsKQEAgLTY4LDcgKzY4LDcgQEAgQ29sb3Ig
YmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIGlmICghY29sb3IuaXNPcGFx
dWUoKSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwogCi0gICAgYXV0byBbZXhpc3RpbmdSLCBleGlz
dGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3RpbmdCLCBleGlz
dGluZ0FscGhhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVz
b2x2ZWQoKTsKIAogICAgIFNSR0JBPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBmb3IgKGludCBhbHBo
YSA9IHN0YXJ0QWxwaGE7IGFscGhhIDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVu
dCkgewpAQCAtOTcsOCArOTcsOCBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29u
c3QgQ29sb3ImIHRvLCBjb25zdCAKICAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAxICYmICF0
by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKTsKLSAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWQodG8udG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20g
PSBwcmVtdWx0aXBsaWVkKGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJl
c29sdmVkKCk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRvLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogCiAgICAgYXV0byBw
cmVtdWx0aXBsaWVkQmxlbmRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZs
b2F0Pj4oCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJl
bXVsdGlwbGllZFRvLnJlZCwgY29udGV4dCksCkBAIC0xMTcsOCArMTE3LDggQEAgQ29sb3IgYmxl
bmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0CiAgICAgaWYgKGNv
bnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9h
dD4+KCk7Ci0gICAgYXV0byB0b1NSR0IgPSB0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0
Pj4oKTsKKyAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKS5yZXNvbHZlZCgpOworICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGF1dG8gYmxlbmRlZCA9IG1ha2VG
cm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oCiAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgY29udGV4dCksCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgc3RydWN0IENvbG9yQ29t
cG9uZW50cyB7CiAgICAgY29uc3RleHByIGF1dG8gbWFwKEYmJiBmdW5jdGlvbikgY29uc3QgLT4g
Q29sb3JDb21wb25lbnRzPGRlY2x0eXBlKGZ1bmN0aW9uKHN0ZDo6ZGVjbHZhbDxUPigpKSksIE4+
OwogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBDb2xv
ckNvbXBvbmVudHMmKTsKKyAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzJiBvcGVyYXRvci89
KFQpOwogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvcisoVCkgY29uc3Q7
CiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvci8oVCkgY29uc3Q7CkBAIC05
OCw2ICs5OSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KIGNvbnN0ZXhwciBD
b2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBOPjo6b3BlcmF0b3IrPShj
b25zdCBDb2xvckNvbXBvbmVudHMmIHJocykKIHsKICAgICAqdGhpcyA9IG1hcENvbG9yQ29tcG9u
ZW50cyhbXShUIGMxLCBUIGMyKSB7IHJldHVybiBjMSArIGMyOyB9LCAqdGhpcywgcmhzKTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorY29u
c3RleHByIENvbG9yQ29tcG9uZW50czxULCBOPiYgQ29sb3JDb21wb25lbnRzPFQsIE4+OjpvcGVy
YXRvci89KFQgcmhzKQoreworICAgICp0aGlzID0gKCp0aGlzIC8gcmhzKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
Q29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMjggKzM5LDI1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIExDSExpa2UsIHR5cGVuYW1l
IExhYkxpa2U+CiBMQ0hMaWtlIGNvbnZlcnRUb1BvbGFyRm9ybShjb25zdCBMYWJMaWtlJiBjb2xv
cikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNsYWItdG8t
bGNoCi0gICAgZmxvYXQgaHVlID0gcmFkMmRlZyhhdGFuMihjb2xvci5iLCBjb2xvci5hKSk7Cisg
ICAgYXV0byBbbGlnaHRuZXNzLCBhLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCi0g
ICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBzdGQ6Omh5cG90
KGNvbG9yLmEsIGNvbG9yLmIpLAotICAgICAgICBodWUgPj0gMCA/IGh1ZSA6IGh1ZSArIDM2MCwK
LSAgICAgICAgY29sb3IuYWxwaGEKLSAgICB9OworICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRh
bjIoYiwgYSkpOworICAgIGZsb2F0IGNocm9tYSA9IHN0ZDo6aHlwb3QoYSwgYik7CisKKyAgICBy
ZXR1cm4geyBsaWdodG5lc3MsIGNocm9tYSwgaHVlID49IDAgPyBodWUgOiBodWUgKyAzNjAsIGFs
cGhhIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExhYkxpa2UsIHR5cGVuYW1lIExDSExpa2U+
CiBMYWJMaWtlIGNvbnZlcnRUb1JlY3Rhbmd1bGFyRm9ybShjb25zdCBMQ0hMaWtlJiBjb2xvcikK
IHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNsY2gtdG8tbGFi
Ci0gICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChjb2xvci5odWUpOworICAgIGF1
dG8gW2xpZ2h0bmVzcywgY2hyb21hLCBodWUsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAK
LSAgICByZXR1cm4gewotICAgICAgICBjb2xvci5saWdodG5lc3MsCi0gICAgICAgIGNvbG9yLmNo
cm9tYSAqIHN0ZDo6Y29zKGh1ZUFuZ2xlUmFkaWFucyksCi0gICAgICAgIGNvbG9yLmNocm9tYSAq
IHN0ZDo6c2luKGh1ZUFuZ2xlUmFkaWFucyksCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsK
KyAgICBmbG9hdCBodWVBbmdsZVJhZGlhbnMgPSBkZWcycmFkKGh1ZSk7CisgICAgZmxvYXQgYSA9
IGNocm9tYSAqIHN0ZDo6Y29zKGh1ZUFuZ2xlUmFkaWFucyk7CisgICAgZmxvYXQgYiA9IGNocm9t
YSAqIHN0ZDo6c2luKGh1ZUFuZ2xlUmFkaWFucyk7CisKKyAgICByZXR1cm4geyBsaWdodG5lc3Ms
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IEhTTCBjb252ZXJzaW9ucy4KQEAgLTcyLDkg
KzY5LDggQEAgc3RydWN0IEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IHsKICAgICBmbG9hdCBjaHJv
bWE7CiB9OwogCi1zdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgY2FsY3VsYXRlSFNMSHVl
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCitzdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1
bHQgY2FsY3VsYXRlSFNMSHVlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIpCiB7Ci0gICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gY29sb3I7CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjpt
aW5tYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKIApAQCAt
OTcsOCArOTMsOCBAQCBzdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgY2FsY3VsYXRlSFNM
SHVlKGNvbnN0IFMKIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0PiwgU1JH
QkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIC8v
IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHNsLXRvLXJnYgotICAgIGF1
dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwotICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUoY29sb3IpOworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9
IGNhbGN1bGF0ZUhTTEh1ZShyLCBnLCBiKTsKIAogICAgIGZsb2F0IGxpZ2h0bmVzcyA9ICgwLjVm
ICogKG1heCArIG1pbikpICogMTAwLjBmOwogICAgIGZsb2F0IHNhdHVyYXRpb247CkBAIC0xMTUs
NyArMTExLDcgQEAgSFNMQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBTUkdC
QTxmbG9hdD4+CiBTUkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFNM
QTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBo
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKLSAgICBhdXRv
IFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBb
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAK
ICAgICBpZiAoIXNhdHVyYXRpb24pIHsKICAgICAgICAgYXV0byBncmV5ID0gbGlnaHRuZXNzIC8g
MTAwLjBmOwpAQCAtMTYyLDE3ICsxNTgsMTggQEAgU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lv
bjxTUkdCQTxmbG9hdD4sIEhTTEE8ZmxvYXQ+CiBIV0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248
SFdCQTxmbG9hdD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI3Jn
Yi10by1od2IKLSAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgp
OworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwg
ZywgYik7CiAgICAgYXV0byB3aGl0ZW5lc3MgPSBtaW4gKiAxMDAuMGY7CiAgICAgYXV0byBibGFj
a25lc3MgPSAoMS4wZiAtIG1heCkgKiAxMDAuMGY7CiAgICAgCi0gICAgcmV0dXJuIHsgaHVlLCB3
aGl0ZW5lc3MsIGJsYWNrbmVzcywgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBodWUsIHdo
aXRlbmVzcywgYmxhY2tuZXNzLCBhbHBoYSB9OwogfQogCiBTUkdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IEhXQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9y
LTQvI2h3Yi10by1yZ2IKLSAgICBhdXRvIFtodWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBhbHBo
YV0gPSBjb2xvcjsKKyAgICBhdXRvIFtodWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBhbHBoYV0g
PSBjb2xvci5yZXNvbHZlZCgpOwogCiAgICAgaWYgKHdoaXRlbmVzcyArIGJsYWNrbmVzcyA9PSAx
MDAuMGYpIHsKICAgICAgICAgYXV0byBncmV5ID0gd2hpdGVuZXNzIC8gMTAwLjBmOwpAQCAtMjI1
LDEwICsyMjIsMTIgQEAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBENTBXaGl0ZVZhbHVlc1tdID0g
eyAwLjk2NDIyZiwgCiAKIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJz
aW9uPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4sIExhYjxmbG9hdD4+Ojpjb252ZXJ0KGNv
bnN0IExhYjxmbG9hdD4mIGNvbG9yKQogewotICAgIGZsb2F0IGYxID0gKGNvbG9yLmxpZ2h0bmVz
cyArIDE2LjBmKSAvIDExNi4wZjsKLSAgICBmbG9hdCBmMCA9IGYxICsgKGNvbG9yLmEgLyA1MDAu
MGYpOwotICAgIGZsb2F0IGYyID0gZjEgLSAoY29sb3IuYiAvIDIwMC4wZik7CisgICAgYXV0byBb
bGlnaHRuZXNzLCBhLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisgICAgZmxvYXQg
ZjEgPSAobGlnaHRuZXNzICsgMTYuMGYpIC8gMTE2LjBmOworICAgIGZsb2F0IGYwID0gZjEgKyAo
YSAvIDUwMC4wZik7CisgICAgZmxvYXQgZjIgPSBmMSAtIChiIC8gMjAwLjBmKTsKKwogICAgIGF1
dG8gY29tcHV0ZVhBbmRaID0gW10oZmxvYXQgdCkgewogICAgICAgICBmbG9hdCB0Q3ViZWQgPSB0
ICogdCAqIHQ7CiAgICAgICAgIGlmICh0Q3ViZWQgPiBMQUJlKQpAQCAtMjQ3LDMxICsyNDYsMzMg
QEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9h
CiAgICAgfTsKIAogICAgIGZsb2F0IHggPSBENTBXaGl0ZVZhbHVlc1swXSAqIGNvbXB1dGVYQW5k
WihmMCk7Ci0gICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29tcHV0ZVkoY29sb3Iu
bGlnaHRuZXNzKTsKKyAgICBmbG9hdCB5ID0gRDUwV2hpdGVWYWx1ZXNbMV0gKiBjb21wdXRlWShs
aWdodG5lc3MpOwogICAgIGZsb2F0IHogPSBENTBXaGl0ZVZhbHVlc1syXSAqIGNvbXB1dGVYQW5k
WihmMik7CiAKLSAgICByZXR1cm4geyB4LCB5LCB6LCBjb2xvci5hbHBoYSB9OworICAgIHJldHVy
biB7IHgsIHksIHosIGFscGhhIH07CiB9CiAKIExhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExh
YjxmbG9hdD4sIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KGNvbnN0IFhZ
WkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yKQogewotICAgIGZsb2F0IHggPSBjb2xv
ci54IC8gRDUwV2hpdGVWYWx1ZXNbMF07Ci0gICAgZmxvYXQgeSA9IGNvbG9yLnkgLyBENTBXaGl0
ZVZhbHVlc1sxXTsKLSAgICBmbG9hdCB6ID0gY29sb3IueiAvIEQ1MFdoaXRlVmFsdWVzWzJdOwor
ICAgIGF1dG8gW3gsIHksIHosIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAKKyAgICBmbG9h
dCBhZGp1c3RlZFggPSB4IC8gRDUwV2hpdGVWYWx1ZXNbMF07CisgICAgZmxvYXQgYWRqdXN0ZWRZ
ID0geSAvIEQ1MFdoaXRlVmFsdWVzWzFdOworICAgIGZsb2F0IGFkanVzdGVkWiA9IHogLyBENTBX
aGl0ZVZhbHVlc1syXTsKKwogICAgIGF1dG8gZlRyYW5zZm9ybSA9IFtdKGZsb2F0IHZhbHVlKSB7
CiAgICAgICAgIHJldHVybiB2YWx1ZSA+IExBQmUgPyBzdGQ6OmNicnQodmFsdWUpIDogKExBQmsg
KiB2YWx1ZSArIDE2LjBmKSAvIDExNi4wZjsKICAgICB9OwogCi0gICAgZmxvYXQgZjAgPSBmVHJh
bnNmb3JtKHgpOwotICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybSh5KTsKLSAgICBmbG9hdCBmMiA9
IGZUcmFuc2Zvcm0oeik7CisgICAgZmxvYXQgZjAgPSBmVHJhbnNmb3JtKGFkanVzdGVkWCk7Cisg
ICAgZmxvYXQgZjEgPSBmVHJhbnNmb3JtKGFkanVzdGVkWSk7CisgICAgZmxvYXQgZjIgPSBmVHJh
bnNmb3JtKGFkanVzdGVkWik7CiAKICAgICBmbG9hdCBsaWdodG5lc3MgPSAoMTE2LjBmICogZjEp
IC0gMTYuMGY7CiAgICAgZmxvYXQgYSA9IDUwMC4wZiAqIChmMCAtIGYxKTsKICAgICBmbG9hdCBi
ID0gMjAwLjBmICogKGYxIC0gZjIpOwogCi0gICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBj
b2xvci5hbHBoYSB9OworICAgIHJldHVybiB7IGxpZ2h0bmVzcywgYSwgYiwgYWxwaGEgfTsKIH0K
IAogLy8gTUFSSzogTENIIGNvbnZlcnNpb25zLgpAQCAtMzA4LDkgKzMwOSwxMCBAQCBYWVpBPGZs
b2F0LCBXaGl0ZVBvaW50OjpENjU+IENvbG9yQ29udmVyc2lvbjxYWVpBPGZsb2EKICAgICAgICAg
MS4wMDAwMDAwNTQ2NzI0MTA5MTc3ZiwgIC0wLjA4OTQ4NDE4MjA5NDk2NTc1OTY4NGYsIC0xLjI5
MTQ4NTUzNzg2NDA5MTczOTlmCiAgICAgfTsKIAorICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIFRyYW5zZm9ybSBmcm9tIHBy
ZWNlbnRhZ2UgbGlnaHRuZXNzIHRvIHVuaXQgbGlnaHRuZXNzLgotICAgIGF1dG8gY29tcG9uZW50
cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5zdWJzZXQ8MCwgMz4oKTsKLSAgICBjb21wb25l
bnRzWzBdID0gY29tcG9uZW50c1swXSAvIDEwMC4wZjsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHsgbGlnaHRuZXNzIC8gMTAwLjBmLCBhLCBiIH07CiAK
ICAgICAvLyAyLiBUcmFuc2Zvcm0gZnJvbSBMYWItY29vcmRpbmF0ZXMgaW50byBub24tbGluZWFy
IExNUyAiYXBwcm94aW1hdGUgY29uZSByZXNwb25zZXMiLgogICAgIGF1dG8gbm9uTGluZWFyTE1T
ID0gT0tMYWJUb05vbkxpbmVhckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhjb21wb25l
bnRzKTsKQEAgLTMyMSw3ICszMjMsNyBAQCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+IENv
bG9yQ29udmVyc2lvbjxYWVpBPGZsb2EKICAgICAvLyA0LiBDb252ZXJ0IHRvIFhZWi4KICAgICBh
dXRvIFt4LCB5LCB6XSA9IExpbmVhckxNU1RvWFlaRDY1LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGxpbmVhckxNUyk7CiAKLSAgICByZXR1cm4geyB4LCB5LCB6LCBjb2xvci5hbHBoYSB9Owor
ICAgIHJldHVybiB7IHgsIHksIHosIGFscGhhIH07CiB9CiAKIE9LTGFiPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248T0tMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+Pjo6Y29u
dmVydChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+JiBjb2xvcikKQEAgLTM0NCw4
ICszNDYsMTAgQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4sIFhZ
WkE8ZmxvYXQsCiAgICAgICAgIDAuMDI1OTA0MDM3MWYsICAwLjc4Mjc3MTc2NjJmLCAtMC44MDg2
NzU3NjYwZgogICAgIH07CiAKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNv
bHZlZCgpOworCiAgICAgLy8gMS4gQ29udmVydCBYWVogaW50byBMTVMgImFwcHJveGltYXRlIGNv
bmUgcmVzcG9uc2VzIi4KLSAgICBhdXRvIGxpbmVhckxNUyA9IFhZWkQ2NVRvTGluZWFyTE1TLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5zdWJzZXQ8
MCwgMz4oKSk7CisgICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVhckxNUy50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHsgeCwgeSwgeiB9
KTsKIAogICAgIC8vIDIuIEFwcGx5IG5vbi1saW5lYXJpdHkuCiAgICAgYXV0byBub25MaW5lYXJM
TVMgPSBsaW5lYXJMTVMubWFwKFtdIChmbG9hdCB2KSB7IHJldHVybiBzdGQ6OmNicnQodik7IH0p
OwpAQCAtMzU0LDcgKzM1OCw3IEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8
ZmxvYXQ+LCBYWVpBPGZsb2F0LAogICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYl0gPSBOb25MaW5l
YXJMTVNUb09LTGFiLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKG5vbkxpbmVhckxNUyk7CiAK
ICAgICAvLyA0LiBUcmFuc2Zvcm0gbGlnaHRuZXNzIGZyb20gdW5pdCBsaWdodG5lc3MgdG8gcGVy
Y2VudGFnZSBsaWdodG5lc3MuCi0gICAgcmV0dXJuIHsgbGlnaHRuZXNzICogMTAwLjBmLCBhLCBi
LCBjb2xvci5hbHBoYSB9OworICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4wZiwgYSwgYiwg
YWxwaGEgfTsKIH0KIAogLy8gTUFSSzogT0tMQ0ggY29udmVyc2lvbnMuCkBAIC0zNzEsNTggKzM3
NSw1OCBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgT0tMQ0hB
PGZsb2EKIAogLy8gTUFSSzogQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21w
b25lbnRzIHdpdGggYXNzb2NpYXRlZCBjb2xvciBzcGFjZXMuCiAKLUNvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JT
cGFjZSBvdXRwdXRDb2xvclNwYWNlKQorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0
QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFjZSBv
dXRwdXRDb2xvclNwYWNlKQogewogICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENv
bG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNwYWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0
IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAgICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlKSB7
CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6QTk4UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKSk7
CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEE5OFJH
QjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMzoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1
dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZEE5
OFJHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
RXh0ZW5kZWRBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRE
aXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENv
bG9yPEV4dGVuZGVkRGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxm
bG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OkV4dGVuZGVkTGluZWFyU1JHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsK
KyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBj
YXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkUHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUHJvUGhvdG9SR0I8ZmxvYXQ+
PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPEV4dGVuZGVkUHJvUGhvdG9SR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFJlYzIwMjA6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAy
MDxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRSZWMyMDIwPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVz
b2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRTUkdCOgotICAgICAg
ICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JB
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2
ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6SFNMOgotICAgICAgICAgICAgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxIU0xBPGZsb2F0Pj4oaW5wdXRDb2xvcikp
OworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxIU0xB
PGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFj
ZTo6SFdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxIV0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxIV0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6TENIOgotICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMQ0hBPGZs
b2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6
TGFiOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxM
YWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoY29udmVydENvbG9yPExhYjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBj
YXNlIENvbG9yU3BhY2U6Ok9LTENIOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE9LTENIQTxmbG9hdD4+KGlu
cHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6Ok9LTGFiOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xhYjxm
bG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpQcm9QaG90b1JHQjoKLSAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8UHJvUGhvdG9SR0I8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNh
c2UgQ29sb3JTcGFjZTo6UmVjMjAyMDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8UmVjMjAyMDxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8UmVjMjAyMDxmbG9hdD4+
KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6
Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JB
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENTA6Ci0gICAgICAgICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPj4oaW5wdXRDb2xvcikucmVzb2x2
ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6WFlaX0Q2NToKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2lu
dDo6RDY1Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZs
b2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgfSk7
CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKQorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9y
Q29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBvdXRwdXRDb2xvclNwYWNlKQogewogI2lmIFVTRShDRykKICAgICByZXR1cm4gcGxhdGZvcm1D
b252ZXJ0Q29sb3JDb21wb25lbnRzKGlucHV0Q29sb3JTcGFjZSwgaW5wdXRDb2xvckNvbXBvbmVu
dHMsIG91dHB1dENvbG9yU3BhY2UpOwpAQCAtNDMwLDE5ICs0MzQsMTkgQEAgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKENvbG9yCiAgICAgcmV0dXJuIGNh
bGxXaXRoQ29sb3JUeXBlKGlucHV0Q29sb3JDb21wb25lbnRzLCBpbnB1dENvbG9yU3BhY2UsIFtv
dXRwdXRDb2xvclNwYWNlXSAoY29uc3QgYXV0byYgaW5wdXRDb2xvcikgewogICAgICAgICBzd2l0
Y2ggKG91dHB1dENvbG9yU3BhY2UucGxhdGZvcm1Db2xvclNwYWNlKCkpIHsKICAgICAgICAgY2Fz
ZSBQbGF0Zm9ybUNvbG9yU3BhY2U6Ok5hbWU6OlNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxm
bG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9D
T0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICAgICAgY2FzZSBQbGF0Zm9ybUNvbG9yU3BhY2U6
Ok5hbWU6OkxpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xvclNw
YWNlOjpOYW1lOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgfSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBlbnVtIGNsYXNzIENvbG9yU3BhY2Ug
OiB1aW50OF90OwogdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dD4gT3V0
cHV0IGNvbnZlcnRDb2xvcihjb25zdCBJbnB1dCYgY29sb3IpOwogCiAvLyBDb252ZXJzaW9uIGZ1
bmN0aW9ucyBmb3IgcmF3IGNvbG9yIGNvbXBvbmVudHMgd2l0aCBhc3NvY2lhdGVkIGNvbG9yIHNw
YWNlcy4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKTsKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0
Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50
cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKTsKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29s
b3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRD
b2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7CitDb2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKENvbG9yU3Bh
Y2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JD
b21wb25lbnRzLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG91dHB1dENvbG9yU3BhY2Up
OwogCiAKIC8vIEFsbCBjb2xvciB0eXBlcywgb3RoZXIgdGhhbiBYWVpBIG9yIHRob3NlIGluaGVy
aXRpbmcgZnJvbSBSR0JUeXBlLCBtdXN0IGltcGxlbWVudApAQCAtNTcsNyArNTcsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZSA9IHYKIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dD4gaW5saW5lIE91dHB1dCBjb252
ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKQogewotICAgIHJldHVybiBDb2xvckNvbnZlcnNp
b248T3V0cHV0LCBJbnB1dD46OmNvbnZlcnQoY29sb3IpOworICAgIHJldHVybiBDb2xvckNvbnZl
cnNpb248Q2Fub25pY2FsQ29sb3JUeXBlPE91dHB1dD4sIENhbm9uaWNhbENvbG9yVHlwZTxJbnB1
dD4+Ojpjb252ZXJ0KGNvbG9yKTsKIH0KIAogCkBAIC0yMDgsNyArMjA4LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAKICAgICAgICAg
dXNpbmcgSW5wdXRXaXRoUmVwbGFjZW1lbnQgPSBDb2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21w
b25lbnQ8SW5wdXQsIGZsb2F0PjsKICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djxJbnB1dFdpdGhSZXBsYWNlbWVudCwgT3V0cHV0PikKLSAgICAgICAgICAgIHJldHVybiBtYWtl
RnJvbUNvbXBvbmVudHM8SW5wdXRXaXRoUmVwbGFjZW1lbnQ+KGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKS5tYXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUu
MGY7IH0pKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8SW5wdXRXaXRo
UmVwbGFjZW1lbnQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpLm1hcChbXSh1
aW50OF90IHZhbHVlKSAtPiBmbG9hdCB7IHJldHVybiB2YWx1ZSAvIDI1NS4wZjsgfSkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91dHB1dD4oY29udmVy
dENvbG9yPElucHV0V2l0aFJlcGxhY2VtZW50Pihjb2xvcikpOwogICAgIH0KQEAgLTIxOSwzMSAr
MjE5LDMxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVu
YW1lPiBzdAogCiAgICAgICAgIHVzaW5nIE91dHB1dFdpdGhSZXBsYWNlbWVudCA9IENvbG9yVHlw
ZVdpdGhSZXBsYWNlbWVudENvbXBvbmVudDxPdXRwdXQsIGZsb2F0PjsKICAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX3NhbWVfdjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQsIElucHV0PikKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8T3V0cHV0Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90IHsgcmV0dXJuIHN0ZDo6
Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7IH0pKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8T3V0cHV0Pihhc0NvbG9yQ29tcG9uZW50
cyhjb2xvci5yZXNvbHZlZCgpKS5tYXAoW10oZmxvYXQgdmFsdWUpIC0+IHVpbnQ4X3QgeyByZXR1
cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAqIDI1NS4wZiksIDBsLCAyNTVsKTsgfSkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91dHB1dD4o
Y29udmVydENvbG9yPE91dHB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1
dG8gdG9MaW5lYXJFbmNvZGVkKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENv
bG9yVHlwZTo6TGluZWFyQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBj
b2xvci5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4geyBDb2xvclR5cGU6OlRyYW5zZmVyRnVu
Y3Rpb246OnRvTGluZWFyKGMxKSwgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0xpbmVh
cihjMiksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9MaW5lYXIoYzMpLCBhbHBoYSB9
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIGlubGlu
ZSBjb25zdGV4cHIgYXV0byB0b0dhbW1hRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAt
PiB0eXBlbmFtZSBDb2xvclR5cGU6OkdhbW1hRW5jb2RlZENvdW50ZXJwYXJ0CiAgICAgewotICAg
ICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29s
b3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMSksIENvbG9yVHlwZTo6
VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVy
RnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMzKSwgYWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9F
eHRlbmRlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBlbmFtZSBDb2xvclR5cGU6OkV4
dGVuZGVkQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVu
dHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpOworICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPHR5cGVuYW1l
IENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3Iu
cmVzb2x2ZWQoKSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIGlubGluZSBjb25zdGV4cHIgYXV0byB0b0JvdW5kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPHR5cGVu
YW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpOworICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IucmVzb2x2ZWQoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUgY29uc3Rl
eHByIE91dHB1dCBoYW5kbGVSR0JGYW1pbHlDb252ZXJzaW9uKGNvbnN0IElucHV0JiBjb2xvcikK
QEAgLTMxMiw3ICszMTIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElu
cHV0LCB0eXBlbmFtZT4gc3QKICAgICAgICAgLy8gaGF2ZSBzdWZmaWNpZW50IHRlc3RpbmcgY292
ZXJhZ2UgdG8gbm90aWNlIGFueSBhZHZlcnNlIGVmZmVjdHMuCiAKICAgICAgICAgYXV0byBhcHBs
eU1hdHJpY2VzID0gW10oY29uc3QgSW5wdXQmIGNvbG9yLCBhdXRvLi4uIG1hdHJpY2VzKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxP
dXRwdXQ+KGFwcGx5TWF0cmljZXNUb0NvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvciksIG1hdHJpY2VzLi4uKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25l
bnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxPdXRwdXQ+KGFwcGx5TWF0cmljZXNUb0NvbG9yQ29tcG9u
ZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSwgbWF0cmljZXMuLi4pKTsK
ICAgICAgICAgfTsKIAogICAgICAgICBpZiBjb25zdGV4cHIgKElucHV0Ojp3aGl0ZVBvaW50ID09
IE91dHB1dDo6d2hpdGVQb2ludCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgJKHJldmlzaW9uIDI4NzQ4MikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdGVtcGxhdGU8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBhbHBoYVByZW11bHRpcGxpY2F0aW9uCiB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGludGVycG9sYXRlQ29sb3JDb21wb25lbnRzKElu
dGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNlIGludGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNl
LCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9y
MSwgZG91YmxlIGNvbG9yMU11bHRpcGxpZXIsIHR5cGVuYW1lIEludGVycG9sYXRpb25NZXRob2RD
b2xvclNwYWNlOjpDb2xvclR5cGUgY29sb3IyLCBkb3VibGUgY29sb3IyTXVsdGlwbGllcikKIHsK
ICAgICAvLyAxLiBBcHBseSBwcmUtaW50ZXJwb2xhdGlvbiB0cmFuc2Zvcm1zIChodWUgZml4dXAg
Zm9yIHBvbGFyIGNvbG9yIHNwYWNlcywgYWxwaGEgcHJlbXVsdGlwbGljYXRpb24gaWYgcmVxdWly
ZWQpLgotICAgIGF1dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29s
b3JDb21wb25lbnRzMl0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11
bHRpcGxpY2F0aW9uPihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBv
bmVudHMoY29sb3IxKSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3IyKSk7CisgICAgYXV0byBbbm9y
bWFsaXplZENvbG9yQ29tcG9uZW50czEsIG5vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMyXSA9IHBy
ZUludGVycG9sYXRpb25Ob3JtYWxpemF0aW9uPGFscGhhUHJlbXVsdGlwbGljYXRpb24+KGludGVy
cG9sYXRpb25NZXRob2RDb2xvclNwYWNlLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjEucmVzb2x2
ZWQoKSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMi5yZXNvbHZlZCgpKSk7CiAKICAgICAvLyAy
LiBJbnRlcnBvbGF0ZSB1c2luZyB0aGUgbm9ybWFsaXplZCBjb21wb25lbnRzLgogICAgIGF1dG8g
aW50ZXJwb2xhdGVkQ29sb3JDb21wb25lbnRzID0gbWFwQ29sb3JDb21wb25lbnRzKFsmXSAoYXV0
byBjb21wb25lbnRGcm9tQ29sb3IxLCBhdXRvIGNvbXBvbmVudEZyb21Db2xvcjIpIC0+IGZsb2F0
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JM
dW1pbmFuY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JMdW1pbmFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBkb3VibGUgcmVsYXRpdmVMdW0K
ICAgICAvLyB0aGlzIGluIENvbG9yQ29udmVyc2lvbi5oIGFzIGEgc2libGluZyBmdW5jdGlvbiB0
byBjb252ZXJ0Q29sb3Igd2hpY2ggY2FuIGdldCBhIGNoYW5uZWwKICAgICAvLyBvZiBhIGNvbG9y
IGluIGFub3RoZXIgc3BhY2UgaW4gdGhpcyBraW5kIG9mIG9wdGltYWwgd2F5LgogCi0gICAgcmV0
dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+Pihjb2xvcikueTsK
KyAgICByZXR1cm4gY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4+KGNv
bG9yKS5yZXNvbHZlZCgpLnk7CiB9CiAKIGlubGluZSBkb3VibGUgY29udHJhc3RSYXRpbyhkb3Vi
bGUgcmVsYXRpdmVMdW1pbmFuY2VBLCBkb3VibGUgcmVsYXRpdmVMdW1pbmFuY2VCKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1v
ZGVscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsOTMgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitlbnVtIGNsYXNzIFJHQkJvdW5kZWRuZXNzIHsgQm91bmRlZCwgRXh0ZW5kZWQg
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUsIFJHQkJvdW5kZWRuZXNzPiBzdHJ1Y3QgUkdCTW9kZWw7
CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRzOwogdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBDb2xvckNvbXBvbmVudEluZm87Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IEV4dGVuZGVkUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTE1vZGVsOwog
dGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIV0JNb2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgTENITW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExhYk1vZGVsOwotdGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSR0JNb2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgWFlaTW9kZWw7CiAKKy8vIE1BUks6IFJlc29sdmVkL1VucmVzb2x2ZWQgRGVmaW50aXRpb25z
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JNb2RlbCA9IHR5
cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlOwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgUmVzb2x2ZWRDb2xvclR5cGU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBVbnJlc29sdmVkQ29sb3JUeXBlOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlwZTxDb2xv
clR5cGU+IHJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBSZXNv
bHZlZENvbG9yVHlwZTxDb2xvclR5cGU+IHsgaW5wdXQgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+IHVu
cmVzb2x2ZWRDb2xvcihDb2xvclR5cGUgaW5wdXQpCit7CisgICAgcmV0dXJuIFVucmVzb2x2ZWRD
b2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHJlc29sdmVDb2xvckNvbXBvbmVudHMoY29uc3QgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb2xvckNvbXBvbmVudHMpCit7CisgICAgcmV0dXJu
IGNvbG9yQ29tcG9uZW50czsKK30KKworaW5saW5lIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
ZmxvYXQsIDQ+IHJlc29sdmVDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAgIHJldHVybiBjb2xvckNvbXBvbmVudHMu
bWFwKFtdIChmbG9hdCBjb21wb25lbnQpIHsgcmV0dXJuIHN0ZDo6aXNuYW4oY29tcG9uZW50KSA/
IDAuMGYgOiBjb21wb25lbnQ7IH0pOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsKKyAgICB1c2luZyBDYW5vbmljYWxUeXBlID0g
Q29sb3JUeXBlOworCisgICAgLy8gQ2FsbGluZyByZXNvbHZlZCgpIG9yIHVucmVzb2x2ZWQoKSBv
biBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHJlc29sdmVkIGlzIGEgbm8tb3AsIHNvIHdlIGNhbgor
ICAgIC8vIGp1c3QgcmV0dXJuIG91cnNlbHZlcy4KKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQz4gZnJpZW5kIGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlwZTxDPiByZXNvbHZlZENv
bG9yKEMpOworCisgICAgZXhwbGljaXQgY29uc3RleHByIFJlc29sdmVkQ29sb3JUeXBlKENvbG9y
VHlwZSBjb2xvcikKKyAgICAgICAgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpNb2RlbD4geyByZXNvbHZlKGNvbG9yKSB9CisgICAgeworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lX3Y8dHlwZW5hbWUgQzo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQyByZXNvbHZlKEMgY29sb3IpCisgICAgeworICAgICAgICBh
dXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSByZXNvbHZlQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKEV4cG9zZWRDb2xvclR5cGU8QywgdHlwZW5hbWUgQzo6TW9kZWw+IHsgY29sb3Ig
fSkpOworICAgICAgICByZXR1cm4gQ29sb3JUeXBlIHsgYzEsIGMyLCBjMywgYWxwaGEgfTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIEM6OkNvbXBvbmVudFR5cGUsIHVpbnQ4X3Q+PiogPSBu
dWxscHRyPgorICAgIHN0YXRpYyBjb25zdGV4cHIgQyByZXNvbHZlKEMgY29sb3IpCisgICAgewor
ICAgICAgICByZXR1cm4gY29sb3I7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgdW5yZXNvbHZlZCgpIG9uIGEgdHlw
ZSB0aGF0IGlzIGFscmVhZHkgdW5yZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3ZSBjYW4KKyAgICAv
LyBqdXN0IHJldHVybiBvdXJzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgp
IGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQz4gZnJpZW5kIGNvbnN0ZXhwciBVbnJlc29sdmVkQ29sb3JUeXBlPEM+IHVucmVzb2x2ZWRD
b2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBVbnJlc29sdmVkQ29sb3JUeXBlKENv
bG9yVHlwZSBjb2xvcikKKyAgICAgICAgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlw
ZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geyBjb2xvciB9CisgICAgeworICAgIH0KK307CisKKwor
Ly8gTUFSSzogLSBDb2xvciBNb2RlbCBzdXBwb3J0IHR5cGVzLgorCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBBbHBoYVRyYWl0czxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgdHJhbnNw
YXJlbnQgPSAwLjBmOwogICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgb3BhcXVlID0gMS4wZjsK
QEAgLTY4LDE3ICsxNDQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JDb21w
b25lbnRJbmZvIHsKICAgICBDb2xvckNvbXBvbmVudFR5cGUgdHlwZTsKIH07CiAKLXRlbXBsYXRl
PD4gc3RydWN0IEV4dGVuZGVkUkdCTW9kZWw8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7
IHsKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6
Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5p
dHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9u
ZW50VHlwZTo6TnVtYmVyIH0sCi0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29s
b3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfQotICAgIH0gfTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNv
b3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJP
cnRob2dvbmFsOwotfTsKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgRGVmaW5pdGl0aW9ucwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzRXh0
ZW5kZWRSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWws
IEV4dGVuZGVkUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47Cisv
LyBNQVJLOiBIU0xNb2RlbAogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewog
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+
LCAzPiBjb21wb25lbnRJbmZvIHsgewpAQCAtOTAsOCArMTU4LDIyIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEhTTE1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBIU0xNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjpzYXR1cmF0aW9uOworICAgIHVzaW5nIENvbG9yVHlwZTo6bGlnaHRuZXNzOworICAg
IHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNv
bXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhTTE1vZGVsPFQ+PiYg
YykKK3sKKyAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5h
bHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBVc2VzSFNMTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBIU0xNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAor
Ly8gTUFSSzogSFdCTW9kZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgSFdCTW9kZWw8ZmxvYXQ+IHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0
PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCAzNjAsIENvbG9yQ29tcG9uZW50
VHlwZTo6QW5nbGUgfSwKQEAgLTEwMiw4ICsxODQsMjIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSFdC
TW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3Rl
bSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpDeWxpbmRyaWNhbFBvbGFyOwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGUsIEhXQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29s
b3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6
OndoaXRlbmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmJsYWNrbmVzczsKKyAgICB1c2luZyBD
b2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRz
KGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDxUPj4mIGMpCit7Cisg
ICAgcmV0dXJuIHsgYy5odWUsIGMud2hpdGVuZXNzLCBjLmJsYWNrbmVzcywgYy5hbHBoYSB9Owor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBV
c2VzSFdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBI
V0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAorLy8gTUFSSzog
TGFiTW9kZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29t
cG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTExNCw4ICsyMTAs
MjIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVt
OjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgTGFiTW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9y
VHlwZTo6bGlnaHRuZXNzOworICAgIHVzaW5nIENvbG9yVHlwZTo6YTsKKyAgICB1c2luZyBDb2xv
clR5cGU6OmI7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxU
LCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwg
TGFiTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwg
Yy5hbHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25z
dGV4cHIgYm9vbCBVc2VzTGFiTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5
cGU6Ok1vZGVsLCBMYWJNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsK
IAorLy8gTUFSSzogTENITW9kZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+
IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZs
b2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAg
LTEyNiw5ICsyMzYsMjMgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29y
ZGluYXRlU3lzdGVtOjpDeWxpbmRyaWNhbFBvbGFyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExDSE1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmNocm9tYTsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29s
b3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBMQ0hNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5saWdodG5l
c3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzTENITW9kZWwgPSBzdGQ6OmlzX3Nh
bWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBMQ0hNb2RlbDx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+PjsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+
IHsKKy8vIE1BUks6IFJHQk1vZGVsCisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0
LCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjph
cnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAg
ICAgICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCiAgICAgICAgIHsgMCwg
MSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTEzOCw3ICsyNjIsNyBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1
bGFyT3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+
IHsKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3QsIFJHQkJvdW5kZWRuZXNzOjpC
b3VuZGVkPiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzx1aW50OF90PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCAyNTUsIENv
bG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCiAgICAgICAgIHsgMCwgMjU1LCBDb2xvckNvbXBv
bmVudFR5cGU6Ok51bWJlciB9LApAQCAtMTQ4LDggKzI3MiwzNSBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBSR0JNb2RlbDx1aW50OF90PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dv
bmFsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgVXNlc1JHQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9h
dD4sIDM+IGNvbXBvbmVudEluZm8geyB7CisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAorICAgICAgICB7IC1zdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KKyAgICB9IH07
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5h
dGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKK307CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3MgYm91bmRlZG5lc3M+IHN0cnVjdCBFeHBvc2VkQ29s
b3JUeXBlPENvbG9yVHlwZSwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlLCBib3VuZGVkbmVzcz4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6OnJl
ZDsKKyAgICB1c2luZyBDb2xvclR5cGU6OmdyZWVuOworICAgIHVzaW5nIENvbG9yVHlwZTo6Ymx1
ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29sb3JUeXBlLCBSR0JCb3VuZGVkbmVzcyBib3VuZGVkbmVzcz4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgUkdCTW9kZWw8VCwgYm91bmRlZG5lc3M+PiYgYykKK3sKKyAg
ICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNSR0JNb2Rl
bCA9CisgICAgICAgc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdC
TW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBSR0JCb3VuZGVkbmVzczo6
Qm91bmRlZD4+CisgICAgfHwgc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2Rl
bCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBSR0JCb3VuZGVk
bmVzczo6RXh0ZW5kZWQ+PjsKKworCisvLyBNQVJLOiBYWVpNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBYWVpNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxD
b2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7
IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBA
IC0xNjAsNiArMzExLDQ4IEBAIHRlbXBsYXRlPD4gc3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29v
cmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFhZWk1v
ZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Ong7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp5OworICAgIHVzaW5n
IENvbG9yVHlwZTo6ejsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JU
eXBlLCBYWVpNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5h
bHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBVc2VzWFlaTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKKwor
CisvLyBnZXQ8PiBvdmVybG9hZCAoYWxvbmcgd2l0aCBzdGQ6OnR1cGxlX3NpemUgYW5kIHN0ZDo6
dHVwbGVfZWxlbWVudCBiZWxvdykgdG8gc3VwcG9ydCBkZXN0cnVjdHVyaW5nIG9mIGV4cGxpY2l0
bHkgcmVzb2x2ZWQgYW5kIHVucmVzb2x2ZWQgY29sb3JzLgorCit0ZW1wbGF0ZTxzaXplX3QgSSwg
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlIGdldChjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZT4mIGNvbG9yKQorewor
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcilbSV07Cit9CisKK30KKworbmFtZXNw
YWNlIHN0ZCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxlX3Np
emU8V2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4gOiBwdWJsaWMgc3RkOjpp
bnRlZ3JhbF9jb25zdGFudDxzaXplX3QsIDQ+IHsgfTsKKwordGVtcGxhdGU8c2l6ZV90IEksIHR5
cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8SSwgV2ViQ29yZTo6UmVzb2x2
ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSB0eXBl
bmFtZSBXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21wb25lbnRUeXBl
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGljIHN0ZDo6aW50
ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVfdCBJLCB0eXBl
bmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6OlVucmVzb2x2
ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSB0eXBl
bmFtZSBXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT46OkNvbXBvbmVudFR5
cGU7Cit9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IHN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KTsKIAot
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigi
LCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywg
YzIsICcgJywgYzMsICcpJyk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlh
bGl6YXRpb24oQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+KSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAn
LCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAtMzc0LDcgKzM3NCw3IEBAIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBIV0JBPGZsbwogU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yLCBib29sKQogewogICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8jc2VyaWFsaXppbmctbGFiLWxjaAot
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2goIiwg
YzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2go
IiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC0zOTUsNyAr
Mzk1LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExD
SEE8ZmxvCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvYXQ+JiBjb2xv
ciwgYm9vbCkKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3Nl
cmlhbGl6aW5nLWxhYi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsK
KyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygibGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1
cm4gbWFrZVN0cmluZygibGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhh
LCAnKScpOwpAQCAtNDMyLDcgKzQzMiw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUgogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhj
b25zdCBPS0xDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMz
LCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5y
ZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYp
KQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsY2goIiwgYzEsICIlICIsIGMyLCAnICcs
IGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJva2xjaCgiLCBjMSwgIiUgIiwgYzIs
ICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgT0tMQ0hBPGYKIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgT0tMYWI8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
LSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIs
IGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsYWIo
IiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJv
a2xhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTU0
Myw3ICs1NDMsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90PiBj
b2xvciwgYm9vbCAKICAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAg
IGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgc3dpdGNoIChhbHBo
YSkgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwgcmVk
LCAiLCAiLCBncmVlbiwgIiwgIiwgYmx1ZSwgIiwgMCkiKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4gY29sb3IsIGJvb2wKICAg
ICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhID09IDB4RkYpCiAgICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVu
LCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7CiAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOwpAQCAtNTcwLDcgKzU3MCw3IEBAIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PgogICAgIGlmICh1c2VD
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25V
c2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogCi0gICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKICAgICBpZiAoYWxwaGEgPCAweEZGKQogICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygnIycsIGhleChyZWQsIDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMiksIGhl
eChhbHBoYSwgMikpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhl
eChncmVlbiwgMiksIGhleChibHVlLCAyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3BhY2VNYXBw
aW5nPFNSR0JBPFQ+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JTcGFjZU1hcHBp
bmc8WFlaQTxULCBXaGl0ZVBvaW50OjpENTA+PiB7IHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xv
clNwYWNlIHsgQ29sb3JTcGFjZTo6WFlaX0Q1MCB9OyB9OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbG9yU3BhY2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDY1Pj4geyBzdGF0
aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENjUgfTsgfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JTcGFjZSBDb2xv
clNwYWNlRm9yID0gQ29sb3JTcGFjZU1hcHBpbmc8Q29sb3JUeXBlPjo6Y29sb3JTcGFjZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yU3BhY2UgQ29sb3JTcGFj
ZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENhbm9uaWNhbENvbG9yVHlwZTxDb2xvclR5cGU+Pjo6
Y29sb3JTcGFjZTsKIAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiBj
b25zdGV4cHIgZGVjbHR5cGUoYXV0bykgY2FsbFdpdGhDb2xvclR5cGUoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQsIDQ+JiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEZ1bmN0b3Im
JiBmdW5jdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JU
eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVHlwZXMuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCwxNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSwgV2hpdGVQb2ludD4gc3RydWN0IFhZWkE7CiAKIC8vIE1BUks6IE1h
a2UgZnVuY3Rpb25zLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxULCA0PiYgYykKK3RlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGlu
ZSBjb25zdGV4cHIgYm9vbCBIYXNDYW5vbmljYWxUeXBlTWVtYmVyID0gZmFsc2U7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJl
cjxULCBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBUOjpDYW5vbmljYWxUeXBlPj4gPSB0cnVlOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIGJvb2wgaGFzQ29ub25pY2FsVHlwZT4gc3RydWN0
IENhbm9uaWNhbENvbG9yVHlwZUhlbHBlciB7IHVzaW5nIHR5cGUgPSBDb2xvclR5cGU7IH07Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxw
ZXI8Q29sb3JUeXBlLCB0cnVlPiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBDb2xvclR5cGU6OkNh
bm9uaWNhbFR5cGU7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gdXNpbmcgQ2Fu
b25pY2FsQ29sb3JUeXBlID0gdHlwZW5hbWUgQ2Fub25pY2FsQ29sb3JUeXBlSGVscGVyPENvbG9y
VHlwZSwgSGFzQ2Fub25pY2FsVHlwZU1lbWJlcjxDb2xvclR5cGU+Pjo6dHlwZTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJv
bUNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjKQogewotICAgIHJldHVy
biBDb2xvclR5cGUgeyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07CisgICAgcmV0dXJuIENhbm9u
aWNhbENvbG9yVHlwZTxDb2xvclR5cGU+IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYXV0byBjbGFtcGVkQ29tcG9uZW50KFQgYykgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlCkBAIC05Nyw0NiArMTA1LDUwIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbAogICAgIHJldHVybiB7IGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxD
b2xvclR5cGUsIDE+KGNvbXBvbmVudHMpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4o
Y29tcG9uZW50cyksIGNvbXBvbmVudHNbM10gfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50
c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cykKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWFrZUZy
b21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21wb25l
bnRzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVk
Q29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQgYzMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nKFQgYzEsIFQgYzIsIFQgYzMpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxD
b2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAw
PihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1wZWRDb21wb25l
bnQ8Q29sb3JUeXBlLCAyPihjMyksIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT46Om9wYXF1ZSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nKFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
KFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JU
eXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+KGFscGhhKSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21w
b25lbnRzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9y
Q29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21w
b25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNlcHRBbHBoYTxDb2xvclR5cGU+
KGNvbXBvbmVudHMpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZ0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29u
c3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBU
IGMyLCBUIGMzLCBBbHBoYSBhbHBoYSkKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUs
IDA+KGMxKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGMzKSwgYWxwaGEgfSk7CiB9CiAKICNpZiBBU1NFUlRfRU5BQkxF
RAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQg
Y29sb3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBm
bG9hdD4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKENvbG9yVHlw
ZSBjb2xvcikKIHsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFQ6
OkNvbXBvbmVudFR5cGUsIGZsb2F0PikgewotICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAz
OyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tpXSA+
PSBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4sICJDb21wb25lbnQgYXQgaW5kZXggJWQg
aXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtICVmIiwgaSwgIGNvbXBv
bmVudHNbaV0sIFQ6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1pbik7Ci0gICAgICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6TW9kZWw6OmNvbXBvbmVudElu
Zm9baV0ubWF4LCAiQ29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBncmVhdGVyIHRo
YW4gdGhlIGFsbG93ZWQgbWF4aW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6
Y29tcG9uZW50SW5mb1tpXS5tYXgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoY29sb3IuYWxwaGEgPj0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlw
ZT46OnRyYW5zcGFyZW50LCAiQWxwaGEgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dl
ZCBtaW5pbXVtICh0cmFuc3BhcmVudCkgJWYiLCBjb2xvci5hbHBoYSwgQWxwaGFUcmFpdHM8dHlw
ZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKLSAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb2xvci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25l
bnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxs
b3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVu
YW1lIFQ6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yLnVucmVzb2x2ZWQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVu
dHNbaV0gPj0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4sICJDb21wb25l
bnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVt
ICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9b
aV0ubWluKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IENv
bG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4LCAiQ29tcG9uZW50IGF0IGluZGV4
ICVkIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCk7
CiAgICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1szXSA+PSBBbHBoYVRy
YWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFs
cGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJl
bnQpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29t
cG9uZW50c1szXSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+OjpvcGFxdWUsICJBbHBoYSBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2Vk
IG1heGltdW0gKG9wYXF1ZSkgJWYiLCBjb21wb25lbnRzWzNdLCBBbHBoYVRyYWl0czx0eXBlbmFt
ZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lX3Y8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCB1aW50OF90Pj4qID0gbnVsbHB0cj4K
K2NvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoQ29sb3JUeXBlKQoreworfQorCiAjZWxzZQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQpCkBA
IC0xNDYsNyArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNz
ZXJ0SW5SYW5nZShUKQogI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZv
aWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHMg
PSBmYWxzZTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0Nv
bnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUoYXNDb2xv
ckNvbXBvbmVudHMoc3RkOjpkZWNsdmFsPFQ+KCkpKT4+ID0gdHJ1ZTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVu
dHM8VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUoYXNDb2xvckNvbXBvbmVudHMoc3RkOjpkZWNsdmFs
PFQ+KCkudW5yZXNvbHZlZCgpKSk+PiA9IHRydWU7CiAKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBl
bmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBIYXNDb21wb25lbnRUeXBlTWVtYmVy
ID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFz
Q29tcG9uZW50VHlwZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBUOjpDb21wb25lbnRU
eXBlPj4gPSB0cnVlOwpAQCAtMTY2LDkgKzE3OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFBhcmVu
dD4gc3RydWN0IENvbG9yV2l0aEFscGhhSGVscGVyIAogICAgIC8vIGUuZy4gYXV0byB5ZWxsb3dX
aXRoNTBQZXJjZW50QWxwaGEgPSBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhQnl0ZSgxMjgp
OwogICAgIGNvbnN0ZXhwciBQYXJlbnQgY29sb3JXaXRoQWxwaGFCeXRlKHVpbnQ4X3Qgb3ZlcnJp
ZGVBbHBoYSkgY29uc3QKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
X3Y8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFBhcmVudD4oKS5hbHBoYSksIHVpbnQ4X3Q+LCAiT25s
eSB1aW50OF90IGJhc2VkIGNvbG9yIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIik7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgUGFyZW50OjpDb21wb25lbnRUeXBl
LCB1aW50OF90PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVk
LiIpOwogCi0gICAgICAgIGF1dG8gY29weSA9ICpzdGF0aWNfY2FzdDxjb25zdCBQYXJlbnQqPih0
aGlzKTsKKyAgICAgICAgYXV0byBjb3B5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUGFyZW50Kj4odGhp
cyktPnVucmVzb2x2ZWQoKTsKICAgICAgICAgY29weS5hbHBoYSA9IG92ZXJyaWRlQWxwaGE7CiAg
ICAgICAgIHJldHVybiBjb3B5OwogICAgIH0KQEAgLTE3OCw3ICsxOTAsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbnZlcnRpYmxl
VG9Db2xvckNvbXBvbmVudHM8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4KIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ29sb3JUeXBlJiBhLCBjb25zdCBDb2xvclR5cGUmIGIpCiB7Ci0g
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwor
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhLnVucmVzb2x2ZWQoKSkgPT0gYXNDb2xvckNv
bXBvbmVudHMoYi51bnJlc29sdmVkKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25l
bnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CkBAIC0yMDMsNyArMjE1LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0CiAgICAgICAgICwg
Ymx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SW5SYW5nZSgqdGhpcyk7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnN0YXRpY19jYXN0
PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgUkdCQVR5
cGUoKQpAQCAtMjExLDIxICsyMjMsMTkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBh
dXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8
Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8Y29uc3QgQ29s
b3JUeXBlKj4odGhpcykpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIHJlZDsKICAgICBUIGdyZWVu
OwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBURj4g
Y29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBS
R0JBVHlwZTxULCBELCBDb2xvclR5cGUsIE0sIFRGPiYgYykKLXsKLSAgICByZXR1cm4geyBjLnJl
ZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Ci19Ci0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+
PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwg
UkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJh
bnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgQm91bmRlZEdh
bW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJH
Qk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUg
VHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKKyAg
ICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2Rl
bDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5z
ZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7
CiAKICAgICB1c2luZyBMaW5lYXJDb3VudGVycGFydCA9IEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQs
IEQ+OwogICAgIHVzaW5nIEV4dGVuZGVkQ291bnRlcnBhcnQgPSBFeHRlbmRlZEdhbW1hRW5jb2Rl
ZDxULCBEPjsKQEAgLTIzNCw4ICsyNDQsOCBAQCBzdHJ1Y3QgQm91bmRlZEdhbW1hRW5jb2RlZCA6
IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBC
b3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+PiB7
Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJH
Qk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5z
ZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJvdW5kZWRMaW5l
YXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJH
Qk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUg
VHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKKyAg
ICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9k
ZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFu
c2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBl
OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6bGluZWFyVG9Y
WVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6eHl6VG9MaW5l
YXI7CkBAIC0yNDcsOCArMjU3LDggQEAgc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNvZGVkIDogUkdC
QVR5cGU8VCwgRCwgQm91bmRlZExpCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBEPgotc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5k
ZWRHYW1tYUVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBl
ZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBE
PiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5j
dGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOworc3Ry
dWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRHYW1tYUVu
Y29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OlVuY2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5h
bWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6
VW5jbGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRlcnBhcnQgPSBF
eHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgQm91bmRlZENvdW50ZXJwYXJ0
ID0gQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPjsKQEAgLTI1Niw4ICsyNjYsOCBAQCBzdHJ1Y3Qg
RXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEcKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJFbmNv
ZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRl
ZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRy
YW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBl
bmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2Rl
OjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkIDog
UkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBS
R0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1
bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7CisgICAgdXNpbmcg
UkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBS
R0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1
bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAK
ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5lYXJUb1hZWjsK
ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpUb0xpbmVhcjsK
QEAgLTQzNCwxNyArNDQ0LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBD
b2xvcldpdGhBbHBoYUhlbHBlcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byBy
ZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29u
c3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigq
dGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBU
IGI7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBD
b2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGFiPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9OwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0xhYiA9
IHN0ZDo6aXNfc2FtZV92PExhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBD
b2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIExDSEEgQ29sb3IgVHlwZS4KQEAgLTQ2OSwxNyArNDc4
LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JXaXRoQWxwaGFI
ZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0
IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5y
ZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJv
dGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQgaHVlOwogICAg
IFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExDSEE8VD4mIGMpCi17Ci0gICAg
cmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0xDSEEg
PSBzdGQ6OmlzX3NhbWVfdjxMQ0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4s
IENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMYWIgQ29sb3IgVHlwZS4KQEAgLTUwNCwxNyAr
NTEyLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xhYiA6IENvbG9yV2l0aEFs
cGhhSGVscAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKwor
cHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7CiAgICAgVCBh
bHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMYWI8VD4mIGMpCi17Ci0gICAgcmV0
dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzT0tMYWIgPSBzdGQ6Omlz
X3NhbWVfdjxPS0xhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5
cGU+OwogCiAvLyBNQVJLOiAtIE9LTENIQSBDb2xvciBUeXBlLgpAQCAtNTM5LDE3ICs1NDYsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9LTENIQSA6IENvbG9yV2l0aEFscGhhSGVs
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0
ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7CiAgICAgVCBh
bHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMQ0hBPFQ+JiBjKQotewotICAgIHJl
dHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNPS0xDSEEg
PSBzdGQ6OmlzX3NhbWVfdjxPS0xDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
PiwgQ29sb3JUeXBlPjsKIAogCkBAIC01NzUsMTcgKzU4MSwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSFNMQSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAgICAgfQogCisg
ICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9y
KCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVy
biB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGh1ZTsKICAg
ICBUIHNhdHVyYXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xv
ckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmh1ZSwgYy5z
YXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0hTTEEgPSBzdGQ6OmlzX3NhbWVf
djxIU0xBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAK
IC8vIE1BUks6IC0gSFdCQSBDb2xvciBUeXBlLgpAQCAtNjEwLDE3ICs2MTUsMTYgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhXQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBlCiAgICAgewog
ICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVz
b2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29u
c3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAg
VCBodWU7CiAgICAgVCB3aGl0ZW5lc3M7CiAgICAgVCBibGFja25lc3M7CiAgICAgVCBhbHBoYTsK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwg
ND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFdCQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBj
Lmh1ZSwgYy53aGl0ZW5lc3MsIGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFdCQSA9IHN0ZDo6
aXNfc2FtZV92PEhXQkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwgQ29sb3JU
eXBlPjsKIAogLy8gTUFSSzogLSBYWVogQ29sb3IgVHlwZS4KQEAgLTY0NSwxNyArNjQ5LDE2IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9pbnQgVz4gc3RydWN0IFhZWkEgOiBDb2xvcgog
ICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0
dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVk
OgogICAgIFQgeDsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgWFlaQTxULCBXPiYgYykKLXsKLSAgICByZXR1
cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzWFlaQSA9IHN0ZDo6aXNfc2FtZV92PFhZ
WkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBDb2xvclR5cGU6OndoaXRlUG9p
bnQ+LCBDb2xvclR5cGU+OwogCiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpAQCAtNjY4LDExICs2
NzEsMTYgQEAgc3RydWN0IFJHQkEgewogICAgIHsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgZXhw
bGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIgZXhwbGljaXQg
UkdCQShSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAgICAgICAgIDog
dmFsdWUgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29sb3IucmVkIDw8IDI0IHwgY29sb3IuZ3Jl
ZW4gPDwgMTYgfCBjb2xvci5ibHVlIDw8IDggfCBjb2xvci5hbHBoYSkgfQogICAgIHsKICAgICB9
CiAKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAg
ICAgICAgOiBSR0JBIHsgY29sb3IucmVzb2x2ZWQoKSB9CisgICAgeworICAgIH0KKwogICAgIHVp
bnQzMl90IHZhbHVlOwogfTsKIApAQCAtNjgyLDggKzY5MCwxMyBAQCBzdHJ1Y3QgQVJHQiB7CiAg
ICAgewogICAgIH0KIAotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yKQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBjb2xvcikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihjb2xvci5hbHBoYSA8PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9yLmdyZWVuIDw8
IDggfCBjb2xvci5ibHVlKSB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhwciBleHBsaWNp
dCBBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgICAgICA6IEFSR0IgeyBjb2xvci5yZXNv
bHZlZCgpIH0KICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNS
R0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9Owog
fQogCiBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gY29s
b3I7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JH
QkE8ZmxvYXQ+PihyIC8gYSwgZyAvIGEsIGIgLyBhLCBhKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgU1JH
QkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yCiAKIFNS
R0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC01NCw3ICs1NCw3IEBAIFNSR0JBPHVpbnQ4
X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjbwogCiBTUkdCQTx1aW50
OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
cmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsK
ICAgICBpZiAoYSA9PSAyNTUpCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDE2
X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aQogCiBTUkdCQTx1aW50OF90PiB1bnBy
ZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAg
ICAgaWYgKCFhIHx8IGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgcmV0dXJu
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVu
cHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYsMjEgQEAgdWlu
dDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlm
aW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1dG8gY29sb3JC
eU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3Im
Jik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBj
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlk
ZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGNvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhh
KGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRlZENvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEp
OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hT
TE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29u
c3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdC
TW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25z
dCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3Rl
eHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBl
Pj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsK
IHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBYWVpB
PGZsb2F0LCBXPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENv
bG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhw
ciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4g
fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHBy
IGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4q
ID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2Vz
SFdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShj
b25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCkBAIC05MywzNSArOTMsMzUgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4oZmxvCiAgICAg
cmV0dXJuIGNsYW1wZWRBbHBoYSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25B
bHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gYXV0byBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwg
RnVuY3RvciYmIGZ1bmN0b3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAgICAgY29weVsw
XSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBvbmVudHNbMF0pOwogICAgIGNvcHlbMV0gPSBz
dGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzFdKTsKICAgICBjb3B5WzJdID0gc3RkOjpp
bnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBjb21wb25lbnRzWzJdKTsKLSAg
ICByZXR1cm4geyBjb3B5WzBdLCBjb3B5WzFdLCBjb3B5WzJdLCBjb3B5WzNdIH07CisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGRl
bkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JXaXRoT3ZlcnJp
ZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29s
dmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVybiBjb3B5Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhPdmVycmlkZGVuQWxw
aGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBh
dXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29sdmVkKCk7CiAg
ICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3Zl
cnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8g
aW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwg
dWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpN
b2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhj
b2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcgogICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVu
QWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5B
bHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAg
IHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1
dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBv
bmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNv
cHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkK
QEAgLTE0NywxOSArMTQ3LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JU
eXBlIGludmVydGVkQ29sb3JXaQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBi
b29sIGlzQmxhY2soY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAgIHJldHVybiBj
b2xvci55ID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7
CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4g
cmVzb2x2ZWRDb2xvci55ID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0
czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNMQ0hN
b2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIg
Ym9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9y
LmxpZ2h0bmVzcyA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3Bh
cXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0
dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNzID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9
PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+
fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5
cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7
Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBjb25zdGV4cHIgYXV0byBjb21w
b25lbnRJbmZvID0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mbzsKICAgICByZXR1cm4g
YzEgPT0gY29tcG9uZW50SW5mb1swXS5taW4gJiYgYzIgPT0gY29tcG9uZW50SW5mb1sxXS5taW4g
JiYgYzMgPT0gY29tcG9uZW50SW5mb1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQpAQCAtMTY3LDI0ICsx
NjksMjcgQEAgY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQog
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVz
ZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmJsYWNrbmVzcyA9PSAxMDAgJiYg
Y29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNv
bHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5i
bGFja25lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8Zmxv
YXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9y
LnkgPT0gMSAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAg
ICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNv
bHZlZENvbG9yLnkgPT0gMSAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZs
b2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVs
PENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29s
IGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IubGln
aHRuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1
ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVy
biByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9
PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+
IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JU
eXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQog
ewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBj
MiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHByIGF1dG8gY29t
cG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAgICAgcmV0dXJu
IGMxID09IGNvbXBvbmVudEluZm9bMF0ubWF4ICYmIGMyID09IGNvbXBvbmVudEluZm9bMV0ubWF4
ICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWF4ICYmIGFscGhhID09IEFscGhhVHJhaXRzPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAgLTE5Miw3ICsx
OTcsOCBAQCBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29s
b3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3Iud2hpdGVuZXNzID09IDEwMCAmJiBj
b2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29s
dmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLndo
aXRlbmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVp
bnQxNl90IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeyAocHVibGlj
KQogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBw
aXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KTsKKyAgICAgICAgYXV0
byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KS5yZXNvbHZlZCgp
OwogCiAgICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuYWxwaGEpIHsKICAgICAgICAgICAg
IHNldFBpeGVsKGRlc3QsIHIsIGcsIGIsIGEpOwpAQCAtMTYwLDcgKzE2MCw3IEBAIGNsYXNzIElt
YWdlQmFja2luZ1N0b3JlIHsgKHB1YmxpYykKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9w
cmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxvb3Jp
bmcocGl4ZWwpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxvb3JpbmcocGl4
ZWwpLnJlc29sdmVkKCk7CiAKICAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBDb2xvCiB7CiAg
ICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNv
bHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9u
LmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAg
LTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1
ZShjb25zdCBDb2xvciYKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmlt
YXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIp
LCBAKGEpXV07CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjwKICAgICAgICAgcmV0dXJuOwogCiAgICAg
W3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNl
dFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsKLSAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBAW0Ao
ciksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbldpbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcgogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IHZh
bHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVl
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBDR0Zs
b2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRz
LmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNl
dEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CkBAIC00MjMsNyArNDIzLDcg
QEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6
CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
YXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBv
bmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJl
dGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEp
KTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQo
KSk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPFdlCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVB
cnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNp
emUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWVb
aV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IHZh
bHVlW2ldLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwg
Y29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAgIFJldGFpblB0cjxD
QUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICAg
ICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NyArNzYsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBzcmNDciwgY2Fp
cm9fdCogZHMKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
dm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIAogc3RhdGljIHZvaWQgYWRkQ29sb3JTdG9w
UkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudENvbG9yU3RvcCBzdG9wLCBm
bG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJv
X3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcs
IGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1
Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShjYWlyb19wYXR0
ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGds
b2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fpcm9fbWVzaF9w
YXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcsIGIsIGEgKiBn
bG9iYWxBbHBoYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMyw5IEBAIHZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbgogICAgICAgICB1
bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsg
c3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbG9naWNhbFNpemUoKS53
aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0g
ICAgICAgICAgICBhdXRvIHBpeGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGllZChhc1NSR0JB
KFBhY2tlZENvbG9yOjpBUkdCIHsgKnBpeGVsIH0pKTsKLSAgICAgICAgICAgIHBpeGVsQ29tcG9u
ZW50cyA9IHsgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLnJlZF0sIGxvb2tVcFRhYmxlW3Bp
eGVsQ29tcG9uZW50cy5ncmVlbl0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ibHVlXSwg
cGl4ZWxDb21wb25lbnRzLmFscGhhIH07Ci0gICAgICAgICAgICAqcGl4ZWwgPSBQYWNrZWRDb2xv
cjo6QVJHQiB7IHByZW11bHRpcGxpZWRDZWlsaW5nKHBpeGVsQ29tcG9uZW50cykgfS52YWx1ZTsK
KyAgICAgICAgICAgIGF1dG8gcGl4ZWxDb21wb25lbnRzID0gdW5wcmVtdWx0aXBsaWVkKGFzU1JH
QkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqcGl4ZWwgfSkpLnJlc29sdmVkKCk7CisgICAgICAgICAg
ICBhdXRvIHRyYW5zZm9ybWVkUGl4ZWxDb21wb25lbnRzID0gU1JHQkE8dWludDhfdD4geyBsb29r
VXBUYWJsZVtwaXhlbENvbXBvbmVudHMucmVkXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRz
LmdyZWVuXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLmJsdWVdLCBwaXhlbENvbXBvbmVu
dHMuYWxwaGEgfTsKKyAgICAgICAgICAgICpwaXhlbCA9IFBhY2tlZENvbG9yOjpBUkdCIHsgcHJl
bXVsdGlwbGllZENlaWxpbmcodHJhbnNmb3JtZWRQaXhlbENvbXBvbmVudHMpIH0udmFsdWU7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZSht
X3N1cmZhY2UuZ2V0KCksIDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUo
KS5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NywxMiAr
MTQ3LDEyIEBAIHN0YXRpYyBzdGQ6OnBhaXI8Q0dDb2xvclNwYWNlUmVmLCBDb2xvckNvbXBvbmVu
dHM8ZmxvYQogICAgIGlmICghY2dDb2xvclNwYWNlKSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNT
X0VYVEVOREVEX1NSR0JfQ09MT1JfU1BBQ0UpCiAgICAgICAgIGF1dG8gY29tcG9uZW50c0NvbnZl
cnRlZFRvRXh0ZW5kZWRTUkdCQSA9IGNhbGxXaXRoQ29sb3JUeXBlKGNvbXBvbmVudHMsIGNvbG9y
U3BhY2UsIFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsK
KyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGNvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybiB7IGV4dGVuZGVkU1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50c0NvbnZlcnRl
ZFRvRXh0ZW5kZWRTUkdCQSB9OwogI2Vsc2UKICAgICAgICAgYXV0byBjb21wb25lbnRzQ29udmVy
dGVkVG9TUkdCQSA9IGNhbGxXaXRoQ29sb3JUeXBlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UsIFtd
IChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yKSk7CisgICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHsgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwgY29tcG9uZW50c0NvbnZlcnRlZFRvU1JHQkEgfTsKICNlbmRpZgpAQCAtMTYzLDcgKzE2
Myw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8Q0dDb2xvclNwYWNlUmVmLCBDb2xvckNvbXBvbmVudHM8
ZmxvYQogCiBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNyZWF0ZUNHQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29s
b3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21w
b25lbnRzXSA9IGNvbG9yLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwog
ICAgIGF1dG8gW2NnQ29sb3JTcGFjZSwgY2dDb21wYXRpYmxlQ29tcG9uZW50c10gPSBjb252ZXJ0
VG9DR0NvbXBhdGlibGVDb21wb25lbnRzKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOwogICAgIAog
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGM0XSA9IGNnQ29tcGF0aWJsZUNvbXBvbmVudHM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50UmVuZGVyZXJDRy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3Miw4ICs0NzIsNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRp
ZW50UmVuZGVyZXJDRzo6bWFrZUcKICAgICAvLyBleHRlbmRlZCBzUkdCIGZvciBhbGwgZ3JhZGll
bnRzLgogICAgIGlmIChoYXNPbmx5Qm91bmRlZFNSR0JDb2xvclN0b3BzKHN0b3BzKSkgewogICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBzdG9wcykgewotICAgICAgICAgICAgYXV0byBb
Y29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBzdG9wLmNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCk7Ci0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAg
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51
bmNoZWNrZWRBcHBlbmQocik7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2Vk
QXBwZW5kKGcpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChi
KTsKQEAgLTQ4OCw5ICs0ODcsOSBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRp
ZW50UmVuZGVyZXJDRzo6bWFrZUcKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBz
dG9wcykgewogI2lmIEhBVkUoQ09SRV9HUkFQSElDU19FWFRFTkRFRF9TUkdCX0NPTE9SX1NQQUNF
KQotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4o
KS5yZXNvbHZlZCgpOwogI2Vsc2UKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3Rv
cC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKKyAgICAgICAgICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0
Pj4oKS5yZXNvbHZlZCgpOwogI2VuZGlmCiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5j
aGVja2VkQXBwZW5kKHIpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFw
cGVuZChnKTsKQEAgLTU0Niw3ICs1NDUsNyBAQCB2b2lkIEdyYWRpZW50UmVuZGVyZXJDRzo6U2hh
ZGluZzo6c2hhZGluZ0Z1bmN0aW9uKHZvaWQKICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPElu
dGVycG9sYXRpb25TcGFjZUNvbG9yVHlwZT4oc3RvcDEuY29sb3JDb21wb25lbnRzKSwgb2Zmc2V0
KTsKIAogICAgIC8vIDQuIENvbnZlcnQgdG8gdGhlIG91dHB1dCBjb2xvciBzcGFjZS4KLSAgICBh
dXRvIGludGVycG9sYXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZSA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxPdXRwdXRTcGFjZUNvbG9yVHlwZT4oaW50ZXJwb2xhdGVkQ29s
b3IpKTsKKyAgICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZSA9
IGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPdXRwdXRTcGFjZUNvbG9yVHlwZT4oaW50
ZXJwb2xhdGVkQ29sb3IpLnJlc29sdmVkKCkpOwogCiAgICAgLy8gNS4gV3JpdGUgY29sb3IgY29t
cG9uZW50cyB0byAnb3V0JyBwb2ludGVyLgogICAgIGZvciAoc2l6ZV90IGNvbXBvbmVudEluZGV4
ID0gMDsgY29tcG9uZW50SW5kZXggPCBpbnRlcnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0
U3BhY2Uuc2l6ZSgpOyArK2NvbXBvbmVudEluZGV4KQpAQCAtNTYwLDcgKzU1OSw3IEBAIEdyYWRp
ZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlUwogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLmNvbG9y
U3BhY2UsCiAgICAgICAgICAgICAgICAgWyZdIChhdXRvJiBjb2xvclNwYWNlKSAtPiBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IHsKICAgICAgICAgICAgICAgICAgICAgdXNpbmcgQ29sb3JUeXBl
ID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoY29sb3JTcGFjZSk+
OjpDb2xvclR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb2xvci50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci50ZW1wbGF0ZSB0b0Nv
bG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICApOwogICAgICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGln
aHRpbmdORU9OLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEsNyArMTExLDcgQEAgaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24oY29uc3QgTGlnaHRpCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAg
ICAgZmxvYXRBcmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgYXV0byBjb2xvciA9IG1fbGln
aHRpbmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbG9yID0gbV9s
aWdodGluZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKIAogICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yUmVkID0gY29sb3IucmVkOwogICAgIGZsb2F0
QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBjb2xvci5ncmVlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIs
MTkgKzkyLDE5IEBAIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNm
b3JtQ29sb3IoUwogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHUkFZU0NBTEU6
IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9h
dD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4KG1f
YW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
ci5yZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBT
RVBJQTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JB
PGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZy
b21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1v
dW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5y
ZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVf
Uk9UQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JH
QkE8ZmxvYXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihodWVSb3RhdGVDb2xvck1h
dHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGNhc2UgU0FUVVJBVEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZzxTUkdCQTxmbG9hdD4+KHNhdHVyYXRpb25Db2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAg
IGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0
aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQwogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBPUEFDSVRZOgotICAgICAgICBjb2xvci5hbHBoYSAqPSBtX2Ftb3Vu
dDsKKyAgICAgICAgY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29sb3IsIHN0ZDo6
Y2xhbXA8ZmxvYXQ+KGNvbG9yLnJlc29sdmVkKCkuYWxwaGEgKiBtX2Ftb3VudCwgMC4wZiwgMS4w
ZikpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIElOVkVSVDogewogICAgICAgICBm
bG9hdCBvbmVNaW51c0Ftb3VudCA9IDEuMGYgLSBtX2Ftb3VudDsKQEAgLTI5Niw3ICsyOTYsNyBA
QCBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBodWVSb3RhdGUoY29uc3QgQ29sb3IK
IAogYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNS
R0JBPGZsb2F0PiYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21w
b25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgMC41Zik7CisgICAg
YXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yLnJlc29sdmVkKCkpLCAwLjVmKTsKICAgICAKICAgICAvLyBBcHBseSB0aGUgbWF0
cml4LiBTZWUgcmRhcjovL3Byb2JsZW0vNDExNDY2NTAgZm9yIGhvdyB0aGlzIG1hdHJpeCB3YXMg
ZGVyaXZlZC4KICAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8NSwgMz4gdG9EYXJrTW9kZU1hdHJp
eCB7CkBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRp
b246OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYs
IDAuMGYsIDEuMjVmLAogICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAx
LjI1ZgogICAgIH07Ci0gICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0
b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpOworICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRzID0g
dG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IucmVzb2x2ZWQoKSkpOwogCiAgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21w
b25lbnRzID0gaHVlUm90YXRlKGNvbnZlcnRlZFRvTGlnaHRNb2RlQ29tcG9uZW50cywgMC41Zik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0
aW9uczo6dHJhbnNmb3JtQ29sb3IoQ29sb3ImIGNvbG9yKSBjbwogICAgIGlmIChjb2xvci5pc1Nl
bWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKIAogICAgIGZvciAoYXV0byYgb3Bl
cmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zv
cm1Db2xvcihzUkdCQUNvbG9yKSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJh
dGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvcihDb2xvciYgY28KICAgICBpZiAoY29sb3IuaXNT
ZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3Ig
PSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29s
b3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CiAKICAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNyArMzI2
LDcgQEAgdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0
IExpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50
c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5D
b2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwogICAgIHBhaW50aW5nRGF0YS5p
bml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwog
CiAgICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5maWx0ZXIsICpk
YXRhLnJlc3VsdCwgcGFpbnRpbmdEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWMK
ICAgICBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgpIHsgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7IH0KICAgICBzdGF0aWMgaW5saW5l
IFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tl
ZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25l
bnRzKSB9OyB9CiAKLSAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4
ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkucmVzb2x2ZWQoKSk7IH0KICAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYg
YiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWws
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xv
cikKIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4g
eyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZgogICAgIFJl
ZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCkBAIC0yNzYs
NyArMjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bWJlciwg
Y29uc3QgQ29sCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAg
ICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBh
aW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNyLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgdm9p
ZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHIKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2Ug
bmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3Np
dGluZy4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFk
b3cuY29sb3IoKS50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8
U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJv
Z3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3Jt
MmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigp
IC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3Jh
bS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiAKICAgICBp
ZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCiAgICAgICAgIHByZXBh
cmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RD
b21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBv
bmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKIAotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFt
LT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5k
aW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CkBAIC03NDUsNyArNzQ1
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVj
dCYgCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAg
IGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0K
IAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0
dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNyZWF0ZUJydXNoKElEMkQxUmVuZGVyVGFyZ2V0KiBy
CiAgICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNlcy4KLSAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVudFN0b3BzLnVuY2hlY2tl
ZEFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBn
LCBiLCBhKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNwZWxsaW5nUGF0dGVybkNvbG9yID0gQ29sb3I6OnJl
ZDsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gZ3JhbW1hclBhdHRlcm5Db2xvciA9IENvbG9y
OjpkYXJrR3JlZW47CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0eWxlLm1vZGUgPT0gRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9y
IDogc3BlbGxpbmdQYXR0ZXJuQ29sb3I7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdHlsZS5t
b2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3JhbW1hclBh
dHRlcm5Db2xvci5yZXNvbHZlZCgpIDogc3BlbGxpbmdQYXR0ZXJuQ29sb3IucmVzb2x2ZWQoKTsK
ICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByLCBnLCBiLCBhKTsKIAog
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRl
eHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsCiAKIEQyRDFf
Q09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29u
c3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJE
MTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk0LDcgKzE1OTQsNyBAQCBjb25zdGV4cHIgZmxvYXQgZGF0ZVBs
YWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW4KIENvbG9yIFJlbmRlclRoZW1lOjpkYXRl
UGxhY2Vob2xkZXJUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcg
TENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFs
IHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdo
YXQgSFNMQSBkb2VzLgotICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxvc3N5
PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxv
c3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgaWYgKHRleHRDb2xvci5sdW1pbmFu
Y2UoKSA8IGJhY2tncm91bmRDb2xvci5sdW1pbmFuY2UoKSkKICAgICAgICAgaHNsYS5saWdodG5l
c3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICogKDEw
MC4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEz
MDcsNyArMTMwNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZAogc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29udmV4R3JhZGllbnQoY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJv
YmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dy
b3VuZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGJhY2tncm91bmRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcs
IGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAu
NTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFk
ZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAg
KzgxLDEwIEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5p
bWF0aW9uQQogCiAgICAgdm9pZCBhbmltYXRlKFNWR0VsZW1lbnQmLCBmbG9hdCBwcm9ncmVzcywg
dW5zaWduZWQgcmVwZWF0Q291bnQsIENvbG9yJiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIGF1
dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAg
ICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6
OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAg
ICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFu
aW1hdGVkLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAg
ICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6
OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50
OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2lt
cGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgCiAgICAgICAgIGZsb2F0
IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJl
ZCwgc2ltcGxlVG8ucmVkLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1h
dGVkLnJlZCk7CiAgICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywg
cmVwZWF0Q291bnQsIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0
RW5kT2ZEdXJhdGlvbi5ncmVlbiwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOwpAQCAtMTAzLDggKzEw
Myw4IEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0
aW9uQQogICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgICAgIAotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3Iu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9y
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9t
Q29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAg
ICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4
X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQg
LSBzaW1wbGVUby5yZWQ7CiAgICAgICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAt
IHNpbXBsZVRvLmdyZWVuOwpAQCAtMTE2LDggKzExNiw4IEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQQogcHJpdmF0ZToKICAgICB2b2lkIGFk
ZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50Jikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGF1
dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAg
YXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1
dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFu
eSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAgICAgICAg
IG1fdG8gPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4oc2ltcGxl
VG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVl
biwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyNCBAQAorMjAyMi0wMS0wMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMg
dG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBhYm91dCB3aGV0aGVyIHRoZXkgd2lsbCBo
YW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBDb2xvcjo6dG9TUkdC
QUxvc3N5PD4oKSB3aXRoIENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPD4+KCkgYW5kIGFk
ZAorICAgICAgICBjYWxscyB0byByZXNvbHZlZCgpIHRvIGFjY2VzcyBjb2xvciBjb21wb25lbnRz
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQ
bGF5U3RhdGlvbi5jcHA6CisgICAgICAgIChkcmF3UGFnZUJhY2tncm91bmQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9y
RmlsbEZyb21XZWJDb3JlQ29sb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjpiZWdpblN3aXBlR2VzdHVyZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAoV2Vi
S2l0OjphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0
RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIxLTEyLTI2ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIFdlYktpdC9Db2NvYUNvbG9yLmggd2l0
aCBXZWJDb3JlL0NvbG9yQ29jb2EuaCwgbm90IGNvbmZ1c2luZyBhdCBhbGwKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3Rh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0
ZVBsYXlTdGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMg
dm9pZCBkcmF3UGFnZUJhY2tncm91bmQoY2Fpcm9fdCogY3R4LCBjb25zdCBzdGQKICAgICBpZiAo
IWJhY2tncm91bmRDb2xvciB8fCBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS5pc1Zpc2libGUoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29s
b3IudmFsdWUoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjdHgsIHIsIGcs
IGIsIGEpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjdHgsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q28KIHsKICAgICBSRUxFQVNFX0FTU0VSVCh3ZWJDb3JlQ29sb3IuaXNW
YWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNv
bG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAgY29sb3ItPmJsdWUgPSBi
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2lu
U3dpcGVHZXN0dXJlKFdlYkJhY2tGCiAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAg
ICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gY29sb3I7CiAg
ICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAjaWYgVVNFKEdUSzQpCiAgICAgICAgICAgICAgICAgR2RrUkdCQSByZ2JhID0geyByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSB9OwogICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNo
b3RQYXR0ZXJuID0gYWRvcHRHUmVmKGdza19jb2xvcl9ub2RlX25ldygmcmdiYSwgJmJvdW5kcykp
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgYm9vbCBXZWJG
cmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91YmxlKiByZWQsCiAgICAgaWYgKCFi
Z0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBbciwg
ZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKICAgICAqcmVkID0gcjsKICAgICAqZ3JlZW4gPSBnOwogICAgICpibHVlID0gYjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
Lm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNPYmplY3Q+IGFuaW1h
dGlvblZhbHVlRnJvbUtleWZyYW1lVgogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGtleWZyYW1l
VmFsdWUsCiAgICAgICAgIFsmXShjb25zdCBmbG9hdCBudW1iZXIpIC0+IFJldGFpblB0cjxOU09i
amVjdD4geyByZXR1cm4gQChudW1iZXIpOyB9LAogICAgICAgICBbJl0oY29uc3QgV2ViQ29yZTo6
Q29sb3IgY29sb3IpIC0+IFJldGFpblB0cjxOU09iamVjdD4gewotICAgICAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSAgY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4
X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwgQChi
KSwgQChhKSBdOwogICAgICAgICB9LAogICAgICAgICBbJl0oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludDNEIHBvaW50KSAtPiBSZXRhaW5QdHI8TlNPYmplY3Q+IHsKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzUyMSkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIyLTAx
LTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVzb2x2
ZWQvdW5yZXNvbHZlZCBjb2xvciB0eXBlIGFjY2Vzc29ycyB0byByZXF1aXJlIHVzZXJzIHRvIGJl
IGV4cGxpY2l0IGFib3V0IHdoZXRoZXIgdGhleSB3aWxsIGhhbmRsZSBtaXNzaW5nL25vbmUgY29s
b3IgY29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM0Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIENvbG9y
Ojp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29sb3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4o
KSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRvIHJlc29sdmVkKCkgdG8gYWNjZXNzIGNvbG9yIGNv
bXBvbmVudHMuIEFsc28gdXBkYXRlIHRvIG5ldyBuYW1lIG9mIGNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCksCisgICAgICAgIGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGlj
c0NvbnRleHRHTENvY29hLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hhbmdlQ29udGV4
dENvbnRlbnRzKToKKyAgICAgICAgUmVwbGFjZSB1bm5lY2Vzc2FyeSB1c2Ugb2YgY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKSB3aXRoIHRoZSBtb3JlIGNvbW1vbiB0b0NvbG9yVHlwZUxvc3N5PFdl
YkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpLgorCiAyMDIyLTAxLTAxICBKZWFuLVl2
ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgbWFrZSBTaGFyZWRCdWZmZXI6
OmNvcHkoKSByZXR1cm4gYSBjb250aWd1b3VzIFNoYXJlZEJ1ZmZlcgpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24g
Mjg3NDgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OndoaXRlOwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC01Nyw3ICs1Nyw3IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6
OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhT
TEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CkBAIC03Myw3ICs3Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBD
b2xvciBjb2xvciA9IENvbG9yOjpyZWQ7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwg
aHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtODksNyArODksNyBAQCBURVNUKENvbG9yLCBSR0JU
b0hTTF9HcmVlbikKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmVlbjsKIAotICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAg
ICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEwNSw3
ICsxMDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9y
ID0gQ29sb3I6OmJsdWU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMjQwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29s
b3Iuc2F0dXJhdGlvbik7CkBAIC0xMjEsNyArMTIxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xf
RGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBh
dXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7Cisg
ICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEzNyw3ICsx
MzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlw
ZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdy
YXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xODEsNyArMTgxLDcg
QEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAKICAgICB2YWxpZENvbG9yID0gU1JHQkE8dWludDhf
dD4geyAxLCAyLCAzLCA0IH07CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkp
OwotICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBF
Q1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEodmFsaWRD
b2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9u
ZW50cy5ibHVlLCAzKTsKQEAgLTE4OSw3ICsxODksNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkK
IAogICAgIENvbG9yIHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwog
ICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0
byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWlu
dDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JD
b21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5ibHVlLCAzKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0
eSkKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3Ip
OwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIGF1dG8g
b3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZh
bGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQ
RUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9F
UShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMjA5LDIwICsyMDksMjAg
QEAgVEVTVChDb2xvciwgTHVtaW5hbmNlKQogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihDb2xv
cjo6YmxhY2spLmx1bWluYW5jZSgpLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoQ29s
b3I6OndoaXRlKS5sdW1pbmFuY2UoKSwgMSk7CiAKLSAgICBhdXRvIGNDb21wb25lbnRzID0gU1JH
QkE8dWludDhfdD4geyA4NSwgOTAsIDE2MCB9OworICAgIGF1dG8gY0NvbXBvbmVudHMgPSBTUkdC
QTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH0ucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoQ29sb3IoY0NvbXBvbmVudHMpLmx1bWluYW5jZSgpLCAwLjExNzgxNDU1KTsKIAogICAgIEVY
UEVDVF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMu
Z3JlZW4sIDkwKTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKIAotICAg
IGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMp
LmxpZ2h0ZW5lZCgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFuY2UoKSwgMC4y
OTE2ODIpOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkLCAxMzApOwogICAgIEVYUEVDVF9F
UShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAy
NDQpOwogCi0gICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjQ29tcG9uZW50cykuZGFya2VuZWQo
KS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGND
b21wb25lbnRzKS5kYXJrZW5lZCgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCku
cmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFu
Y2UoKSwgMC4wMjcwMDYyNDIpOwogICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7CiAg
ICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVlbiwgNDMpOwpAQCAtMjMzLDcgKzIzMyw3IEBAIFRF
U1QoQ29sb3IsIENvbnN0cnVjdG9yKQogewogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9y
U3BhY2UsIGNvbXBvbmVudHNdID0gYzEuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKIAogICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIFRFU1QoQ29sb3IsIENv
cHlDb25zdHJ1Y3RvcikKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xvciBjMihjMSk7CiAKLSAgICBhdXRvIFtjb2xvclNw
YWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0
byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xv
ckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVChD
b2xvciwgQXNzaWdubWVudCkKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAs
IDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xvciBjMiA9IGMxOwogCi0gICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVk
Q29sb3JDb21wb25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50
czsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMzIzLDcgKzMyMyw3IEBAIFRF
U1QoQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKICAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQg
c28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRlbGV0aW9uLgogICAgIEVYUEVDVF9GQUxTRShjMS5p
c1ZhbGlkKCkpOwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNd
ID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgRVhQRUNU
X0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAKICAgICBhdXRvIFtyLCBn
LCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIFRFU1QoQ29sb3Is
IE1vdmVBc3NpZ25tZW50KQogICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0
IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAgICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7
CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xv
clNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBFWFBFQ1RfRVEoY29sb3JT
cGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhh
XSA9IGNvbXBvbmVudHM7CkBAIC0zNzAsNyArMzcwLDcgQEAgVEVTVChDb2xvciwgUmV0dXJuVmFs
dWVzKQogVEVTVChDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogewogICAgIENvbG9yIHAzQ29s
b3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwotICAgIGF1
dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8g
c1JHQkFDb2xvciA9IHAzQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVz
b2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOwogICAg
IEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzMjgyZik7CiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxMjc0OGYpOwpAQCAtMzgwLDcgKzM4
MCw3IEBAIFRFU1QoQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIFRFU1QoQ29sb3IsIExpbmVh
clNSR0JDb252ZXJzaW9uVG9TUkdCKQogewogICAgIENvbG9yIGxpbmVhclNSR0JBQ29sb3IgeyBM
aW5lYXJTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAgYXV0byBz
UkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAg
YXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJl
ZCwgMS4wZik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNzM1MzU2
OTI3Zik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZm
KTsKQEAgLTM5OCw3ICszOTgsNyBAQCBURVNUKENvbG9yLCBDb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSkKIAogICAgIHsKICAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkg
PSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLjUpOwotICAgICAgICBhdXRvIFtj
b2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzKCk7CiAgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNl
OjpTUkdCKTsKICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwogICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwpAQCAtNDA5LDcgKzQwOSw3IEBAIFRFU1QoQ29sb3Is
IENvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KQogCiAgICAgewogICAgICAgICBDb2xvciBjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KDAuKTsKLSAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRv
IFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNv
bG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgICAgICBFWFBFQ1RfRVEo
Y29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29tcG9uZW50czsKICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHIsIDAuKTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0JKHJldmlzaW9uIDI4NzQ4MikK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOCBAQCBzdGF0aWMg
Ojp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgY2hhbmdlQ29udGV4dENvbnRlbnQKIHsKICAgICBj
b250ZXh0Lm1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgIFdlYkNvcmU6OkNvbG9yIGV4cGVjdGVk
IHsgaXRlcmF0aW9uICUgMiA/IFdlYkNvcmU6OkNvbG9yOjpncmVlbiA6IFdlYkNvcmU6OkNvbG9y
Ojp5ZWxsb3cgfTsKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGV4cGVjdGVk
LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKGNvbG9yU3Bh
Y2UpOwotICAgIGNvbnRleHQuY2xlYXJDb2xvcihjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFd
LCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGV4cGVjdGVkLnRvQ29sb3JUeXBlTG9zc3k8V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CisgICAgY29udGV4dC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGNvbnRleHQu
Y2xlYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAg
IHVpbnQ4X3QgZ290VmFsdWVzWzRdID0geyB9OwogICAgIGF1dG8gc2FtcGxlQXQgPSBjb250ZXh0
LmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7Cg==
</data>
<flag name="review"
          id="474029"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448248</attachid>
            <date>2022-01-03 09:59:54 -0800</date>
            <delta_ts>2022-01-03 10:57:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>resolved9.diff</filename>
            <type>text/plain</type>
            <size>160885</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3NiBAQAorMjAyMi0wMS0wMiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2
ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMgdG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBh
Ym91dCB3aGV0aGVyIHRoZXkgd2lsbCBoYW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgbWlzc2luZyAvIHBvd2VybGVzcyBjb2xv
ciBjb21wb25lbnRzLCB0aGlzIGNoYW5nZSBjaGFuZ2VzIHRoZSBBUEkKKyAgICAgICAgb2YgY29s
b3IgdHlwZXMgKGUuZy4gU1JHQkE8ZmxvYXQ+LCBPS0xhYjxmbG9hdD4sIGV0YykgdG8gcmVxdWly
ZSBhbiBleHRyYSBzdGVwIGJlZm9yZSB1c2VycyBjYW4gYWNjZXNzCisgICAgICAgIHRoZSBjb21w
b25lbnQgdmFsdWVzLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNob29zZSB3aGV0aGVyIHRoZXkgd2Fu
dCB0byBoYW5kbGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29sb3IKKyAgICAgICAgY29tcG9u
ZW50cyAodGhlIHVucmVzb2x2ZWQgc3RhdGUpIG9yIGhhdmUgdGhlbSBjb252ZXJ0ZWQgdG8gdGhl
IHZhbHVlIHRoZXkgc2hvdWxkIHVzZSBmb3IgcmVuZGVyaW5nICh0aGUKKyAgICAgICAgcmVzb2x2
ZWQgc3RhdGUpLgorCisgICAgICAgIFRvIGRvIHRoaXMsIGNvbG9yIHR5cGVzIG5vIGxvbmdlciBl
eHBvc2UgdGhlaXIgY29tcG9uZW50cyBwdWJsaWNseSwgYnV0IHJhdGhlciwgb25seSBhbGxvdyBh
Y2Nlc3MgdG8gdGhlbQorICAgICAgICB2aWEgbmV3IHN1YmNsYXNzZXMsIFJlc29sdmVkQ29sb3JU
eXBlPENvbG9yVHlwZT4gYW5kIFVucmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPi4gVGhlc2Vz
IHN1YmNsYXNzZXMgCisgICAgICAgIGV4cG9zZSB0aGUgY29tcG9uZW50cyBwdWJsaWNseSB2aWEg
dXNpbmcgZGlyZWN0aXZlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBBUEkgY29uc2lzdGVudCAo
YW5kIGtlZXAgZ2VuZXJpYyBjb250ZXh0cyBzaW1wbGVyKSwgY29sb3IgdHlwZXMgdXNpbmcgYm90
aCBmbG9hdCBhbmQgdWludDhfdAorICAgICAgICByZXF1aXJlIHRoZSB1c2Ugb2YgcmVzb2x2ZWQo
KSAvIHVucmVzb2x2ZWQoKSB0byBhY2Nlc3MgY29tcG9uZW50cywgYnV0IGZvciB1aW50OF90LCB0
aGVyZSBpcyBubyBhY3R1YWwKKyAgICAgICAgcmVzb2x1dGlvbiB0aGF0IGhhcHBlbnMsIGFzIHRo
ZXJlIGlzIG5vIHdheSB0byBlbmNvZGUgdGhlIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29uY2VwdCBp
biB0aGVtLgorCisgICAgICAgIE9uZSB0cmlja3kgdGhpbmcgaGF2aW5nIGEgbW9yZSBjb21wbGV4
IGhpZXJhcmNoeSBvZiBjb2xvciB0eXBlcyBpcyB0aGF0IGdlbmVyaWMgZnVuY3Rpb25zIHBhcmFt
ZXRlcml6ZWQKKyAgICAgICAgb24gdGhlIGlucHV0IGNvbG9yIHR5cGUgY2FuIG5vIGxvbmdlciBh
c3N1bWUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgd2lsbCBiZSB0aGUgc2FtZSAoZm9yIGlu
c3RhbmNlLAorICAgICAgICBpZiB5b3UgY2FsbCBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoKSB3
aXRoIGEgUmVzb2x2ZWRDb2xvclR5cGU8TGFiPGZsb2F0Pj4gaXQgd2lsbCBub3QgbmVjZXNzYXJp
bHkgCisgICAgICAgIHJldHVybiBhIFJlc29sdmVkQ29sb3JUeXBlPExhYjxmbG9hdD4+KSBzbyBh
IGZldyBnZW5lcmljIGZ1bmN0aW9ucyBoYXZlIGhhZCB0aGVpciBleHBsaWNpdCByZXR1cm4gdHlw
ZXMKKyAgICAgICAgcmVwbGFjZWQgd2l0aCBkZWR1Y2VkIChhdXRvKSByZXR1cm4gdHlwZXMgdG8g
YXZvaWQgdGhpcyAoYWRkaXRpb25hbGx5LCBhIENhbm9uaWNhbENvbG9yVHlwZTw+IHR5cGUgdHJh
aXQKKyAgICAgICAgd2FzIGFkZGVkIGlmIG9uZSBuZWVkcyB0byBiZSBzcGVjaWZpYyBmb3Igc29t
ZXRoaW5nIGxpa2UgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gcHVycG9zZXMpLiAKKworICAgICAg
ICBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYWRkIG1pc3NpbmcgLyBwb3dlcmxlc3MgY29tcG9u
ZW50cyB5ZXQsIHRoZXJlIGlzIG5vIGFjdHVhbCBiZWhhdmlvciBjaGFuZ2UsIGJ1dAorICAgICAg
ICB0aGlzIGxheXMgdGhlIGZvdW5kYXRpb24gZm9yIGFkZGluZyB0aGF0IGluIGEgZm9sbG93IHVw
LgorCisgICAgICAgIEFzIHRoaXMgY2hhbmdlIHdhcyBhbHJlYWR5IHRvdWNoaW5nIG1vc3QgdXNl
cyBvZiB0aGUgdG9TUkdCQUxvc3N5PD4gZnVuY3Rpb24gb24gQ29sb3IsIEkgYWxzbyB0b29rIHRo
ZQorICAgICAgICBvcHBvcnR1bml0eSB0byByZXBsYWNlIGFsbCBpdHMgdXNlcyB3aXRoIHRoZSBn
ZW5lcmljIHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvck1vZGVscy5oOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjp1bnJlc29sdmVkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlZENvbG9y
VHlwZTo6cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OnVucmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5
cGU6OlJlc29sdmVkQ29sb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVkQ29sb3JU
eXBlOjpyZXNvbHZlKToKKyAgICAgICAgKFdlYkNvcmU6OlVucmVzb2x2ZWRDb2xvclR5cGU6OnVu
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VW5yZXNvbHZlZENvbG9yVHlwZTo6
VW5yZXNvbHZlZENvbG9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjphc0NvbG9yQ29tcG9uZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAgICAgICBBZGRzIFJlc29sdmVkQ29sb3JU
eXBlIGFuZCBVbnJlc29sdmVkQ29sb3JUeXBlIGdlbmVyaWMgdHlwZXMuIFRoZXkgYm90aCBpbmhl
cml0IGZyb20KKyAgICAgICAgdGhlIGhlbHBlciB0eXBlIEV4cG9zZWRDb2xvclR5cGUgd2hpY2gg
aXMgc3BlY2lhbGl6ZWQgZm9yIGVhY2ggY29sb3IgbW9kZWwgYW5kIGRvZXMKKyAgICAgICAgdGhl
IHdvcmsgb2YgZXhwb3NpbmcgdGhlIGNvbXBvbmVudHMgdmlhIHB1YmxpYyAndXNpbmcgQ29sb3JU
eXBlOjpjb21wb25lbnROYW1lJy4gVGhlc2UKKyAgICAgICAgdHlwZXMgYWxzbyBoYXZlIG92ZXJy
aWRlcyBvZiB0aGUgbmV3IHJlc29sdmVkKCkvdW5yZXNvbHZlZCgpIG1lbWJlciBmdW5jdGlvbnMg
b24gY29sb3IKKyAgICAgICAgdHlwZXMgKHdlbGwsIG9ubHkgdW5yZXNvbHZlZCgpIGZvciBVbnJl
c29sdmVkQ29sb3JUeXBlKSB0byBhbGxvdyBnZW5lcmljIGNvZGUgdG8gbm90CisgICAgICAgIGNh
cmUgYWJvdXQgd2hldGhlciBpdCBhbHJlYWR5IGhhcyByZXNvbHZlZCBvciB1bnJlc29sdmVkIGNv
bG9yIHR5cGUsIGFuZCBqdXN0IHVzZSB0aGUKKyAgICAgICAgYWNjZXNzb3IgaXQgd2FudHMgd2l0
aG91dCB3b3JyeWluZyBhYm91dCBkdXBsaWNhdGVkIHJlc29sdXRpb24uCisgICAgICAgIAorICAg
ICAgICBTaW5jZSBhc0NvbG9yQ29tcG9uZW50cygpIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGV4
cG9zZWQgY29sb3IgdHlwZXMsIHRob3NlIGZ1bmN0aW9ucworICAgICAgICBoYXZlIGJlZW4gbW92
ZWQgaGVyZSBmcm9tIENvbG9yVHlwZXMuaCB0byBtYWtlIHRoZWlyIHJlbGF0aW9uc2hpcCBtb3Jl
IGNsZWFyLiBXZSBhbHNvCisgICAgICAgIHJlZHVjZWQgdGhlIG51bWJlciBvZiB0aGVzZSBvdmVy
bG9hZHMgYXMgd2Ugbm93IGp1c3QgaGF2ZSBvbmUgcGVyIGNvbG9yIG1vZGVsICh3ZSBwcmV2aW91
c2x5CisgICAgICAgIGhhZCBvbmUgcGVyIGNvbG9yIHR5cGUpLgorCisgICAgICAgIEFsc28gdG9v
ayB0aGUgb3Bwb3J0dW5pdHkgdG8gbWVyZ2UgRXh0ZW5kZWRSR0JNb2RlbCBhbmQgUkdCTW9kZWwg
aW50byBhIHNpbmdsZSB0eXBlCisgICAgICAgIHBhcmFtZXRlcml6ZWQgYnkgYW4gUkdCQm91bmRl
ZG5lc3MgZW51bS4gVGhpcyBhbGxvd2VkIGZld2VyIEV4cG9zZWRDb2xvclR5cGUgc3BlY2lhbGl6
YXRpb25zCisgICAgICAgIGFuZCBhc0NvbG9yQ29tcG9uZW50cygpIG92ZXJsb2FkcyAoYW5kIHRv
IHJlbW92ZSBzb21lIHVzZXMgb2YgVXNlc0V4dGVuZGVkUkdCTW9kZWw8PikuCisKKyAgICAgICAg
T25lIHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0IG9mIHRoZSBtb3JlIGNvbXBsZXggdHlwZSBoaWVy
YXJjaHkgaXMgdGhhdCB3ZSBubyBsb25nZXIgZ2V0CisgICAgICAgIGRlc3RydWN0dXJpbmcgZm9y
IGZyZWUsIHNvIHRvIGFkZCB0aGF0IGJhY2ssIGEgZ2VuZXJpYyBnZXQ8PiBvdmVybG9hZCBpcyBh
ZGRlZCBhcyB3ZWxsCisgICAgICAgIGFzIHRoZSByZXF1aXJlZCBzdGQ6OnR1cGxlX3NpemUvc3Rk
Ojp0dXBsZV9lbGVtZW50IHNwZWNpYWxpemF0aW9ucyBvZiBSZXNvbHZlZENvbG9yVHlwZQorICAg
ICAgICBhbmQgVW5yZXNvbHZlZENvbG9yVHlwZSAodGhlIG1vc3QgZGVyaXZlZCBjbGFzcyBtdXN0
IGJlIHVzZWQgZm9yIHNwZWNpYWxpemF0aW9ucywgc28KKyAgICAgICAgYSBzaW5nbGUgRXhwb3Nl
ZENvbG9yVHlwZSBzcGVjaWFsaXphdGlvbiB3YXMgbm90IHBvc3NpYmxlKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VG
cm9tQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2VydEluUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3JXaXRoQWxwaGFIZWxwZXI6OmNvbG9yV2l0aEFscGhhQnl0ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkFUeXBl
OjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBVHlwZTo6dW5yZXNvbHZl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYWI6OnJlc29sdmVkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhYjo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
Q0hBOjpyZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMQ0hBOjp1bnJlc29sdmVk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9LTGFiOjpyZXNvbHZlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpPS0xhYjo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpPS0xDSEE6OnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9LTENIQTo6dW5y
ZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIU0xBOjpyZXNvbHZlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIU0xBOjp1bnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhXQkE6OnJlc29sdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhXQkE6OnVu
cmVzb2x2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6WFlaQTo6cmVzb2x2ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6WFlaQTo6dW5yZXNvbHZlZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWNrZWRDb2xvcjo6UkdCQTo6UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQYWNr
ZWRDb2xvcjo6QVJHQjo6QVJHQik6CisgICAgICAgIChXZWJDb3JlOjphc0NvbG9yQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIE1ha2VzIHRoZSBjb21wb25lbnQgbWVtZWJlcnMgb2YgZWFj
aCBjb2xvciB0eXBlIHByb3RlY3RlZCwgc28gdGhhdCBvbmx5CisgICAgICAgIHRoZSBSZXNvbHZl
ZENvbG9yVHlwZSBhbmQgVW5yZXNvbHZlZENvbG9yVHlwZSBkZXJpdmVkIHR5cGVzIGNhbiBhY2Nl
c3MKKyAgICAgICAgYW5kIHJlLWV4cG9zZSB0aGVtLiBUbyBhY2Nlc3MgdGhvc2UsIHJlc29sdmVk
KCkgYW5kIHVucmVzb2x2ZWQoKSBtZW1iZXIKKyAgICAgICAgZnVuY3Rpb25zIHdlcmUgYWRkZWQg
dG8gbWFrZSBpdCBlYXN5LCBidXQgZXhwbGljaXQuCisKKyAgICAgICAgQWxzbyBhZGRlZCBhIG5l
dyB0eXBlIHRyYWl0IGhlbHBlciwgQ2Fub25pY2FsQ29sb3JUeXBlPD4gd2hpY2ggd2lsbCByZXR1
cm4KKyAgICAgICAgdGhlIGJhc2UvY2Fub25pY2FsIG5hbWUgZm9yIGEgY29sb3IgdHlwZS4gRm9y
IGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgIENhbm9uaWNhbENvbG9yVHlwZTxTUkdC
QTxmbG9hdD4+ID09IFNSR0JBPGZsb2F0PgorICAgICAgICAgICAgIENhbm9uaWNhbENvbG9yVHlw
ZTxSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTxmbG9hdD4+PiA9PSBTUkdCQTxmbG9hdD4KKyAgICAg
ICAgICAgICBDYW5vbmljYWxDb2xvclR5cGU8VW5yZXNvbHZlZENvbG9yVHlwZTxTUkdCQTxmbG9h
dD4+PiA9PSBTUkdCQTxmbG9hdD4KKworICAgICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciBmb3Ig
Z2VuZXJpYyBjb2RlIHRvIG5vdCBjYXJlIHdoZXRoZXIgaXQgaXMgcGFyYW10ZXJpemVkIHVzZWQK
KyAgICAgICAgdGhlIGJhc2UvY2Fub25pY2FsIHR5cGUgb3Igb25lIG9mIHRoZSBkZXJpdmVkIG9u
ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmg6CisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6bGlnaHRlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrZW5lZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGlnaHRuZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjp0b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kUmVzb2x2ZWRD
b2xvckNvbXBvbmVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvQ29sb3JD
b21wb25lbnRzSW5Db2xvclNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpp
c09wYXF1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWaXNpYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUJ5dGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmFscGhhQXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6YXNJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIEFkZCByZXNvbHV0aW9uIHdoZXJlIG5lZWRl
ZCwgYnV0IGtlZXAgdGhlIGNvbXBvbmVudHMgdW5yZXNvbHZlZCBmb3Igc3RvcmFnZSBpbiAKKyAg
ICAgICAgdGhlIE91dE9mTGluZUNvbXBvbmVudHMgb2JqZWN0LiBBbHNvIHVwZGF0ZXMgc29tZSBu
YW1lcyBvZiBmdW5jdGlvbnMgdGhhdCByZXR1cm4KKyAgICAgICAgQ29sb3JDb21wb25lbnRzIHRo
YXQgdGhleSBleHBsaWNpdGx5IHJldHVybiByZXNvbHZlZCBjb2xvciBjb21wb25lbnRzLiBJZiBu
ZWVkCisgICAgICAgIHZhcmlhbnRzIHRoYXQgcmV0dXJuIHVucmVzb2x2ZWQgY29tcG9uZW50cywg
d2UgY2FuIGFkZCB0aGVtIGFzIG5lY2Vzc2FyeSBzaW5jZQorICAgICAgICB0aGUgc3RvcmFnZSBy
ZW1haW5zIHVucmVzb2x2ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNv
bXBvbmVudHMuaDoKKyAgICAgICAgQWRkIG9wZXJhdG9yLz0oVCkgdG8gbWFrZSBzb21lIGNvZGUg
aW4gUGFnZUNvbG9yU2FtcGxlci5jcHAgbXVjaCBzaW1wbGVyLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgU3dp
dGNoIHRvIHRvQ29sb3JUeXBlTG9zc3kuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29yZU9iamVj
dDo6dmFsdWUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxp
dHlPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9i
amVjdFRleHRBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OnRleHRBdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmFsdWVdKToK
KyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaDoKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUhT
TFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVMYWJQYXJhbWV0ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUxDSFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZVJlbGF0aXZlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VSZWxhdGl2ZUNvbG9yRnVuY3Rpb25Gb3JYWVpU
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om1peENv
bG9yQ29tcG9uZW50c1VzaW5nQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKToKKyAgICAgICAgKiBl
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JCbGVuZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZFNvdXJjZU92ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRoV2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6
YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0VG9Qb2xhckZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
UmVjdGFuZ3VsYXJGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUhTTEh1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUkdCQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhTTEE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpIV0JBPGZsb2F0
Pj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGFiPGZsb2F0Pj46OmNvbnZlcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2hpdGVQb2ludDo6RDUwPj46OmNvbnZlcnQpOgorICAgICAgICAo
V2ViQ29yZTo6T0tMYWI8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpXaGl0
ZVBvaW50OjpENjU+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0QW5kUmVz
b2x2ZUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29sb3JDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZl
cnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlVG9GbG9h
dENvbnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJzaW9uOjpoYW5kbGVU
b0J5dGVDb252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9M
aW5lYXJFbmNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9HYW1t
YUVuY29kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JDb252ZXJzaW9uOjp0b0V4dGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6dG9Cb3VuZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yQ29udmVyc2lvbjo6aGFuZGxlTWF0cml4Q29udmVyc2lvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjppbnRlcnBvbGF0ZUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JMdW1pbmFuY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbGF0aXZl
THVtaW5hbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OnVucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkRmxvb3Jp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENlaWxpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZv
ckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKToKKyAgICAgICAgKFdlYkNv
cmU6OmludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGRlbkFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzQmxhY2spOgorICAgICAgICAoV2ViQ29yZTo6aXNXaGl0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5j
cHA6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAg
ICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ29sb3JTdG9wUkdCQSk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRDb3JuZXJDb2xvclJHQkEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ0dDb21w
YXRpYmxlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDR0NvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnRSZW5kZXJlckNHOjptYWtlR3JhZGllbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRSZW5kZXJlckNHOjpTaGFkaW5nOjpzaGFkaW5nRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRSZW5kZXJlckNHOjptYWtlU2hhZGlu
ZyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
TGlnaHRpbmdORU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5TmVvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1D
b2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVy
YXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4
ZWxWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBHZGtSR0JBIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cHJl
cGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmNsZWFy
Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlQnJ1c2gpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4dENvbG9yIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpz
aG91bGRVc2VDb252ZXhHcmFkaWVudCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0aW9uQ29sb3JGdW5jdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgIEFkZCBjYWxscyB0byBy
ZXNvbHZlZCgpIHRvIGFjY2VzcyBjb21wb25lbnRzLiBTb21lIG9mIHRoZXNlIChwYXJ0aWN1bGFy
bGx5IGluIHNlcmlhbGl6YXRpb24sIGNvbnZlcnNpb24gYW5kCisgICAgICAgIGludGVycG9sYXRp
b24gcmVsYXRlZCBjYWxscykgd2lsbCBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byB1c2UgdW5yZXNv
bHZlZCgpIGV2ZW50dWFsbHksIGJ1dCBmaXJzdCB0aGV5IHdpbGwKKyAgICAgICAgbmVlZCB0byBo
YW5kbGUgdGhlIE5hTiBjYXNlIHByb3Blcmx5LgorCisgICAgICAgICogcGFnZS9QYWdlQ29sb3JT
YW1wbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRGlmZmVyZW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjphdmVyYWdlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbG9yU2Ft
cGxlcjo6c2FtcGxlVG9wKToKKyAgICAgICAgUmV3b3JrIGNvZGUgYSBiaXQgdG8gdXNlIG1vZGVy
biBXZWJLaXQgaWRpb21zIChzdGQ6OmFycmF5LCBTcGFuLCBDb2xvckNvbXBvbmVudHMpLgorCiAy
MDIxLTEyLTI5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZD
XVtJRkNdIENvbGxhcHNlZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG1heSBpbnRyb2R1Y2Ugc3RyYXkg
aW5saW5lIGJveApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTc3LDcgKzE5NzcsNyBAQCBTUkdCQTx1aW50OF90PiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSgpIGMKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsK
IAotICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFz
Q29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTx1aW50OF90Pj4oKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1ODUsNyArMTU4
NSw3IEBAIGlubGluZSBBWENvcmVPYmplY3Q6OkFYVmFsdWUgQVhDb3JlT2JqZWN0Ojp2YWx1ZSgp
CiAgICAgICAgIHJldHVybiBpc1NlbGVjdGVkKCk7CiAKICAgICBpZiAoaXNDb2xvcldlbGwoKSkg
ewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3JW
YWx1ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+
KGNvbG9yVmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJn
YiAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNpb24oY29sb3IucmVkLCA2LCBL
ZWVwVHJhaWxpbmdaZXJvcyksICIgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lz
aW9uKGNvbG9yLmdyZWVuLCA2LCBLZWVwVHJhaWxpbmdaZXJvcyksICIgIiwgU3RyaW5nOjpudW1i
ZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKGNvbG9yLmJsdWUsIDYsIEtlZXBUcmFpbGluZ1plcm9z
KSwgIiAxIik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQu
Y3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTky
LDE0ICs5MiwxNCBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGb3JB
Y2Nlc3NpYmlsaXQKIAogICAgIENvbG9yIGJnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoYmdDb2xvci5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9Db2xv
clR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICBidWZmZXIu
cmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKICAgICAgICAgcmVz
dWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0
X25hbWUoQVRLX1RFWFRfQVRUUl9CR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQogCiAg
ICAgQ29sb3IgZmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcik7CiAgICAgaWYgKGZnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0
byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+
KCkucmVzb2x2ZWQoKTsKICAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWks
JWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0
KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09M
T1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KQEAgLTQzOSw3ICs0MzksNyBAQCBzdGF0aWMgZ2No
YXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBdGtUZXh0KiB0ZXgKIAogI2lmIEVOQUJM
RShJTlBVVF9UWVBFX0NPTE9SKQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252
ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb3JlT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAg
ICBhdXRvIGNvbG9yID0gY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29s
b3JWYWx1ZSgpKS5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCJy
Z2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJs
dWUpOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRz
cGkuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzUsNyArMjc1LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dCgp
IGNvbnN0CiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKICAgICBpZiAoYXhPYmplY3Qt
PnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpDb2xvcldlbGwpIHsKLSAgICAgICAg
YXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGF4T2JqZWN0LT5jb2xvclZh
bHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4o
YXhPYmplY3QtPmNvbG9yVmFsdWUoKSkucmVzb2x2ZWQoKTsKICAgICAgICAgR1VuaXF1ZVB0cjxj
aGFyPiBjb2xvclN0cmluZyhnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSkpOwogICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChjb2xvclN0cmluZy5nZXQoKSk7CiAgICAgfQpAQCAtODI0LDEzICs4
MjQsMTMgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0QXR0cmlidXRlcyBBY2Nlc3Np
YmlsaXR5CiAKICAgICAgICAgICAgIGF1dG8gYmdDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgICAgICAgICBpZiAoYmdD
b2xvci5pc1ZhbGlkKCkgJiYgYmdDb2xvci5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJiZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGZnQ29sb3IgPSBzdHlsZS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgICAgICAgICBpZiAoZmdD
b2xvci5pc1ZhbGlkKCkgJiYgZmdDb2xvci5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3IudG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcsJywgYikp
OwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1MDQsNyArMTUwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5T
TXV0YWJsZVN0cmluZyAqcmVzdQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgaWYgKHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBj
b252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KHNl
bGYuYXhCYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpLnJlc29sdmVkKCk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
dENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wgdmEKIAogU1JHQkE8dWludDhfdD4gQVhJc29sYXRl
ZE9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbG9yQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgIHJldHVybiBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZh
bHVlKS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpOwogfQogCiBBWENvcmVPYmpl
Y3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGUKICAg
ICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsg
fQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1f
YWxwaGE7IH0KIAotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQorICAgIFJlc29sdmVkQ29sb3JUeXBlPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBOdW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBj
cmVhdGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJl
cikKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlCiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
OiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpKQog
ICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkKICAgICAg
ICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQogICAgICAg
ICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQpAQCAtNTQsNyAr
NTQsNyBAQCBjbGFzcyBEZXByZWNhdGVkQ1NTT01SR0JDb2xvciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGUKICAgICB7CiAgICAgfQogCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcjsKKyAgICBS
ZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRp
dmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNTUkdC
ID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CisgICAgYXV0
byBvcmlnaW5Db2xvckFzU1JHQiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGUgewogICAgICAgICB7IENTU1ZhbHVlUiwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBv
cmlnaW5Db2xvckFzU1JHQi5yZWQgKiAxMDAuMCB9LApAQCAtMTY1OSw3ICsxNjU5LDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAg
aWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG9yaWdpbkNvbG9yQXNIU0wgPSBvcmlnaW5Db2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0hTTCA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVILCBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgb3JpZ2luQ29sb3JBc0hTTC5odWUgfSwKQEAgLTE3NzMsNyArMTc3Myw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBvcmlnaW5Db2xvckFzSFdCID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxIV0JB
PGZsb2F0Pj4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNIV0IgPSBvcmlnaW5Db2xvci50b0Nv
bG9yVHlwZUxvc3N5PEhXQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlSCwgQ1NTVW5pdFR5cGU6
OkNTU19ERUcsIG9yaWdpbkNvbG9yQXNIV0IuaHVlIH0sCkBAIC0xODQ5LDcgKzE4NDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICBpZiAoIW9yaWdpbkNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8Q29s
b3JUeXBlPigpOworICAgIGF1dG8gb3JpZ2luQ29sb3JBc0xhYiA9IG9yaWdpbkNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8Q29sb3JUeXBlPigpLnJlc29sdmVkKCk7CiAKICAgICBDU1NDYWxjU3ltYm9s
VGFibGUgc3ltYm9sVGFibGUgewogICAgICAgICB7IENTU1ZhbHVlTCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzTGFiLmxpZ2h0bmVzcyB9LApAQCAtMTkyOSw3ICsx
OTI5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAgICAgaWYgKCFvcmlnaW5Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5Db2xvci50b0NvbG9yVHlw
ZUxvc3N5PENvbG9yVHlwZT4oKTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yQXNMQ0ggPSBvcmlnaW5D
b2xvci50b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpOwogCiAgICAgQ1NT
Q2FsY1N5bWJvbFRhYmxlIHN5bWJvbFRhYmxlIHsKICAgICAgICAgeyBDU1NWYWx1ZUwsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0xDSC5saWdodG5lc3MgfSwKQEAg
LTIwMDcsNyArMjAwNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0
byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzQ29sb3JUeXBlID0gb3JpZ2luQ29s
b3IudG9Db2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0Nh
bGNTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVSLCBDU1NVbml0
VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUucmVkICogMTAwLjAg
fSwKQEAgLTIwNjgsNyArMjA2OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3Rh
dGljIENvbG9yIHBhcnNlUmVsYXRpdgogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0g
ICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9Db2xvclR5cGVMb3NzeTxD
b2xvclR5cGU+KCk7CisgICAgYXV0byBvcmlnaW5Db2xvckFzWFlaID0gb3JpZ2luQ29sb3IudG9D
b2xvclR5cGVMb3NzeTxDb2xvclR5cGU+KCkucmVzb2x2ZWQoKTsKIAogICAgIENTU0NhbGNTeW1i
b2xUYWJsZSBzeW1ib2xUYWJsZSB7CiAgICAgICAgIHsgQ1NTVmFsdWVYLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiwgb3JpZ2luQ29sb3JBc1hZWi54IH0sCkBAIC0yNDQ5LDcgKzI0NDksNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kPiBzdGF0aWMgQ29sb3IgbWkKICAg
ICBhdXRvIGNvbnZlcnRlZENvbG9yMiA9IGNvbG9yMi50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5
PENvbG9yVHlwZT4oKTsKIAogICAgIC8vIDIuIENvbG9ycyBhcmUgdGhlbiBpbnRlcnBvbGF0ZWQg
aW4gdGhlIHNwZWNpZmllZCBjb2xvciBzcGFjZSwgYXMgZGVzY3JpYmVkIGluIENTUyBDb2xvciA0
IMKn4oCvMTMgSW50ZXJwb2xhdGlvbi4gWy4uLl0KLSAgICBhdXRvIG1peGVkQ29sb3IgPSBpbnRl
cnBvbGF0ZUNvbG9yQ29tcG9uZW50czxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihpbnRlcnBvbGF0aW9uTWV0aG9kLCBjb252ZXJ0ZWRDb2xvcjEsIG1peFBlcmNlbnRhZ2Vz
LnAxIC8gMTAwLjAsIGNvbnZlcnRlZENvbG9yMiwgbWl4UGVyY2VudGFnZXMucDIgLyAxMDAuMCk7
CisgICAgYXV0byBtaXhlZENvbG9yID0gaW50ZXJwb2xhdGVDb2xvckNvbXBvbmVudHM8QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oaW50ZXJwb2xhdGlvbk1ldGhvZCwgY29u
dmVydGVkQ29sb3IxLCBtaXhQZXJjZW50YWdlcy5wMSAvIDEwMC4wLCBjb252ZXJ0ZWRDb2xvcjIs
IG1peFBlcmNlbnRhZ2VzLnAyIC8gMTAwLjApLnJlc29sdmVkKCk7CiAKICAgICAvLyAzLiBJZiBh
biBhbHBoYSBtdWx0aXBsaWVyIHdhcyBwcm9kdWNlZCBkdXJpbmcgcGVyY2VudGFnZSBub3JtYWxp
emF0aW9uLCB0aGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBpbnRlcnBvbGF0ZWQgcmVzdWx0CiAg
ICAgLy8gICAgaXMgbXVsdGlwbGllZCBieSB0aGUgYWxwaGEgbXVsdGlwbGllci4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbQogICAgICAgICAgICAgICAgICAgICBh
dXRvIHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENI
QTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJl
c3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQg
SFNMQSBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdGV4dENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5y
ZXNvbHZlZCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRu
ZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRo
ZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Ig
d2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25l
IGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNv
bG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwyNyArMTM1LDI1IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKERvY3VtZW50Jgog
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFw
c2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERh
dGFbM10gfSk7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4m
IGxocywgTGFiPGZsb2F0PiYgcmhzKQorc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoY29u
c3QgTGFiPGZsb2F0PiYgbGhzLCBjb25zdCBMYWI8ZmxvYXQ+JiByaHMpCiB7Ci0gICAgcmV0dXJu
IHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAt
IGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBhIGZvcm1hbCBjb2xvciBkaWZmZXJlbmNlIG1ldHJpYyAoZGVsdGFFMjAwMCwg
ZGVsdGFFT0spIGFzIHRoaXMgY3VycmVudCBvbmUgaXMgbm90IHBlcmNlcHR1YWxseSB1bmlmb3Jt
IChzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JfZGlmZmVyZW5jZSkuCisK
KyAgICBhdXRvIHJlc29sdmVkTGVmdEhhbmRTaWRlID0gbGhzLnJlc29sdmVkKCk7CisgICAgYXV0
byByZXNvbHZlZFJpZ2h0SGFuZFNpZGUgPSByaHMucmVzb2x2ZWQoKTsKKworICAgIHJldHVybiBz
cXJ0KHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUubGlnaHRuZXNzIC0gcmVzb2x2ZWRMZWZ0SGFu
ZFNpZGUubGlnaHRuZXNzLCAyKSArIHBvdyhyZXNvbHZlZFJpZ2h0SGFuZFNpZGUuYSAtIHJlc29s
dmVkTGVmdEhhbmRTaWRlLmEsIDIpICsgcG93KHJlc29sdmVkUmlnaHRIYW5kU2lkZS5iIC0gcmVz
b2x2ZWRMZWZ0SGFuZFNpZGUuYiwgMikpOwogfQogCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdl
Q29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIExhYjxmbG9h
dD4gYXZlcmFnZUNvbG9yKFNwYW48TGFiPGZsb2F0Pj4gY29sb3JzKQogewotICAgIGZsb2F0IHRv
dGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFs
QiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSAr
PSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAg
ICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3Rh
bEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsK
KyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHRvdGFscyB7IH07CisgICAgZm9yIChhdXRv
IGNvbG9yIDogY29sb3JzKQorICAgICAgICB0b3RhbHMgKz0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IucmVzb2x2ZWQoKSkuc3Vic2V0PDAsIDM+KCk7CisKKyAgICB0b3RhbHMgLz0gY29sb3JzLnNp
emUoKTsKKworICAgIHJldHVybiB7IHRvdGFsc1swXSwgdG90YWxzWzFdLCB0b3RhbHNbMl0gfTsK
IH0KIAogc3RkOjpvcHRpb25hbDxDb2xvcj4gUGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKFBh
Z2UmIHBhZ2UpCkBAIC0xODgsMTEgKzE4NiwxMSBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGgg
Ynkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc2FtcGxlIGlzIHdpdGhpbiBib3VuZHMgYW5k
IG5vdCBvZmYtYnktb25lLgogICAgIGF1dG8gZnJhbWVXaWR0aCA9IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIC0gMTsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG51bVNhbXBsZXMgPSA1OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBudW1TYW1wbGVzID0gNTsKICAgICBzaXplX3Qgbm9uTWF0
Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxlczsKIAotICAgIExhYjxmbG9hdD4gc2FtcGxlc1tu
dW1TYW1wbGVzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworICAg
IHN0ZDo6YXJyYXk8TGFiPGZsb2F0PiwgbnVtU2FtcGxlcz4gc2FtcGxlczsKKyAgICBzdGQ6OmFy
cmF5PGRvdWJsZSwgbnVtU2FtcGxlcyAtIDE+IGRpZmZlcmVuY2VzOwogCiAgICAgYXV0byBzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJv
b2wgewogICAgICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hp
bmcgY29sb3IuCkBAIC0yNjYsMTggKzI2NCwxMiBAQCBzdGQ6Om9wdGlvbmFsPENvbG9yPiBQYWdl
Q29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoUGFnZSYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gc2FtcGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7Ci0gICAgYXV0byB2YWxpZFNhbXBsZUNvdW50
ID0gbnVtU2FtcGxlczsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAg
ICAvLyBTa2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5k
aWNhdGVzIHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKLSAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNy
ZWFzaW5nIHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc2FtcGxl
c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0gZWxzZSBpZiAo
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7Ci0gICAgICAgIC8vIFNr
aXAgdGhlIGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8g
YXZlcmFnZS4KLSAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OwotICAgIH0KLSAgICByZXR1cm4g
Q29sb3IoYXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsK
KyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VD
b2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MSwgbnVtU2FtcGxlcyAtIDE+KCkpOworICAg
IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TYW1wbGVzIC0gMSkKKyAgICAg
ICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFuIHsgc2FtcGxlcyB9LnN1YnNwYW48MCwgbnVtU2Ft
cGxlcyAtIDE+KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGF2ZXJhZ2VDb2xvcihTcGFu
IHsgc2FtcGxlcyB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogICAg
IGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZs
b2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAgLTEwMSw3ICsxMDEsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gd2hp
dGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGZsb2F0
IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKIGRvdWJsZSBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOwogICAgIHJl
dHVybiAwLjUgKiAobWF4ICsgbWluKTsKIH0KQEAgLTE2MiwyMyArMTYyLDIzIEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFn
czo6U2VtYW50aWMgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9SZXNvbHZlZENvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZShDb2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0CiB7
Ci0gICAgYXV0byBbaW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xv
clNwYWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtpbnB1dENv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CisgICAgcmV0dXJuIGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKGlucHV0
Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CiB9CiAKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3V0cHV0Q29sb3JTcGFjZSkgY29uc3QKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gQ29sb3I6OnRvUmVzb2x2ZWRDb2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKSBj
b25zdAogewotICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKGlu
cHV0Q29sb3JTcGFjZSwgY29tcG9uZW50cywgb3V0cHV0Q29sb3JTcGFjZSk7CisgICAgYXV0byBb
aW5wdXRDb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9y
Q29tcG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50
cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMsIG91dHB1dENvbG9yU3BhY2UpOwogfQogCi1z
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIHsgY29sb3JTcGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJl
dHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGFzSW5saW5lKCkpKSB9OworICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIHJlc29sdmVDb2xvckNvbXBvbmVudHMoYXNPdXRPZkxpbmUoKS5yZXNvbHZlZENvbXBvbmVu
dHMoKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgpKS5yZXNvbHZlZCgpKSB9Owog
fQogCiBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAKICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6
IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJ
bmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEo
KSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBi
b29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5l
KCkucmVzb2x2ZWRBbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYSA9
PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5l
KCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkucmVz
b2x2ZWQoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZM
aW5lKCkucmVzb2x2ZWRBbHBoYSgpKSA6IGFzSW5saW5lKCkucmVzb2x2ZWQoKS5hbHBoYTsgfQor
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBh
c091dE9mTGluZSgpLnJlc29sdmVkQWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4o
YXNJbmxpbmUoKS5yZXNvbHZlZCgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5l
c3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFu
Y2UuCkBAIC0xMTUsMTYgKzExNSwxMSBAQCBjbGFzcyBDb2xvciB7IChwdWJsaWMpCiAgICAgLy8g
b3IgcHJlY2lzaW9uIG9mIENvbG9yVHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdW5k
ZXJseWluZyB0eXBlLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IHRvQ29sb3JUeXBlTG9zc3koKSBjb25zdDsKIAotICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IHRo
ZSB1bmRlcmx5aW5nIGNvbG9yIGludG8gc1JHQiwgcG90ZW50aWFsbHkgbG9zc2lseSBpZiB0aGUg
Z2FtdXQKLSAgICAvLyBvciBwcmVjaXNpb24gb2Ygc1JHQiBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1
cnJlbnQgdW5kZXJseWluZyB0eXBlLiBUaGlzIGlzIGEgY29udmVuaWVuY2UKLSAgICAvLyB3cmFw
cGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJldHVybiB0b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPFQ+PigpOyB9CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b1Jlc29sdmVk
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNvbnN0OworICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gdG9SZXNvbHZlZENvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKIAotICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSkg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
Pj4gY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCkgY29uc3Q7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGRh
cmtlbmVkKCkgY29uc3Q7CiAKQEAgLTE5NCw4ICsxODksMTAgQEAgY2xhc3MgQ29sb3IgeyAocHVi
bGljKQogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3V0T2ZMaW5lQ29tcG9uZW50
cyhjb21wb25lbnRzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotICAgICAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAg
ICAgZmxvYXQgdW5yZXNvbHZlZEFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNd
OyB9CisgICAgICAgIGZsb2F0IHJlc29sdmVkQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6Omlz
bmFuKG1fY29tcG9uZW50c1szXSkgPyAwIDogbV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gdW5yZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvbmVudHM7IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBy
ZXNvbHZlZENvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiByZXNvbHZlQ29sb3JDb21wb25lbnRz
KG1fY29tcG9uZW50cyk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE91dE9mTGluZUNvbXBv
bmVudHMoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAtMjkyLDcgKzI4
OSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKQogaW5saW5lIGJvb2wgb3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbChjb25zdCBDb2xvciYg
YSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0
T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09
IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xv
clNwYWNlKCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNP
dXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS51bnJl
c29sdmVkQ29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYm
IGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7CiAKICAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8
IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAzLDcgKzMwMCw3IEBA
IGlubGluZSBib29sIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWxJZ25vcmluZ1NlbWFudGljQwog
ICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKSB7CiAgICAgICAgIGF1
dG8gYUZsYWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2Vt
YW50aWM7CiAgICAgICAgIGF1dG8gYkZsYWdzID0gYi5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5j
bHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7Ci0gICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCku
Y29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNw
YWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAgcmV0
dXJuIGEuYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpID09IGIuYXNPdXRPZkxp
bmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JT
cGFjZSgpICYmIGFGbGFncyA9PSBiRmxhZ3M7CiAgICAgfQogCiAgICAgQVNTRVJUKGEuaXNPdXRP
ZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5lKCkpOwpAQCAtMzM0LDE0ICszMzEsMTQgQEAgaW5saW5l
IENvbG9yOjpDb2xvcihzdGQ6Om9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5
cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpD
b2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewot
ICAgIHNldE91dE9mTGluZUNvbXBvbmVudHMoT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFn
c0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91
dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvci51bnJlc29s
dmVkKCkpKSwgQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0
ZShmbGFncykpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZs
b2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbG9yVHlw
ZT4mIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikKLSAg
ICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUo
YXNDb2xvckNvbXBvbmVudHMoKmNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9G
bGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29tcG9u
ZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoY29sb3It
PnVucmVzb2x2ZWQoKSkpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRp
bmdQcml2YXRlKGZsYWdzKSk7CiB9CiAKIGlubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGlu
ZUNvbXBvbmVudHM+JiYgb3V0T2ZMaW5lQ29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQpAQCAtMzczLDcgKzM3MCw3IEBAIGlubGluZSBDb2xv
cjo6fkNvbG9yKCkKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGlu
ZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgICAg
ICByZXR1cm4gY29tcHV0ZUhhc2goYXNPdXRPZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygp
LCBjb2xvclNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNo
KGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTQwMCw3
ICszOTcsNyBAQCBpbmxpbmUgQ29sb3JTcGFjZSBDb2xvcjo6Y29sb3JTcGFjZSgpIGNvbnN0CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5k
ZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzT3V0T2ZM
aW5lKCkpCi0gICAgICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShhc091dE9mTGluZSgpLmNv
bXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OworICAgICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS51bnJlc29s
dmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7CiAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSwgYXNJbmxpbmUoKSk7CiB9CiAKQEAgLTU2NSw3ICs1NjIsNyBAQCB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW4KICAgICAgICAgZW5jb2Rl
ciA8PCBjb2xvclNwYWNlKCk7CiAKICAgICAgICAgYXV0byYgb3V0T2ZMaW5lQ29tcG9uZW50cyA9
IGFzT3V0T2ZMaW5lKCk7Ci0gICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IG91dE9m
TGluZUNvbXBvbmVudHMuY29tcG9uZW50cygpOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBh
bHBoYV0gPSBvdXRPZkxpbmVDb21wb25lbnRzLnVucmVzb2x2ZWRDb21wb25lbnRzKCk7CiAgICAg
ICAgIGVuY29kZXIgPDwgYzE7CiAgICAgICAgIGVuY29kZXIgPDwgYzI7CiAgICAgICAgIGVuY29k
ZXIgPDwgYzM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJs
ZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDggQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENvbG9yJiBiYWNrZHJvcCwg
Y29uc3QgQ29sCiAgICAgaWYgKCFzb3VyY2UuaXNWaXNpYmxlKCkpCiAgICAgICAgIHJldHVybiBi
YWNrZHJvcDsKIAotICAgIGF1dG8gW2JhY2tkcm9wUiwgYmFja2Ryb3BHLCBiYWNrZHJvcEIsIGJh
Y2tkcm9wQV0gPSBiYWNrZHJvcC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICBhdXRvIFtz
b3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBi
YWNrZHJvcEFdID0gYmFja2Ryb3AudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOworICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJjZUIsIHNvdXJjZUFd
ID0gc291cmNlLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsK
IAogICAgIGludCBkID0gMHhGRiAqIChiYWNrZHJvcEEgKyBzb3VyY2VBKSAtIGJhY2tkcm9wQSAq
IHNvdXJjZUE7CiAgICAgaW50IGEgPSBkIC8gMHhGRjsKQEAgLTY4LDcgKzY4LDcgQEAgQ29sb3Ig
YmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIGlmICghY29sb3IuaXNPcGFx
dWUoKSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwogCi0gICAgYXV0byBbZXhpc3RpbmdSLCBleGlz
dGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3RpbmdCLCBleGlz
dGluZ0FscGhhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVz
b2x2ZWQoKTsKIAogICAgIFNSR0JBPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBmb3IgKGludCBhbHBo
YSA9IHN0YXJ0QWxwaGE7IGFscGhhIDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVu
dCkgewpAQCAtOTcsOCArOTcsOCBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29u
c3QgQ29sb3ImIHRvLCBjb25zdCAKICAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAxICYmICF0
by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHByZW11bHRpcGxp
ZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpKTsKLSAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWQodG8udG9Db2xv
clR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20g
PSBwcmVtdWx0aXBsaWVkKGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpLnJl
c29sdmVkKCk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkKHRvLnRv
Q29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogCiAgICAgYXV0byBw
cmVtdWx0aXBsaWVkQmxlbmRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZs
b2F0Pj4oCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJl
bXVsdGlwbGllZFRvLnJlZCwgY29udGV4dCksCkBAIC0xMTcsOCArMTE3LDggQEAgQ29sb3IgYmxl
bmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0CiAgICAgaWYgKGNv
bnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9h
dD4+KCk7Ci0gICAgYXV0byB0b1NSR0IgPSB0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0
Pj4oKTsKKyAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKS5yZXNvbHZlZCgpOworICAgIGF1dG8gdG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3Nz
eTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGF1dG8gYmxlbmRlZCA9IG1ha2VG
cm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oCiAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgY29udGV4dCksCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgc3RydWN0IENvbG9yQ29t
cG9uZW50cyB7CiAgICAgY29uc3RleHByIGF1dG8gbWFwKEYmJiBmdW5jdGlvbikgY29uc3QgLT4g
Q29sb3JDb21wb25lbnRzPGRlY2x0eXBlKGZ1bmN0aW9uKHN0ZDo6ZGVjbHZhbDxUPigpKSksIE4+
OwogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBDb2xv
ckNvbXBvbmVudHMmKTsKKyAgICBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzJiBvcGVyYXRvci89
KFQpOwogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvcisoVCkgY29uc3Q7
CiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvci8oVCkgY29uc3Q7CkBAIC05
OCw2ICs5OSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KIGNvbnN0ZXhwciBD
b2xvckNvbXBvbmVudHM8VCwgTj4mIENvbG9yQ29tcG9uZW50czxULCBOPjo6b3BlcmF0b3IrPShj
b25zdCBDb2xvckNvbXBvbmVudHMmIHJocykKIHsKICAgICAqdGhpcyA9IG1hcENvbG9yQ29tcG9u
ZW50cyhbXShUIGMxLCBUIGMyKSB7IHJldHVybiBjMSArIGMyOyB9LCAqdGhpcywgcmhzKTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorY29u
c3RleHByIENvbG9yQ29tcG9uZW50czxULCBOPiYgQ29sb3JDb21wb25lbnRzPFQsIE4+OjpvcGVy
YXRvci89KFQgcmhzKQoreworICAgICp0aGlzID0gKCp0aGlzIC8gcmhzKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
Q29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMjggKzM5LDI1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIExDSExpa2UsIHR5cGVuYW1l
IExhYkxpa2U+CiBMQ0hMaWtlIGNvbnZlcnRUb1BvbGFyRm9ybShjb25zdCBMYWJMaWtlJiBjb2xv
cikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNsYWItdG8t
bGNoCi0gICAgZmxvYXQgaHVlID0gcmFkMmRlZyhhdGFuMihjb2xvci5iLCBjb2xvci5hKSk7Cisg
ICAgYXV0byBbbGlnaHRuZXNzLCBhLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCi0g
ICAgcmV0dXJuIHsKLSAgICAgICAgY29sb3IubGlnaHRuZXNzLAotICAgICAgICBzdGQ6Omh5cG90
KGNvbG9yLmEsIGNvbG9yLmIpLAotICAgICAgICBodWUgPj0gMCA/IGh1ZSA6IGh1ZSArIDM2MCwK
LSAgICAgICAgY29sb3IuYWxwaGEKLSAgICB9OworICAgIGZsb2F0IGh1ZSA9IHJhZDJkZWcoYXRh
bjIoYiwgYSkpOworICAgIGZsb2F0IGNocm9tYSA9IHN0ZDo6aHlwb3QoYSwgYik7CisKKyAgICBy
ZXR1cm4geyBsaWdodG5lc3MsIGNocm9tYSwgaHVlID49IDAgPyBodWUgOiBodWUgKyAzNjAsIGFs
cGhhIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExhYkxpa2UsIHR5cGVuYW1lIExDSExpa2U+
CiBMYWJMaWtlIGNvbnZlcnRUb1JlY3Rhbmd1bGFyRm9ybShjb25zdCBMQ0hMaWtlJiBjb2xvcikK
IHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNsY2gtdG8tbGFi
Ci0gICAgZmxvYXQgaHVlQW5nbGVSYWRpYW5zID0gZGVnMnJhZChjb2xvci5odWUpOworICAgIGF1
dG8gW2xpZ2h0bmVzcywgY2hyb21hLCBodWUsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAK
LSAgICByZXR1cm4gewotICAgICAgICBjb2xvci5saWdodG5lc3MsCi0gICAgICAgIGNvbG9yLmNo
cm9tYSAqIHN0ZDo6Y29zKGh1ZUFuZ2xlUmFkaWFucyksCi0gICAgICAgIGNvbG9yLmNocm9tYSAq
IHN0ZDo6c2luKGh1ZUFuZ2xlUmFkaWFucyksCi0gICAgICAgIGNvbG9yLmFscGhhCi0gICAgfTsK
KyAgICBmbG9hdCBodWVBbmdsZVJhZGlhbnMgPSBkZWcycmFkKGh1ZSk7CisgICAgZmxvYXQgYSA9
IGNocm9tYSAqIHN0ZDo6Y29zKGh1ZUFuZ2xlUmFkaWFucyk7CisgICAgZmxvYXQgYiA9IGNocm9t
YSAqIHN0ZDo6c2luKGh1ZUFuZ2xlUmFkaWFucyk7CisKKyAgICByZXR1cm4geyBsaWdodG5lc3Ms
IGEsIGIsIGFscGhhIH07CiB9CiAKIC8vIE1BUks6IEhTTCBjb252ZXJzaW9ucy4KQEAgLTcyLDkg
KzY5LDggQEAgc3RydWN0IEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IHsKICAgICBmbG9hdCBjaHJv
bWE7CiB9OwogCi1zdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgY2FsY3VsYXRlSFNMSHVl
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCitzdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1
bHQgY2FsY3VsYXRlSFNMSHVlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIpCiB7Ci0gICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gY29sb3I7CiAgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjpt
aW5tYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKIApAQCAt
OTcsOCArOTMsOCBAQCBzdGF0aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgY2FsY3VsYXRlSFNM
SHVlKGNvbnN0IFMKIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0PiwgU1JH
QkE8ZmxvYXQ+Pjo6Y29udmVydChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIC8v
IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHNsLXRvLXJnYgotICAgIGF1
dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOwotICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNo
cm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUoY29sb3IpOworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhh
XSA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9
IGNhbGN1bGF0ZUhTTEh1ZShyLCBnLCBiKTsKIAogICAgIGZsb2F0IGxpZ2h0bmVzcyA9ICgwLjVm
ICogKG1heCArIG1pbikpICogMTAwLjBmOwogICAgIGZsb2F0IHNhdHVyYXRpb247CkBAIC0xMTUs
NyArMTExLDcgQEAgSFNMQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LCBTUkdC
QTxmbG9hdD4+CiBTUkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFNM
QTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBo
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKLSAgICBhdXRv
IFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBb
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAK
ICAgICBpZiAoIXNhdHVyYXRpb24pIHsKICAgICAgICAgYXV0byBncmV5ID0gbGlnaHRuZXNzIC8g
MTAwLjBmOwpAQCAtMTYyLDE3ICsxNTgsMTggQEAgU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lv
bjxTUkdCQTxmbG9hdD4sIEhTTEE8ZmxvYXQ+CiBIV0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248
SFdCQTxmbG9hdD4sIFNSR0JBPGZsb2F0Pj46OmNvbnZlcnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI3Jn
Yi10by1od2IKLSAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKGNvbG9yKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgp
OworICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUociwg
ZywgYik7CiAgICAgYXV0byB3aGl0ZW5lc3MgPSBtaW4gKiAxMDAuMGY7CiAgICAgYXV0byBibGFj
a25lc3MgPSAoMS4wZiAtIG1heCkgKiAxMDAuMGY7CiAgICAgCi0gICAgcmV0dXJuIHsgaHVlLCB3
aGl0ZW5lc3MsIGJsYWNrbmVzcywgY29sb3IuYWxwaGEgfTsKKyAgICByZXR1cm4geyBodWUsIHdo
aXRlbmVzcywgYmxhY2tuZXNzLCBhbHBoYSB9OwogfQogCiBTUkdCQTxmbG9hdD4gQ29sb3JDb252
ZXJzaW9uPFNSR0JBPGZsb2F0PiwgSFdCQTxmbG9hdD4+Ojpjb252ZXJ0KGNvbnN0IEhXQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9y
LTQvI2h3Yi10by1yZ2IKLSAgICBhdXRvIFtodWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBhbHBo
YV0gPSBjb2xvcjsKKyAgICBhdXRvIFtodWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBhbHBoYV0g
PSBjb2xvci5yZXNvbHZlZCgpOwogCiAgICAgaWYgKHdoaXRlbmVzcyArIGJsYWNrbmVzcyA9PSAx
MDAuMGYpIHsKICAgICAgICAgYXV0byBncmV5ID0gd2hpdGVuZXNzIC8gMTAwLjBmOwpAQCAtMjI1
LDEwICsyMjIsMTIgQEAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBENTBXaGl0ZVZhbHVlc1tdID0g
eyAwLjk2NDIyZiwgCiAKIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4gQ29sb3JDb252ZXJz
aW9uPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4sIExhYjxmbG9hdD4+Ojpjb252ZXJ0KGNv
bnN0IExhYjxmbG9hdD4mIGNvbG9yKQogewotICAgIGZsb2F0IGYxID0gKGNvbG9yLmxpZ2h0bmVz
cyArIDE2LjBmKSAvIDExNi4wZjsKLSAgICBmbG9hdCBmMCA9IGYxICsgKGNvbG9yLmEgLyA1MDAu
MGYpOwotICAgIGZsb2F0IGYyID0gZjEgLSAoY29sb3IuYiAvIDIwMC4wZik7CisgICAgYXV0byBb
bGlnaHRuZXNzLCBhLCBiLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogCisgICAgZmxvYXQg
ZjEgPSAobGlnaHRuZXNzICsgMTYuMGYpIC8gMTE2LjBmOworICAgIGZsb2F0IGYwID0gZjEgKyAo
YSAvIDUwMC4wZik7CisgICAgZmxvYXQgZjIgPSBmMSAtIChiIC8gMjAwLjBmKTsKKwogICAgIGF1
dG8gY29tcHV0ZVhBbmRaID0gW10oZmxvYXQgdCkgewogICAgICAgICBmbG9hdCB0Q3ViZWQgPSB0
ICogdCAqIHQ7CiAgICAgICAgIGlmICh0Q3ViZWQgPiBMQUJlKQpAQCAtMjQ3LDMxICsyNDYsMzMg
QEAgWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiBDb2xvckNvbnZlcnNpb248WFlaQTxmbG9h
CiAgICAgfTsKIAogICAgIGZsb2F0IHggPSBENTBXaGl0ZVZhbHVlc1swXSAqIGNvbXB1dGVYQW5k
WihmMCk7Ci0gICAgZmxvYXQgeSA9IEQ1MFdoaXRlVmFsdWVzWzFdICogY29tcHV0ZVkoY29sb3Iu
bGlnaHRuZXNzKTsKKyAgICBmbG9hdCB5ID0gRDUwV2hpdGVWYWx1ZXNbMV0gKiBjb21wdXRlWShs
aWdodG5lc3MpOwogICAgIGZsb2F0IHogPSBENTBXaGl0ZVZhbHVlc1syXSAqIGNvbXB1dGVYQW5k
WihmMik7CiAKLSAgICByZXR1cm4geyB4LCB5LCB6LCBjb2xvci5hbHBoYSB9OworICAgIHJldHVy
biB7IHgsIHksIHosIGFscGhhIH07CiB9CiAKIExhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPExh
YjxmbG9hdD4sIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+Ojpjb252ZXJ0KGNvbnN0IFhZ
WkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4mIGNvbG9yKQogewotICAgIGZsb2F0IHggPSBjb2xv
ci54IC8gRDUwV2hpdGVWYWx1ZXNbMF07Ci0gICAgZmxvYXQgeSA9IGNvbG9yLnkgLyBENTBXaGl0
ZVZhbHVlc1sxXTsKLSAgICBmbG9hdCB6ID0gY29sb3IueiAvIEQ1MFdoaXRlVmFsdWVzWzJdOwor
ICAgIGF1dG8gW3gsIHksIHosIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAKKyAgICBmbG9h
dCBhZGp1c3RlZFggPSB4IC8gRDUwV2hpdGVWYWx1ZXNbMF07CisgICAgZmxvYXQgYWRqdXN0ZWRZ
ID0geSAvIEQ1MFdoaXRlVmFsdWVzWzFdOworICAgIGZsb2F0IGFkanVzdGVkWiA9IHogLyBENTBX
aGl0ZVZhbHVlc1syXTsKKwogICAgIGF1dG8gZlRyYW5zZm9ybSA9IFtdKGZsb2F0IHZhbHVlKSB7
CiAgICAgICAgIHJldHVybiB2YWx1ZSA+IExBQmUgPyBzdGQ6OmNicnQodmFsdWUpIDogKExBQmsg
KiB2YWx1ZSArIDE2LjBmKSAvIDExNi4wZjsKICAgICB9OwogCi0gICAgZmxvYXQgZjAgPSBmVHJh
bnNmb3JtKHgpOwotICAgIGZsb2F0IGYxID0gZlRyYW5zZm9ybSh5KTsKLSAgICBmbG9hdCBmMiA9
IGZUcmFuc2Zvcm0oeik7CisgICAgZmxvYXQgZjAgPSBmVHJhbnNmb3JtKGFkanVzdGVkWCk7Cisg
ICAgZmxvYXQgZjEgPSBmVHJhbnNmb3JtKGFkanVzdGVkWSk7CisgICAgZmxvYXQgZjIgPSBmVHJh
bnNmb3JtKGFkanVzdGVkWik7CiAKICAgICBmbG9hdCBsaWdodG5lc3MgPSAoMTE2LjBmICogZjEp
IC0gMTYuMGY7CiAgICAgZmxvYXQgYSA9IDUwMC4wZiAqIChmMCAtIGYxKTsKICAgICBmbG9hdCBi
ID0gMjAwLjBmICogKGYxIC0gZjIpOwogCi0gICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBj
b2xvci5hbHBoYSB9OworICAgIHJldHVybiB7IGxpZ2h0bmVzcywgYSwgYiwgYWxwaGEgfTsKIH0K
IAogLy8gTUFSSzogTENIIGNvbnZlcnNpb25zLgpAQCAtMzA4LDkgKzMwOSwxMCBAQCBYWVpBPGZs
b2F0LCBXaGl0ZVBvaW50OjpENjU+IENvbG9yQ29udmVyc2lvbjxYWVpBPGZsb2EKICAgICAgICAg
MS4wMDAwMDAwNTQ2NzI0MTA5MTc3ZiwgIC0wLjA4OTQ4NDE4MjA5NDk2NTc1OTY4NGYsIC0xLjI5
MTQ4NTUzNzg2NDA5MTczOTlmCiAgICAgfTsKIAorICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYiwg
YWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKKwogICAgIC8vIDEuIFRyYW5zZm9ybSBmcm9tIHBy
ZWNlbnRhZ2UgbGlnaHRuZXNzIHRvIHVuaXQgbGlnaHRuZXNzLgotICAgIGF1dG8gY29tcG9uZW50
cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5zdWJzZXQ8MCwgMz4oKTsKLSAgICBjb21wb25l
bnRzWzBdID0gY29tcG9uZW50c1swXSAvIDEwMC4wZjsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHsgbGlnaHRuZXNzIC8gMTAwLjBmLCBhLCBiIH07CiAK
ICAgICAvLyAyLiBUcmFuc2Zvcm0gZnJvbSBMYWItY29vcmRpbmF0ZXMgaW50byBub24tbGluZWFy
IExNUyAiYXBwcm94aW1hdGUgY29uZSByZXNwb25zZXMiLgogICAgIGF1dG8gbm9uTGluZWFyTE1T
ID0gT0tMYWJUb05vbkxpbmVhckxNUy50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhjb21wb25l
bnRzKTsKQEAgLTMyMSw3ICszMjMsNyBAQCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+IENv
bG9yQ29udmVyc2lvbjxYWVpBPGZsb2EKICAgICAvLyA0LiBDb252ZXJ0IHRvIFhZWi4KICAgICBh
dXRvIFt4LCB5LCB6XSA9IExpbmVhckxNU1RvWFlaRDY1LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGxpbmVhckxNUyk7CiAKLSAgICByZXR1cm4geyB4LCB5LCB6LCBjb2xvci5hbHBoYSB9Owor
ICAgIHJldHVybiB7IHgsIHksIHosIGFscGhhIH07CiB9CiAKIE9LTGFiPGZsb2F0PiBDb2xvckNv
bnZlcnNpb248T0tMYWI8ZmxvYXQ+LCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+Pjo6Y29u
dmVydChjb25zdCBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+JiBjb2xvcikKQEAgLTM0NCw4
ICszNDYsMTAgQEAgT0tMYWI8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxPS0xhYjxmbG9hdD4sIFhZ
WkE8ZmxvYXQsCiAgICAgICAgIDAuMDI1OTA0MDM3MWYsICAwLjc4Mjc3MTc2NjJmLCAtMC44MDg2
NzU3NjYwZgogICAgIH07CiAKKyAgICBhdXRvIFt4LCB5LCB6LCBhbHBoYV0gPSBjb2xvci5yZXNv
bHZlZCgpOworCiAgICAgLy8gMS4gQ29udmVydCBYWVogaW50byBMTVMgImFwcHJveGltYXRlIGNv
bmUgcmVzcG9uc2VzIi4KLSAgICBhdXRvIGxpbmVhckxNUyA9IFhZWkQ2NVRvTGluZWFyTE1TLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKS5zdWJzZXQ8
MCwgMz4oKSk7CisgICAgYXV0byBsaW5lYXJMTVMgPSBYWVpENjVUb0xpbmVhckxNUy50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDM+IHsgeCwgeSwgeiB9
KTsKIAogICAgIC8vIDIuIEFwcGx5IG5vbi1saW5lYXJpdHkuCiAgICAgYXV0byBub25MaW5lYXJM
TVMgPSBsaW5lYXJMTVMubWFwKFtdIChmbG9hdCB2KSB7IHJldHVybiBzdGQ6OmNicnQodik7IH0p
OwpAQCAtMzU0LDcgKzM1OCw3IEBAIE9LTGFiPGZsb2F0PiBDb2xvckNvbnZlcnNpb248T0tMYWI8
ZmxvYXQ+LCBYWVpBPGZsb2F0LAogICAgIGF1dG8gW2xpZ2h0bmVzcywgYSwgYl0gPSBOb25MaW5l
YXJMTVNUb09LTGFiLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKG5vbkxpbmVhckxNUyk7CiAK
ICAgICAvLyA0LiBUcmFuc2Zvcm0gbGlnaHRuZXNzIGZyb20gdW5pdCBsaWdodG5lc3MgdG8gcGVy
Y2VudGFnZSBsaWdodG5lc3MuCi0gICAgcmV0dXJuIHsgbGlnaHRuZXNzICogMTAwLjBmLCBhLCBi
LCBjb2xvci5hbHBoYSB9OworICAgIHJldHVybiB7IGxpZ2h0bmVzcyAqIDEwMC4wZiwgYSwgYiwg
YWxwaGEgfTsKIH0KIAogLy8gTUFSSzogT0tMQ0ggY29udmVyc2lvbnMuCkBAIC0zNzEsNTggKzM3
NSw1OCBAQCBPS0xhYjxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPE9LTGFiPGZsb2F0PiwgT0tMQ0hB
PGZsb2EKIAogLy8gTUFSSzogQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHJhdyBjb2xvciBjb21w
b25lbnRzIHdpdGggYXNzb2NpYXRlZCBjb2xvciBzcGFjZXMuCiAKLUNvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JT
cGFjZSBvdXRwdXRDb2xvclNwYWNlKQorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0
QW5kUmVzb2x2ZUNvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFjZSBv
dXRwdXRDb2xvclNwYWNlKQogewogICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1dENv
bG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNwYWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNvbnN0
IGF1dG8mIGlucHV0Q29sb3IpIHsKICAgICAgICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNlKSB7
CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6QTk4UkdCOgotICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKSk7
CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEE5OFJH
QjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMzoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1
dENvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZEE5
OFJHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8
RXh0ZW5kZWRBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkQTk4UkdCPGZsb2F0Pj4oaW5w
dXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRE
aXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENv
bG9yPEV4dGVuZGVkRGlzcGxheVAzPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZERpc3BsYXlQMzxm
bG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6
OkV4dGVuZGVkTGluZWFyU1JHQjoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpKTsK
KyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBj
YXNlIENvbG9yU3BhY2U6OkV4dGVuZGVkUHJvUGhvdG9SR0I6Ci0gICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUHJvUGhvdG9SR0I8ZmxvYXQ+
PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPEV4dGVuZGVkUHJvUGhvdG9SR0I8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZl
ZCgpKTsKICAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpFeHRlbmRlZFJlYzIwMjA6Ci0gICAgICAg
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPEV4dGVuZGVkUmVjMjAy
MDxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5kZWRSZWMyMDIwPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVz
b2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RXh0ZW5kZWRTUkdCOgotICAgICAg
ICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JB
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2
ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6SFNMOgotICAgICAgICAgICAgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxIU0xBPGZsb2F0Pj4oaW5wdXRDb2xvcikp
OworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxIU0xB
PGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFj
ZTo6SFdCOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxIV0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGNvbnZlcnRDb2xvcjxIV0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQo
KSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6TENIOgotICAgICAgICAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMQ0hBPGZs
b2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6
TGFiOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxM
YWI8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoY29udmVydENvbG9yPExhYjxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xv
cjxMaW5lYXJTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBj
YXNlIENvbG9yU3BhY2U6Ok9LTENIOgotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxPS0xDSEE8ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgICAgICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPE9LTENIQTxmbG9hdD4+KGlu
cHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6Ok9LTGFiOgot
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPS0xhYjxm
bG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb252ZXJ0Q29sb3I8T0tMYWI8ZmxvYXQ+PihpbnB1dENvbG9yKS5yZXNvbHZlZCgpKTsKICAg
ICAgICAgY2FzZSBDb2xvclNwYWNlOjpQcm9QaG90b1JHQjoKLSAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8UHJvUGhvdG9SR0I8ZmxvYXQ+PihpbnB1dENv
bG9yKSk7CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9y
PFByb1Bob3RvUkdCPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgICAgIGNh
c2UgQ29sb3JTcGFjZTo6UmVjMjAyMDoKLSAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhjb252ZXJ0Q29sb3I8UmVjMjAyMDxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8UmVjMjAyMDxmbG9hdD4+
KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6
Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JB
PGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwog
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENTA6Ci0gICAgICAgICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4+
KGlucHV0Q29sb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252
ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPj4oaW5wdXRDb2xvcikucmVzb2x2
ZWQoKSk7CiAgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6WFlaX0Q2NToKLSAgICAgICAgICAgIHJl
dHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8WFlaQTxmbG9hdCwgV2hpdGVQb2lu
dDo6RDY1Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+PihpbnB1dENvbG9y
KS5yZXNvbHZlZCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZs
b2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAgICAgfSk7
CiB9CiAKLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xv
clNwYWNlKQorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb252ZXJ0QW5kUmVzb2x2ZUNvbG9y
Q29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBvdXRwdXRDb2xvclNwYWNlKQogewogI2lmIFVTRShDRykKICAgICByZXR1cm4gcGxhdGZvcm1D
b252ZXJ0Q29sb3JDb21wb25lbnRzKGlucHV0Q29sb3JTcGFjZSwgaW5wdXRDb2xvckNvbXBvbmVu
dHMsIG91dHB1dENvbG9yU3BhY2UpOwpAQCAtNDMwLDE5ICs0MzQsMTkgQEAgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBjb252ZXJ0Q29sb3JDb21wb25lbnRzKENvbG9yCiAgICAgcmV0dXJuIGNh
bGxXaXRoQ29sb3JUeXBlKGlucHV0Q29sb3JDb21wb25lbnRzLCBpbnB1dENvbG9yU3BhY2UsIFtv
dXRwdXRDb2xvclNwYWNlXSAoY29uc3QgYXV0byYgaW5wdXRDb2xvcikgewogICAgICAgICBzd2l0
Y2ggKG91dHB1dENvbG9yU3BhY2UucGxhdGZvcm1Db2xvclNwYWNlKCkpIHsKICAgICAgICAgY2Fz
ZSBQbGF0Zm9ybUNvbG9yU3BhY2U6Ok5hbWU6OlNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxm
bG9hdD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9D
T0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICAgICAgY2FzZSBQbGF0Zm9ybUNvbG9yU3BhY2U6
Ok5hbWU6OkxpbmVhclNSR0I6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMaW5lYXJTUkdCQTxmbG9h
dD4+KGlucHV0Q29sb3IpLnJlc29sdmVkKCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCiAgICAgICAgIGNhc2UgUGxhdGZvcm1Db2xvclNw
YWNlOjpOYW1lOjpEaXNwbGF5UDM6Ci0gICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RGlzcGxheVAzPGZsb2F0
Pj4oaW5wdXRDb2xvcikucmVzb2x2ZWQoKSk7CiAjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
Y29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvciku
cmVzb2x2ZWQoKSk7CiAgICAgfSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBlbnVtIGNsYXNzIENvbG9yU3BhY2Ug
OiB1aW50OF90OwogdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dD4gT3V0
cHV0IGNvbnZlcnRDb2xvcihjb25zdCBJbnB1dCYgY29sb3IpOwogCiAvLyBDb252ZXJzaW9uIGZ1
bmN0aW9ucyBmb3IgcmF3IGNvbG9yIGNvbXBvbmVudHMgd2l0aCBhc3NvY2lhdGVkIGNvbG9yIHNw
YWNlcy4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhD
b2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1
dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKTsKLUNvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gY29udmVydENvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0
Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50
cywgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvdXRwdXRDb2xvclNwYWNlKTsKK0NvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gY29udmVydEFuZFJlc29sdmVDb2xvckNvbXBvbmVudHMoQ29s
b3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRD
b2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ugb3V0cHV0Q29sb3JTcGFjZSk7CitDb2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IGNvbnZlcnRBbmRSZXNvbHZlQ29sb3JDb21wb25lbnRzKENvbG9yU3Bh
Y2UgaW5wdXRDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGlucHV0Q29sb3JD
b21wb25lbnRzLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG91dHB1dENvbG9yU3BhY2Up
OwogCiAKIC8vIEFsbCBjb2xvciB0eXBlcywgb3RoZXIgdGhhbiBYWVpBIG9yIHRob3NlIGluaGVy
aXRpbmcgZnJvbSBSR0JUeXBlLCBtdXN0IGltcGxlbWVudApAQCAtNTcsNyArNTcsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZSA9IHYKIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dD4gaW5saW5lIE91dHB1dCBjb252
ZXJ0Q29sb3IoY29uc3QgSW5wdXQmIGNvbG9yKQogewotICAgIHJldHVybiBDb2xvckNvbnZlcnNp
b248T3V0cHV0LCBJbnB1dD46OmNvbnZlcnQoY29sb3IpOworICAgIHJldHVybiBDb2xvckNvbnZl
cnNpb248Q2Fub25pY2FsQ29sb3JUeXBlPE91dHB1dD4sIENhbm9uaWNhbENvbG9yVHlwZTxJbnB1
dD4+Ojpjb252ZXJ0KGNvbG9yKTsKIH0KIAogCkBAIC0yMDgsNyArMjA4LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3V0cHV0LCB0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWU+IHN0CiAKICAgICAgICAg
dXNpbmcgSW5wdXRXaXRoUmVwbGFjZW1lbnQgPSBDb2xvclR5cGVXaXRoUmVwbGFjZW1lbnRDb21w
b25lbnQ8SW5wdXQsIGZsb2F0PjsKICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djxJbnB1dFdpdGhSZXBsYWNlbWVudCwgT3V0cHV0PikKLSAgICAgICAgICAgIHJldHVybiBtYWtl
RnJvbUNvbXBvbmVudHM8SW5wdXRXaXRoUmVwbGFjZW1lbnQ+KGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKS5tYXAoW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdmFsdWUgLyAyNTUu
MGY7IH0pKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8SW5wdXRXaXRo
UmVwbGFjZW1lbnQ+KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpLm1hcChbXSh1
aW50OF90IHZhbHVlKSAtPiBmbG9hdCB7IHJldHVybiB2YWx1ZSAvIDI1NS4wZjsgfSkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91dHB1dD4oY29udmVy
dENvbG9yPElucHV0V2l0aFJlcGxhY2VtZW50Pihjb2xvcikpOwogICAgIH0KQEAgLTIxOSwzMSAr
MjE5LDMxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgSW5wdXQsIHR5cGVu
YW1lPiBzdAogCiAgICAgICAgIHVzaW5nIE91dHB1dFdpdGhSZXBsYWNlbWVudCA9IENvbG9yVHlw
ZVdpdGhSZXBsYWNlbWVudENvbXBvbmVudDxPdXRwdXQsIGZsb2F0PjsKICAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX3NhbWVfdjxPdXRwdXRXaXRoUmVwbGFjZW1lbnQsIElucHV0PikKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8T3V0cHV0Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikubWFwKFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50OF90IHsgcmV0dXJuIHN0ZDo6
Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7IH0pKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8T3V0cHV0Pihhc0NvbG9yQ29tcG9uZW50
cyhjb2xvci5yZXNvbHZlZCgpKS5tYXAoW10oZmxvYXQgdmFsdWUpIC0+IHVpbnQ4X3QgeyByZXR1
cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAqIDI1NS4wZiksIDBsLCAyNTVsKTsgfSkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29udmVydENvbG9yPE91dHB1dD4o
Y29udmVydENvbG9yPE91dHB1dFdpdGhSZXBsYWNlbWVudD4oY29sb3IpKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1
dG8gdG9MaW5lYXJFbmNvZGVkKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpIC0+IHR5cGVuYW1lIENv
bG9yVHlwZTo6TGluZWFyQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBj
b2xvci5yZXNvbHZlZCgpOwogICAgICAgICByZXR1cm4geyBDb2xvclR5cGU6OlRyYW5zZmVyRnVu
Y3Rpb246OnRvTGluZWFyKGMxKSwgQ29sb3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0xpbmVh
cihjMiksIENvbG9yVHlwZTo6VHJhbnNmZXJGdW5jdGlvbjo6dG9MaW5lYXIoYzMpLCBhbHBoYSB9
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIGlubGlu
ZSBjb25zdGV4cHIgYXV0byB0b0dhbW1hRW5jb2RlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAt
PiB0eXBlbmFtZSBDb2xvclR5cGU6OkdhbW1hRW5jb2RlZENvdW50ZXJwYXJ0CiAgICAgewotICAg
ICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICAgICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgQ29s
b3JUeXBlOjpUcmFuc2ZlckZ1bmN0aW9uOjp0b0dhbW1hRW5jb2RlZChjMSksIENvbG9yVHlwZTo6
VHJhbnNmZXJGdW5jdGlvbjo6dG9HYW1tYUVuY29kZWQoYzIpLCBDb2xvclR5cGU6OlRyYW5zZmVy
RnVuY3Rpb246OnRvR2FtbWFFbmNvZGVkKGMzKSwgYWxwaGEgfTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBpbmxpbmUgY29uc3RleHByIGF1dG8gdG9F
eHRlbmRlZChjb25zdCBDb2xvclR5cGUmIGNvbG9yKSAtPiB0eXBlbmFtZSBDb2xvclR5cGU6OkV4
dGVuZGVkQ291bnRlcnBhcnQKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVu
dHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpFeHRlbmRlZENvdW50ZXJwYXJ0Pihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpOworICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPHR5cGVuYW1l
IENvbG9yVHlwZTo6RXh0ZW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVudHMoY29sb3Iu
cmVzb2x2ZWQoKSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIGlubGluZSBjb25zdGV4cHIgYXV0byB0b0JvdW5kZWQoY29uc3QgQ29sb3JUeXBlJiBj
b2xvcikgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpCb3VuZGVkQ291bnRlcnBhcnQKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPHR5cGVu
YW1lIENvbG9yVHlwZTo6Qm91bmRlZENvdW50ZXJwYXJ0Pihhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpOworICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBo
YTx0eXBlbmFtZSBDb2xvclR5cGU6OkJvdW5kZWRDb3VudGVycGFydD4oYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IucmVzb2x2ZWQoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUgY29uc3Rl
eHByIE91dHB1dCBoYW5kbGVSR0JGYW1pbHlDb252ZXJzaW9uKGNvbnN0IElucHV0JiBjb2xvcikK
QEAgLTMxMiw3ICszMTIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIElu
cHV0LCB0eXBlbmFtZT4gc3QKICAgICAgICAgLy8gaGF2ZSBzdWZmaWNpZW50IHRlc3RpbmcgY292
ZXJhZ2UgdG8gbm90aWNlIGFueSBhZHZlcnNlIGVmZmVjdHMuCiAKICAgICAgICAgYXV0byBhcHBs
eU1hdHJpY2VzID0gW10oY29uc3QgSW5wdXQmIGNvbG9yLCBhdXRvLi4uIG1hdHJpY2VzKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxP
dXRwdXQ+KGFwcGx5TWF0cmljZXNUb0NvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvciksIG1hdHJpY2VzLi4uKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25l
bnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxPdXRwdXQ+KGFwcGx5TWF0cmljZXNUb0NvbG9yQ29tcG9u
ZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKSwgbWF0cmljZXMuLi4pKTsK
ICAgICAgICAgfTsKIAogICAgICAgICBpZiBjb25zdGV4cHIgKElucHV0Ojp3aGl0ZVBvaW50ID09
IE91dHB1dDo6d2hpdGVQb2ludCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JJbnRlcnBvbGF0aW9uLmgJKHJldmlzaW9uIDI4NzQ4MikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySW50ZXJwb2xhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdGVtcGxhdGU8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBhbHBoYVByZW11bHRpcGxpY2F0aW9uCiB0eXBlbmFtZSBJbnRlcnBvbGF0aW9u
TWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGludGVycG9sYXRlQ29sb3JDb21wb25lbnRzKElu
dGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNlIGludGVycG9sYXRpb25NZXRob2RDb2xvclNwYWNl
LCB0eXBlbmFtZSBJbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZTo6Q29sb3JUeXBlIGNvbG9y
MSwgZG91YmxlIGNvbG9yMU11bHRpcGxpZXIsIHR5cGVuYW1lIEludGVycG9sYXRpb25NZXRob2RD
b2xvclNwYWNlOjpDb2xvclR5cGUgY29sb3IyLCBkb3VibGUgY29sb3IyTXVsdGlwbGllcikKIHsK
ICAgICAvLyAxLiBBcHBseSBwcmUtaW50ZXJwb2xhdGlvbiB0cmFuc2Zvcm1zIChodWUgZml4dXAg
Zm9yIHBvbGFyIGNvbG9yIHNwYWNlcywgYWxwaGEgcHJlbXVsdGlwbGljYXRpb24gaWYgcmVxdWly
ZWQpLgotICAgIGF1dG8gW25vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMxLCBub3JtYWxpemVkQ29s
b3JDb21wb25lbnRzMl0gPSBwcmVJbnRlcnBvbGF0aW9uTm9ybWFsaXphdGlvbjxhbHBoYVByZW11
bHRpcGxpY2F0aW9uPihpbnRlcnBvbGF0aW9uTWV0aG9kQ29sb3JTcGFjZSwgYXNDb2xvckNvbXBv
bmVudHMoY29sb3IxKSwgYXNDb2xvckNvbXBvbmVudHMoY29sb3IyKSk7CisgICAgYXV0byBbbm9y
bWFsaXplZENvbG9yQ29tcG9uZW50czEsIG5vcm1hbGl6ZWRDb2xvckNvbXBvbmVudHMyXSA9IHBy
ZUludGVycG9sYXRpb25Ob3JtYWxpemF0aW9uPGFscGhhUHJlbXVsdGlwbGljYXRpb24+KGludGVy
cG9sYXRpb25NZXRob2RDb2xvclNwYWNlLCBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcjEucmVzb2x2
ZWQoKSksIGFzQ29sb3JDb21wb25lbnRzKGNvbG9yMi5yZXNvbHZlZCgpKSk7CiAKICAgICAvLyAy
LiBJbnRlcnBvbGF0ZSB1c2luZyB0aGUgbm9ybWFsaXplZCBjb21wb25lbnRzLgogICAgIGF1dG8g
aW50ZXJwb2xhdGVkQ29sb3JDb21wb25lbnRzID0gbWFwQ29sb3JDb21wb25lbnRzKFsmXSAoYXV0
byBjb21wb25lbnRGcm9tQ29sb3IxLCBhdXRvIGNvbXBvbmVudEZyb21Db2xvcjIpIC0+IGZsb2F0
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTHVtaW5hbmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JM
dW1pbmFuY2UuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JMdW1pbmFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBkb3VibGUgcmVsYXRpdmVMdW0K
ICAgICAvLyB0aGlzIGluIENvbG9yQ29udmVyc2lvbi5oIGFzIGEgc2libGluZyBmdW5jdGlvbiB0
byBjb252ZXJ0Q29sb3Igd2hpY2ggY2FuIGdldCBhIGNoYW5uZWwKICAgICAvLyBvZiBhIGNvbG9y
IGluIGFub3RoZXIgc3BhY2UgaW4gdGhpcyBraW5kIG9mIG9wdGltYWwgd2F5LgogCi0gICAgcmV0
dXJuIGNvbnZlcnRDb2xvcjxYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENjU+Pihjb2xvcikueTsK
KyAgICByZXR1cm4gY29udmVydENvbG9yPFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ2NT4+KGNv
bG9yKS5yZXNvbHZlZCgpLnk7CiB9CiAKIGlubGluZSBkb3VibGUgY29udHJhc3RSYXRpbyhkb3Vi
bGUgcmVsYXRpdmVMdW1pbmFuY2VBLCBkb3VibGUgcmVsYXRpdmVMdW1pbmFuY2VCKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1v
ZGVscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsOTMgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitlbnVtIGNsYXNzIFJHQkJvdW5kZWRuZXNzIHsgQm91bmRlZCwgRXh0ZW5kZWQg
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUsIFJHQkJvdW5kZWRuZXNzPiBzdHJ1Y3QgUkdCTW9kZWw7
CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRzOwogdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBDb2xvckNvbXBvbmVudEluZm87Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IEV4dGVuZGVkUkdCTW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTE1vZGVsOwog
dGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIV0JNb2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgTENITW9kZWw7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExhYk1vZGVsOwotdGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSR0JNb2RlbDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgWFlaTW9kZWw7CiAKKy8vIE1BUks6IFJlc29sdmVkL1VucmVzb2x2ZWQgRGVmaW50aXRpb25z
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgQ29sb3JNb2RlbCA9IHR5
cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlOwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgUmVzb2x2ZWRDb2xvclR5cGU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBVbnJlc29sdmVkQ29sb3JUeXBlOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlwZTxDb2xv
clR5cGU+IHJlc29sdmVkQ29sb3IoQ29sb3JUeXBlIGlucHV0KQoreworICAgIHJldHVybiBSZXNv
bHZlZENvbG9yVHlwZTxDb2xvclR5cGU+IHsgaW5wdXQgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgVW5yZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+IHVu
cmVzb2x2ZWRDb2xvcihDb2xvclR5cGUgaW5wdXQpCit7CisgICAgcmV0dXJuIFVucmVzb2x2ZWRD
b2xvclR5cGU8Q29sb3JUeXBlPiB7IGlucHV0IH07Cit9CisKK2lubGluZSBjb25zdGV4cHIgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHJlc29sdmVDb2xvckNvbXBvbmVudHMoY29uc3QgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb2xvckNvbXBvbmVudHMpCit7CisgICAgcmV0dXJu
IGNvbG9yQ29tcG9uZW50czsKK30KKworaW5saW5lIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
ZmxvYXQsIDQ+IHJlc29sdmVDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiYgY29sb3JDb21wb25lbnRzKQoreworICAgIHJldHVybiBjb2xvckNvbXBvbmVudHMu
bWFwKFtdIChmbG9hdCBjb21wb25lbnQpIHsgcmV0dXJuIHN0ZDo6aXNuYW4oY29tcG9uZW50KSA/
IDAuMGYgOiBjb21wb25lbnQ7IH0pOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gc3RydWN0IFJlc29sdmVkQ29sb3JUeXBlIDogRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUs
IHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWw+IHsKKyAgICB1c2luZyBDYW5vbmljYWxUeXBlID0g
Q29sb3JUeXBlOworCisgICAgLy8gQ2FsbGluZyByZXNvbHZlZCgpIG9yIHVucmVzb2x2ZWQoKSBv
biBhIHR5cGUgdGhhdCBpcyBhbHJlYWR5IHJlc29sdmVkIGlzIGEgbm8tb3AsIHNvIHdlIGNhbgor
ICAgIC8vIGp1c3QgcmV0dXJuIG91cnNlbHZlcy4KKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQz4gZnJpZW5kIGNvbnN0ZXhwciBSZXNvbHZlZENvbG9yVHlwZTxDPiByZXNvbHZlZENv
bG9yKEMpOworCisgICAgZXhwbGljaXQgY29uc3RleHByIFJlc29sdmVkQ29sb3JUeXBlKENvbG9y
VHlwZSBjb2xvcikKKyAgICAgICAgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpNb2RlbD4geyByZXNvbHZlKGNvbG9yKSB9CisgICAgeworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lX3Y8dHlwZW5hbWUgQzo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQyByZXNvbHZlKEMgY29sb3IpCisgICAgeworICAgICAgICBh
dXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSByZXNvbHZlQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKEV4cG9zZWRDb2xvclR5cGU8QywgdHlwZW5hbWUgQzo6TW9kZWw+IHsgY29sb3Ig
fSkpOworICAgICAgICByZXR1cm4gQ29sb3JUeXBlIHsgYzEsIGMyLCBjMywgYWxwaGEgfTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIEM6OkNvbXBvbmVudFR5cGUsIHVpbnQ4X3Q+PiogPSBu
dWxscHRyPgorICAgIHN0YXRpYyBjb25zdGV4cHIgQyByZXNvbHZlKEMgY29sb3IpCisgICAgewor
ICAgICAgICByZXR1cm4gY29sb3I7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBzdHJ1Y3QgVW5yZXNvbHZlZENvbG9yVHlwZSA6IEV4cG9zZWRDb2xvclR5cGU8Q29s
b3JUeXBlLCB0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsPiB7CisgICAgdXNpbmcgQ2Fub25pY2Fs
VHlwZSA9IENvbG9yVHlwZTsKKworICAgIC8vIENhbGxpbmcgdW5yZXNvbHZlZCgpIG9uIGEgdHlw
ZSB0aGF0IGlzIGFscmVhZHkgdW5yZXNvbHZlZCBpcyBhIG5vLW9wLCBzbyB3ZSBjYW4KKyAgICAv
LyBqdXN0IHJldHVybiBvdXJzZWx2ZXMuCisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZlZCgp
IGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQz4gZnJpZW5kIGNvbnN0ZXhwciBVbnJlc29sdmVkQ29sb3JUeXBlPEM+IHVucmVzb2x2ZWRD
b2xvcihDKTsKKworICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBVbnJlc29sdmVkQ29sb3JUeXBlKENv
bG9yVHlwZSBjb2xvcikKKyAgICAgICAgOiBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgdHlw
ZW5hbWUgQ29sb3JUeXBlOjpNb2RlbD4geyBjb2xvciB9CisgICAgeworICAgIH0KK307CisKKwor
Ly8gTUFSSzogLSBDb2xvciBNb2RlbCBzdXBwb3J0IHR5cGVzLgorCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBBbHBoYVRyYWl0czxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgdHJhbnNw
YXJlbnQgPSAwLjBmOwogICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgb3BhcXVlID0gMS4wZjsK
QEAgLTY4LDE3ICsxNDQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JDb21w
b25lbnRJbmZvIHsKICAgICBDb2xvckNvbXBvbmVudFR5cGUgdHlwZTsKIH07CiAKLXRlbXBsYXRl
PD4gc3RydWN0IEV4dGVuZGVkUkdCTW9kZWw8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29tcG9uZW50SW5mbyB7
IHsKLSAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6
Ok51bWJlciB9LAotICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5p
dHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9u
ZW50VHlwZTo6TnVtYmVyIH0sCi0gICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29s
b3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfQotICAgIH0gfTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNv
b3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJP
cnRob2dvbmFsOwotfTsKKy8vIE1BUks6IC0gQ29sb3IgTW9kZWwgRGVmaW5pdGl0aW9ucwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzRXh0
ZW5kZWRSR0JNb2RlbCA9IHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWws
IEV4dGVuZGVkUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47Cisv
LyBNQVJLOiBIU0xNb2RlbAogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewog
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+
LCAzPiBjb21wb25lbnRJbmZvIHsgewpAQCAtOTAsOCArMTU4LDIyIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEhTTE1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6Q3lsaW5kcmljYWxQb2xhcjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RydWN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBIU0xNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
PiA6IENvbG9yVHlwZSB7CisgICAgdXNpbmcgQ29sb3JUeXBlOjpodWU7CisgICAgdXNpbmcgQ29s
b3JUeXBlOjpzYXR1cmF0aW9uOworICAgIHVzaW5nIENvbG9yVHlwZTo6bGlnaHRuZXNzOworICAg
IHVzaW5nIENvbG9yVHlwZTo6YWxwaGE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNv
bXBvbmVudHMoY29uc3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIEhTTE1vZGVsPFQ+PiYg
YykKK3sKKyAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5h
bHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBVc2VzSFNMTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBIU0xNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAor
Ly8gTUFSSzogSFdCTW9kZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgSFdCTW9kZWw8ZmxvYXQ+IHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0
PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCAzNjAsIENvbG9yQ29tcG9uZW50
VHlwZTo6QW5nbGUgfSwKQEAgLTEwMiw4ICsxODQsMjIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSFdC
TW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3Rl
bSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVtOjpDeWxpbmRyaWNhbFBvbGFyOwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xv
clR5cGUsIEhXQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29s
b3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6
OndoaXRlbmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmJsYWNrbmVzczsKKyAgICB1c2luZyBD
b2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRz
KGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JUeXBlLCBIV0JNb2RlbDxUPj4mIGMpCit7Cisg
ICAgcmV0dXJuIHsgYy5odWUsIGMud2hpdGVuZXNzLCBjLmJsYWNrbmVzcywgYy5hbHBoYSB9Owor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBV
c2VzSFdCTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBI
V0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKIAorLy8gTUFSSzog
TGFiTW9kZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZsb2F0PiwgMz4gY29t
cG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTExNCw4ICsyMTAs
MjIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29yZGluYXRlU3lzdGVt
OjpSZWN0YW5ndWxhck9ydGhvZ29uYWw7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IHN0cnVjdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwgTGFiTW9kZWw8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4gOiBDb2xvclR5cGUgeworICAgIHVzaW5nIENvbG9y
VHlwZTo6bGlnaHRuZXNzOworICAgIHVzaW5nIENvbG9yVHlwZTo6YTsKKyAgICB1c2luZyBDb2xv
clR5cGU6OmI7CisgICAgdXNpbmcgQ29sb3JUeXBlOjphbHBoYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxU
LCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZSwg
TGFiTW9kZWw8VD4+JiBjKQoreworICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwg
Yy5hbHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25z
dGV4cHIgYm9vbCBVc2VzTGFiTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5
cGU6Ok1vZGVsLCBMYWJNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsK
IAorLy8gTUFSSzogTENITW9kZWwKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+
IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRJbmZvPGZs
b2F0PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAg
LTEyNiw5ICsyMzYsMjMgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29vcmRpbmF0ZVN5c3RlbSA9IENvbG9yU3BhY2VDb29y
ZGluYXRlU3lzdGVtOjpDeWxpbmRyaWNhbFBvbGFyOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIExDSE1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2lu
ZyBDb2xvclR5cGU6OmxpZ2h0bmVzczsKKyAgICB1c2luZyBDb2xvclR5cGU6OmNocm9tYTsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Omh1ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29s
b3JDb21wb25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5
cGU8Q29sb3JUeXBlLCBMQ0hNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy5saWdodG5l
c3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBVc2VzTENITW9kZWwgPSBzdGQ6OmlzX3Nh
bWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBMQ0hNb2RlbDx0eXBlbmFtZSBDb2xvclR5
cGU6OkNvbXBvbmVudFR5cGU+PjsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+
IHsKKy8vIE1BUks6IFJHQk1vZGVsCisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0
LCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjph
cnJheTxDb2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAg
ICAgICB7IDAsIDEsIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCiAgICAgICAgIHsgMCwg
MSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKQEAgLTEzOCw3ICsyNjIsNyBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5hdGVTeXN0ZW06OlJlY3Rhbmd1
bGFyT3J0aG9nb25hbDsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+
IHsKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3QsIFJHQkJvdW5kZWRuZXNzOjpC
b3VuZGVkPiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
SW5mbzx1aW50OF90PiwgMz4gY29tcG9uZW50SW5mbyB7IHsKICAgICAgICAgeyAwLCAyNTUsIENv
bG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCiAgICAgICAgIHsgMCwgMjU1LCBDb2xvckNvbXBv
bmVudFR5cGU6Ok51bWJlciB9LApAQCAtMTQ4LDggKzI3MiwzNSBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBSR0JNb2RlbDx1aW50OF90PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29vcmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dv
bmFsOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHBy
IGJvb2wgVXNlc1JHQk1vZGVsID0gc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpN
b2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj47Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxmbG9hdCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50SW5mbzxmbG9h
dD4sIDM+IGNvbXBvbmVudEluZm8geyB7CisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSwgQ29sb3JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBDb2xvckNvbXBvbmVudFR5cGU6Ok51bWJlciB9LAorICAgICAgICB7IC1zdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0KKyAgICB9IH07
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYXV0byBjb29yZGluYXRlU3lzdGVtID0gQ29sb3JTcGFjZUNvb3JkaW5h
dGVTeXN0ZW06OlJlY3Rhbmd1bGFyT3J0aG9nb25hbDsKK307CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgUkdCQm91bmRlZG5lc3MgYm91bmRlZG5lc3M+IHN0cnVjdCBFeHBvc2VkQ29s
b3JUeXBlPENvbG9yVHlwZSwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRU
eXBlLCBib3VuZGVkbmVzcz4+IDogQ29sb3JUeXBlIHsKKyAgICB1c2luZyBDb2xvclR5cGU6OnJl
ZDsKKyAgICB1c2luZyBDb2xvclR5cGU6OmdyZWVuOworICAgIHVzaW5nIENvbG9yVHlwZTo6Ymx1
ZTsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29sb3JUeXBlLCBSR0JCb3VuZGVkbmVzcyBib3VuZGVkbmVzcz4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBFeHBvc2Vk
Q29sb3JUeXBlPENvbG9yVHlwZSwgUkdCTW9kZWw8VCwgYm91bmRlZG5lc3M+PiYgYykKK3sKKyAg
ICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIFVzZXNSR0JNb2Rl
bCA9CisgICAgICAgc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdC
TW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBSR0JCb3VuZGVkbmVzczo6
Qm91bmRlZD4+CisgICAgfHwgc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2Rl
bCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBSR0JCb3VuZGVk
bmVzczo6RXh0ZW5kZWQ+PjsKKworCisvLyBNQVJLOiBYWVpNb2RlbAorCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBYWVpNb2RlbDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxD
b2xvckNvbXBvbmVudEluZm88ZmxvYXQ+LCAzPiBjb21wb25lbnRJbmZvIHsgewogICAgICAgICB7
IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCksIENvbG9yQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0sCkBA
IC0xNjAsNiArMzExLDQ4IEBAIHRlbXBsYXRlPD4gc3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb2xvclNwYWNlQ29v
cmRpbmF0ZVN5c3RlbTo6UmVjdGFuZ3VsYXJPcnRob2dvbmFsOwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgRXhwb3NlZENvbG9yVHlwZTxDb2xvclR5cGUsIFhZWk1v
ZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+IDogQ29sb3JUeXBlIHsKKyAg
ICB1c2luZyBDb2xvclR5cGU6Ong7CisgICAgdXNpbmcgQ29sb3JUeXBlOjp5OworICAgIHVzaW5n
IENvbG9yVHlwZTo6ejsKKyAgICB1c2luZyBDb2xvclR5cGU6OmFscGhhOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JDb21wb25l
bnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IEV4cG9zZWRDb2xvclR5cGU8Q29sb3JU
eXBlLCBYWVpNb2RlbDxUPj4mIGMpCit7CisgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5h
bHBoYSB9OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4
cHIgYm9vbCBVc2VzWFlaTW9kZWwgPSBzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBYWVpNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PjsKKwor
CisvLyBnZXQ8PiBvdmVybG9hZCAoYWxvbmcgd2l0aCBzdGQ6OnR1cGxlX3NpemUgYW5kIHN0ZDo6
dHVwbGVfZWxlbWVudCBiZWxvdykgdG8gc3VwcG9ydCBkZXN0cnVjdHVyaW5nIG9mIGV4cGxpY2l0
bHkgcmVzb2x2ZWQgYW5kIHVucmVzb2x2ZWQgY29sb3JzLgorCit0ZW1wbGF0ZTxzaXplX3QgSSwg
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlIGdldChjb25zdCBFeHBvc2VkQ29sb3JUeXBlPENvbG9yVHlwZT4mIGNvbG9yKQorewor
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcilbSV07Cit9CisKK30KKworbmFtZXNw
YWNlIHN0ZCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxlX3Np
emU8V2ViQ29yZTo6UmVzb2x2ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4gOiBwdWJsaWMgc3RkOjpp
bnRlZ3JhbF9jb25zdGFudDxzaXplX3QsIDQ+IHsgfTsKKwordGVtcGxhdGU8c2l6ZV90IEksIHR5
cGVuYW1lIENvbG9yVHlwZT4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8SSwgV2ViQ29yZTo6UmVzb2x2
ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSB0eXBl
bmFtZSBXZWJDb3JlOjpSZXNvbHZlZENvbG9yVHlwZTxDb2xvclR5cGU+OjpDb21wb25lbnRUeXBl
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgorY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT4+IDogcHVibGljIHN0ZDo6aW50
ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCA0PiB7IH07CisKK3RlbXBsYXRlPHNpemVfdCBJLCB0eXBl
bmFtZSBDb2xvclR5cGU+CitjbGFzcyB0dXBsZV9lbGVtZW50PEksIFdlYkNvcmU6OlVucmVzb2x2
ZWRDb2xvclR5cGU8Q29sb3JUeXBlPj4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSB0eXBl
bmFtZSBXZWJDb3JlOjpVbnJlc29sdmVkQ29sb3JUeXBlPENvbG9yVHlwZT46OkNvbXBvbmVudFR5
cGU7Cit9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IHN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KTsKIAot
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigi
LCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiksICcgJywgYzEsICcgJywg
YzIsICcgJywgYzMsICcpJyk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlh
bGl6YXRpb24oQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+KSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAn
LCBjMywgIiAvICIsIGFscGhhLCAnKScpOwpAQCAtMzc0LDcgKzM3NCw3IEBAIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBIV0JBPGZsbwogU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29uc3QgTENIQTxmbG9hdD4mIGNvbG9yLCBib29sKQogewogICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8jc2VyaWFsaXppbmctbGFiLWxjaAot
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChhbHBoYSwgMS4wZikpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2goIiwg
YzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJsY2go
IiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CkBAIC0zOTUsNyAr
Mzk1LDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IExD
SEE8ZmxvCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMYWI8ZmxvYXQ+JiBjb2xv
ciwgYm9vbCkKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI3Nl
cmlhbGl6aW5nLWxhYi1sY2gKLSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsK
KyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlm
IChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygibGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgJyknKTsKICAgICByZXR1
cm4gbWFrZVN0cmluZygibGFiKCIsIGMxLCAiJSAiLCBjMiwgJyAnLCBjMywgIiAvICIsIGFscGhh
LCAnKScpOwpAQCAtNDMyLDcgKzQzMiw3IEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUgogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhj
b25zdCBPS0xDSEE8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsKLSAgICBhdXRvIFtjMSwgYzIsIGMz
LCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5y
ZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEuMGYp
KQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsY2goIiwgYzEsICIlICIsIGMyLCAnICcs
IGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJva2xjaCgiLCBjMSwgIiUgIiwgYzIs
ICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgT0tMQ0hBPGYKIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgT0tMYWI8ZmxvYXQ+JiBjb2xvciwgYm9vbCkKIHsK
LSAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtjMSwgYzIs
IGMzLCBhbHBoYV0gPSBjb2xvci5yZXNvbHZlZCgpOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoYWxwaGEsIDEuMGYpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygib2tsYWIo
IiwgYzEsICIlICIsIGMyLCAnICcsIGMzLCAnKScpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCJv
a2xhYigiLCBjMSwgIiUgIiwgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKQEAgLTU0
Myw3ICs1NDMsNyBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90PiBj
b2xvciwgYm9vbCAKICAgICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAg
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAg
IGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgc3dpdGNoIChhbHBo
YSkgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwgcmVk
LCAiLCAiLCBncmVlbiwgIiwgIiwgYmx1ZSwgIiwgMCkiKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4gY29sb3IsIGJvb2wKICAg
ICBpZiAodXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pCiAgICAgICAgIHJldHVybiBzZXJp
YWxpemF0aW9uVXNpbmdDb2xvckZ1bmN0aW9uKGNvbG9yKTsKIAotICAgIGF1dG8gW3JlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKGFscGhhID09IDB4RkYpCiAgICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVu
LCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7CiAgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOwpAQCAtNTcwLDcgKzU3MCw3IEBAIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1aW50OF90PgogICAgIGlmICh1c2VD
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25V
c2luZ0NvbG9yRnVuY3Rpb24oY29sb3IpOwogCi0gICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29s
b3IucmVzb2x2ZWQoKTsKICAgICBpZiAoYWxwaGEgPCAweEZGKQogICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygnIycsIGhleChyZWQsIDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMiksIGhl
eChhbHBoYSwgMikpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhl
eChncmVlbiwgMiksIGhleChibHVlLCAyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDcgKzgwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yU3BhY2VNYXBw
aW5nPFNSR0JBPFQ+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JTcGFjZU1hcHBp
bmc8WFlaQTxULCBXaGl0ZVBvaW50OjpENTA+PiB7IHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xv
clNwYWNlIHsgQ29sb3JTcGFjZTo6WFlaX0Q1MCB9OyB9OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbG9yU3BhY2VNYXBwaW5nPFhZWkE8VCwgV2hpdGVQb2ludDo6RDY1Pj4geyBzdGF0
aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlhZWl9ENjUgfTsgfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JTcGFjZSBDb2xv
clNwYWNlRm9yID0gQ29sb3JTcGFjZU1hcHBpbmc8Q29sb3JUeXBlPjo6Y29sb3JTcGFjZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yU3BhY2UgQ29sb3JTcGFj
ZUZvciA9IENvbG9yU3BhY2VNYXBwaW5nPENhbm9uaWNhbENvbG9yVHlwZTxDb2xvclR5cGU+Pjo6
Y29sb3JTcGFjZTsKIAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiBj
b25zdGV4cHIgZGVjbHR5cGUoYXV0bykgY2FsbFdpdGhDb2xvclR5cGUoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQsIDQ+JiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEZ1bmN0b3Im
JiBmdW5jdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JU
eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVHlwZXMuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCwxNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSwgV2hpdGVQb2ludD4gc3RydWN0IFhZWkE7CiAKIC8vIE1BUks6IE1h
a2UgZnVuY3Rpb25zLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxULCA0PiYgYykKK3RlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGlu
ZSBjb25zdGV4cHIgYm9vbCBIYXNDYW5vbmljYWxUeXBlTWVtYmVyID0gZmFsc2U7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ2Fub25pY2FsVHlwZU1lbWJl
cjxULCBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBUOjpDYW5vbmljYWxUeXBlPj4gPSB0cnVlOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIGJvb2wgaGFzQ29ub25pY2FsVHlwZT4gc3RydWN0
IENhbm9uaWNhbENvbG9yVHlwZUhlbHBlciB7IHVzaW5nIHR5cGUgPSBDb2xvclR5cGU7IH07Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBDYW5vbmljYWxDb2xvclR5cGVIZWxw
ZXI8Q29sb3JUeXBlLCB0cnVlPiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBDb2xvclR5cGU6OkNh
bm9uaWNhbFR5cGU7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gdXNpbmcgQ2Fu
b25pY2FsQ29sb3JUeXBlID0gdHlwZW5hbWUgQ2Fub25pY2FsQ29sb3JUeXBlSGVscGVyPENvbG9y
VHlwZSwgSGFzQ2Fub25pY2FsVHlwZU1lbWJlcjxDb2xvclR5cGU+Pjo6dHlwZTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBtYWtlRnJv
bUNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjKQogewotICAgIHJldHVy
biBDb2xvclR5cGUgeyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07CisgICAgcmV0dXJuIENhbm9u
aWNhbENvbG9yVHlwZTxDb2xvclR5cGU+IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYXV0byBjbGFtcGVkQ29tcG9uZW50KFQgYykgLT4gdHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlCkBAIC05Nyw0NiArMTA1LDUwIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbAogICAgIHJldHVybiB7IGNsYW1w
ZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjb21wb25lbnRzKSwgY2xhbXBlZENvbXBvbmVudDxD
b2xvclR5cGUsIDE+KGNvbXBvbmVudHMpLCBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4o
Y29tcG9uZW50cyksIGNvbXBvbmVudHNbM10gfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50
c0NsYW1waW5nKGNvbnN0IENvbG9yQ29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cykKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gbWFrZUZy
b21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21wb25l
bnRzKQogewogICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVk
Q29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQgYzMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nKFQgYzEsIFQgYzIsIFQgYzMpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxD
b2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAw
PihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1wZWRDb21wb25l
bnQ8Q29sb3JUeXBlLCAyPihjMyksIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT46Om9wYXF1ZSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nKFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
KFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCiB7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JU
eXBlLCAwPihjMSksIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+KGFscGhhKSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQsIDQ+JiBjb21w
b25lbnRzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYXV0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKGNvbnN0IENvbG9y
Q29tcG9uZW50czxULCA0PiYgY29tcG9uZW50cykKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21w
b25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNlcHRBbHBoYTxDb2xvclR5cGU+
KGNvbXBvbmVudHMpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZ0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29u
c3RleHByIGF1dG8gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYShUIGMxLCBU
IGMyLCBUIGMzLCBBbHBoYSBhbHBoYSkKIHsKICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUs
IDA+KGMxKSwgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGMzKSwgYWxwaGEgfSk7CiB9CiAKICNpZiBBU1NFUlRfRU5BQkxF
RAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQg
Y29sb3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBm
bG9hdD4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKENvbG9yVHlw
ZSBjb2xvcikKIHsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFQ6
OkNvbXBvbmVudFR5cGUsIGZsb2F0PikgewotICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAz
OyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tpXSA+
PSBUOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4sICJDb21wb25lbnQgYXQgaW5kZXggJWQg
aXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVtICVmIiwgaSwgIGNvbXBv
bmVudHNbaV0sIFQ6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1pbik7Ci0gICAgICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6TW9kZWw6OmNvbXBvbmVudElu
Zm9baV0ubWF4LCAiQ29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBncmVhdGVyIHRo
YW4gdGhlIGFsbG93ZWQgbWF4aW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6
Y29tcG9uZW50SW5mb1tpXS5tYXgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoY29sb3IuYWxwaGEgPj0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlw
ZT46OnRyYW5zcGFyZW50LCAiQWxwaGEgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dl
ZCBtaW5pbXVtICh0cmFuc3BhcmVudCkgJWYiLCBjb2xvci5hbHBoYSwgQWxwaGFUcmFpdHM8dHlw
ZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKLSAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb2xvci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25l
bnRUeXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxs
b3dlZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVu
YW1lIFQ6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yLnVucmVzb2x2ZWQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVu
dHNbaV0gPj0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mb1tpXS5taW4sICJDb21wb25l
bnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5pbXVt
ICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9b
aV0ubWluKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IENv
bG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm9baV0ubWF4LCAiQ29tcG9uZW50IGF0IGluZGV4
ICVkIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBDb2xvclR5cGU6Ok1vZGVsOjpjb21wb25lbnRJbmZvW2ldLm1heCk7
CiAgICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1szXSA+PSBBbHBoYVRy
YWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFs
cGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJl
bnQpICVmIiwgY29tcG9uZW50c1szXSwgQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29t
cG9uZW50c1szXSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+OjpvcGFxdWUsICJBbHBoYSBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2Vk
IG1heGltdW0gKG9wYXF1ZSkgJWYiLCBjb21wb25lbnRzWzNdLCBBbHBoYVRyYWl0czx0eXBlbmFt
ZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lX3Y8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCB1aW50OF90Pj4qID0gbnVsbHB0cj4K
K2NvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoQ29sb3JUeXBlKQoreworfQorCiAjZWxzZQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQpCkBA
IC0xNDYsNyArMTU4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNz
ZXJ0SW5SYW5nZShUKQogI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZv
aWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHMg
PSBmYWxzZTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0Nv
bnZlcnRpYmxlVG9Db2xvckNvbXBvbmVudHM8VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUoYXNDb2xv
ckNvbXBvbmVudHMoc3RkOjpkZWNsdmFsPFQ+KCkpKT4+ID0gdHJ1ZTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0NvbnZlcnRpYmxlVG9Db2xvckNvbXBvbmVu
dHM8VCwgc3RkOjp2b2lkX3Q8ZGVjbHR5cGUoYXNDb2xvckNvbXBvbmVudHMoc3RkOjpkZWNsdmFs
PFQ+KCkudW5yZXNvbHZlZCgpKSk+PiA9IHRydWU7CiAKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBl
bmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBIYXNDb21wb25lbnRUeXBlTWVtYmVy
ID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFz
Q29tcG9uZW50VHlwZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBUOjpDb21wb25lbnRU
eXBlPj4gPSB0cnVlOwpAQCAtMTY2LDkgKzE3OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFBhcmVu
dD4gc3RydWN0IENvbG9yV2l0aEFscGhhSGVscGVyIAogICAgIC8vIGUuZy4gYXV0byB5ZWxsb3dX
aXRoNTBQZXJjZW50QWxwaGEgPSBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhQnl0ZSgxMjgp
OwogICAgIGNvbnN0ZXhwciBQYXJlbnQgY29sb3JXaXRoQWxwaGFCeXRlKHVpbnQ4X3Qgb3ZlcnJp
ZGVBbHBoYSkgY29uc3QKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
X3Y8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFBhcmVudD4oKS5hbHBoYSksIHVpbnQ4X3Q+LCAiT25s
eSB1aW50OF90IGJhc2VkIGNvbG9yIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIik7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgUGFyZW50OjpDb21wb25lbnRUeXBl
LCB1aW50OF90PiwgIk9ubHkgdWludDhfdCBiYXNlZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVk
LiIpOwogCi0gICAgICAgIGF1dG8gY29weSA9ICpzdGF0aWNfY2FzdDxjb25zdCBQYXJlbnQqPih0
aGlzKTsKKyAgICAgICAgYXV0byBjb3B5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUGFyZW50Kj4odGhp
cyktPnVucmVzb2x2ZWQoKTsKICAgICAgICAgY29weS5hbHBoYSA9IG92ZXJyaWRlQWxwaGE7CiAg
ICAgICAgIHJldHVybiBjb3B5OwogICAgIH0KQEAgLTE3OCw3ICsxOTAsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpdGhBbHBoYUhlbHBlciAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbnZlcnRpYmxl
VG9Db2xvckNvbXBvbmVudHM8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4KIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ29sb3JUeXBlJiBhLCBjb25zdCBDb2xvclR5cGUmIGIpCiB7Ci0g
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwor
ICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhLnVucmVzb2x2ZWQoKSkgPT0gYXNDb2xvckNv
bXBvbmVudHMoYi51bnJlc29sdmVkKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb252ZXJ0aWJsZVRvQ29sb3JDb21wb25l
bnRzPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+CkBAIC0yMDMsNyArMjE1LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0CiAgICAgICAgICwg
Ymx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SW5SYW5nZSgqdGhpcyk7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnN0YXRpY19jYXN0
PGNvbnN0IENvbG9yVHlwZSo+KHRoaXMpKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgUkdCQVR5
cGUoKQpAQCAtMjExLDIxICsyMjMsMTkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBh
dXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8
Y29uc3QgQ29sb3JUeXBlKj4odGhpcykpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqc3RhdGljX2Nhc3Q8Y29uc3QgQ29s
b3JUeXBlKj4odGhpcykpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIHJlZDsKICAgICBUIGdyZWVu
OwogICAgIFQgYmx1ZTsKICAgICBUIGFscGhhOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRCwgdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBNLCB0eXBlbmFtZSBURj4g
Y29uc3RleHByIENvbG9yQ29tcG9uZW50czxULCA0PiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBS
R0JBVHlwZTxULCBELCBDb2xvclR5cGUsIE0sIFRGPiYgYykKLXsKLSAgICByZXR1cm4geyBjLnJl
ZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07Ci19Ci0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRD4KLXN0cnVjdCBCb3VuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwg
RCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+
PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPiwg
UkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJh
bnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgQm91bmRlZEdh
bW1hRW5jb2RlZCA6IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW1tYUVuY29kZWQ8VCwgRD4sIFJH
Qk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUg
VHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKKyAg
ICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkR2FtbWFFbmNvZGVkPFQsIEQ+LCBSR0JNb2Rl
bDxULCBSR0JCb3VuZGVkbmVzczo6Qm91bmRlZD4sIHR5cGVuYW1lIEQ6OnRlbXBsYXRlIFRyYW5z
ZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+Pjo6UkdCQVR5cGU7
CiAKICAgICB1c2luZyBMaW5lYXJDb3VudGVycGFydCA9IEJvdW5kZWRMaW5lYXJFbmNvZGVkPFQs
IEQ+OwogICAgIHVzaW5nIEV4dGVuZGVkQ291bnRlcnBhcnQgPSBFeHRlbmRlZEdhbW1hRW5jb2Rl
ZDxULCBEPjsKQEAgLTIzNCw4ICsyNDQsOCBAQCBzdHJ1Y3QgQm91bmRlZEdhbW1hRW5jb2RlZCA6
IFJHQkFUeXBlPFQsIEQsIEJvdW5kZWRHYW0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQ+Ci1zdHJ1Y3QgQm91bmRlZExpbmVhckVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBC
b3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRlbXBs
YXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OkNsYW1wZWQ+PiB7
Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJH
Qk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5z
ZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBlOworc3RydWN0IEJvdW5kZWRMaW5l
YXJFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgQm91bmRlZExpbmVhckVuY29kZWQ8VCwgRD4sIFJH
Qk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpCb3VuZGVkPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUg
VHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6Q2xhbXBlZD4+IHsKKyAg
ICB1c2luZyBSR0JBVHlwZTxULCBELCBCb3VuZGVkTGluZWFyRW5jb2RlZDxULCBEPiwgUkdCTW9k
ZWw8VCwgUkdCQm91bmRlZG5lc3M6OkJvdW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFu
c2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpDbGFtcGVkPj46OlJHQkFUeXBl
OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGxpbmVhclRvWFlaID0gRDo6bGluZWFyVG9Y
WVo7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHh5elRvTGluZWFyID0gRDo6eHl6VG9MaW5l
YXI7CkBAIC0yNDcsOCArMjU3LDggQEAgc3RydWN0IEJvdW5kZWRMaW5lYXJFbmNvZGVkIDogUkdC
QVR5cGU8VCwgRCwgQm91bmRlZExpCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBEPgotc3RydWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5k
ZWRHYW1tYUVuY29kZWQ8VCwgRD4sIEV4dGVuZGVkUkdCTW9kZWw8VD4sIHR5cGVuYW1lIEQ6OnRl
bXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6OlVuY2xhbXBl
ZD4+IHsKLSAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5jb2RlZDxULCBE
PiwgRXh0ZW5kZWRSR0JNb2RlbDxUPiwgdHlwZW5hbWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5j
dGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6VW5jbGFtcGVkPj46OlJHQkFUeXBlOworc3Ry
dWN0IEV4dGVuZGVkR2FtbWFFbmNvZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRHYW1tYUVu
Y29kZWQ8VCwgRD4sIFJHQk1vZGVsPFQsIFJHQkJvdW5kZWRuZXNzOjpFeHRlbmRlZD4sIHR5cGVu
YW1lIEQ6OnRlbXBsYXRlIFRyYW5zZmVyRnVuY3Rpb248VCwgVHJhbnNmZXJGdW5jdGlvbk1vZGU6
OlVuY2xhbXBlZD4+IHsKKyAgICB1c2luZyBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEdhbW1hRW5j
b2RlZDxULCBEPiwgUkdCTW9kZWw8VCwgUkdCQm91bmRlZG5lc3M6OkV4dGVuZGVkPiwgdHlwZW5h
bWUgRDo6dGVtcGxhdGUgVHJhbnNmZXJGdW5jdGlvbjxULCBUcmFuc2ZlckZ1bmN0aW9uTW9kZTo6
VW5jbGFtcGVkPj46OlJHQkFUeXBlOwogCiAgICAgdXNpbmcgTGluZWFyQ291bnRlcnBhcnQgPSBF
eHRlbmRlZExpbmVhckVuY29kZWQ8VCwgRD47CiAgICAgdXNpbmcgQm91bmRlZENvdW50ZXJwYXJ0
ID0gQm91bmRlZEdhbW1hRW5jb2RlZDxULCBEPjsKQEAgLTI1Niw4ICsyNjYsOCBAQCBzdHJ1Y3Qg
RXh0ZW5kZWRHYW1tYUVuY29kZWQgOiBSR0JBVHlwZTxULCBELCBFeHRlbmRlZEcKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJFbmNv
ZGVkIDogUkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRl
ZFJHQk1vZGVsPFQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRy
YW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7Ci0gICAgdXNpbmcgUkdCQVR5cGU8VCwg
RCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBFeHRlbmRlZFJHQk1vZGVsPFQ+LCB0eXBl
bmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2Rl
OjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CitzdHJ1Y3QgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkIDog
UkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBS
R0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1
bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+PiB7CisgICAgdXNpbmcg
UkdCQVR5cGU8VCwgRCwgRXh0ZW5kZWRMaW5lYXJFbmNvZGVkPFQsIEQ+LCBSR0JNb2RlbDxULCBS
R0JCb3VuZGVkbmVzczo6RXh0ZW5kZWQ+LCB0eXBlbmFtZSBEOjp0ZW1wbGF0ZSBUcmFuc2ZlckZ1
bmN0aW9uPFQsIFRyYW5zZmVyRnVuY3Rpb25Nb2RlOjpVbmNsYW1wZWQ+Pjo6UkdCQVR5cGU7CiAK
ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gbGluZWFyVG9YWVogPSBEOjpsaW5lYXJUb1hZWjsK
ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geHl6VG9MaW5lYXIgPSBEOjp4eXpUb0xpbmVhcjsK
QEAgLTQzNCwxNyArNDQ0LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBD
b2xvcldpdGhBbHBoYUhlbHBlcgogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byBy
ZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29u
c3RleHByIGF1dG8gdW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigq
dGhpcyk7IH0KKworcHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBU
IGI7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBD
b2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGFiPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9OwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0xhYiA9
IHN0ZDo6aXNfc2FtZV92PExhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBD
b2xvclR5cGU+OwogCiAvLyBNQVJLOiAtIExDSEEgQ29sb3IgVHlwZS4KQEAgLTQ2OSwxNyArNDc4
LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JXaXRoQWxwaGFI
ZWxwZQogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0
IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5y
ZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJv
dGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgY2hyb21hOwogICAgIFQgaHVlOwogICAg
IFQgYWxwaGE7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21w
b25lbnRzPFQsIDQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExDSEE8VD4mIGMpCi17Ci0gICAg
cmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0xDSEEg
PSBzdGQ6OmlzX3NhbWVfdjxMQ0hBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4s
IENvbG9yVHlwZT47CiAKIC8vIE1BUks6IC0gT0tMYWIgQ29sb3IgVHlwZS4KQEAgLTUwNCwxNyAr
NTEyLDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPS0xhYiA6IENvbG9yV2l0aEFs
cGhhSGVscAogICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8g
dW5yZXNvbHZlZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKwor
cHJvdGVjdGVkOgogICAgIFQgbGlnaHRuZXNzOwogICAgIFQgYTsKICAgICBUIGI7CiAgICAgVCBh
bHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMYWI8VD4mIGMpCi17Ci0gICAgcmV0
dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzT0tMYWIgPSBzdGQ6Omlz
X3NhbWVfdjxPS0xhYjx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+LCBDb2xvclR5
cGU+OwogCiAvLyBNQVJLOiAtIE9LTENIQSBDb2xvciBUeXBlLgpAQCAtNTM5LDE3ICs1NDYsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9LTENIQSA6IENvbG9yV2l0aEFscGhhSGVs
CiAgICAgewogICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gcmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29s
dmVkKCkgY29uc3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0
ZWQ6CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBjaHJvbWE7CiAgICAgVCBodWU7CiAgICAgVCBh
bHBoYTsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgT0tMQ0hBPFQ+JiBjKQotewotICAgIHJl
dHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSXNPS0xDSEEg
PSBzdGQ6OmlzX3NhbWVfdjxPS0xDSEE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
PiwgQ29sb3JUeXBlPjsKIAogCkBAIC01NzUsMTcgKzU4MSwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSFNMQSA6IENvbG9yV2l0aEFscGhhSGVscGUKICAgICB7CiAgICAgfQogCisg
ICAgY29uc3RleHByIGF1dG8gcmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiByZXNvbHZlZENvbG9y
KCp0aGlzKTsgfQorICAgIGNvbnN0ZXhwciBhdXRvIHVucmVzb2x2ZWQoKSBjb25zdCB7IHJldHVy
biB1bnJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisKK3Byb3RlY3RlZDoKICAgICBUIGh1ZTsKICAg
ICBUIHNhdHVyYXRpb247CiAgICAgVCBsaWdodG5lc3M7CiAgICAgVCBhbHBoYTsKIH07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwgND4gYXNDb2xv
ckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjLmh1ZSwgYy5z
YXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+IGlubGluZSBjb25zdGV4cHIgYm9vbCBJc0hTTEEgPSBzdGQ6OmlzX3NhbWVf
djxIU0xBPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4sIENvbG9yVHlwZT47CiAK
IC8vIE1BUks6IC0gSFdCQSBDb2xvciBUeXBlLgpAQCAtNjEwLDE3ICs2MTUsMTYgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhXQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBlCiAgICAgewog
ICAgIH0KIAorICAgIGNvbnN0ZXhwciBhdXRvIHJlc29sdmVkKCkgY29uc3QgeyByZXR1cm4gcmVz
b2x2ZWRDb2xvcigqdGhpcyk7IH0KKyAgICBjb25zdGV4cHIgYXV0byB1bnJlc29sdmVkKCkgY29u
c3QgeyByZXR1cm4gdW5yZXNvbHZlZENvbG9yKCp0aGlzKTsgfQorCitwcm90ZWN0ZWQ6CiAgICAg
VCBodWU7CiAgICAgVCB3aGl0ZW5lc3M7CiAgICAgVCBibGFja25lc3M7CiAgICAgVCBhbHBoYTsK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VCwg
ND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFdCQTxUPiYgYykKLXsKLSAgICByZXR1cm4geyBj
Lmh1ZSwgYy53aGl0ZW5lc3MsIGMuYmxhY2tuZXNzLCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzSFdCQSA9IHN0ZDo6
aXNfc2FtZV92PEhXQkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPiwgQ29sb3JU
eXBlPjsKIAogLy8gTUFSSzogLSBYWVogQ29sb3IgVHlwZS4KQEAgLTY0NSwxNyArNjQ5LDE2IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIFdoaXRlUG9pbnQgVz4gc3RydWN0IFhZWkEgOiBDb2xvcgog
ICAgIHsKICAgICB9CiAKKyAgICBjb25zdGV4cHIgYXV0byByZXNvbHZlZCgpIGNvbnN0IHsgcmV0
dXJuIHJlc29sdmVkQ29sb3IoKnRoaXMpOyB9CisgICAgY29uc3RleHByIGF1dG8gdW5yZXNvbHZl
ZCgpIGNvbnN0IHsgcmV0dXJuIHVucmVzb2x2ZWRDb2xvcigqdGhpcyk7IH0KKworcHJvdGVjdGVk
OgogICAgIFQgeDsKICAgICBUIHk7CiAgICAgVCB6OwogICAgIFQgYWxwaGE7CiB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
VCwgND4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgWFlaQTxULCBXPiYgYykKLXsKLSAgICByZXR1
cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gaW5saW5lIGNvbnN0ZXhwciBib29sIElzWFlaQSA9IHN0ZDo6aXNfc2FtZV92PFhZ
WkE8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlLCBDb2xvclR5cGU6OndoaXRlUG9p
bnQ+LCBDb2xvclR5cGU+OwogCiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpAQCAtNjY4LDExICs2
NzEsMTYgQEAgc3RydWN0IFJHQkEgewogICAgIHsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgZXhw
bGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAgICBjb25zdGV4cHIgZXhwbGljaXQg
UkdCQShSZXNvbHZlZENvbG9yVHlwZTxTUkdCQTx1aW50OF90Pj4gY29sb3IpCiAgICAgICAgIDog
dmFsdWUgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29sb3IucmVkIDw8IDI0IHwgY29sb3IuZ3Jl
ZW4gPDwgMTYgfCBjb2xvci5ibHVlIDw8IDggfCBjb2xvci5hbHBoYSkgfQogICAgIHsKICAgICB9
CiAKKyAgICBjb25zdGV4cHIgZXhwbGljaXQgUkdCQShTUkdCQTx1aW50OF90PiBjb2xvcikKKyAg
ICAgICAgOiBSR0JBIHsgY29sb3IucmVzb2x2ZWQoKSB9CisgICAgeworICAgIH0KKwogICAgIHVp
bnQzMl90IHZhbHVlOwogfTsKIApAQCAtNjgyLDggKzY5MCwxMyBAQCBzdHJ1Y3QgQVJHQiB7CiAg
ICAgewogICAgIH0KIAotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yKQorICAgIGNvbnN0ZXhwciBleHBsaWNpdCBBUkdCKFJlc29sdmVkQ29sb3JUeXBlPFNS
R0JBPHVpbnQ4X3Q+PiBjb2xvcikKICAgICAgICAgOiB2YWx1ZSB7IHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihjb2xvci5hbHBoYSA8PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9yLmdyZWVuIDw8
IDggfCBjb2xvci5ibHVlKSB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhwciBleHBsaWNp
dCBBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgICAgICA6IEFSR0IgeyBjb2xvci5yZXNv
bHZlZCgpIH0KICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODc0ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNS
R0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9Owog
fQogCiBTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gY29s
b3I7CiAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JH
QkE8ZmxvYXQ+PihyIC8gYSwgZyAvIGEsIGIgLyBhLCBhKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgU1JH
QkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yCiAKIFNS
R0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCkBAIC01NCw3ICs1NCw3IEBAIFNSR0JBPHVpbnQ4
X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjbwogCiBTUkdCQTx1aW50
OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
cmVzb2x2ZWQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsK
ICAgICBpZiAoYSA9PSAyNTUpCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDE2
X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aQogCiBTUkdCQTx1aW50OF90PiB1bnBy
ZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwg
YV0gPSBjb2xvcjsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAg
ICAgaWYgKCFhIHx8IGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgcmV0dXJu
IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVu
cHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMSArNDYsMjEgQEAgdWlu
dDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlm
aW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGF1dG8gY29sb3JC
eU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3Im
Jik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBj
b2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlk
ZUFscGhhKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGNvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGF1dG8gY29sb3JXaXRoT3ZlcnJpZGRlbkFscGhh
KGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYXV0byBpbnZlcnRlZENvbG9yV2l0
aE92ZXJyaWRkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEp
OwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBhdXRvIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0hT
TE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29u
c3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0V4dGVuZGVkUkdC
TW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25z
dCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3Rl
eHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzSFdCTW9kZWw8Q29sb3JUeXBl
Pj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsK
IHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBYWVpB
PGZsb2F0LCBXPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVsPENv
bG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+KiA9IG51bGxwdHI+IGNvbnN0ZXhw
ciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc1JHQk1vZGVsPENvbG9yVHlwZT4g
fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHBy
IGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JUeXBlPj4q
ID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2Vz
SFdCTW9kZWw8Q29sb3JUeXBlPj4qID0gbnVsbHB0cj4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShj
b25zdCBDb2xvclR5cGUmKTsKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYpOwogCkBAIC05MywzNSArOTMsMzUgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4oZmxvCiAgICAg
cmV0dXJuIGNsYW1wZWRBbHBoYSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25B
bHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gYXV0byBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwg
RnVuY3RvciYmIGZ1bmN0b3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpOworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yLnJlc29sdmVkKCkpOwogICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CiAgICAgY29weVsw
XSA9IHN0ZDo6aW52b2tlKGZ1bmN0b3IsIGNvbXBvbmVudHNbMF0pOwogICAgIGNvcHlbMV0gPSBz
dGQ6Omludm9rZShmdW5jdG9yLCBjb21wb25lbnRzWzFdKTsKICAgICBjb3B5WzJdID0gc3RkOjpp
bnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBjb21wb25lbnRzWzJdKTsKLSAg
ICByZXR1cm4geyBjb3B5WzBdLCBjb3B5WzFdLCBjb3B5WzJdLCBjb3B5WzNdIH07CisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGRl
bkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8gY29sb3JXaXRoT3ZlcnJp
ZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29s
dmVkKCk7CiAgICAgY29weS5hbHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVybiBjb3B5Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVy
cmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBjb2xvcldpdGhPdmVycmlkZGVuQWxw
aGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBh
dXRvIGNvcHkgPSBjb2xvcjsKKyAgICBhdXRvIGNvcHkgPSBjb2xvci51bnJlc29sdmVkKCk7CiAg
ICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3Zl
cnJpZGVBbHBoYSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGF1dG8g
aW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwg
dWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpN
b2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhj
b2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcgogICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZGVu
QWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gYXV0byBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRkZW5B
bHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAg
IHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKIAotICAgIGF1
dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvbXBv
bmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5yZXNvbHZlZCgpKTsKICAgICBhdXRvIGNv
cHkgPSBjb21wb25lbnRzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkK
QEAgLTE0NywxOSArMTQ3LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JU
eXBlIGludmVydGVkQ29sb3JXaQogCiB0ZW1wbGF0ZTxXaGl0ZVBvaW50IFc+IGNvbnN0ZXhwciBi
b29sIGlzQmxhY2soY29uc3QgWFlaQTxmbG9hdCwgVz4mIGNvbG9yKQogewotICAgIHJldHVybiBj
b2xvci55ID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7
CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4g
cmVzb2x2ZWRDb2xvci55ID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0
czxmbG9hdD46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNMYWJNb2RlbDxDb2xvclR5cGU+IHx8IFVzZXNMQ0hN
b2RlbDxDb2xvclR5cGU+IHx8IFVzZXNIU0xNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIg
Ym9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9y
LmxpZ2h0bmVzcyA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3Bh
cXVlOworICAgIGF1dG8gcmVzb2x2ZWRDb2xvciA9IGNvbG9yLnJlc29sdmVkKCk7CisgICAgcmV0
dXJuIHJlc29sdmVkQ29sb3IubGlnaHRuZXNzID09IDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9
PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+
fHwgVXNlc0V4dGVuZGVkUkdCTW9kZWw8Q29sb3JUeXBlPj4qPgordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5
cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7
Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7CisgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gY29sb3IucmVzb2x2ZWQoKTsKICAgICBjb25zdGV4cHIgYXV0byBjb21w
b25lbnRJbmZvID0gQ29sb3JUeXBlOjpNb2RlbDo6Y29tcG9uZW50SW5mbzsKICAgICByZXR1cm4g
YzEgPT0gY29tcG9uZW50SW5mb1swXS5taW4gJiYgYzIgPT0gY29tcG9uZW50SW5mb1sxXS5taW4g
JiYgYzMgPT0gY29tcG9uZW50SW5mb1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQpAQCAtMTY3LDI0ICsx
NjksMjcgQEAgY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQog
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVz
ZXNIV0JNb2RlbDxDb2xvclR5cGU+Pio+CiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmJsYWNrbmVzcyA9PSAxMDAgJiYg
Y29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7CisgICAgYXV0byByZXNv
bHZlZENvbG9yID0gY29sb3IucmVzb2x2ZWQoKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5i
bGFja25lc3MgPT0gMTAwICYmIHJlc29sdmVkQ29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8Zmxv
YXQ+OjpvcGFxdWU7CiB9CiAKIHRlbXBsYXRlPFdoaXRlUG9pbnQgVz4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBYWVpBPGZsb2F0LCBXPiYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9y
LnkgPT0gMSAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAg
ICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNv
bHZlZENvbG9yLnkgPT0gMSAmJiByZXNvbHZlZENvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZs
b2F0Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmX3Q8VXNlc0xhYk1vZGVsPENvbG9yVHlwZT4gfHwgVXNlc0xDSE1vZGVs
PENvbG9yVHlwZT4gfHwgVXNlc0hTTE1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29s
IGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3IubGln
aHRuZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1
ZTsKKyAgICBhdXRvIHJlc29sdmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVy
biByZXNvbHZlZENvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9
PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PFVzZXNSR0JNb2RlbDxDb2xvclR5cGU+
IHx8IFVzZXNFeHRlbmRlZFJHQk1vZGVsPENvbG9yVHlwZT4+Kj4KK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxVc2VzUkdCTW9kZWw8Q29sb3JU
eXBlPj4qPgogY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQog
ewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOworICAgIGF1dG8gW2MxLCBj
MiwgYzMsIGFscGhhXSA9IGNvbG9yLnJlc29sdmVkKCk7CiAgICAgY29uc3RleHByIGF1dG8gY29t
cG9uZW50SW5mbyA9IENvbG9yVHlwZTo6TW9kZWw6OmNvbXBvbmVudEluZm87CiAgICAgcmV0dXJu
IGMxID09IGNvbXBvbmVudEluZm9bMF0ubWF4ICYmIGMyID09IGNvbXBvbmVudEluZm9bMV0ubWF4
ICYmIGMzID09IGNvbXBvbmVudEluZm9bMl0ubWF4ICYmIGFscGhhID09IEFscGhhVHJhaXRzPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KQEAgLTE5Miw3ICsx
OTcsOCBAQCBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8VXNl
c0hXQk1vZGVsPENvbG9yVHlwZT4+Kj4KIGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29s
b3JUeXBlJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3Iud2hpdGVuZXNzID09IDEwMCAmJiBj
b2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKKyAgICBhdXRvIHJlc29s
dmVkQ29sb3IgPSBjb2xvci5yZXNvbHZlZCgpOworICAgIHJldHVybiByZXNvbHZlZENvbG9yLndo
aXRlbmVzcyA9PSAxMDAgJiYgcmVzb2x2ZWRDb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9h
dD46Om9wYXF1ZTsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVp
bnQxNl90IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeyAocHVibGlj
KQogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBw
aXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KTsKKyAgICAgICAgYXV0
byBwaXhlbCA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqZGVzdCB9KS5yZXNvbHZlZCgp
OwogCiAgICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuYWxwaGEpIHsKICAgICAgICAgICAg
IHNldFBpeGVsKGRlc3QsIHIsIGcsIGIsIGEpOwpAQCAtMTYwLDcgKzE2MCw3IEBAIGNsYXNzIElt
YWdlQmFja2luZ1N0b3JlIHsgKHB1YmxpYykKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9w
cmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxvb3Jp
bmcocGl4ZWwpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxvb3JpbmcocGl4
ZWwpLnJlc29sdmVkKCk7CiAKICAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjg3NDgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBDb2xvCiB7CiAg
ICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNv
bHZlZCgpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9u
LmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAg
LTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1
ZShjb25zdCBDb2xvciYKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b0NvbG9yVHlwZUxvc3N5PFNS
R0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmlt
YXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIp
LCBAKGEpXV07CiB9CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjwKICAgICAgICAgcmV0dXJuOwogCiAgICAg
W3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNl
dFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsKLSAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b0NvbG9yVHlw
ZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgIHJldHVybiBAW0Ao
ciksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbldpbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcgogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29tcG9uZW50cyA9IHZh
bHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVl
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBDR0Zs
b2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRz
LmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNl
dEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CkBAIC00MjMsNyArNDIzLDcg
QEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6
CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
YXV0byBjb21wb25lbnRzID0gdmFsdWUudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4o
KS5yZXNvbHZlZCgpOwogICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBv
bmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJl
dGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEp
KTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQo
KSk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPFdlCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVB
cnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNp
emUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWVb
aV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IHZh
bHVlW2ldLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAg
ICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwg
Y29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAgIFJldGFpblB0cjxD
QUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICAg
ICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NyArNzYsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBzcmNDciwgY2Fp
cm9fdCogZHMKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
dm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIAogc3RhdGljIHZvaWQgYWRkQ29sb3JTdG9w
UkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50LCBHcmFkaWVudENvbG9yU3RvcCBzdG9wLCBm
bG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNhaXJv
X3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcs
IGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1
Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShjYWlyb19wYXR0
ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGds
b2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29s
b3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgY2Fpcm9fbWVzaF9w
YXR0ZXJuX3NldF9jb3JuZXJfY29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcsIGIsIGEgKiBn
bG9iYWxBbHBoYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMyw5IEBAIHZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbgogICAgICAgICB1
bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsg
c3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbG9naWNhbFNpemUoKS53
aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0g
ICAgICAgICAgICBhdXRvIHBpeGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGllZChhc1NSR0JB
KFBhY2tlZENvbG9yOjpBUkdCIHsgKnBpeGVsIH0pKTsKLSAgICAgICAgICAgIHBpeGVsQ29tcG9u
ZW50cyA9IHsgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLnJlZF0sIGxvb2tVcFRhYmxlW3Bp
eGVsQ29tcG9uZW50cy5ncmVlbl0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ibHVlXSwg
cGl4ZWxDb21wb25lbnRzLmFscGhhIH07Ci0gICAgICAgICAgICAqcGl4ZWwgPSBQYWNrZWRDb2xv
cjo6QVJHQiB7IHByZW11bHRpcGxpZWRDZWlsaW5nKHBpeGVsQ29tcG9uZW50cykgfS52YWx1ZTsK
KyAgICAgICAgICAgIGF1dG8gcGl4ZWxDb21wb25lbnRzID0gdW5wcmVtdWx0aXBsaWVkKGFzU1JH
QkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqcGl4ZWwgfSkpLnJlc29sdmVkKCk7CisgICAgICAgICAg
ICBhdXRvIHRyYW5zZm9ybWVkUGl4ZWxDb21wb25lbnRzID0gU1JHQkE8dWludDhfdD4geyBsb29r
VXBUYWJsZVtwaXhlbENvbXBvbmVudHMucmVkXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRz
LmdyZWVuXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLmJsdWVdLCBwaXhlbENvbXBvbmVu
dHMuYWxwaGEgfTsKKyAgICAgICAgICAgICpwaXhlbCA9IFBhY2tlZENvbG9yOjpBUkdCIHsgcHJl
bXVsdGlwbGllZENlaWxpbmcodHJhbnNmb3JtZWRQaXhlbENvbXBvbmVudHMpIH0udmFsdWU7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZSht
X3N1cmZhY2UuZ2V0KCksIDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUo
KS5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NywxMiAr
MTQ3LDEyIEBAIHN0YXRpYyBzdGQ6OnBhaXI8Q0dDb2xvclNwYWNlUmVmLCBDb2xvckNvbXBvbmVu
dHM8ZmxvYQogICAgIGlmICghY2dDb2xvclNwYWNlKSB7CiAjaWYgSEFWRShDT1JFX0dSQVBISUNT
X0VYVEVOREVEX1NSR0JfQ09MT1JfU1BBQ0UpCiAgICAgICAgIGF1dG8gY29tcG9uZW50c0NvbnZl
cnRlZFRvRXh0ZW5kZWRTUkdCQSA9IGNhbGxXaXRoQ29sb3JUeXBlKGNvbXBvbmVudHMsIGNvbG9y
U3BhY2UsIFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuIGFzQ29s
b3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4oY29sb3IpKTsK
KyAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8RXh0ZW5k
ZWRTUkdCQTxmbG9hdD4+KGNvbG9yKS5yZXNvbHZlZCgpKTsKICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybiB7IGV4dGVuZGVkU1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50c0NvbnZlcnRl
ZFRvRXh0ZW5kZWRTUkdCQSB9OwogI2Vsc2UKICAgICAgICAgYXV0byBjb21wb25lbnRzQ29udmVy
dGVkVG9TUkdCQSA9IGNhbGxXaXRoQ29sb3JUeXBlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UsIFtd
IChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbG9yKSk7CisgICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29sb3IpLnJl
c29sdmVkKCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHsgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwgY29tcG9uZW50c0NvbnZlcnRlZFRvU1JHQkEgfTsKICNlbmRpZgpAQCAtMTYzLDcgKzE2
Myw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8Q0dDb2xvclNwYWNlUmVmLCBDb2xvckNvbXBvbmVudHM8
ZmxvYQogCiBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNyZWF0ZUNHQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29s
b3IuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21w
b25lbnRzXSA9IGNvbG9yLmNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwog
ICAgIGF1dG8gW2NnQ29sb3JTcGFjZSwgY2dDb21wYXRpYmxlQ29tcG9uZW50c10gPSBjb252ZXJ0
VG9DR0NvbXBhdGlibGVDb21wb25lbnRzKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOwogICAgIAog
ICAgIGF1dG8gW2MxLCBjMiwgYzMsIGM0XSA9IGNnQ29tcGF0aWJsZUNvbXBvbmVudHM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50UmVuZGVyZXJDRy5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3Miw4ICs0NzIsNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRp
ZW50UmVuZGVyZXJDRzo6bWFrZUcKICAgICAvLyBleHRlbmRlZCBzUkdCIGZvciBhbGwgZ3JhZGll
bnRzLgogICAgIGlmIChoYXNPbmx5Qm91bmRlZFNSR0JDb2xvclN0b3BzKHN0b3BzKSkgewogICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBzdG9wcykgewotICAgICAgICAgICAgYXV0byBb
Y29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBzdG9wLmNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCk7Ci0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAg
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxT
UkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50cy51
bmNoZWNrZWRBcHBlbmQocik7CiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5jaGVja2Vk
QXBwZW5kKGcpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFwcGVuZChi
KTsKQEAgLTQ4OCw5ICs0ODcsOSBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRp
ZW50UmVuZGVyZXJDRzo6bWFrZUcKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBz
dG9wcykgewogI2lmIEhBVkUoQ09SRV9HUkFQSElDU19FWFRFTkRFRF9TUkdCX0NPTE9SX1NQQUNF
KQotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8RXh0ZW5kZWRTUkdCQTxmbG9hdD4+KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxFeHRlbmRlZFNSR0JBPGZsb2F0Pj4o
KS5yZXNvbHZlZCgpOwogI2Vsc2UKLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3Rv
cC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKKyAgICAgICAgICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0
Pj4oKS5yZXNvbHZlZCgpOwogI2VuZGlmCiAgICAgICAgICAgICBjb2xvckNvbXBvbmVudHMudW5j
aGVja2VkQXBwZW5kKHIpOwogICAgICAgICAgICAgY29sb3JDb21wb25lbnRzLnVuY2hlY2tlZEFw
cGVuZChnKTsKQEAgLTU0Niw3ICs1NDUsNyBAQCB2b2lkIEdyYWRpZW50UmVuZGVyZXJDRzo6U2hh
ZGluZzo6c2hhZGluZ0Z1bmN0aW9uKHZvaWQKICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPElu
dGVycG9sYXRpb25TcGFjZUNvbG9yVHlwZT4oc3RvcDEuY29sb3JDb21wb25lbnRzKSwgb2Zmc2V0
KTsKIAogICAgIC8vIDQuIENvbnZlcnQgdG8gdGhlIG91dHB1dCBjb2xvciBzcGFjZS4KLSAgICBh
dXRvIGludGVycG9sYXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZSA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbnZlcnRDb2xvcjxPdXRwdXRTcGFjZUNvbG9yVHlwZT4oaW50ZXJwb2xhdGVkQ29s
b3IpKTsKKyAgICBhdXRvIGludGVycG9sYXRlZENvbG9yQ29udmVydGVkVG9PdXRwdXRTcGFjZSA9
IGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxPdXRwdXRTcGFjZUNvbG9yVHlwZT4oaW50
ZXJwb2xhdGVkQ29sb3IpLnJlc29sdmVkKCkpOwogCiAgICAgLy8gNS4gV3JpdGUgY29sb3IgY29t
cG9uZW50cyB0byAnb3V0JyBwb2ludGVyLgogICAgIGZvciAoc2l6ZV90IGNvbXBvbmVudEluZGV4
ID0gMDsgY29tcG9uZW50SW5kZXggPCBpbnRlcnBvbGF0ZWRDb2xvckNvbnZlcnRlZFRvT3V0cHV0
U3BhY2Uuc2l6ZSgpOyArK2NvbXBvbmVudEluZGV4KQpAQCAtNTYwLDcgKzU1OSw3IEBAIEdyYWRp
ZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW5kZXJlckNHOjptYWtlUwogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kLmNvbG9y
U3BhY2UsCiAgICAgICAgICAgICAgICAgWyZdIChhdXRvJiBjb2xvclNwYWNlKSAtPiBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IHsKICAgICAgICAgICAgICAgICAgICAgdXNpbmcgQ29sb3JUeXBl
ID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoY29sb3JTcGFjZSk+
OjpDb2xvclR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhjb2xvci50ZW1wbGF0ZSB0b0NvbG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb2xvci50ZW1wbGF0ZSB0b0Nv
bG9yVHlwZUxvc3N5PENvbG9yVHlwZT4oKS5yZXNvbHZlZCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICApOwogICAgICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGln
aHRpbmdORU9OLmgJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEsNyArMTExLDcgQEAgaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eU5lb24oY29uc3QgTGlnaHRpCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAg
ICAgZmxvYXRBcmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgYXV0byBjb2xvciA9IG1fbGln
aHRpbmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbG9yID0gbV9s
aWdodGluZ0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKIAogICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yUmVkID0gY29sb3IucmVkOwogICAgIGZsb2F0
QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBjb2xvci5ncmVlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIs
MTkgKzkyLDE5IEBAIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNm
b3JtQ29sb3IoUwogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBHUkFZU0NBTEU6
IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9h
dD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJv
bUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4KG1f
YW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
ci5yZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBT
RVBJQTogewotICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JB
PGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZy
b21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0cml4KG1fYW1v
dW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvci5y
ZXNvbHZlZCgpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVf
Uk9UQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JH
QkE8ZmxvYXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihodWVSb3RhdGVDb2xvck1h
dHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IucmVzb2x2ZWQoKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGNhc2UgU0FUVVJBVEU6IHsKLSAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZzxTUkdCQTxmbG9hdD4+KHNhdHVyYXRpb25Db2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAg
IGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0
aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yLnJlc29sdmVkKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQwogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBPUEFDSVRZOgotICAgICAgICBjb2xvci5hbHBoYSAqPSBtX2Ftb3Vu
dDsKKyAgICAgICAgY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZGVuQWxwaGEoY29sb3IsIHN0ZDo6
Y2xhbXA8ZmxvYXQ+KGNvbG9yLnJlc29sdmVkKCkuYWxwaGEgKiBtX2Ftb3VudCwgMC4wZiwgMS4w
ZikpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIElOVkVSVDogewogICAgICAgICBm
bG9hdCBvbmVNaW51c0Ftb3VudCA9IDEuMGYgLSBtX2Ftb3VudDsKQEAgLTI5Niw3ICsyOTYsNyBA
QCBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBodWVSb3RhdGUoY29uc3QgQ29sb3IK
IAogYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNS
R0JBPGZsb2F0PiYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21w
b25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgMC41Zik7CisgICAg
YXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yLnJlc29sdmVkKCkpLCAwLjVmKTsKICAgICAKICAgICAvLyBBcHBseSB0aGUgbWF0
cml4LiBTZWUgcmRhcjovL3Byb2JsZW0vNDExNDY2NTAgZm9yIGhvdyB0aGlzIG1hdHJpeCB3YXMg
ZGVyaXZlZC4KICAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8NSwgMz4gdG9EYXJrTW9kZU1hdHJp
eCB7CkBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRp
b246OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYs
IDAuMGYsIDEuMjVmLAogICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAx
LjI1ZgogICAgIH07Ci0gICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0
b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpOworICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRzID0g
dG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IucmVzb2x2ZWQoKSkpOwogCiAgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21w
b25lbnRzID0gaHVlUm90YXRlKGNvbnZlcnRlZFRvTGlnaHRNb2RlQ29tcG9uZW50cywgMC41Zik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjg3NDgyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0
aW9uczo6dHJhbnNmb3JtQ29sb3IoQ29sb3ImIGNvbG9yKSBjbwogICAgIGlmIChjb2xvci5pc1Nl
bWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKTsKIAogICAgIGZvciAoYXV0byYgb3Bl
cmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zv
cm1Db2xvcihzUkdCQUNvbG9yKSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29sIEZpbHRlck9wZXJh
dGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvcihDb2xvciYgY28KICAgICBpZiAoY29sb3IuaXNT
ZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3Ig
PSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29s
b3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CiAKICAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCShyZXZpc2lvbiAyODc0ODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNyArMzI2
LDcgQEAgdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0
IExpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50
c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b1Jlc29sdmVkQ29sb3JDb21wb25lbnRzSW5D
b2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwogICAgIHBhaW50aW5nRGF0YS5p
bml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwog
CiAgICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5maWx0ZXIsICpk
YXRhLnJlc3VsdCwgcGFpbnRpbmdEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWMK
ICAgICBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgpIHsgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7IH0KICAgICBzdGF0aWMgaW5saW5l
IFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tl
ZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25l
bnRzKSB9OyB9CiAKLSAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4
ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkucmVzb2x2ZWQoKSk7IH0KICAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYg
YiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CiAgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKICAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWws
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xv
cikKIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4g
eyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZgogICAgIFJl
ZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCkBAIC0yNzYs
NyArMjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bWJlciwg
Y29uc3QgQ29sCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAg
ICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBh
aW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNyLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgdm9p
ZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHIKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2Ug
bmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3Np
dGluZy4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFk
b3cuY29sb3IoKS50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOworICAgICAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvQ29sb3JUeXBlTG9zc3k8
U1JHQkE8ZmxvYXQ+PigpKS5yZXNvbHZlZCgpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJv
Z3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3Jt
MmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigp
IC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3Jh
bS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiAKICAgICBp
ZiAoY2xpcFN0YWNrKCkuaXNSb3VuZGVkUmVjdENsaXBFbmFibGVkKCkpCiAgICAgICAgIHByZXBh
cmVSb3VuZGVkUmVjdENsaXAocHJvZ3JhbS5nZXQoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RD
b21wb25lbnRzKCksIGNsaXBTdGFjaygpLnJvdW5kZWRSZWN0SW52ZXJzZVRyYW5zZm9ybUNvbXBv
bmVudHMoKSwgY2xpcFN0YWNrKCkucm91bmRlZFJlY3RDb3VudCgpKTsKIAotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b0NvbG9yVHlwZUxv
c3N5PFNSR0JBPGZsb2F0Pj4oKSkucmVzb2x2ZWQoKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFt
LT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5k
aW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CkBAIC03NDUsNyArNzQ1
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVj
dCYgCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8
ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAg
IGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+
PigpLnJlc29sdmVkKCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0K
IAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgcmV0
dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNyZWF0ZUJydXNoKElEMkQxUmVuZGVyVGFyZ2V0KiBy
CiAgICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNlcy4KLSAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVudFN0b3BzLnVuY2hlY2tl
ZEFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBn
LCBiLCBhKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZp
c2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHNwZWxsaW5nUGF0dGVybkNvbG9yID0gQ29sb3I6OnJl
ZDsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gZ3JhbW1hclBhdHRlcm5Db2xvciA9IENvbG9y
OjpkYXJrR3JlZW47CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0eWxlLm1vZGUgPT0gRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9y
IDogc3BlbGxpbmdQYXR0ZXJuQ29sb3I7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdHlsZS5t
b2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3JhbW1hclBh
dHRlcm5Db2xvci5yZXNvbHZlZCgpIDogc3BlbGxpbmdQYXR0ZXJuQ29sb3IucmVzb2x2ZWQoKTsK
ICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCByLCBnLCBiLCBhKTsKIAog
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRl
eHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyODc0
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsCiAKIEQyRDFf
Q09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29u
c3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9D
b2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2ZWQoKTsKICAgICByZXR1cm4gRDJE
MTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lv
biAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk0LDcgKzE1OTQsNyBAQCBjb25zdGV4cHIgZmxvYXQgZGF0ZVBs
YWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW4KIENvbG9yIFJlbmRlclRoZW1lOjpkYXRl
UGxhY2Vob2xkZXJUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcg
TENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFs
IHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdo
YXQgSFNMQSBkb2VzLgotICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxvc3N5
PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxv
c3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAgICAgaWYgKHRleHRDb2xvci5sdW1pbmFu
Y2UoKSA8IGJhY2tncm91bmRDb2xvci5sdW1pbmFuY2UoKSkKICAgICAgICAgaHNsYS5saWdodG5l
c3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICogKDEw
MC4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEz
MDcsNyArMTMwNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGlv
bnMoY29uc3QgUmVuZAogc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29udmV4R3JhZGllbnQoY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJv
YmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dy
b3VuZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGJhY2tncm91bmRDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZl
ZCgpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcs
IGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAu
NTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFk
ZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJl
dmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTAg
KzgxLDEwIEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5p
bWF0aW9uQQogCiAgICAgdm9pZCBhbmltYXRlKFNWR0VsZW1lbnQmLCBmbG9hdCBwcm9ncmVzcywg
dW5zaWduZWQgcmVwZWF0Q291bnQsIENvbG9yJiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIGF1
dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAg
ICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6
OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAg
ICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFu
aW1hdGVkLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKKyAg
ICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6
OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50
OF90Pj4oKS5yZXNvbHZlZCgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b0NvbG9y
VHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+PigpLnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2lt
cGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICAgICAgCiAgICAgICAgIGZsb2F0
IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJl
ZCwgc2ltcGxlVG8ucmVkLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1h
dGVkLnJlZCk7CiAgICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywg
cmVwZWF0Q291bnQsIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0
RW5kT2ZEdXJhdGlvbi5ncmVlbiwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOwpAQCAtMTAzLDggKzEw
Myw4IEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0
aW9uQQogICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgICAgIAotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3Iu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9y
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9t
Q29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOworICAg
ICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4
X3Q+PigpLnJlc29sdmVkKCk7CiAKICAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQg
LSBzaW1wbGVUby5yZWQ7CiAgICAgICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAt
IHNpbXBsZVRvLmdyZWVuOwpAQCAtMTE2LDggKzExNiw4IEBAIGNsYXNzIFNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQQogcHJpdmF0ZToKICAgICB2b2lkIGFk
ZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50Jikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGF1
dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAg
YXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1
dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4X3Q+Pigp
LnJlc29sdmVkKCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvQ29sb3JUeXBlTG9z
c3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFu
eSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAgICAgICAg
IG1fdG8gPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4oc2ltcGxl
VG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVl
biwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyNCBAQAorMjAyMi0wMS0wMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIHJlc29sdmVkL3VucmVzb2x2ZWQgY29sb3IgdHlwZSBhY2Nlc3NvcnMg
dG8gcmVxdWlyZSB1c2VycyB0byBiZSBleHBsaWNpdCBhYm91dCB3aGV0aGVyIHRoZXkgd2lsbCBo
YW5kbGUgbWlzc2luZy9ub25lIGNvbG9yIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc5OAorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIFJlcGxhY2UgdXNlcyBvZiBDb2xvcjo6dG9TUkdC
QUxvc3N5PD4oKSB3aXRoIENvbG9yOjp0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPD4+KCkgYW5kIGFk
ZAorICAgICAgICBjYWxscyB0byByZXNvbHZlZCgpIHRvIGFjY2VzcyBjb2xvciBjb21wb25lbnRz
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQ
bGF5U3RhdGlvbi5jcHA6CisgICAgICAgIChkcmF3UGFnZUJhY2tncm91bmQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9y
RmlsbEZyb21XZWJDb3JlQ29sb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1
cmVDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjpiZWdpblN3aXBlR2VzdHVyZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAoV2Vi
S2l0OjphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0
RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIxLTEyLTI2ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIFdlYktpdC9Db2NvYUNvbG9yLmggd2l0
aCBXZWJDb3JlL0NvbG9yQ29jb2EuaCwgbm90IGNvbmZ1c2luZyBhdCBhbGwKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3Rh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAkocmV2aXNpb24gMjg3NDgyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0
ZVBsYXlTdGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMg
dm9pZCBkcmF3UGFnZUJhY2tncm91bmQoY2Fpcm9fdCogY3R4LCBjb25zdCBzdGQKICAgICBpZiAo
IWJhY2tncm91bmRDb2xvciB8fCBiYWNrZ3JvdW5kQ29sb3IudmFsdWUoKS5pc1Zpc2libGUoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29s
b3IudmFsdWUoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhf
dD4+KCkucmVzb2x2ZWQoKTsKIAogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjdHgsIHIsIGcs
IGIsIGEpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjdHgsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q28KIHsKICAgICBSRUxFQVNFX0FTU0VSVCh3ZWJDb3JlQ29sb3IuaXNW
YWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29yZUNvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xvci50b0Nv
bG9yVHlwZUxvc3N5PFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIGNv
bG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAgY29sb3ItPmJsdWUgPSBi
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2lu
U3dpcGVHZXN0dXJlKFdlYkJhY2tGCiAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAg
ICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNuYXBzaG90ID0gY29sb3I7CiAg
ICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhXSA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7
CiAjaWYgVVNFKEdUSzQpCiAgICAgICAgICAgICAgICAgR2RrUkdCQSByZ2JhID0geyByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSB9OwogICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNo
b3RQYXR0ZXJuID0gYWRvcHRHUmVmKGdza19jb2xvcl9ub2RlX25ldygmcmdiYSwgJmJvdW5kcykp
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgYm9vbCBXZWJG
cmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91YmxlKiByZWQsCiAgICAgaWYgKCFi
Z0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBbciwg
ZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKICAgICAqcmVkID0gcjsKICAgICAqZ3JlZW4gPSBnOwogICAgICpibHVlID0gYjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
Lm1tCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNPYmplY3Q+IGFuaW1h
dGlvblZhbHVlRnJvbUtleWZyYW1lVgogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGtleWZyYW1l
VmFsdWUsCiAgICAgICAgIFsmXShjb25zdCBmbG9hdCBudW1iZXIpIC0+IFJldGFpblB0cjxOU09i
amVjdD4geyByZXR1cm4gQChudW1iZXIpOyB9LAogICAgICAgICBbJl0oY29uc3QgV2ViQ29yZTo6
Q29sb3IgY29sb3IpIC0+IFJldGFpblB0cjxOU09iamVjdD4gewotICAgICAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSAgY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9ICBjb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4
X3Q+PigpLnJlc29sdmVkKCk7CiAgICAgICAgICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwgQChi
KSwgQChhKSBdOwogICAgICAgICB9LAogICAgICAgICBbJl0oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludDNEIHBvaW50KSAtPiBSZXRhaW5QdHI8TlNPYmplY3Q+IHsKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzUyMSkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIyLTAx
LTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcmVzb2x2
ZWQvdW5yZXNvbHZlZCBjb2xvciB0eXBlIGFjY2Vzc29ycyB0byByZXF1aXJlIHVzZXJzIHRvIGJl
IGV4cGxpY2l0IGFib3V0IHdoZXRoZXIgdGhleSB3aWxsIGhhbmRsZSBtaXNzaW5nL25vbmUgY29s
b3IgY29tcG9uZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM0Nzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIENvbG9y
Ojp0b1NSR0JBTG9zc3k8PigpIHdpdGggQ29sb3I6OnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8Pj4o
KSBhbmQgYWRkCisgICAgICAgIGNhbGxzIHRvIHJlc29sdmVkKCkgdG8gYWNjZXNzIGNvbG9yIGNv
bXBvbmVudHMuIEFsc28gdXBkYXRlIHRvIG5ldyBuYW1lIG9mIGNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCksCisgICAgICAgIGNvbG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL1Rlc3RHcmFwaGlj
c0NvbnRleHRHTENvY29hLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hhbmdlQ29udGV4
dENvbnRlbnRzKToKKyAgICAgICAgUmVwbGFjZSB1bm5lY2Vzc2FyeSB1c2Ugb2YgY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKSB3aXRoIHRoZSBtb3JlIGNvbW1vbiB0b0NvbG9yVHlwZUxvc3N5PFdl
YkNvcmU6OlNSR0JBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpLgorCiAyMDIyLTAxLTAxICBKZWFuLVl2
ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgbWFrZSBTaGFyZWRCdWZmZXI6
OmNvcHkoKSByZXR1cm4gYSBjb250aWd1b3VzIFNoYXJlZEJ1ZmZlcgpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24g
Mjg3NDgyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OndoaXRlOwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC01Nyw3ICs1Nyw3IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6
OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhT
TEE8ZmxvYXQ+PigpOworICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3Nz
eTxIU0xBPGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CkBAIC03Myw3ICs3Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBD
b2xvciBjb2xvciA9IENvbG9yOjpyZWQ7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRv
Q29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xv
ci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwg
aHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtODksNyArODksNyBAQCBURVNUKENvbG9yLCBSR0JU
b0hTTF9HcmVlbikKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmVlbjsKIAotICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKKyAg
ICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCku
cmVzb2x2ZWQoKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxMjAsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEwNSw3
ICsxMDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9y
ID0gQ29sb3I6OmJsdWU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBl
TG9zc3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9y
VHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMjQwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29s
b3Iuc2F0dXJhdGlvbik7CkBAIC0xMjEsNyArMTIxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xf
RGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBh
dXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7Cisg
ICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+Pigp
LnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEzNyw3ICsx
MzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IGNvbG9yLnRvQ29sb3JUeXBlTG9z
c3k8SFNMQTxmbG9hdD4+KCk7CisgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlw
ZUxvc3N5PEhTTEE8ZmxvYXQ+PigpLnJlc29sdmVkKCk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdy
YXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOworICAgIGF1
dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKS5yZXNv
bHZlZCgpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xODEsNyArMTgxLDcg
QEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAKICAgICB2YWxpZENvbG9yID0gU1JHQkE8dWludDhf
dD4geyAxLCAyLCAzLCA0IH07CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkp
OwotICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENvbG9y
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBF
Q1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEodmFsaWRD
b2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9u
ZW50cy5ibHVlLCAzKTsKQEAgLTE4OSw3ICsxODksNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkK
IAogICAgIENvbG9yIHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwog
ICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgYXV0
byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWlu
dDhfdD4+KCkucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JD
b21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5ncmVlbiwgMik7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5ibHVlLCAzKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0
eSkKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3Ip
OwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIGF1dG8g
b3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZh
bGlkQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwog
ICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQ
RUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwogICAgIEVYUEVDVF9F
UShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOwpAQCAtMjA5LDIwICsyMDksMjAg
QEAgVEVTVChDb2xvciwgTHVtaW5hbmNlKQogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihDb2xv
cjo6YmxhY2spLmx1bWluYW5jZSgpLCAwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoQ29s
b3I6OndoaXRlKS5sdW1pbmFuY2UoKSwgMSk7CiAKLSAgICBhdXRvIGNDb21wb25lbnRzID0gU1JH
QkE8dWludDhfdD4geyA4NSwgOTAsIDE2MCB9OworICAgIGF1dG8gY0NvbXBvbmVudHMgPSBTUkdC
QTx1aW50OF90PiB7IDg1LCA5MCwgMTYwIH0ucmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoQ29sb3IoY0NvbXBvbmVudHMpLmx1bWluYW5jZSgpLCAwLjExNzgxNDU1KTsKIAogICAgIEVY
UEVDVF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMu
Z3JlZW4sIDkwKTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKIAotICAg
IGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoY0NvbXBvbmVudHMp
LmxpZ2h0ZW5lZCgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQo
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFuY2UoKSwgMC4y
OTE2ODIpOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkLCAxMzApOwogICAgIEVYUEVDVF9F
UShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAy
NDQpOwogCi0gICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjQ29tcG9uZW50cykuZGFya2VuZWQo
KS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGND
b21wb25lbnRzKS5kYXJrZW5lZCgpLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCku
cmVzb2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFu
Y2UoKSwgMC4wMjcwMDYyNDIpOwogICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7CiAg
ICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVlbiwgNDMpOwpAQCAtMjMzLDcgKzIzMyw3IEBAIFRF
U1QoQ29sb3IsIENvbnN0cnVjdG9yKQogewogICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9y
U3BhY2UsIGNvbXBvbmVudHNdID0gYzEuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25l
bnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKIAogICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIFRFU1QoQ29sb3IsIENv
cHlDb25zdHJ1Y3RvcikKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xvciBjMihjMSk7CiAKLSAgICBhdXRvIFtjb2xvclNw
YWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0
byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kUmVzb2x2ZWRDb2xv
ckNvbXBvbmVudHMoKTsKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVChD
b2xvciwgQXNzaWdubWVudCkKICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAs
IDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBDb2xvciBjMiA9IGMxOwogCi0gICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVk
Q29sb3JDb21wb25lbnRzKCk7CiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50
czsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwpAQCAtMzIzLDcgKzMyMyw3IEBAIFRF
U1QoQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKICAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQg
c28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRlbGV0aW9uLgogICAgIEVYUEVDVF9GQUxTRShjMS5p
c1ZhbGlkKCkpOwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNd
ID0gYzIuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29sb3JDb21wb25lbnRzKCk7CiAgICAgRVhQRUNU
X0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAKICAgICBhdXRvIFtyLCBn
LCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIFRFU1QoQ29sb3Is
IE1vdmVBc3NpZ25tZW50KQogICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0
IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCiAgICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7
CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xv
clNwYWNlQW5kUmVzb2x2ZWRDb2xvckNvbXBvbmVudHMoKTsKICAgICBFWFBFQ1RfRVEoY29sb3JT
cGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhh
XSA9IGNvbXBvbmVudHM7CkBAIC0zNzAsNyArMzcwLDcgQEAgVEVTVChDb2xvciwgUmV0dXJuVmFs
dWVzKQogVEVTVChDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogewogICAgIENvbG9yIHAzQ29s
b3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwotICAgIGF1
dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8g
c1JHQkFDb2xvciA9IHAzQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVz
b2x2ZWQoKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOwogICAg
IEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzMjgyZik7CiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxMjc0OGYpOwpAQCAtMzgwLDcgKzM4
MCw3IEBAIFRFU1QoQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIFRFU1QoQ29sb3IsIExpbmVh
clNSR0JDb252ZXJzaW9uVG9TUkdCKQogewogICAgIENvbG9yIGxpbmVhclNSR0JBQ29sb3IgeyBM
aW5lYXJTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAgYXV0byBz
UkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAg
YXV0byBzUkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JB
PGZsb2F0Pj4oKS5yZXNvbHZlZCgpOwogICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJl
ZCwgMS4wZik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNzM1MzU2
OTI3Zik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZm
KTsKQEAgLTM5OCw3ICszOTgsNyBAQCBURVNUKENvbG9yLCBDb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSkKIAogICAgIHsKICAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkg
PSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLjUpOwotICAgICAgICBhdXRvIFtj
b2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZFJlc29sdmVkQ29s
b3JDb21wb25lbnRzKCk7CiAgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNl
OjpTUkdCKTsKICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOwogICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwpAQCAtNDA5LDcgKzQwOSw3IEBAIFRFU1QoQ29sb3Is
IENvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KQogCiAgICAgewogICAgICAgICBDb2xvciBjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KDAuKTsKLSAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgICAgICBhdXRv
IFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNv
bG9yU3BhY2VBbmRSZXNvbHZlZENvbG9yQ29tcG9uZW50cygpOwogICAgICAgICBFWFBFQ1RfRVEo
Y29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29tcG9uZW50czsKICAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHIsIDAuKTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3NDb250ZXh0
R0xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY29jb2EvVGVzdEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0JKHJldmlzaW9uIDI4NzQ4MikK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9UZXN0R3JhcGhpY3ND
b250ZXh0R0xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOCBAQCBzdGF0aWMg
Ojp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgY2hhbmdlQ29udGV4dENvbnRlbnQKIHsKICAgICBj
b250ZXh0Lm1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgIFdlYkNvcmU6OkNvbG9yIGV4cGVjdGVk
IHsgaXRlcmF0aW9uICUgMiA/IFdlYkNvcmU6OkNvbG9yOjpncmVlbiA6IFdlYkNvcmU6OkNvbG9y
Ojp5ZWxsb3cgfTsKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGV4cGVjdGVk
LmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Ci0gICAgVU5VU0VEX1ZBUklBQkxFKGNvbG9yU3Bh
Y2UpOwotICAgIGNvbnRleHQuY2xlYXJDb2xvcihjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFd
LCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGV4cGVjdGVkLnRvQ29sb3JUeXBlTG9zc3k8V2ViQ29yZTo6U1JHQkE8ZmxvYXQ+PigpLnJlc29s
dmVkKCk7CisgICAgY29udGV4dC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGNvbnRleHQu
Y2xlYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAg
IHVpbnQ4X3QgZ290VmFsdWVzWzRdID0geyB9OwogICAgIGF1dG8gc2FtcGxlQXQgPSBjb250ZXh0
LmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>