<?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>212184</bug_id>
          
          <creation_ts>2020-05-20 20:36:20 -0700</creation_ts>
          <short_desc>Extended Color Cleanup: Stop allowing direct access to the underlying SimpleColor (it is almost always incorrect with respect to extended colors)</short_desc>
          <delta_ts>2020-05-24 08:54:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>212231</dependson>
    
    <dependson>212247</dependson>
    
    <dependson>212265</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</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>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</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>1654787</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-20 20:36:20 -0700</bug_when>
    <thetext>Extended Color Cleanup: Make Color::rgb() private</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654788</commentid>
    <comment_count>1</comment_count>
      <attachid>399926</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-20 20:37:34 -0700</bug_when>
    <thetext>Created attachment 399926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654793</commentid>
    <comment_count>2</comment_count>
      <attachid>399929</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-20 21:41:45 -0700</bug_when>
    <thetext>Created attachment 399929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654865</commentid>
    <comment_count>3</comment_count>
      <attachid>399949</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 04:04:14 -0700</bug_when>
    <thetext>Created attachment 399949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655007</commentid>
    <comment_count>4</comment_count>
      <attachid>399969</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 11:13:39 -0700</bug_when>
    <thetext>Created attachment 399969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655010</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 11:30:50 -0700</bug_when>
    <thetext>Not ready for real review yet but this change does a few things all in the name of making Color::rgb() private:

- Replaces a weird common idiom I don&apos;t quite understand the reasoning of where a Color was created out of another color.rgb():
    OLD: Color(myColor.rgb())
    NEW: myColor
 Best I can tell, this would just drop the Semantic bit and is just broken completely with ExtendedColor

- Replaces colorWithOverrideAlpha(RGBA) with a Color:: colorWithAlphaUsingAlternativeRounding(). This variant works with ExtendedColors and makes it clear we need to reconcile the two variants (just not in this patch, as it will require changing test results)

- Makes premultipliedARGBFromColor/colorFromPremultipliedARGB work strictly with RGBA32s, as they don&apos;t make any sense with ExtendedColor as you lose the ColorSpace information. The one remaining bit on Color itself is a new premultipliedARGB() function, which is only used by TextureMapperGL.cpp, and should be replaced with instead premultiplying in FloatComponents instead.

- Move IPC coders from WebKit to Color via the normal template encoded/decoder pattern.

- Other easier removals of rgb() usage where equivalent means existed.


One straggler is a change in RenderThemeIOS::systemColor(), where the code was taking a Color from a global map and creating a new Color as return Color(it-&gt;value.rgb(), Color::Semantic), essentially adding the Semantic bit to it. I am not sure exactly why this is needed, but rather than removing it, in the next iteration here, I will probably add a new function in Color which returns the same Color with the Semantic bit set, and leave this mystery for another time. (One guess I have is that that the Colors in this map were coming over IPC from the UI process and were losing their Semantic bit, as that is not included in the IPC currently. If so, the solution would be to encode that bit, and drop this silliness).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655020</commentid>
    <comment_count>6</comment_count>
      <attachid>399972</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 11:50:37 -0700</bug_when>
    <thetext>Created attachment 399972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655046</commentid>
    <comment_count>7</comment_count>
      <attachid>399976</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 13:16:14 -0700</bug_when>
    <thetext>Created attachment 399976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655081</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-21 14:29:05 -0700</bug_when>
    <thetext>Split out a chunk of this into https://bugs.webkit.org/show_bug.cgi?id=212231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655355</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-22 10:37:10 -0700</bug_when>
    <thetext>Split out another chunk in https://bugs.webkit.org/show_bug.cgi?id=212184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655356</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-22 10:37:19 -0700</bug_when>
    <thetext>Split out another chunk in https://bugs.webkit.org/show_bug.cgi?id=212265</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655638</commentid>
    <comment_count>11</comment_count>
      <attachid>400130</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 11:31:09 -0700</bug_when>
    <thetext>Created attachment 400130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655644</commentid>
    <comment_count>12</comment_count>
      <attachid>400134</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 12:26:57 -0700</bug_when>
    <thetext>Created attachment 400134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655651</commentid>
    <comment_count>13</comment_count>
      <attachid>400136</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 13:25:59 -0700</bug_when>
    <thetext>Created attachment 400136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655653</commentid>
    <comment_count>14</comment_count>
      <attachid>400138</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 13:48:36 -0700</bug_when>
    <thetext>Created attachment 400138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655656</commentid>
    <comment_count>15</comment_count>
      <attachid>400139</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 13:58:06 -0700</bug_when>
    <thetext>Created attachment 400139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655663</commentid>
    <comment_count>16</comment_count>
      <attachid>400143</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 17:18:35 -0700</bug_when>
    <thetext>Created attachment 400143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655664</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 17:19:08 -0700</bug_when>
    <thetext>Should be ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655665</commentid>
    <comment_count>18</comment_count>
      <attachid>400144</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 17:21:19 -0700</bug_when>
    <thetext>Created attachment 400144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655674</commentid>
    <comment_count>19</comment_count>
      <attachid>400148</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 20:31:06 -0700</bug_when>
    <thetext>Created attachment 400148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655688</commentid>
    <comment_count>20</comment_count>
      <attachid>400148</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-24 03:06:03 -0700</bug_when>
    <thetext>Comment on attachment 400148
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1968
&gt; +    auto color = downcast&lt;HTMLInputElement&gt;(*node()).valueAsColor().toSRGBASimpleColorLossy();
&gt; +    r = color.redComponent();
&gt; +    g = color.greenComponent();
&gt; +    b = color.blueComponent();

Can you destructure this? If you had an &quot;int a&quot; that was discarded?

[r, g, b, a] = downcast&lt;HTMLInputElement&gt;(*node()).valueAsColor().toSRGBASimpleColorLossy();

&gt; Source/WebCore/platform/graphics/Color.cpp:182
&gt;      // FIXME: This should probably return a floating point number, but many of the call
&gt;      // sites have picked comparison values based on feel. We&apos;d need to break out
&gt;      // our logarithm tables to change them :)

Have you looked at the places that use this method? I wonder if the comment is still true.

&gt; Source/WebCore/platform/graphics/Color.cpp:433
&gt; +    int r = (selfR * selfA * (255 - sourceA) + 255 * sourceA * sourceR) / d;
&gt; +    int g = (selfG * selfA * (255 - sourceA) + 255 * sourceA * sourceG) / d;
&gt; +    int b = (selfB * selfA * (255 - sourceA) + 255 * sourceA * sourceB) / d;

You use 0xff below, which I like.

&gt; Source/WebCore/platform/graphics/Color.cpp:497
&gt; +    uint8_t newAlpha = alpha * 255;

You use 0xff below, which I like.

Also, is there a reason you used uint8_t? Could we do it everywhere?

&gt; Source/WebCore/platform/graphics/Color.cpp:509
&gt; +        return Color { extendedColor.red(), extendedColor.green(), extendedColor.blue(), alpha, extendedColor.colorSpace() };

I wonder if we should have a constructor that is colorReplacingAlpha(const Color&amp; color, float alpha), or something like that (since we have invertedColorWithAlpha)

&gt; Source/WebCore/platform/graphics/Color.cpp:512
&gt; +    // FIXME: This is where this function differs from colorWithAlphaUsing

Nit: missing period.

&gt; Source/WebCore/platform/graphics/Color.cpp:526
&gt; +    auto [r, g, b, existingAlpha] = rgb();

It&apos;s a bit confusing to me that a function called &quot;rgb()&quot; would return 4 components.

&gt; Source/WebCore/platform/graphics/Color.h:72
&gt; +    constexpr float alphaComponentAsFloat() const { return static_cast&lt;float&gt;(alphaComponent()) / 0xFF; }

Nit: Lowercase 0xff to be consistent.

&gt; Source/WebCore/platform/graphics/Color.h:81
&gt; +    constexpr SimpleColor colorWithAlpha(uint8_t alpha) const { return { (m_value &amp; 0x00FFFFFF) | alpha &lt;&lt; 24 }; }

Nit: Lowercase fs

&gt; Source/WebCore/platform/graphics/ExtendedColor.cpp:66
&gt; +Ref&lt;ExtendedColor&gt; ExtendedColor::invertedColorWithAlpha(float alpha) const

I wonder if we&apos;ll ever need to get color-nerdy and actually work out what we mean by &quot;inverted&quot;. Do we mean brightness? Won&apos;t inversion depend on the color space?

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:399
&gt; +    auto simpleColor = value.toSRGBASimpleColorLossy();

Another case where the destructuring would be nice. Since you&apos;re the template wizard, is there a way to destructure into 3 components, ignoring the fourth?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655727</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 08:15:19 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #20)
&gt; Comment on attachment 400148 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400148&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1968
&gt; &gt; +    auto color = downcast&lt;HTMLInputElement&gt;(*node()).valueAsColor().toSRGBASimpleColorLossy();
&gt; &gt; +    r = color.redComponent();
&gt; &gt; +    g = color.greenComponent();
&gt; &gt; +    b = color.blueComponent();
&gt; 
&gt; Can you destructure this? If you had an &quot;int a&quot; that was discarded?
&gt; 
&gt; [r, g, b, a] =
&gt; downcast&lt;HTMLInputElement&gt;(*node()).valueAsColor().toSRGBASimpleColorLossy();

There is no explicit syntax in c++ yet for discarding a value (it&apos;s being discussed a lot in the standards body) but you can just not use one of the variables. In this case, I did,&apos;t use destructuring since the out parameters the function has made it awkward.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:182
&gt; &gt;      // FIXME: This should probably return a floating point number, but many of the call
&gt; &gt;      // sites have picked comparison values based on feel. We&apos;d need to break out
&gt; &gt;      // our logarithm tables to change them :)
&gt; 
&gt; Have you looked at the places that use this method? I wonder if the comment
&gt; is still true.

I have not. Worth a followup.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:433
&gt; &gt; +    int r = (selfR * selfA * (255 - sourceA) + 255 * sourceA * sourceR) / d;
&gt; &gt; +    int g = (selfG * selfA * (255 - sourceA) + 255 * sourceA * sourceG) / d;
&gt; &gt; +    int b = (selfB * selfA * (255 - sourceA) + 255 * sourceA * sourceB) / d;
&gt; 
&gt; You use 0xff below, which I like.

Changed. Though I used 0xFF since that is more prevalent in the file (also changed the one place I used 0xff).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:497
&gt; &gt; +    uint8_t newAlpha = alpha * 255;
&gt; 
&gt; You use 0xff below, which I like.

Changed.

&gt; 
&gt; Also, is there a reason you used uint8_t? Could we do it everywhere?

Yeah, we should use it more consistently.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:509
&gt; &gt; +        return Color { extendedColor.red(), extendedColor.green(), extendedColor.blue(), alpha, extendedColor.colorSpace() };
&gt; 
&gt; I wonder if we should have a constructor that is colorReplacingAlpha(const
&gt; Color&amp; color, float alpha), or something like that (since we have
&gt; invertedColorWithAlpha)

Will be doing more of this in a follow up.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:512
&gt; &gt; +    // FIXME: This is where this function differs from colorWithAlphaUsing
&gt; 
&gt; Nit: missing period.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:526
&gt; &gt; +    auto [r, g, b, existingAlpha] = rgb();
&gt; 
&gt; It&apos;s a bit confusing to me that a function called &quot;rgb()&quot; would return 4
&gt; components.

Yeah. This function will get a name change soon.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:72
&gt; &gt; +    constexpr float alphaComponentAsFloat() const { return static_cast&lt;float&gt;(alphaComponent()) / 0xFF; }
&gt; 
&gt; Nit: Lowercase 0xff to be consistent.

Kept it 0xFF as that is more prevalent in this file.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:81
&gt; &gt; +    constexpr SimpleColor colorWithAlpha(uint8_t alpha) const { return { (m_value &amp; 0x00FFFFFF) | alpha &lt;&lt; 24 }; }
&gt; 
&gt; Nit: Lowercase fs

Kept it 0xFF as that is more prevalent in this file.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ExtendedColor.cpp:66
&gt; &gt; +Ref&lt;ExtendedColor&gt; ExtendedColor::invertedColorWithAlpha(float alpha) const
&gt; 
&gt; I wonder if we&apos;ll ever need to get color-nerdy and actually work out what we
&gt; mean by &quot;inverted&quot;. Do we mean brightness? Won&apos;t inversion depend on the
&gt; color space?

Probably :(. There are a bunch of weird things we do around selection including this insert and the blendWithWhite() function that probably need to be reconsidered.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:399
&gt; &gt; +    auto simpleColor = value.toSRGBASimpleColorLossy();
&gt; 
&gt; Another case where the destructuring would be nice. Since you&apos;re the
&gt; template wizard, is there a way to destructure into 3 components, ignoring
&gt; the fourth?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655728</commentid>
    <comment_count>22</comment_count>
      <attachid>400161</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 08:16:48 -0700</bug_when>
    <thetext>Created attachment 400161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655737</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-24 08:53:24 -0700</bug_when>
    <thetext>Committed r262108: &lt;https://trac.webkit.org/changeset/262108&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400161.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655738</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-24 08:54:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/63579502&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399926</attachid>
            <date>2020-05-20 20:37:34 -0700</date>
            <delta_ts>2020-05-20 21:41:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200520203733.patch</filename>
            <type>text/plain</type>
            <size>37947</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA1LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBlZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3cpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92
ZXJyaWRlQWxwaGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp1cGRhdGVD
dWVGcm9tQ3VlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6cmdiIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdFRpbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSBjb25zdCk6CisKIDIwMjAt
MDUtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgaW1wbGljaXQgVVJMLT5TdHJpbmcgY29udmVyc2lvbiBvcGVyYXRvcnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJl
dmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODgyLDEzICs4ODIsMTMgQEAgQ29sb3IgSFRNTENv
bnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Y29sb3IoKS5yZ2IoKSksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplZENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmNvbG9yKCksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5j
b2xvcigpLnJnYigpKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuY29sb3IoKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTAsNyArMTA1MCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5
bGUoTXUKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgY29sb3IgPSBDb2xvcihw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKIAotICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvci5yZ2IoKSkpOworICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICAg
ICAgICAgIHN0eWxlID0gQ2FudmFzU3R5bGUoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5yZ2IoKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoc3R5bGUuaGFzT3ZlcnJpZGVBbHBoYSgpKQorICAgICAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkp
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CkBAIC00MDIsMTAgKzQwMSw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmhhc092ZXJy
aWRlQWxwaGEoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFJHQkEz
MiBoZXJlLgotICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLnJnYigpLCBzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFs
cGhhKCkpCisgICAgICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92
ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHlsZSA9IENhbnZh
c1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
Y2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKQEAgLTEzMTAsOCArMTMw
OCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICBzZXRTaGFkb3coRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJn
YigpLCBhbHBoYSkpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZygqYWxwaGEpOworICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVh
dGVGcm9tU3RyaW4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBDb2xvciB7IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iucmdi
KCksIGFscGhhKSB9OworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgSW5i
YW5kR2VuZXJpY1RleHRUcmFjazo6dXBkYXRlQ3VlRnIKICAgICBpZiAoaW5iYW5kQ3VlLnNpemUo
KSA+IDApCiAgICAgICAgIGN1ZS5zZXRTaXplKHN0ZDo6cm91bmQoaW5iYW5kQ3VlLnNpemUoKSkp
OwogICAgIGlmIChpbmJhbmRDdWUuYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICBjdWUuc2V0QmFja2dyb3VuZENvbG9yKGluYmFuZEN1ZS5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGN1ZS5zZXRCYWNrZ3JvdW5kQ29sb3IoaW5iYW5kQ3VlLmJhY2tncm91bmRD
b2xvcigpKTsKICAgICBpZiAoaW5iYW5kQ3VlLmZvcmVncm91bmRDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgY3VlLnNldEZvcmVncm91bmRDb2xvcihpbmJhbmRDdWUuZm9yZWdyb3VuZENvbG9y
KCkucmdiKCkpOworICAgICAgICBjdWUuc2V0Rm9yZWdyb3VuZENvbG9yKGluYmFuZEN1ZS5mb3Jl
Z3JvdW5kQ29sb3IoKSk7CiAgICAgaWYgKGluYmFuZEN1ZS5oaWdobGlnaHRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5oaWdobGlnaHRD
b2xvcigpLnJnYigpKTsKKyAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5o
aWdobGlnaHRDb2xvcigpKTsKIAogICAgIGlmIChpbmJhbmRDdWUuYWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6QWxpZ25tZW50OjpTdGFydCkKICAgICAgICAgY3VlLnNldEFsaWduKCJzdGFydCJf
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCwxNCArMzM4LDE1IEBAIFN0cmluZyBSR0JBMzI6
OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmUKIAogU3RyaW5nIENvbG9yOjpuYW1lRm9yUmVuZGVy
VHJlZUFzVGV4dCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBleHRlbmRlZCBjb2xv
cnMuCisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5j
c3NUZXh0KCk7CiAgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KCk7CiB9CiAKIENvbG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiB7CiAgICAgLy8gSGFyZGNv
ZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0gICAgaWYgKHJnYigpID09IGJsYWNrKQor
ICAgIGlmICghaXNFeHRlbmRlZCgpICYmIHJnYigpID09IGJsYWNrKQogICAgICAgICByZXR1cm4g
bGlnaHRlbmVkQmxhY2s7CiAgICAgCiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0
YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC0zNzAsNyArMzcxLDcgQEAgQ29sb3IgQ29sb3I6Omxp
Z2h0KCkgY29uc3QKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKIHsKICAgICAvLyBIYXJkY29k
ZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAocmdiKCkgPT0gd2hpdGUpCisg
ICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgcmdiKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBk
YXJrZW5lZFdoaXRlOwogICAgIAogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFm
dGVyZigyNTYuMGYsIDAuMGYpOwpAQCAtNDE1LDYgKzQxNiw4IEBAIGNvbnN0IGludCBjQWxwaGFJ
bmNyZW1lbnQgPSAxNzsgLy8gSW5jcmUKIAogQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9y
JiBzb3VyY2UpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0
byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgaWYgKCFpc1Zpc2libGUoKSB8fCBzb3VyY2Uu
aXNPcGFxdWUoKSkKICAgICAgICAgcmV0dXJuIHNvdXJjZTsKIApAQCAtNDMxLDYgKzQzNCw4IEBA
IENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSAKIAogQ29sb3IgQ29sb3I6
OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAt
IG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICAvLyBJZiB0aGUgY29sb3IgY29u
dGFpbnMgYWxwaGEgYWxyZWFkeSwgd2UgbGVhdmUgaXQgYWxvbmUuCiAgICAgaWYgKCFpc09wYXF1
ZSgpKQogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC00NjAsMTIgKzQ2NSwxOSBAQCBDb2xvciBD
b2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoCiAgICAgcmV0dXJuIGNvbG9yV2l0aEFs
cGhhKG5ld0FscGhhKTsKIH0KIAorQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKK3sKKyAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsK
KyAgICByZXR1cm4gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcobmV3QWxw
aGEpOworfQorCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0
CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmdy
ZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OwogCi0gICAgaW50IG5ld0FscGhhID0g
YWxwaGEgKiAyNTU7IC8vIFdoeSBkb2Vzbid0IHRoaXMgdXNlIGNvbG9yRmxvYXRUb1JHQkFCeXRl
KCkgbGlrZSBjb2xvcldpdGhPdmVycmlkZUFscGhhKCk/CisgICAgLy8gRklYTUU6IFRoaXMgaXMg
d2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0aXZlUm91bmRpbmcuCisgICAgaW50IG5ld0FscGhhID0gYWxwaGEgKiAyNTU7CiAKICAgICBD
b2xvciByZXN1bHQgPSB7IHJlZCgpLCBncmVlbigpLCBibHVlKCksIG5ld0FscGhhIH07CiAgICAg
aWYgKGlzU2VtYW50aWMoKSkKQEAgLTQ3Myw2ICs0ODUsMTcgQEAgQ29sb3IgQ29sb3I6OmNvbG9y
V2l0aEFscGhhKGZsb2F0IGFscGhhKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0NvbG9yIENv
bG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkg
Y29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBt
X2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CisKKyAgICBDb2xvciByZXN1
bHQgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYigpLCBhbHBoYSk7CisgICAgaWYgKGlzU2Vt
YW50aWMoKSkKKyAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBDb2xvcjo6
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkp
IHsKQEAgLTQ5OCwyNSArNTIxLDI1IEBAIEZsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNv
bXBvbmVudHMKICAgICByZXR1cm4geyB9OwogfQogCi1Db2xvciBjb2xvckZyb21QcmVtdWx0aXBs
aWVkQVJHQihSR0JBMzIgcGl4ZWxDb2xvcikKK3N0YXRpYyBDb2xvciBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQihSR0JBMzIgcGl4ZWxDb2xvcikKIHsKICAgICBpZiAocGl4ZWxDb2xvci5pc1Zp
c2libGUoKSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gbWFrZVVu
UHJlbXVsdGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5n
cmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5h
bHBoYUNvbXBvbmVudCgpKTsKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KIAotUkdCQTMyIHBy
ZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK1JHQkEzMiBDb2xv
cjo6cHJlbXVsdGlwbGllZEFSR0IoKSBjb25zdAogewotICAgIGlmIChjb2xvci5pc09wYXF1ZSgp
KSB7Ci0gICAgICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4g
bWFrZVJHQihjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9yLmFzRXh0ZW5kZWQo
KS5ncmVlbigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1KTsKLSAgICAg
ICAgcmV0dXJuIGNvbG9yLnJnYigpOworICAgIGlmIChpc09wYXF1ZSgpKSB7CisgICAgICAgIGlm
IChpc0V4dGVuZGVkKCkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVJHQihhc0V4dGVuZGVkKCku
cmVkKCkgKiAyNTUsIGFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1LCBhc0V4dGVuZGVkKCkuYmx1
ZSgpICogMjU1KTsKKyAgICAgICAgcmV0dXJuIHJnYigpOwogICAgIH0KIAotICAgIGlmIChjb2xv
ci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoY29s
b3IuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAq
IDI1NSwgY29sb3IuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgY29sb3IuYXNFeHRlbmRlZCgp
LmFscGhhKCkgKiAyNTUpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBt
YWtlUHJlbXVsdGlwbGllZFJHQkEoYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBhc0V4dGVuZGVk
KCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgYXNFeHRlbmRlZCgp
LmFscGhhKCkgKiAyNTUpOwogCi0gICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xv
ci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKTsKKyAg
ICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZCgpLCBncmVlbigpLCBibHVlKCksIGFs
cGhhKCkpOwogfQogCiBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNv
bnN0IENvbG9yJiBiKQpAQCAtNTI4LDMwICs1NTEsMzUgQEAgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiBhLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQ29sb3IgYmxlbmQo
Y29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzLCBib29s
IGJsZW5kUHJlbXVsdGlwbGllZCkKK0NvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgZnJv
bSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBs
aWVkKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNv
bG9yIHNwYWNlcy4KKwogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRo
ZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgogICAgIGlmIChwcm9ncmVz
cyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgaWYgKGJsZW5kUHJlbXVsdGlwbGllZCkgewotICAgICAgICAv
LyBTaW5jZSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJhaWxzIG9uIHplcm8gYWxwaGEs
IHNwZWNpYWwtY2FzZSB0aGF0LgotICAgICAgICBDb2xvciBwcmVtdWx0RnJvbSA9IGZyb20uYWxw
aGEoKSA/IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGZyb20pIDogQ29sb3I6OnRyYW5zcGFy
ZW50OwotICAgICAgICBDb2xvciBwcmVtdWx0VG8gPSB0by5hbHBoYSgpID8gcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IodG8pIDogQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgICAgIENvbG9y
IHByZW11bHRCbGVuZGVkKGJsZW5kKHByZW11bHRGcm9tLnJlZCgpLCBwcmVtdWx0VG8ucmVkKCks
IHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5kKHByZW11bHRGcm9tLmdyZWVuKCksIHByZW11
bHRUby5ncmVlbigpLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBibGVuZChwcmVtdWx0RnJvbS5i
bHVlKCksIHByZW11bHRUby5ibHVlKCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5kKHBy
ZW11bHRGcm9tLmFscGhhKCksIHByZW11bHRUby5hbHBoYSgpLCBwcm9ncmVzcykpOworICAgICAg
ICAvLyBTaW5jZSBwcmVtdWx0aXBsaWVkQVJHQigpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNp
YWwtY2FzZSB0aGF0LgorICAgICAgICBDb2xvciBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/
IENvbG9yKGZyb20ucHJlbXVsdGlwbGllZEFSR0IoKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cisg
ICAgICAgIENvbG9yIHByZW11bHRUbyA9IHRvLmFscGhhKCkgPyBDb2xvcih0by5wcmVtdWx0aXBs
aWVkQVJHQigpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgICAgICBDb2xvciBwcmVtdWx0
QmxlbmRlZCB7CisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWQoKSwg
cHJlbXVsdFRvLnJlZCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0RnJvbS5ncmVlbigpLCBwcmVtdWx0VG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAorICAgICAg
ICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZSgpLCBwcmVtdWx0VG8uYmx1ZSgp
LCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBo
YSgpLCBwcmVtdWx0VG8uYWxwaGEoKSwgcHJvZ3Jlc3MpCisgICAgICAgIH07CiAKICAgICAgICAg
cmV0dXJuIENvbG9yKGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkLnJn
YigpKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIENvbG9yKGJsZW5kKGZyb20ucmVkKCksIHRvLnJl
ZCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20uZ3JlZW4oKSwgdG8uZ3JlZW4oKSwg
cHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChmcm9tLmJsdWUoKSwgdG8uYmx1ZSgpLCBwcm9ncmVz
cyksCi0gICAgICAgIGJsZW5kKGZyb20uYWxwaGEoKSwgdG8uYWxwaGEoKSwgcHJvZ3Jlc3MpKTsK
KyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLnJlZCgpLCB0by5yZWQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmdyZWVuKCksIHRvLmdy
ZWVuKCksIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbS5ibHVlKCksIHRv
LmJsdWUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmFscGhhKCks
IHRvLmFscGhhKCksIHByb2dyZXNzKQorICAgIH07CiB9CiAKIHZvaWQgQ29sb3I6OnRhZ0FzVmFs
aWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDYgQEAgcHVibGljOgogICAgICAgICBzZXRS
R0IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpOwogICAgIH0KIAotICAgIC8vIENy
ZWF0ZXMgYSBuZXcgY29sb3IgZnJvbSB0aGUgc3BlY2lmaWMgQ01ZSyBhbmQgYWxwaGEgdmFsdWVz
LgogICAgIENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEp
CiAgICAgewogICAgICAgICBzZXRSR0IobWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkp
OwpAQCAtMTk2LDE1ICsxOTUsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBy
Z2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlzaWJs
ZSgpOyB9CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vu
c2UgaW4gdGhlIHByZXNlbmNlIG9mIEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IHJlZCgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLnJlZENvbXBvbmVudCgpOyB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzLiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENv
bG9yLgogICAgIGludCBncmVlbigpIGNvbnN0IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50
KCk7IH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2Ug
aW4gdGhlIHByZXNlbmNlIG9mIEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IGJsdWUoKSBjb25zdCB7
IHJldHVybiByZ2IoKS5ibHVlQ29tcG9uZW50KCk7IH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcyBvciBtYWtlIHRoaXMgd29yayB3aXRoIEV4dGVuZGVkQ29sb3IKICAgICBpbnQgYWxwaGEo
KSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CiAKICAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2IoKS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4
RkY7IH0KIAotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENv
bXBvbmVudHM+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CkBAIC0yMjMsMTAgKzIy
NSwxNSBAQCBwdWJsaWM6CiAgICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAg
ICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0OwogCi0gICAgQ29sb3IgY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBibGVuZChjb25z
dCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRQcmVtdWx0aXBsaWVkID0gdHJ1ZSk7CiAKLSAgICAvLyBSZXR1cm5zIGEgY29sb3IgdGhhdCBo
YXMgdGhlIHNhbWUgUkdCIHZhbHVlcywgYnV0IHdpdGggdGhlIGdpdmVuIEEuCisgICAgQ29sb3Ig
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0OwogICAgIENvbG9yIGNvbG9y
V2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQg
Zm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFyaWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGlu
ZyBiZWhhdmlvci4KKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworCiAgICAgQ29sb3Igb3BhcXVl
Q29sb3IoKSBjb25zdCB7IHJldHVybiBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQogCiAgICAgLy8g
VHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5h
bWUuCkBAIC0yODQsMTEgKzI5MSwxOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNCbGFj
a0NvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgorICAgIFJHQkEzMiByZ2IoKSBj
b25zdDsKICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBiKSB7IHNldFJHQihtYWtl
UkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7CiAgICAgdm9pZCBzZXRJ
c1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY1JCR0FD
b2xvckJpdDsgfQogCisgICAgLy8gRklYTUU6IE9ubHkgdXNlZCBieSBibGVuZC4gRG9lcyBub3Qg
aGFuZGxlIEV4dGVuZGVkQ29sb3IuCisgICAgUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCKCkgY29u
c3Q7CisKKwogICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9pbnRlci4K
ICAgICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFJHQkEzMi4KICAgICAvLyAweF9fX19f
X18xMSBpcyBhIHZhbGlkIFJHQkEzMi4KQEAgLTMxMiw4ICszMjcsNiBAQCBwcml2YXRlOgogYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRp
cGxpZWRBUkdCKFJHQkEzMik7Ci1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29u
c3QgQ29sb3ImKTsKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgogV0VC
Q09SRV9FWFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKIApAQCAtMzYxLDYgKzM3NCwxMSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihjCiAgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAm
IH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEucmdiYUFu
ZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9yQml0KTsKIH0KIAoraW5saW5lIENv
bG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCit7CisgICAgcmV0dXJuIENvbG9yOjpibGVu
ZChmcm9tLCB0bywgcHJvZ3Jlc3MsIGJsZW5kUHJlbXVsdGlwbGllZCk7Cit9CisKIGlubGluZSB1
bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKQEAg
LTQwMCw5ICs0MTgsNyBAQCBpbmxpbmUgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdC
CiAKIGlubGluZSBSR0JBMzIgQ29sb3I6OnJnYigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdl
IHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZSwgb3IgcHJvZHVjZQotICAgIC8vIGFu
IFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3Jt
ZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBo
YW5kbGUgZXh0ZW5kZWQuCisgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwogICAgIHJldHVybiB7
IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIpIH07
CiB9CiAKQEAgLTQ0Miw2ICs0NTgsNzQgQEAgY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQg
ciwgaW50IGcsIAogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1heCgw
LCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAweEZG
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVy
IDw8IGFzRXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCku
Z3JlZW4oKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOworICAgICAg
ICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOworICAgICAgICBlbmNvZGVyIDw8IGFz
RXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBl
bmNvZGVyIDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2Rl
ciA8PCBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCisKKyAgICB1aW50
MzJfdCB2YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAg
ZW5jb2RlciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFs
PENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYm9vbCBpc0V4
dGVuZGVkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRlbmRlZCkgeworICAgICAgICBmbG9h
dCByZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAgICBmbG9hdCBibHVlOworICAgICAg
ICBmbG9hdCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVuKSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGFscGhhKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9y
U3BhY2UpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGlzVmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFp
c1ZhbGlkKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHVpbnQzMl90IHZhbHVlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xv
YmFsQWxwaGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29s
b3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgY29sb3IuYWxwaGEoKSAvIDI1NS5mICog
Z2xvYmFsQWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNv
bG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm50aXZlUm91bmRpbmcoY29sb3IuYWxwaGEoKSAv
IDI1NS5mICogZ2xvYmFsQWxwaGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291
cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjE5NzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDI0ICsxMjMsMTggQEAgc3RhdGljIENHQ29sb3JSZWYgbGVha0NH
Q29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGlmICghY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoY29sb3IucmdiKCkudmFsdWUoKSkgewotICAgICAgICBjYXNlIENvbG9yOjp0cmFuc3BhcmVu
dC52YWx1ZSgpOiB7Ci0gICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3BhcmVudENH
Q29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJl
bnRDR0NvbG9yOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29sb3I6OmJsYWNrLnZhbHVlKCk6
IHsKLSAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxlYWtDR0Nv
bG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBDb2xvcjo6d2hpdGUudmFsdWUoKTogewotICAgICAgICAgICAgc3RhdGlj
IENHQ29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwotICAgICAgICAg
ICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsKLSAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKGNv
bG9yID09IENvbG9yOjp0cmFuc3BhcmVudCkgeworICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0
cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiB0
cmFuc3BhcmVudENHQ29sb3I7CisgICAgfQorICAgIGlmIChDb2xvcjo6aXNCbGFja0NvbG9yKGNv
bG9yKSkgeworICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiBibGFja0NHQ29sb3IgPSBsZWFrQ0dD
b2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7CisgICAgfQorICAgIGlm
IChDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbG9yKSkgeworICAgICAgICBzdGF0aWMgQ0dDb2xvclJl
ZiB3aGl0ZUNHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiB3aGl0
ZUNHQ29sb3I7CiAgICAgfQotCi0gICAgQVNTRVJUKGNvbG9yLmlzRXh0ZW5kZWQoKSB8fCBjb2xv
ci5yZ2IoKS52YWx1ZSgpKTsKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55TFJVQ2Fj
aGU8Q29sb3IsIFJldGFpblB0cjxDR0NvbG9yUmVmPiwgMzI+PiBjYWNoZTsKICAgICByZXR1cm4g
Y2FjaGUuZ2V0KCkuZ2V0KGNvbG9yKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gMjYx
OTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsNyBAQCB2b2lkIEZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSgpIGJ1dCB0aGF0IGhhcyBkaWZmZXJlbnQgcm91bmRpbmcgb2YgdGhlIGFscGhhIGNvbXBv
bmVudCB0aGF0IGJyZWFrcyBzb21lIHRlc3RzLgotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBmbG9v
ZENvbG9yKCkuYWxwaGEoKSAvIDI1NS4wOwotICAgIGF1dG8gY29sb3IgPSBjb2xvcldpdGhPdmVy
cmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgY29sb3JBbHBoYSAqIGZsb29kT3BhY2l0eSgp
KTsKKyAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb29kT3BhY2l0eSgpKTsKICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE5ICs0MSwxNCBAQCBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JB
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4gRDJEMTo6Q29sb3JG
KGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50c1sxXSwgYXNSR0JBLmNvbXBv
bmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBjb2xv
ckFscGhhID0gYWxwaGEoKSAvIDI1NS4wZjsKLSAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHJnYigp
LnZhbHVlKCksIGNvbG9yQWxwaGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9
CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBh
c1JHQkEgPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0dXJuIEQyRDE6OlZlY3Rv
cjRGKGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50c1sxXSwgYXNSR0JBLmNv
bXBvbmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYo
ciwgZywgYiwgYSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDEw
ICszNzksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAKIEQy
RDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENv
bG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBmbG9hdCBjb2xvckFscGhhID0gY29sb3IuYWxwaGFB
c0Zsb2F0KCk7Ci0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxB
bHBoYSgpOwotCi0gICAgcmV0dXJuIEQyRDE6OkNvbG9yRihjb2xvci5yZ2IoKSwgZ2xvYmFsQWxw
aGEgKiBjb2xvckFscGhhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBt
X2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIAogSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw3
IEBAIHN0YXRpYyBib29sIGRyYXdDZWxsRm9jdXNSaW5nV2l0aEZyYW1lQXQKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbG9yIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBSZW5kZXJUaGVtZU1hYy4gRm9y
IG5vdyBqdXN0IHVzZSB0aGUgc2FtZSBOU0NvbG9yIGNvbG9yLgogICAgIC8vIFRoZSBjb2xvciBp
cyBleHBlY3RlZCB0byBiZSBvcGFxdWUsIHNpbmNlIENvcmVHcmFwaGljcyB3aWxsIGFwcGx5IG9w
YWNpdHkgd2hlbiBkcmF3aW5nIChiZWNhdXNlIG9wYWNpdHkgaXMgbm9ybWFsbHkgYW5pbWF0ZWQp
LgotICAgIGF1dG8gY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkucmdiKCksIDEpOworICAg
IGF1dG8gY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRp
Y2F0b3JDb2xvcl0pLm9wYXF1ZUNvbG9yKCk7CiAgICAgYXV0byBzdHlsZSA9IGFkb3B0Q0YoQ0dT
dHlsZUNyZWF0ZUZvY3VzUmluZ1dpdGhDb2xvcigmZm9jdXNSaW5nU3R5bGUsIGNhY2hlZENHQ29s
b3IoY29sb3IpKSk7CiAgICAgQ0dDb250ZXh0U2V0U3R5bGUoY2dDb250ZXh0LCBzdHlsZS5nZXQo
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA5Myw3ICsxMDkzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRGaWxlVXBsb2FkSWNvbgogICAgICAgICB0aHVtYm5haWxSZWN0LmNvbnRy
YWN0KGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUsIGtNdWx0aXBsZVRodW1ibmFpbFNocmlu
a1NpemUpOwogCiAgICAgICAgIC8vIEJhY2tncm91bmQgcGljdHVyZSBmcmFtZSBhbmQgc2ltcGxl
IGJhY2tncm91bmQgaWNvbiB3aXRoIGEgZ3JhZGllbnQgbWF0Y2hpbmcgdGhlIGJ1dHRvbi4KLSAg
ICAgICAgQ29sb3IgYmFja2dyb3VuZEltYWdlQ29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciku
cmdiKCkpOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kSW1hZ2VDb2xvciA9IGJ1dHRvblJlbmRl
cmVyLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoRmxvYXRS
b3VuZGVkUmVjdCh0aHVtYm5haWxQaWN0dXJlRnJhbWVSZWN0LCBjb3JuZXJTaXplLCBjb3JuZXJT
aXplLCBjb3JuZXJTaXplLCBjb3JuZXJTaXplKSwgcGljdHVyZUZyYW1lQ29sb3IpOwogICAgICAg
ICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHRodW1ibmFpbFJlY3QsIGJhY2tncm91bmRJ
bWFnZUNvbG9yKTsKICAgICAgICAgewpAQCAtMTU1NCw3ICsxNTU0LDEyIEBAIENvbG9yIFJlbmRl
clRoZW1lSU9TOjpzeXN0ZW1Db2xvcihDU1NWYWwKICAgICAgICAgICAgIGF1dG8gaXQgPSBnbG9i
YWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAoKS5maW5kKENTU1ZhbHVlS2V5IHsgY3NzVmFsdWVJ
RCwgdXNlRGFya0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsIH0pOwog
ICAgICAgICAgICAgaWYgKGl0ID09IGdsb2JhbENTU1ZhbHVlVG9TeXN0ZW1Db2xvck1hcCgpLmVu
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3Nz
VmFsdWVJRCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoaXQtPnZhbHVlLnJn
YigpLCBDb2xvcjo6U2VtYW50aWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBjb2xvciB3aXRoIHRoZSBTZW1hbnRpYyBiaXQg
c2V0LiBVbmNsZWFyIHdoeQorICAgICAgICAgICAgLy8gdGhpcyB3YXMgZG9uZSBvbmx5IGhlcmUg
KGUuZy4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKCkgZG9lcyBub3QgZG8gdGhhdCkgYW5kCisg
ICAgICAgICAgICAvLyB3aHkgaXQgd2Fzbid0IGRvbmUgcHJpb3IgdG8gcHV0dGluZyB0aGUgY29s
b3IgaW4gdGhlIG1hcCB0byBiZWdpbiB3aXRoLgorICAgICAgICAgICAgLy8gKioqIFJhdGlvbmFs
aXplIHRoaXMgYmVmb3JlIGxhbmRpbmcgKioqIAorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKICAgICAgICAgfQogICAgICAgICBhdXRvIGNvbG9yID0gc3lzdGVtQ29sb3JGcm9tQ1NTVmFs
dWVJRChjc3NWYWx1ZUlELCB1c2VEYXJrQXBwZWFyYW5jZSwgdXNlRWxldmF0ZWRVc2VySW50ZXJm
YWNlTGV2ZWwpOwogICAgICAgICBpZiAoY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3
ICs0NjksNyBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1JpbmdDCiAgICAg
ICAgIHJldHVybiBvbGRBcXVhRm9jdXNSaW5nQ29sb3IoKTsKICAgICBMb2NhbERlZmF1bHRTeXN0
ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRpb25zLmNvbnRhaW5zKFN0eWxlQ29sb3I6
Ok9wdGlvbnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVj
dGVkIHRvIGJlIG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3
aGVuIGRyYXdpbmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAg
cmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBr
ZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgcmV0dXJuIGNvbG9y
RnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3BhcXVl
Q29sb3IoKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMjMgKzIzOCwyMyBAQCB2b2lkIFJl
bmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAKICAgICAgICAgaWYgKG8ucGFyZW50
KCkpIHsKICAgICAgICAgICAgIENvbG9yIGNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5yZ2IoKSAhPSBj
b2xvci5yZ2IoKSkKKyAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBjb2xvcikKICAgICAgICAgICAgICAg
ICB0cyA8PCAiIFtjb2xvcj0iIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwg
Il0iOwogCiAgICAgICAgICAgICAvLyBEbyBub3QgZHVtcCBpbnZhbGlkIG9yIHRyYW5zcGFyZW50
IGJhY2tncm91bmRzLCBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0LgogICAgICAgICAgICAgQ29s
b3IgYmFja2dyb3VuZENvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5
bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJn
YigpICE9IGJhY2tncm91bmRDb2xvci5yZ2IoKQotICAgICAgICAgICAgICAgICYmIGJhY2tncm91
bmRDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgICAgICAgICBpZiAoby5w
YXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcgorICAgICAgICAgICAgICAgICYmIGJhY2tncm91
bmRDb2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBb
Ymdjb2xvcj0iIDw8IGJhY2tncm91bmRDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8
ICJdIjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29sb3IgdGV4dEZpbGxDb2xvciA9IG8u
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENv
bG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpLnJnYigpICE9IHRleHRGaWxs
Q29sb3IucmdiKCkgIAotICAgICAgICAgICAgICAgICYmIHRleHRGaWxsQ29sb3IucmdiKCkgIT0g
Y29sb3IucmdiKCkgJiYgdGV4dEZpbGxDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQp
CisgICAgICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSAhPSB0ZXh0RmlsbENvbG9yCisgICAg
ICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciAhPSBjb2xvciAmJiB0ZXh0RmlsbENvbG9yICE9
IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0RmlsbENv
bG9yPSIgPDwgdGV4dEZpbGxDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsK
IAogICAgICAgICAgICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcik7Ci0gICAgICAg
ICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpLnJnYigpICE9IHRleHRTdHJva2VDb2xvci5yZ2Io
KQotICAgICAgICAgICAgICAgICYmIHRleHRTdHJva2VDb2xvci5yZ2IoKSAhPSBjb2xvci5yZ2Io
KSAmJiB0ZXh0U3Ryb2tlQ29sb3IucmdiKCkgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQorICAgICAg
ICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKSAhPSB0ZXh0U3Ryb2tlQ29sb3IKKyAgICAgICAg
ICAgICAgICAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gY29sb3IgJiYgdGV4dFN0cm9rZUNvbG9yICE9
IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0U3Ryb2tl
Q29sb3I9IiA8PCB0ZXh0U3Ryb2tlQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAi
XSI7CiAKICAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnRleHRTdHJva2VXaWR0
aCgpICE9IG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAmJiBvLnN0eWxlKCkudGV4dFN0cm9r
ZVdpZHRoKCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50Ojpz
dG9wQ29sb3JJbmNsdWRpbmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7
CiAgICAgYXV0byBzdG9wQ29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihz
dmdTdHlsZS5zdG9wQ29sb3IoKSk7CiAKLSAgICBmbG9hdCBjb2xvckFscGhhID0gc3RvcENvbG9y
LmFscGhhKCkgLyAyNTUuMDsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KCkgYnV0IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0
aGUgYWxwaGEgY29tcG9uZW50LgotICAgIHJldHVybiBjb2xvcldpdGhPdmVycmlkZUFscGhhKHN0
b3BDb2xvci5yZ2IoKSwgY29sb3JBbHBoYSAqIHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOworICAg
IHJldHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjE5ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBNYWtlIENvbG9yOjpy
Z2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb2xvcj46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbToKKyAg
ICAgICAgKHNjcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIwLTA1LTIwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBEaWN0YXRpb24gY29udGV4dCBzaG91
bGQgYmUgYW4gb2JqZWN0IGlkZW50aWZpZXIsIG5vdCBhIHR5cGUtcHVubmVkIHBvaW50ZXIKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAko
cmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw4NCArMTUyNiw2IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxXaW5kb3dGZWF0dXJlcz46OmRlY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ci12b2lkIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAg
ICAgZW5jb2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQo
KS5yZWQoKTsKLSAgICAgICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKTsK
LSAgICAgICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBl
bmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8
IGNvbG9yLmFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBlbmNvZGVyIDw8IGZhbHNlOwotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHVpbnQzMl90IHZhbHVlID0gY29sb3IucmdiKCkudmFsdWUoKTsKLQotICAgIGVuY29kZXIgPDwg
dHJ1ZTsKLSAgICBlbmNvZGVyIDw8IHZhbHVlOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8Q29s
b3I+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29sb3ImIGNvbG9yKQotewotICAgIGJvb2wg
aXNFeHRlbmRlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCBy
ZWQ7Ci0gICAgICAgIGZsb2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBm
bG9hdCBhbHBoYTsKLSAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29sb3IgPSBDb2xvcihyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgY29s
b3IgPSBDb2xvcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1aW50MzJf
dCB2YWx1ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29sb3IgPSBTaW1wbGVDb2xvciB7IHZhbHVlIH07Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLU9wdGlvbmFsPENvbG9yPiBBcmd1bWVudENvZGVyPENvbG9yPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgQ29sb3IgY29sb3I7Ci0gICAgaWYgKCFkZWNvZGUo
ZGVjb2RlciwgY29sb3IpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIGNvbG9yOwotfQotCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHZvaWQgQXJndW1lbnRD
b2RlcjxEcmFnRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2Vi
Vmlld0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9z
L1dLV2ViVmlld0lPUy5tbQkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1
MTMsNyBAQCBzdGF0aWMgV2ViQ29yZTo6Q29sb3Igc2Nyb2xsVmlld0JhY2tncm91CiAgICAgaWYg
KHpvb21TY2FsZSA8IG1pbmltdW1ab29tU2NhbGUpIHsKICAgICAgICAgQ0dGbG9hdCBzbG9wZSA9
IDEyOwogICAgICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBzdGQ6Om1heDxDR0Zsb2F0PigxIC0gc2xv
cGUgKiAobWluaW11bVpvb21TY2FsZSAtIHpvb21TY2FsZSksIDApOwotICAgICAgICBjb2xvciA9
IFdlYkNvcmU6OmNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IucmdiKCksIG9wYWNpdHkpOwor
ICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKG9wYWNpdHkpOwogICAgIH0KIAogICAgIHJldHVybiBjb2xvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399929</attachid>
            <date>2020-05-20 21:41:45 -0700</date>
            <delta_ts>2020-05-21 04:04:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200520214144.patch</filename>
            <type>text/plain</type>
            <size>42491</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA1LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBlZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3cpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92
ZXJyaWRlQWxwaGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp1cGRhdGVD
dWVGcm9tQ3VlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6cmdiIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdFRpbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSBjb25zdCk6CisKIDIwMjAt
MDUtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgaW1wbGljaXQgVVJMLT5TdHJpbmcgY29udmVyc2lvbiBvcGVyYXRvcnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJl
dmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODgyLDEzICs4ODIsMTMgQEAgQ29sb3IgSFRNTENv
bnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Y29sb3IoKS5yZ2IoKSksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplZENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmNvbG9yKCksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5j
b2xvcigpLnJnYigpKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuY29sb3IoKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTAsNyArMTA1MCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5
bGUoTXUKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgY29sb3IgPSBDb2xvcihw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKIAotICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvci5yZ2IoKSkpOworICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICAg
ICAgICAgIHN0eWxlID0gQ2FudmFzU3R5bGUoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5yZ2IoKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoc3R5bGUuaGFzT3ZlcnJpZGVBbHBoYSgpKQorICAgICAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkp
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CkBAIC00MDIsMTAgKzQwMSw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmhhc092ZXJy
aWRlQWxwaGEoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFJHQkEz
MiBoZXJlLgotICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLnJnYigpLCBzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFs
cGhhKCkpCisgICAgICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92
ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHlsZSA9IENhbnZh
c1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
Y2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKQEAgLTEzMTAsOCArMTMw
OCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICBzZXRTaGFkb3coRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJn
YigpLCBhbHBoYSkpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZygqYWxwaGEpOworICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVh
dGVGcm9tU3RyaW4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBDb2xvciB7IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iucmdi
KCksIGFscGhhKSB9OworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgSW5i
YW5kR2VuZXJpY1RleHRUcmFjazo6dXBkYXRlQ3VlRnIKICAgICBpZiAoaW5iYW5kQ3VlLnNpemUo
KSA+IDApCiAgICAgICAgIGN1ZS5zZXRTaXplKHN0ZDo6cm91bmQoaW5iYW5kQ3VlLnNpemUoKSkp
OwogICAgIGlmIChpbmJhbmRDdWUuYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICBjdWUuc2V0QmFja2dyb3VuZENvbG9yKGluYmFuZEN1ZS5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGN1ZS5zZXRCYWNrZ3JvdW5kQ29sb3IoaW5iYW5kQ3VlLmJhY2tncm91bmRD
b2xvcigpKTsKICAgICBpZiAoaW5iYW5kQ3VlLmZvcmVncm91bmRDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgY3VlLnNldEZvcmVncm91bmRDb2xvcihpbmJhbmRDdWUuZm9yZWdyb3VuZENvbG9y
KCkucmdiKCkpOworICAgICAgICBjdWUuc2V0Rm9yZWdyb3VuZENvbG9yKGluYmFuZEN1ZS5mb3Jl
Z3JvdW5kQ29sb3IoKSk7CiAgICAgaWYgKGluYmFuZEN1ZS5oaWdobGlnaHRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5oaWdobGlnaHRD
b2xvcigpLnJnYigpKTsKKyAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5o
aWdobGlnaHRDb2xvcigpKTsKIAogICAgIGlmIChpbmJhbmRDdWUuYWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6QWxpZ25tZW50OjpTdGFydCkKICAgICAgICAgY3VlLnNldEFsaWduKCJzdGFydCJf
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIFJHQkEzMiBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhmbG9hdCByLCBmbG8KICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRv
UkdCQUJ5dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwogfQogCi1SR0JBMzIgY29sb3JXaXRoT3Zl
cnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIHsgKGNvbG9yLnZhbHVlKCkgJiAweDAwRkZGRkZGKSB8IGNvbG9yRmxvYXRUb1JHQkFCeXRl
KG92ZXJyaWRlQWxwaGEpIDw8IDI0IH07Ci19Ci0KIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZs
b2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkK
IHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDI1NS4wOwpAQCAtMzM4LDE0ICszMzMs
MTUgQEAgU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZQogCiBTdHJpbmcg
Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
SGFuZGxlIGV4dGVuZGVkIGNvbG9ycy4KKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKICAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAocmdiKCkgPT0gYmxhY2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgcmdiKCkgPT0gYmxh
Y2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9h
dCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTM3MCw3ICszNjYs
NyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25z
dAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSB3aGl0ZSkKKyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiByZ2IoKSA9PSB3aGl0
ZSkKICAgICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCiAgICAgY29uc3QgZmxvYXQg
c2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC00MTUsNiArNDExLDgg
QEAgY29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZQogCiBDb2xvciBDb2xv
cjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBpZiAoIWlz
VmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gc291cmNlOwog
CkBAIC00MzEsNiArNDI5LDggQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBzb3Vy
Y2UpIAogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAg
IC8vIElmIHRoZSBjb2xvciBjb250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9u
ZS4KICAgICBpZiAoIWlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTQ2MCwx
NCArNDYwLDMyIEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgKICAg
ICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogfQogCitDb2xvciBDb2xvcjo6Y29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1v
dW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5kZWQo
KSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CiAK
LSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsgLy8gV2h5IGRvZXNuJ3QgdGhpcyB1c2Ug
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoKSBsaWtlIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoKT8KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KKyAgICBpbnQgbmV3QWxwaGEgPSBh
bHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCksIGJsdWUo
KSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBtYWtlUkdCQShyZWQoKSwgZ3JlZW4o
KSwgYmx1ZSgpLCBuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVz
dWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNv
bnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3It
PmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworCisgICAgQ29sb3IgcmVzdWx0
ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29sb3JGbG9h
dFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDk4LDI1
ICs1MTYsMzEgQEAgRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50cwogICAg
IHJldHVybiB7IH07CiB9CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEz
MiBwaXhlbENvbG9yKQorUkdCQTMyIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENv
bG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwog
ICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKFJHQkEzMiBwaXhlbENvbG9yKQogewotICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0g
ICAgICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVJH
Qihjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVl
bigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1KTsKLSAgICAgICAgcmV0
dXJuIGNvbG9yLnJnYigpOwotICAgIH0KKyAgICBpZiAoIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgIHJldHVybiBwaXhlbENv
bG9yOworfQogCi0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9y
LmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICog
MjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSk7CitSR0JBMzIgQ29sb3I6OnBy
ZW11bHRpcGxpZWRBUkdCKCkgY29uc3QKK3sKKyAgICBpZiAoaXNPcGFxdWUoKSkgeworICAgICAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VSR0IoYXNFeHRlbmRl
ZCgpLnJlZCgpICogMjU1LCBhc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgp
LmJsdWUoKSAqIDI1NSk7CisgICAgICAgIHJldHVybiByZ2IoKTsKKyAgICB9CiAKLSAgICByZXR1
cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xv
ci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAg
IHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBh
c0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUpOworICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJH
QkEocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiB9CiAKIGJvb2wgZXh0ZW5kZWRD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC01MjgsMzAgKzU1
MiwzNSBAQCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29s
b3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkKQorQ29sb3Ig
Q29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgLy8gV2UgbmVl
ZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0
aGUgYW5pbWF0aW9uCiAgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoYmxl
bmRQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgIC8vIFNpbmNlIHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgICAg
IENvbG9yIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoZnJvbSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgICAgIENvbG9yIHByZW11bHRU
byA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcih0bykgOiBDb2xvcjo6
dHJhbnNwYXJlbnQ7Ci0KLSAgICAgICAgQ29sb3IgcHJlbXVsdEJsZW5kZWQoYmxlbmQocHJlbXVs
dEZyb20ucmVkKCksIHByZW11bHRUby5yZWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxl
bmQocHJlbXVsdEZyb20uZ3JlZW4oKSwgcHJlbXVsdFRvLmdyZWVuKCksIHByb2dyZXNzKSwKLSAg
ICAgICAgICAgIGJsZW5kKHByZW11bHRGcm9tLmJsdWUoKSwgcHJlbXVsdFRvLmJsdWUoKSwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQocHJlbXVsdEZyb20uYWxwaGEoKSwgcHJlbXVsdFRv
LmFscGhhKCksIHByb2dyZXNzKSk7Ci0KLSAgICAgICAgcmV0dXJuIENvbG9yKGNvbG9yRnJvbVBy
ZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkLnJnYigpKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIENvbG9yKGJsZW5kKGZyb20ucmVkKCksIHRvLnJlZCgpLCBwcm9ncmVzcyksCi0gICAgICAg
IGJsZW5kKGZyb20uZ3JlZW4oKSwgdG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVu
ZChmcm9tLmJsdWUoKSwgdG8uYmx1ZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20u
YWxwaGEoKSwgdG8uYWxwaGEoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgLy8gU2luY2UgcHJlbXVs
dGlwbGllZEFSR0IoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBzcGVjaWFsLWNhc2UgdGhhdC4KKyAg
ICAgICAgUkdCQTMyIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gZnJvbS5wcmVtdWx0aXBs
aWVkQVJHQigpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgICAgICBSR0JBMzIgcHJlbXVsdFRv
ID0gdG8uYWxwaGEoKSA/IHRvLnByZW11bHRpcGxpZWRBUkdCKCkgOiBDb2xvcjo6dHJhbnNwYXJl
bnQ7CisKKyAgICAgICAgUkdCQTMyIHByZW11bHRCbGVuZGVkID0gbWFrZVJHQkEoCisgICAgICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRv
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0RnJvbS5ncmVlbkNvbXBvbmVudCgpLCBwcmVtdWx0VG8uZ3JlZW5Db21wb25lbnQoKSwg
cHJvZ3Jlc3MpLAorICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0
VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgICAgICk7CisKKyAgICAgICAgcmV0
dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkKTsKKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLnJlZCgpLCB0by5yZWQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmdyZWVuKCksIHRvLmdy
ZWVuKCksIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbS5ibHVlKCksIHRv
LmJsdWUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmFscGhhKCks
IHRvLmFscGhhKCksIHByb2dyZXNzKQorICAgIH07CiB9CiAKIHZvaWQgQ29sb3I6OnRhZ0FzVmFs
aWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw4ICs5Miw4IEBAIGNvbnN0ZXhwciBSR0JBMzIgbWFrZVJH
QkEoaW50IHIsIGludCBnLCAKIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwogUkdCQTMyIG1ha2VVblBy
ZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAotV0VCQ09SRV9F
WFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBv
dmVycmlkZUFscGhhKTsKLVJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xv
ciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOworUkdCQTMyIGNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKFJHQkEzMik7CitSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Io
UkdCQTMyKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CkBA
IC0xMzcsNyArMTM3LDYgQEAgcHVibGljOgogICAgICAgICBzZXRSR0IobWFrZVJHQkEzMkZyb21G
bG9hdHMociwgZywgYiwgYSkpOwogICAgIH0KIAotICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3Ig
ZnJvbSB0aGUgc3BlY2lmaWMgQ01ZSyBhbmQgYWxwaGEgdmFsdWVzLgogICAgIENvbG9yKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiAgICAgewogICAgICAgICBz
ZXRSR0IobWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwpAQCAtMTk2LDE1ICsxOTUs
MTggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiByZ2IoKS5pc09wYXF1ZSgpOyB9
CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlzaWJsZSgpOyB9CiAKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIHByZXNlbmNl
IG9mIEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IHJlZCgpIGNvbnN0IHsgcmV0dXJuIHJnYigpLnJl
ZENvbXBvbmVudCgpOyB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBkb2VzIG5vdCBt
YWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAgIGludCBncmVl
bigpIGNvbnN0IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50KCk7IH0KKyAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIHByZXNlbmNlIG9m
IEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVl
Q29tcG9uZW50KCk7IH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvciBtYWtlIHRoaXMg
d29yayB3aXRoIEV4dGVuZGVkQ29sb3IKICAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBy
Z2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CiAKICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19j
YXN0PGZsb2F0PihyZ2IoKS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KIAotICAgIFJHQkEz
MiByZ2IoKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IGNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CkBAIC0yMjMsMTAgKzIyNSwxNSBAQCBwdWJsaWM6CiAg
ICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhX
aGl0ZSgpIGNvbnN0OwogCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxv
YXQpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29u
c3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkID0g
dHJ1ZSk7CiAKLSAgICAvLyBSZXR1cm5zIGEgY29sb3IgdGhhdCBoYXMgdGhlIHNhbWUgUkdCIHZh
bHVlcywgYnV0IHdpdGggdGhlIGdpdmVuIEEuCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQpIGNvbnN0OwogICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBj
b25zdDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91
bmRpbmcgdmFyaWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBD
b2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhm
bG9hdCkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoZmxvYXQpIGNvbnN0OworCiAgICAgQ29sb3Igb3BhcXVlQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQogCiAgICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Ig
b3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCkBAIC0yODQsNyArMjkx
LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3Im
KTsKICAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKIAorICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNv
ZGVyJik7CisKKyAgICBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0IoKSBjb25zdDsKKwogcHJpdmF0
ZToKKyAgICBSR0JBMzIgcmdiKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBn
LCBpbnQgYikgeyBzZXRSR0IobWFrZVJHQihyLCBnLCBiKSk7IH0KICAgICB2b2lkIHNldFJHQihS
R0JBMzIpOwogICAgIHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZs
YWdzIHw9IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQ7IH0KQEAgLTMxMiw4ICszMjUsNiBAQCBwcml2
YXRlOgogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGNvbG9yRnJv
bVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMik7Ci1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgQ29sb3ImKTsKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29s
b3JzLgogV0VCQ09SRV9FWFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9y
JiwgY29uc3QgQ29sb3ImKTsKIApAQCAtMzYxLDYgKzM3MiwxMSBAQCBpbmxpbmUgYm9vbCBlcXVh
bElnbm9yaW5nU2VtYW50aWNDb2xvcihjCiAgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkgPT0gKGIubV9jb2xvckRh
dGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9yQml0KTsKIH0KIAor
aW5saW5lIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRv
dWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCit7CisgICAgcmV0dXJuIENv
bG9yOjpibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MsIGJsZW5kUHJlbXVsdGlwbGllZCk7Cit9CisK
IGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKQEAgLTM5MywxNiArNDA5LDkgQEAgaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1
NSh1aW50MTZfdAogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsK
IH0KIAotaW5saW5lIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwg
T3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0dXJuIG92ZXJyaWRlQWxw
aGEgPyBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBvdmVycmlkZUFscGhhLnZhbHVlKCkp
IDogY29sb3I7Ci19Ci0KIGlubGluZSBSR0JBMzIgQ29sb3I6OnJnYigpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZSwgb3IgcHJvZHVj
ZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRlZENvbG9yLiBJZGVh
bGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0aGUgcmdiKCkgY2Fs
bCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NF
UlQoIWlzRXh0ZW5kZWQoKSkgaGVyZQogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQzMl90
PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIpIH07CiB9CiAKQEAgLTQ0Miw2ICs0NTEs
NzQgQEAgY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIAogICAgIHJldHVy
biB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAweEZGKSkg
PDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAweEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYp
KSkgfTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29sb3I6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAg
ICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5yZWQo
KTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKKyAgICAgICAgZW5j
b2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbmNvZGVyIDw8IGZhbHNlOworCisg
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhl
ciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCisKKyAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigpLnZh
bHVlKCk7CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2RlciA8PCB2YWx1ZTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgYm9vbCBpc0V4dGVuZGVkOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBpZiAoaXNFeHRlbmRlZCkgeworICAgICAgICBmbG9hdCByZWQ7CisgICAgICAgIGZsb2F0
IGdyZWVuOworICAgICAgICBmbG9hdCBibHVlOworICAgICAgICBmbG9hdCBhbHBoYTsKKyAgICAg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
ZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGdyZWVuKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JT
cGFjZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4g
Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAgIH0KKworICAg
IGJvb2wgaXNWYWxpZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1
cm4gQ29sb3IoKTsKKworICAgIHVpbnQzMl90IHZhbHVlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENv
bG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIHZv
aWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxwaGEgPCAxKQotICAgICAg
ICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShj
b2xvci5yZ2IoKSwgY29sb3IuYWxwaGEoKSAvIDI1NS5mICogZ2xvYmFsQWxwaGEpKTsKKyAgICAg
ICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm50aXZlUm91bmRpbmcoY29sb3IuYWxwaGEoKSAvIDI1NS5mICogZ2xvYmFsQWxwaGEp
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwg
Y29sb3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCB2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kCiAgICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWlu
dGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2ljYWxTaXplLndpZHRoKCk7IHgrKykgewogICAg
ICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBp
eGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAg
ICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLCBsb29r
VXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUo
KV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3IgPSBj
b2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xv
ciA9IG1ha2VSR0JBKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkQ29tcG9uZW50KCldLCBsb29r
VXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtwaXhlbENv
bG9yLmJsdWVDb21wb25lbnQoKV0sIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7CiAgICAg
ICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKS52
YWx1ZSgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjMsMjQgKzEyMywxOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25z
dCBDb2xvCiAKIENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKCFjb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgc3dpdGNoIChjb2xvci5y
Z2IoKS52YWx1ZSgpKSB7Ci0gICAgICAgIGNhc2UgQ29sb3I6OnRyYW5zcGFyZW50LnZhbHVlKCk6
IHsKLSAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50Q0dDb2xvciA9IGxl
YWtDR0NvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudENHQ29sb3I7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb2xvcjo6YmxhY2sudmFsdWUoKTogewotICAgICAg
ICAgICAgc3RhdGljIENHQ29sb3JSZWYgYmxhY2tDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3Ip
OwotICAgICAgICAgICAgcmV0dXJuIGJsYWNrQ0dDb2xvcjsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIENvbG9yOjp3aGl0ZS52YWx1ZSgpOiB7Ci0gICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJl
ZiB3aGl0ZUNHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7Ci0gICAgICAgICAgICByZXR1cm4g
d2hpdGVDR0NvbG9yOwotICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoY29sb3IgPT0gQ29s
b3I6OnRyYW5zcGFyZW50KSB7CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50
Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50
Q0dDb2xvcjsKKyAgICB9CisgICAgaWYgKENvbG9yOjppc0JsYWNrQ29sb3IoY29sb3IpKSB7Cisg
ICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9y
KTsKKyAgICAgICAgcmV0dXJuIGJsYWNrQ0dDb2xvcjsKKyAgICB9CisgICAgaWYgKENvbG9yOjpp
c1doaXRlQ29sb3IoY29sb3IpKSB7CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHdoaXRlQ0dD
b2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsK
ICAgICB9Ci0KLSAgICBBU1NFUlQoY29sb3IuaXNFeHRlbmRlZCgpIHx8IGNvbG9yLnJnYigpLnZh
bHVlKCkpOwogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbnlMUlVDYWNoZTxDb2xvciwg
UmV0YWluUHRyPENHQ29sb3JSZWY+LCAzMj4+IGNhY2hlOwogICAgIHJldHVybiBjYWNoZS5nZXQo
KS5nZXQoY29sb3IpLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw5ICs2Myw3IEBAIHZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KCkgYnV0
IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0aGUgYWxwaGEgY29tcG9uZW50IHRoYXQg
YnJlYWtzIHNvbWUgdGVzdHMuCi0gICAgZmxvYXQgY29sb3JBbHBoYSA9IGZsb29kQ29sb3IoKS5h
bHBoYSgpIC8gMjU1LjA7Ci0gICAgYXV0byBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
Zmxvb2RDb2xvcigpLnJnYigpLCBjb2xvckFscGhhICogZmxvb2RPcGFjaXR5KCkpOworICAgIGF1
dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOwogICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IEMKICAgICBnbFVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBs
eSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBD
b2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKGNvbG9yLnByZW11bHRpcGxp
ZWRBUkdCKCkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRo
KTsKIApAQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KFRleHR1cmUKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdl
IG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9z
aXRpbmcuCiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0
Q29tcG9uZW50cyBkaXJlY3RseS4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29s
b3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHNo
YWRvdy5jb2xvcigpLnByZW11bHRpcGxpZWRBUkdCKCkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKICAgICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0
aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsK
ICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwg
MCwgMCk7CkBAIC02NzksNyArNjc5LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xp
ZENvbG9yKGNvbgogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKICAg
ICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0Q29tcG9uZW50cyBkaXJlY3Rs
eS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKGNvbG9yKSkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gQ29sb3IoY29sb3IucHJlbXVsdGlwbGllZEFSR0IoKSkudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywg
YiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFn
cyB8PSBTaG91bGRCbGVuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTkgKzQxLDE0IEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9S
X0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAg
IGlmIChpc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgYXV0byBhc1JHQkEgPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7Ci0gICAgICAgIHJldHVybiBEMkQxOjpDb2xvckYoYXNSR0JBLmNvbXBvbmVu
dHNbMF0sIGFzUkdCQS5jb21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNSR0JB
LmNvbXBvbmVudHNbM10pOwotICAgIH0KLQotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBhbHBoYSgp
IC8gMjU1LjBmOwotICAgIHJldHVybiBEMkQxOjpDb2xvckYocmdiKCkudmFsdWUoKSwgY29sb3JB
bHBoYSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
CisgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJh
dG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsKLSAgICBhdXRvIGFzUkdCQSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKLSAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYoYXNSR0JBLmNvbXBv
bmVudHNbMF0sIGFzUkdCQS5jb21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNS
R0JBLmNvbXBvbmVudHNbM10pOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOworICAgIHJldHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjE5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksMTAgKzM3OSw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3QKIAogRDJEMV9DT0xPUl9GIEdyYXBo
aWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25z
dAogewotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBjb2xvci5hbHBoYUFzRmxvYXQoKTsKLSAgICBm
bG9hdCBnbG9iYWxBbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7Ci0KLSAgICBy
ZXR1cm4gRDJEMTo6Q29sb3JGKGNvbG9yLnJnYigpLCBnbG9iYWxBbHBoYSAqIGNvbG9yQWxwaGEp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEds
b2JhbEFscGhhKCkpOwogfQogCiBJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1h
Yy5tbQkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgc3RhdGljIGJvb2wg
ZHJhd0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdAogCiAgICAgLy8gRklYTUU6IFRoaXMgY29sb3Ig
c2hvdWxkIGJlIHNoYXJlZCB3aXRoIFJlbmRlclRoZW1lTWFjLiBGb3Igbm93IGp1c3QgdXNlIHRo
ZSBzYW1lIE5TQ29sb3IgY29sb3IuCiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJl
IG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3aGVuIGRyYXdp
bmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAgYXV0byBjb2xv
ciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBrZXli
b2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgYXV0byBjb2xvciA9IGNv
bG9yRnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3Bh
cXVlQ29sb3IoKTsKICAgICBhdXRvIHN0eWxlID0gYWRvcHRDRihDR1N0eWxlQ3JlYXRlRm9jdXNS
aW5nV2l0aENvbG9yKCZmb2N1c1JpbmdTdHlsZSwgY2FjaGVkQ0dDb2xvcihjb2xvcikpKTsKICAg
ICBDR0NvbnRleHRTZXRTdHlsZShjZ0NvbnRleHQsIHN0eWxlLmdldCgpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uCiAgICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRpcGxlVGh1
bWJuYWlsU2hyaW5rU2l6ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAKICAgICAg
ICAgLy8gQmFja2dyb3VuZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3VuZCBpY29u
IHdpdGggYSBncmFkaWVudCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xvciBiYWNr
Z3JvdW5kSW1hZ2VDb2xvciA9IENvbG9yKGJ1dHRvblJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKSk7CisgICAgICAg
IENvbG9yIGJhY2tncm91bmRJbWFnZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIuc3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHRodW1i
bmFpbFBpY3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUs
IGNvcm5lclNpemUpLCBwaWN0dXJlRnJhbWVDb2xvcik7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZmlsbFJlY3QodGh1bWJuYWlsUmVjdCwgYmFja2dyb3VuZEltYWdlQ29sb3IpOwogICAg
ICAgICB7CkBAIC0xNTU0LDcgKzE1NTQsMTIgQEAgQ29sb3IgUmVuZGVyVGhlbWVJT1M6OnN5c3Rl
bUNvbG9yKENTU1ZhbAogICAgICAgICAgICAgYXV0byBpdCA9IGdsb2JhbENTU1ZhbHVlVG9TeXN0
ZW1Db2xvck1hcCgpLmZpbmQoQ1NTVmFsdWVLZXkgeyBjc3NWYWx1ZUlELCB1c2VEYXJrQXBwZWFy
YW5jZSwgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwgfSk7CiAgICAgICAgICAgICBpZiAo
aXQgPT0gZ2xvYmFsQ1NTVmFsdWVUb1N5c3RlbUNvbG9yTWFwKCkuZW5kKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlELCBvcHRpb25z
KTsKLSAgICAgICAgICAgIHJldHVybiBDb2xvcihpdC0+dmFsdWUucmdiKCksIENvbG9yOjpTZW1h
bnRpYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHVzZWQgdG8g
Y3JlYXRlIGEgbmV3IGNvbG9yIHdpdGggdGhlIFNlbWFudGljIGJpdCBzZXQuIFVuY2xlYXIgd2h5
CisgICAgICAgICAgICAvLyB0aGlzIHdhcyBkb25lIG9ubHkgaGVyZSAoZS5nLiBSZW5kZXJUaGVt
ZTo6c3lzdGVtQ29sb3IoKSBkb2VzIG5vdCBkbyB0aGF0KSBhbmQKKyAgICAgICAgICAgIC8vIHdo
eSBpdCB3YXNuJ3QgZG9uZSBwcmlvciB0byBwdXR0aW5nIHRoZSBjb2xvciBpbiB0aGUgbWFwIHRv
IGJlZ2luIHdpdGguCisgICAgICAgICAgICAvLyAqKiogUmF0aW9uYWxpemUgdGhpcyBiZWZvcmUg
bGFuZGluZyAqKiogCisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwogICAgICAgICB9CiAg
ICAgICAgIGF1dG8gY29sb3IgPSBzeXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEKGNzc1ZhbHVlSUQs
IHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCk7CiAgICAg
ICAgIGlmIChjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0JKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDY5LDcgKzQ2OSw3IEBAIENvbG9y
IFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUZvY3VzUmluZ0MKICAgICAgICAgcmV0dXJuIG9sZEFx
dWFGb2N1c1JpbmdDb2xvcigpOwogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UgbG9j
YWxBcHBlYXJhbmNlKG9wdGlvbnMuY29udGFpbnMoU3R5bGVDb2xvcjo6T3B0aW9uczo6VXNlRGFy
a0FwcGVhcmFuY2UpKTsKICAgICAvLyBUaGUgY29sb3IgaXMgZXhwZWN0ZWQgdG8gYmUgb3BhcXVl
LCBzaW5jZSBDb3JlR3JhcGhpY3Mgd2lsbCBhcHBseSBvcGFjaXR5IHdoZW4gZHJhd2luZyAoYmVj
YXVzZSBvcGFjaXR5IGlzIG5vcm1hbGx5IGFuaW1hdGVkKS4KLSAgICByZXR1cm4gY29sb3JXaXRo
T3ZlcnJpZGVBbHBoYShjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRp
Y2F0b3JDb2xvcl0pLnJnYigpLCAxKTsKKyAgICByZXR1cm4gY29sb3JGcm9tTlNDb2xvcihbTlND
b2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5vcGFxdWVDb2xvcigpOwogfQogCiBD
b2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0
aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAyNjE5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzOCwyMyArMjM4LDIzIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6
d3JpdGVSZW5kZXJPYmplY3QKIAogICAgICAgICBpZiAoby5wYXJlbnQoKSkgewogICAgICAgICAg
ICAgQ29sb3IgY29sb3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpOwotICAgICAgICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLnJnYigpICE9IGNvbG9yLnJnYigpKQorICAg
ICAgICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpICE9IGNvbG9yKQogICAgICAgICAgICAgICAgIHRzIDw8ICIgW2NvbG9y
PSIgPDwgY29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiXSI7CiAKICAgICAgICAg
ICAgIC8vIERvIG5vdCBkdW1wIGludmFsaWQgb3IgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMsIHNp
bmNlIHRoYXQgaXMgdGhlIGRlZmF1bHQuCiAgICAgICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29s
b3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikucmdiKCkgIT0gYmFja2dyb3Vu
ZENvbG9yLnJnYigpCi0gICAgICAgICAgICAgICAgJiYgYmFja2dyb3VuZENvbG9yLnJnYigpICE9
IENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgIT0gYmFj
a2dyb3VuZENvbG9yCisgICAgICAgICAgICAgICAgJiYgYmFja2dyb3VuZENvbG9yICE9IENvbG9y
Ojp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFtiZ2NvbG9yPSIgPDwgYmFj
a2dyb3VuZENvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIl0iOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBDb2xvciB0ZXh0RmlsbENvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwotICAgICAgICAg
ICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5V2Via2l0VGV4dEZpbGxDb2xvcikucmdiKCkgIT0gdGV4dEZpbGxDb2xvci5yZ2IoKSAgCi0g
ICAgICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvci5yZ2IoKSAhPSBjb2xvci5yZ2IoKSAmJiB0
ZXh0RmlsbENvbG9yLnJnYigpICE9IENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICAgICAgICAgIGlm
IChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdl
YmtpdFRleHRGaWxsQ29sb3IpICE9IHRleHRGaWxsQ29sb3IKKyAgICAgICAgICAgICAgICAmJiB0
ZXh0RmlsbENvbG9yICE9IGNvbG9yICYmIHRleHRGaWxsQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFy
ZW50KQogICAgICAgICAgICAgICAgIHRzIDw8ICIgW3RleHRGaWxsQ29sb3I9IiA8PCB0ZXh0Rmls
bENvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIl0iOwogCiAgICAgICAgICAgICBD
b2xvciB0ZXh0U3Ryb2tlQ29sb3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVu
dCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2VDb2xvcikucmdiKCkgIT0gdGV4dFN0cm9rZUNvbG9yLnJnYigpCi0gICAgICAgICAgICAg
ICAgJiYgdGV4dFN0cm9rZUNvbG9yLnJnYigpICE9IGNvbG9yLnJnYigpICYmIHRleHRTdHJva2VD
b2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgICAgICAgICBpZiAoby5wYXJl
bnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0
U3Ryb2tlQ29sb3IpICE9IHRleHRTdHJva2VDb2xvcgorICAgICAgICAgICAgICAgICYmIHRleHRT
dHJva2VDb2xvciAhPSBjb2xvciAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFy
ZW50KQogICAgICAgICAgICAgICAgIHRzIDw8ICIgW3RleHRTdHJva2VDb2xvcj0iIDw8IHRleHRT
dHJva2VDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsKIAogICAgICAgICAg
ICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudGV4dFN0cm9rZVdpZHRoKCkgIT0gby5zdHlsZSgp
LnRleHRTdHJva2VXaWR0aCgpICYmIG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSA+IDApCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MTk3MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDkgKzk0LDcgQEAgQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGlu
ZwogICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKICAgICBhdXRvIHN0b3BD
b2xvciA9IHN0eWxlLmNvbG9yUmVzb2x2aW5nQ3VycmVudENvbG9yKHN2Z1N0eWxlLnN0b3BDb2xv
cigpKTsKIAotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBzdG9wQ29sb3IuYWxwaGEoKSAvIDI1NS4w
OwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoKSBidXQgdGhhdCBoYXMgZGlmZmVyZW50IHJvdW5kaW5nIG9mIHRoZSBhbHBoYSBjb21wb25l
bnQuCi0gICAgcmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoc3RvcENvbG9yLnJnYigpLCBj
b2xvckFscGhhICogc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CisgICAgcmV0dXJuIHN0b3BDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdmdT
dHlsZS5zdG9wT3BhY2l0eSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk4
MikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTggQEAKKzIwMjAtMDUtMjAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAg
ICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IE1ha2UgQ29sb3I6OnJnYigpIHByaXZhdGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE4NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdPUksgSU4gUFJP
R1JFU1MKKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tOgorICAgICAgICAoc2Nyb2xsVmll
d0JhY2tncm91bmRDb2xvcik6CisKIDIwMjAtMDUtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIERpY3RhdGlvbiBjb250ZXh0IHNob3VsZCBiZSBhbiBvYmplY3Qg
aWRlbnRpZmllciwgbm90IGEgdHlwZS1wdW5uZWQgcG9pbnRlcgpJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNjE5NzAp
CisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTI2LDg0ICsxNTI2LDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdpbmRv
d0ZlYXR1cmVzPjo6ZGVjbwogICAgIHJldHVybiB0cnVlOwogfQogCi0KLXZvaWQgQXJndW1lbnRD
b2RlcjxDb2xvcj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBlbmNvZGVyIDw8IHRy
dWU7Ci0gICAgICAgIGVuY29kZXIgPDwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpOwotICAgICAg
ICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVlbigpOwotICAgICAgICBlbmNvZGVy
IDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgY29sb3Iu
YXNFeHRlbmRlZCgpLmFscGhhKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgY29sb3IuYXNFeHRlbmRl
ZCgpLmNvbG9yU3BhY2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVuY29kZXIg
PDwgZmFsc2U7Ci0KLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBlbmNvZGVy
IDw8IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3QgdmFsdWUg
PSBjb2xvci5yZ2IoKS52YWx1ZSgpOwotCi0gICAgZW5jb2RlciA8PCB0cnVlOwotICAgIGVuY29k
ZXIgPDwgdmFsdWU7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBDb2xvciYgY29sb3IpCi17Ci0gICAgYm9vbCBpc0V4dGVuZGVkOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChpc0V4dGVuZGVkKSB7Ci0gICAgICAgIGZsb2F0IHJlZDsKLSAgICAgICAgZmxv
YXQgZ3JlZW47Ci0gICAgICAgIGZsb2F0IGJsdWU7Ci0gICAgICAgIGZsb2F0IGFscGhhOwotICAg
ICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShncmVlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoYWxwaGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBjb2xvciA9IENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBj
b2xvclNwYWNlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBpc1Zh
bGlkOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNWYWxpZCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBjb2xvciA9IENvbG9yKCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHVpbnQzMl90IHZhbHVlOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
b2xvciA9IFNpbXBsZUNvbG9yIHsgdmFsdWUgfTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotT3B0
aW9uYWw8Q29sb3I+IEFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBDb2xvciBjb2xvcjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBjb2xvcikp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gY29sb3I7Ci19Ci0K
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogdm9pZCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1t
CShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dL
V2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBX
ZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3UKICAgICBpZiAoem9vbVNjYWxlIDwgbWlu
aW11bVpvb21TY2FsZSkgewogICAgICAgICBDR0Zsb2F0IHNsb3BlID0gMTI7CiAgICAgICAgIENH
RmxvYXQgb3BhY2l0eSA9IHN0ZDo6bWF4PENHRmxvYXQ+KDEgLSBzbG9wZSAqIChtaW5pbXVtWm9v
bVNjYWxlIC0gem9vbVNjYWxlKSwgMCk7Ci0gICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Y29sb3JX
aXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgb3BhY2l0eSk7CisgICAgICAgIGNvbG9yID0g
Y29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcob3BhY2l0eSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGNvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399949</attachid>
            <date>2020-05-21 04:04:14 -0700</date>
            <delta_ts>2020-05-21 11:13:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200521040414.patch</filename>
            <type>text/plain</type>
            <size>43484</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA1LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBlZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3cpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92
ZXJyaWRlQWxwaGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp1cGRhdGVD
dWVGcm9tQ3VlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6cmdiIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdFRpbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSBjb25zdCk6CisKIDIwMjAt
MDUtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgaW1wbGljaXQgVVJMLT5TdHJpbmcgY29udmVyc2lvbiBvcGVyYXRvcnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJl
dmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODgyLDEzICs4ODIsMTMgQEAgQ29sb3IgSFRNTENv
bnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Y29sb3IoKS5yZ2IoKSksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplZENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmNvbG9yKCksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5j
b2xvcigpLnJnYigpKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuY29sb3IoKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTAsNyArMTA1MCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5
bGUoTXUKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgY29sb3IgPSBDb2xvcihw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKIAotICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvci5yZ2IoKSkpOworICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICAg
ICAgICAgIHN0eWxlID0gQ2FudmFzU3R5bGUoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5yZ2IoKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoc3R5bGUuaGFzT3ZlcnJpZGVBbHBoYSgpKQorICAgICAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkp
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CkBAIC00MDIsMTAgKzQwMSw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmhhc092ZXJy
aWRlQWxwaGEoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFJHQkEz
MiBoZXJlLgotICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLnJnYigpLCBzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFs
cGhhKCkpCisgICAgICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92
ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHlsZSA9IENhbnZh
c1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
Y2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKQEAgLTEzMTAsOCArMTMw
OCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICBzZXRTaGFkb3coRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJn
YigpLCBhbHBoYSkpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZygqYWxwaGEpOworICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVh
dGVGcm9tU3RyaW4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBDb2xvciB7IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iucmdi
KCksIGFscGhhKSB9OworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgSW5i
YW5kR2VuZXJpY1RleHRUcmFjazo6dXBkYXRlQ3VlRnIKICAgICBpZiAoaW5iYW5kQ3VlLnNpemUo
KSA+IDApCiAgICAgICAgIGN1ZS5zZXRTaXplKHN0ZDo6cm91bmQoaW5iYW5kQ3VlLnNpemUoKSkp
OwogICAgIGlmIChpbmJhbmRDdWUuYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICBjdWUuc2V0QmFja2dyb3VuZENvbG9yKGluYmFuZEN1ZS5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGN1ZS5zZXRCYWNrZ3JvdW5kQ29sb3IoaW5iYW5kQ3VlLmJhY2tncm91bmRD
b2xvcigpKTsKICAgICBpZiAoaW5iYW5kQ3VlLmZvcmVncm91bmRDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgY3VlLnNldEZvcmVncm91bmRDb2xvcihpbmJhbmRDdWUuZm9yZWdyb3VuZENvbG9y
KCkucmdiKCkpOworICAgICAgICBjdWUuc2V0Rm9yZWdyb3VuZENvbG9yKGluYmFuZEN1ZS5mb3Jl
Z3JvdW5kQ29sb3IoKSk7CiAgICAgaWYgKGluYmFuZEN1ZS5oaWdobGlnaHRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5oaWdobGlnaHRD
b2xvcigpLnJnYigpKTsKKyAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5o
aWdobGlnaHRDb2xvcigpKTsKIAogICAgIGlmIChpbmJhbmRDdWUuYWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6QWxpZ25tZW50OjpTdGFydCkKICAgICAgICAgY3VlLnNldEFsaWduKCJzdGFydCJf
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIFJHQkEzMiBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhmbG9hdCByLCBmbG8KICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRv
UkdCQUJ5dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwogfQogCi1SR0JBMzIgY29sb3JXaXRoT3Zl
cnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIHsgKGNvbG9yLnZhbHVlKCkgJiAweDAwRkZGRkZGKSB8IGNvbG9yRmxvYXRUb1JHQkFCeXRl
KG92ZXJyaWRlQWxwaGEpIDw8IDI0IH07Ci19Ci0KIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZs
b2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkK
IHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDI1NS4wOwpAQCAtMzM4LDE0ICszMzMs
MTUgQEAgU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZQogCiBTdHJpbmcg
Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
SGFuZGxlIGV4dGVuZGVkIGNvbG9ycy4KKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKICAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAocmdiKCkgPT0gYmxhY2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgcmdiKCkgPT0gYmxh
Y2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9h
dCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTM3MCw3ICszNjYs
NyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25z
dAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSB3aGl0ZSkKKyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiByZ2IoKSA9PSB3aGl0
ZSkKICAgICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCiAgICAgY29uc3QgZmxvYXQg
c2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC00MTUsNiArNDExLDgg
QEAgY29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZQogCiBDb2xvciBDb2xv
cjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBpZiAoIWlz
VmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gc291cmNlOwog
CkBAIC00MzEsNiArNDI5LDggQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBzb3Vy
Y2UpIAogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAg
IC8vIElmIHRoZSBjb2xvciBjb250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9u
ZS4KICAgICBpZiAoIWlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTQ2MCwx
NCArNDYwLDMyIEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgKICAg
ICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogfQogCitDb2xvciBDb2xvcjo6Y29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1v
dW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5kZWQo
KSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CiAK
LSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsgLy8gV2h5IGRvZXNuJ3QgdGhpcyB1c2Ug
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoKSBsaWtlIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoKT8KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KKyAgICBpbnQgbmV3QWxwaGEgPSBh
bHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCksIGJsdWUo
KSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBtYWtlUkdCQShyZWQoKSwgZ3JlZW4o
KSwgYmx1ZSgpLCBuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVz
dWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNv
bnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3It
PmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworCisgICAgQ29sb3IgcmVzdWx0
ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29sb3JGbG9h
dFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDk4LDI1
ICs1MTYsMzEgQEAgRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50cwogICAg
IHJldHVybiB7IH07CiB9CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEz
MiBwaXhlbENvbG9yKQorUkdCQTMyIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENv
bG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwog
ICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKFJHQkEzMiBwaXhlbENvbG9yKQogewotICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0g
ICAgICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVJH
Qihjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVl
bigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1KTsKLSAgICAgICAgcmV0
dXJuIGNvbG9yLnJnYigpOwotICAgIH0KKyAgICBpZiAoIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgIHJldHVybiBwaXhlbENv
bG9yOworfQogCi0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9y
LmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICog
MjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSk7CitSR0JBMzIgQ29sb3I6OnBy
ZW11bHRpcGxpZWRBUkdCKCkgY29uc3QKK3sKKyAgICBpZiAoaXNPcGFxdWUoKSkgeworICAgICAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VSR0IoYXNFeHRlbmRl
ZCgpLnJlZCgpICogMjU1LCBhc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgp
LmJsdWUoKSAqIDI1NSk7CisgICAgICAgIHJldHVybiByZ2IoKTsKKyAgICB9CiAKLSAgICByZXR1
cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xv
ci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAg
IHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBh
c0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUpOworICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJH
QkEocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiB9CiAKIGJvb2wgZXh0ZW5kZWRD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC01MjgsMzAgKzU1
MiwzNSBAQCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29s
b3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkKQorQ29sb3Ig
Q29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgLy8gV2UgbmVl
ZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0
aGUgYW5pbWF0aW9uCiAgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoYmxl
bmRQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgIC8vIFNpbmNlIHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgICAg
IENvbG9yIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoZnJvbSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgICAgIENvbG9yIHByZW11bHRU
byA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcih0bykgOiBDb2xvcjo6
dHJhbnNwYXJlbnQ7Ci0KLSAgICAgICAgQ29sb3IgcHJlbXVsdEJsZW5kZWQoYmxlbmQocHJlbXVs
dEZyb20ucmVkKCksIHByZW11bHRUby5yZWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxl
bmQocHJlbXVsdEZyb20uZ3JlZW4oKSwgcHJlbXVsdFRvLmdyZWVuKCksIHByb2dyZXNzKSwKLSAg
ICAgICAgICAgIGJsZW5kKHByZW11bHRGcm9tLmJsdWUoKSwgcHJlbXVsdFRvLmJsdWUoKSwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQocHJlbXVsdEZyb20uYWxwaGEoKSwgcHJlbXVsdFRv
LmFscGhhKCksIHByb2dyZXNzKSk7Ci0KLSAgICAgICAgcmV0dXJuIENvbG9yKGNvbG9yRnJvbVBy
ZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkLnJnYigpKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIENvbG9yKGJsZW5kKGZyb20ucmVkKCksIHRvLnJlZCgpLCBwcm9ncmVzcyksCi0gICAgICAg
IGJsZW5kKGZyb20uZ3JlZW4oKSwgdG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVu
ZChmcm9tLmJsdWUoKSwgdG8uYmx1ZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20u
YWxwaGEoKSwgdG8uYWxwaGEoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgLy8gU2luY2UgcHJlbXVs
dGlwbGllZEFSR0IoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBzcGVjaWFsLWNhc2UgdGhhdC4KKyAg
ICAgICAgUkdCQTMyIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gZnJvbS5wcmVtdWx0aXBs
aWVkQVJHQigpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgICAgICBSR0JBMzIgcHJlbXVsdFRv
ID0gdG8uYWxwaGEoKSA/IHRvLnByZW11bHRpcGxpZWRBUkdCKCkgOiBDb2xvcjo6dHJhbnNwYXJl
bnQ7CisKKyAgICAgICAgUkdCQTMyIHByZW11bHRCbGVuZGVkID0gbWFrZVJHQkEoCisgICAgICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRv
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0RnJvbS5ncmVlbkNvbXBvbmVudCgpLCBwcmVtdWx0VG8uZ3JlZW5Db21wb25lbnQoKSwg
cHJvZ3Jlc3MpLAorICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0
VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgICAgICk7CisKKyAgICAgICAgcmV0
dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkKTsKKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLnJlZCgpLCB0by5yZWQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmdyZWVuKCksIHRvLmdy
ZWVuKCksIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbS5ibHVlKCksIHRv
LmJsdWUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmFscGhhKCks
IHRvLmFscGhhKCksIHByb2dyZXNzKQorICAgIH07CiB9CiAKIHZvaWQgQ29sb3I6OnRhZ0FzVmFs
aWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw4ICs5Miw4IEBAIGNvbnN0ZXhwciBSR0JBMzIgbWFrZVJH
QkEoaW50IHIsIGludCBnLCAKIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwogUkdCQTMyIG1ha2VVblBy
ZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAotV0VCQ09SRV9F
WFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBv
dmVycmlkZUFscGhhKTsKLVJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xv
ciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOworUkdCQTMyIGNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKFJHQkEzMik7CitSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Io
UkdCQTMyKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CkBA
IC0xMzcsNyArMTM3LDYgQEAgcHVibGljOgogICAgICAgICBzZXRSR0IobWFrZVJHQkEzMkZyb21G
bG9hdHMociwgZywgYiwgYSkpOwogICAgIH0KIAotICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3Ig
ZnJvbSB0aGUgc3BlY2lmaWMgQ01ZSyBhbmQgYWxwaGEgdmFsdWVzLgogICAgIENvbG9yKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiAgICAgewogICAgICAgICBz
ZXRSR0IobWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwpAQCAtMTk2LDE1ICsxOTUs
MTggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiByZ2IoKS5pc09wYXF1ZSgpOyB9
CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlzaWJsZSgpOyB9CiAKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIHByZXNlbmNl
IG9mIEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IHJlZCgpIGNvbnN0IHsgcmV0dXJuIHJnYigpLnJl
ZENvbXBvbmVudCgpOyB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBkb2VzIG5vdCBt
YWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAgIGludCBncmVl
bigpIGNvbnN0IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50KCk7IH0KKyAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIHByZXNlbmNlIG9m
IEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVl
Q29tcG9uZW50KCk7IH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvciBtYWtlIHRoaXMg
d29yayB3aXRoIEV4dGVuZGVkQ29sb3IKICAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBy
Z2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CiAKICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19j
YXN0PGZsb2F0PihyZ2IoKS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KIAotICAgIFJHQkEz
MiByZ2IoKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IGNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CkBAIC0yMjMsMTAgKzIyNSwxNSBAQCBwdWJsaWM6CiAg
ICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhX
aGl0ZSgpIGNvbnN0OwogCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxv
YXQpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29u
c3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkID0g
dHJ1ZSk7CiAKLSAgICAvLyBSZXR1cm5zIGEgY29sb3IgdGhhdCBoYXMgdGhlIHNhbWUgUkdCIHZh
bHVlcywgYnV0IHdpdGggdGhlIGdpdmVuIEEuCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQpIGNvbnN0OwogICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBj
b25zdDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91
bmRpbmcgdmFyaWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBD
b2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhm
bG9hdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworCiAgICAgQ29sb3Igb3BhcXVlQ29s
b3IoKSBjb25zdCB7IHJldHVybiBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQogCiAgICAgLy8gVHJ1
ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUu
CkBAIC0yODQsNyArMjkxLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29s
b3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29s
b3ImKTsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29s
b3I+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0IoKSBj
b25zdDsKKwogcHJpdmF0ZToKKyAgICBSR0JBMzIgcmdiKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRS
R0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFrZVJHQihyLCBnLCBiKSk7IH0KICAg
ICB2b2lkIHNldFJHQihSR0JBMzIpOwogICAgIHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQ7IH0KQEAgLTMxMiw4
ICszMjUsNiBAQCBwcml2YXRlOgogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAK
LUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMik7Ci1SR0JBMzIgcHJlbXVs
dGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImKTsKIC8vIE9uZSBvciBib3RoIG11c3Qg
YmUgZXh0ZW5kZWQgY29sb3JzLgogV0VCQ09SRV9FWFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIApAQCAtMzYxLDYgKzM3MiwxMSBAQCBp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjCiAgICAgcmV0dXJuIChhLm1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkg
PT0gKGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNv
bG9yQml0KTsKIH0KIAoraW5saW5lIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25z
dCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCit7
CisgICAgcmV0dXJuIENvbG9yOjpibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MsIGJsZW5kUHJlbXVs
dGlwbGllZCk7Cit9CisKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKQEAgLTM5MywxNiArNDA5LDkgQEAgaW5saW5lIHVpbnQxNl90
IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdAogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJl
bWFpbmRlciA+PiA4KTsKIH0KIAotaW5saW5lIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhh
KFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIG92ZXJyaWRlQWxwaGEgPyBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBvdmVycmlk
ZUFscGhhLnZhbHVlKCkpIDogY29sb3I7Ci19Ci0KIGlubGluZSBSR0JBMzIgQ29sb3I6OnJnYigp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkg
aGVyZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRl
bmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFs
bCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZQogICAgIHJldHVybiB7IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIpIH07CiB9CiAK
QEAgLTQ0Miw2ICs0NTEsNzQgQEAgY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50
IGcsIAogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1heCgwLCBzdGQ6
Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAweEZGKSkgPDwg
MTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKGIsIDB4RkYpKSkgfTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQg
Q29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGlmIChpc0V4dGVu
ZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVyIDw8IGFz
RXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4o
KTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOworICAgICAgICBlbmNv
ZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5k
ZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbmNvZGVy
IDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBm
YWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCisKKyAgICB1aW50MzJfdCB2
YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2Rl
ciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPENvbG9y
PiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYm9vbCBpc0V4dGVuZGVk
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRlbmRlZCkgeworICAgICAgICBmbG9hdCByZWQ7
CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAgICBmbG9hdCBibHVlOworICAgICAgICBmbG9h
dCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVuKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhh
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2Up
OworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlz
VmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFpc1ZhbGlk
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHVpbnQzMl90IHZhbHVlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxw
aGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3JXaXRo
T3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgY29sb3IuYWxwaGEoKSAvIDI1NS5mICogZ2xvYmFs
QWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNv
bG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGNvbG9yLmFscGhhKCkgLyAyNTUu
ZiAqIGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldFNvdXJjZVJH
QkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjE5NzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDgg
QEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNp
Z25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3Ry
aWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0
aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAg
ICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBp
eGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENv
bG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgYXV0
byBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUkdCQShsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENv
bXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29t
cG9uZW50KCkpOwogICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29s
b3IocGl4ZWxDb2xvcikudmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAy
NjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDI0ICsxMjMsMTggQEAgc3RhdGljIENHQ29sb3JSZWYg
bGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmICghY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAg
IHN3aXRjaCAoY29sb3IucmdiKCkudmFsdWUoKSkgewotICAgICAgICBjYXNlIENvbG9yOjp0cmFu
c3BhcmVudC52YWx1ZSgpOiB7Ci0gICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3Bh
cmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJh
bnNwYXJlbnRDR0NvbG9yOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29sb3I6OmJsYWNrLnZh
bHVlKCk6IHsKLSAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxl
YWtDR0NvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBDb2xvcjo6d2hpdGUudmFsdWUoKTogewotICAgICAgICAgICAg
c3RhdGljIENHQ29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwotICAg
ICAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsKLSAgICAgICAgfQotICAgICAgICB9CisgICAg
aWYgKGNvbG9yID09IENvbG9yOjp0cmFuc3BhcmVudCkgeworICAgICAgICBzdGF0aWMgQ0dDb2xv
clJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJl
dHVybiB0cmFuc3BhcmVudENHQ29sb3I7CisgICAgfQorICAgIGlmIChDb2xvcjo6aXNCbGFja0Nv
bG9yKGNvbG9yKSkgeworICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiBibGFja0NHQ29sb3IgPSBs
ZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7CisgICAgfQor
ICAgIGlmIChDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbG9yKSkgeworICAgICAgICBzdGF0aWMgQ0dD
b2xvclJlZiB3aGl0ZUNHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVy
biB3aGl0ZUNHQ29sb3I7CiAgICAgfQotCi0gICAgQVNTRVJUKGNvbG9yLmlzRXh0ZW5kZWQoKSB8
fCBjb2xvci5yZ2IoKS52YWx1ZSgpKTsKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55
TFJVQ2FjaGU8Q29sb3IsIFJldGFpblB0cjxDR0NvbG9yUmVmPiwgMzI+PiBjYWNoZTsKICAgICBy
ZXR1cm4gY2FjaGUuZ2V0KCkuZ2V0KGNvbG9yKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNp
b24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsNyBAQCB2b2lkIEZFRmxvb2Q6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeSgpIGJ1dCB0aGF0IGhhcyBkaWZmZXJlbnQgcm91bmRpbmcgb2YgdGhlIGFscGhh
IGNvbXBvbmVudCB0aGF0IGJyZWFrcyBzb21lIHRlc3RzLgotICAgIGZsb2F0IGNvbG9yQWxwaGEg
PSBmbG9vZENvbG9yKCkuYWxwaGEoKSAvIDI1NS4wOwotICAgIGF1dG8gY29sb3IgPSBjb2xvcldp
dGhPdmVycmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgY29sb3JBbHBoYSAqIGZsb29kT3Bh
Y2l0eSgpKTsKKyAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb29kT3BhY2l0eSgpKTsKICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
NCw3ICsyNTQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDCiAg
ICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAogICAgIC8vIEZJWE1FOiBE
byB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21wb25lbnRzIGRpcmVjdGx5LgotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihj
b2xvci5wcmVtdWx0aXBsaWVkQVJHQigpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAg
Z2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBn
bExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTQxNiw3ICs0MTYsNyBAQCBzdGF0aWMgdm9pZCBwcmVw
YXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8v
IFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRl
eHR1cmUgZm9yIGNvbXBvc2l0aW5nLgogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVt
dWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCi0gICAgICAgICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xv
cigpKSkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgICAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBDb2xvcihzaGFkb3cuY29sb3IoKS5wcmVtdWx0aXBsaWVkQVJHQigpKS50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9y
TG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFt
LmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChz
aXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09m
ZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNjc5LDcgKzY3OSw3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbUlEKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENv
bXBvbmVudHMgZGlyZWN0bHkuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0
aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKGNvbG9yLnByZW11bHRpcGxpZWRBUkdCKCkpLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dl
ZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE5ICs0MSwxNCBAQCBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JB
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4gRDJEMTo6Q29sb3JG
KGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50c1sxXSwgYXNSR0JBLmNvbXBv
bmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBjb2xv
ckFscGhhID0gYWxwaGEoKSAvIDI1NS4wZjsKLSAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHJnYigp
LnZhbHVlKCksIGNvbG9yQWxwaGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9
CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBh
c1JHQkEgPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0dXJuIEQyRDE6OlZlY3Rv
cjRGKGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50c1sxXSwgYXNSR0JBLmNv
bXBvbmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYo
ciwgZywgYiwgYSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDEw
ICszNzksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAKIEQy
RDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENv
bG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBmbG9hdCBjb2xvckFscGhhID0gY29sb3IuYWxwaGFB
c0Zsb2F0KCk7Ci0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxB
bHBoYSgpOwotCi0gICAgcmV0dXJuIEQyRDE6OkNvbG9yRihjb2xvci5yZ2IoKSwgZ2xvYmFsQWxw
aGEgKiBjb2xvckFscGhhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBt
X2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIAogSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw3
IEBAIHN0YXRpYyBib29sIGRyYXdDZWxsRm9jdXNSaW5nV2l0aEZyYW1lQXQKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbG9yIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBSZW5kZXJUaGVtZU1hYy4gRm9y
IG5vdyBqdXN0IHVzZSB0aGUgc2FtZSBOU0NvbG9yIGNvbG9yLgogICAgIC8vIFRoZSBjb2xvciBp
cyBleHBlY3RlZCB0byBiZSBvcGFxdWUsIHNpbmNlIENvcmVHcmFwaGljcyB3aWxsIGFwcGx5IG9w
YWNpdHkgd2hlbiBkcmF3aW5nIChiZWNhdXNlIG9wYWNpdHkgaXMgbm9ybWFsbHkgYW5pbWF0ZWQp
LgotICAgIGF1dG8gY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkucmdiKCksIDEpOworICAg
IGF1dG8gY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRp
Y2F0b3JDb2xvcl0pLm9wYXF1ZUNvbG9yKCk7CiAgICAgYXV0byBzdHlsZSA9IGFkb3B0Q0YoQ0dT
dHlsZUNyZWF0ZUZvY3VzUmluZ1dpdGhDb2xvcigmZm9jdXNSaW5nU3R5bGUsIGNhY2hlZENHQ29s
b3IoY29sb3IpKSk7CiAgICAgQ0dDb250ZXh0U2V0U3R5bGUoY2dDb250ZXh0LCBzdHlsZS5nZXQo
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA5Myw3ICsxMDkzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRGaWxlVXBsb2FkSWNvbgogICAgICAgICB0aHVtYm5haWxSZWN0LmNvbnRy
YWN0KGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUsIGtNdWx0aXBsZVRodW1ibmFpbFNocmlu
a1NpemUpOwogCiAgICAgICAgIC8vIEJhY2tncm91bmQgcGljdHVyZSBmcmFtZSBhbmQgc2ltcGxl
IGJhY2tncm91bmQgaWNvbiB3aXRoIGEgZ3JhZGllbnQgbWF0Y2hpbmcgdGhlIGJ1dHRvbi4KLSAg
ICAgICAgQ29sb3IgYmFja2dyb3VuZEltYWdlQ29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciku
cmdiKCkpOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kSW1hZ2VDb2xvciA9IGJ1dHRvblJlbmRl
cmVyLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoRmxvYXRS
b3VuZGVkUmVjdCh0aHVtYm5haWxQaWN0dXJlRnJhbWVSZWN0LCBjb3JuZXJTaXplLCBjb3JuZXJT
aXplLCBjb3JuZXJTaXplLCBjb3JuZXJTaXplKSwgcGljdHVyZUZyYW1lQ29sb3IpOwogICAgICAg
ICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHRodW1ibmFpbFJlY3QsIGJhY2tncm91bmRJ
bWFnZUNvbG9yKTsKICAgICAgICAgewpAQCAtMTU1NCw3ICsxNTU0LDEyIEBAIENvbG9yIFJlbmRl
clRoZW1lSU9TOjpzeXN0ZW1Db2xvcihDU1NWYWwKICAgICAgICAgICAgIGF1dG8gaXQgPSBnbG9i
YWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAoKS5maW5kKENTU1ZhbHVlS2V5IHsgY3NzVmFsdWVJ
RCwgdXNlRGFya0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsIH0pOwog
ICAgICAgICAgICAgaWYgKGl0ID09IGdsb2JhbENTU1ZhbHVlVG9TeXN0ZW1Db2xvck1hcCgpLmVu
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3Nz
VmFsdWVJRCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoaXQtPnZhbHVlLnJn
YigpLCBDb2xvcjo6U2VtYW50aWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBjb2xvciB3aXRoIHRoZSBTZW1hbnRpYyBiaXQg
c2V0LiBVbmNsZWFyIHdoeQorICAgICAgICAgICAgLy8gdGhpcyB3YXMgZG9uZSBvbmx5IGhlcmUg
KGUuZy4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKCkgZG9lcyBub3QgZG8gdGhhdCkgYW5kCisg
ICAgICAgICAgICAvLyB3aHkgaXQgd2Fzbid0IGRvbmUgcHJpb3IgdG8gcHV0dGluZyB0aGUgY29s
b3IgaW4gdGhlIG1hcCB0byBiZWdpbiB3aXRoLgorICAgICAgICAgICAgLy8gKioqIFJhdGlvbmFs
aXplIHRoaXMgYmVmb3JlIGxhbmRpbmcgKioqIAorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKICAgICAgICAgfQogICAgICAgICBhdXRvIGNvbG9yID0gc3lzdGVtQ29sb3JGcm9tQ1NTVmFs
dWVJRChjc3NWYWx1ZUlELCB1c2VEYXJrQXBwZWFyYW5jZSwgdXNlRWxldmF0ZWRVc2VySW50ZXJm
YWNlTGV2ZWwpOwogICAgICAgICBpZiAoY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3
ICs0NjksNyBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1JpbmdDCiAgICAg
ICAgIHJldHVybiBvbGRBcXVhRm9jdXNSaW5nQ29sb3IoKTsKICAgICBMb2NhbERlZmF1bHRTeXN0
ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRpb25zLmNvbnRhaW5zKFN0eWxlQ29sb3I6
Ok9wdGlvbnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVj
dGVkIHRvIGJlIG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3
aGVuIGRyYXdpbmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAg
cmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBr
ZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgcmV0dXJuIGNvbG9y
RnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3BhcXVl
Q29sb3IoKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMjMgKzIzOCwyMyBAQCB2b2lkIFJl
bmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAKICAgICAgICAgaWYgKG8ucGFyZW50
KCkpIHsKICAgICAgICAgICAgIENvbG9yIGNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5yZ2IoKSAhPSBj
b2xvci5yZ2IoKSkKKyAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBjb2xvcikKICAgICAgICAgICAgICAg
ICB0cyA8PCAiIFtjb2xvcj0iIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwg
Il0iOwogCiAgICAgICAgICAgICAvLyBEbyBub3QgZHVtcCBpbnZhbGlkIG9yIHRyYW5zcGFyZW50
IGJhY2tncm91bmRzLCBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0LgogICAgICAgICAgICAgQ29s
b3IgYmFja2dyb3VuZENvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5
bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJn
YigpICE9IGJhY2tncm91bmRDb2xvci5yZ2IoKQotICAgICAgICAgICAgICAgICYmIGJhY2tncm91
bmRDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgICAgICAgICBpZiAoby5w
YXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcgorICAgICAgICAgICAgICAgICYmIGJhY2tncm91
bmRDb2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBb
Ymdjb2xvcj0iIDw8IGJhY2tncm91bmRDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8
ICJdIjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29sb3IgdGV4dEZpbGxDb2xvciA9IG8u
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENv
bG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpLnJnYigpICE9IHRleHRGaWxs
Q29sb3IucmdiKCkgIAotICAgICAgICAgICAgICAgICYmIHRleHRGaWxsQ29sb3IucmdiKCkgIT0g
Y29sb3IucmdiKCkgJiYgdGV4dEZpbGxDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQp
CisgICAgICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSAhPSB0ZXh0RmlsbENvbG9yCisgICAg
ICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciAhPSBjb2xvciAmJiB0ZXh0RmlsbENvbG9yICE9
IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0RmlsbENv
bG9yPSIgPDwgdGV4dEZpbGxDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsK
IAogICAgICAgICAgICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcik7Ci0gICAgICAg
ICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpLnJnYigpICE9IHRleHRTdHJva2VDb2xvci5yZ2Io
KQotICAgICAgICAgICAgICAgICYmIHRleHRTdHJva2VDb2xvci5yZ2IoKSAhPSBjb2xvci5yZ2Io
KSAmJiB0ZXh0U3Ryb2tlQ29sb3IucmdiKCkgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQorICAgICAg
ICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKSAhPSB0ZXh0U3Ryb2tlQ29sb3IKKyAgICAgICAg
ICAgICAgICAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gY29sb3IgJiYgdGV4dFN0cm9rZUNvbG9yICE9
IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0U3Ryb2tl
Q29sb3I9IiA8PCB0ZXh0U3Ryb2tlQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAi
XSI7CiAKICAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnRleHRTdHJva2VXaWR0
aCgpICE9IG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAmJiBvLnN0eWxlKCkudGV4dFN0cm9r
ZVdpZHRoKCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50Ojpz
dG9wQ29sb3JJbmNsdWRpbmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7
CiAgICAgYXV0byBzdG9wQ29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihz
dmdTdHlsZS5zdG9wQ29sb3IoKSk7CiAKLSAgICBmbG9hdCBjb2xvckFscGhhID0gc3RvcENvbG9y
LmFscGhhKCkgLyAyNTUuMDsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KCkgYnV0IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0
aGUgYWxwaGEgY29tcG9uZW50LgotICAgIHJldHVybiBjb2xvcldpdGhPdmVycmlkZUFscGhhKHN0
b3BDb2xvci5yZ2IoKSwgY29sb3JBbHBoYSAqIHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOworICAg
IHJldHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjE5ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBNYWtlIENvbG9yOjpy
Z2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb2xvcj46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbToKKyAg
ICAgICAgKHNjcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIwLTA1LTIwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBEaWN0YXRpb24gY29udGV4dCBzaG91
bGQgYmUgYW4gb2JqZWN0IGlkZW50aWZpZXIsIG5vdCBhIHR5cGUtcHVubmVkIHBvaW50ZXIKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAko
cmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw4NCArMTUyNiw2IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxXaW5kb3dGZWF0dXJlcz46OmRlY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ci12b2lkIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAg
ICAgZW5jb2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQo
KS5yZWQoKTsKLSAgICAgICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKTsK
LSAgICAgICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBl
bmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8
IGNvbG9yLmFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBlbmNvZGVyIDw8IGZhbHNlOwotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHVpbnQzMl90IHZhbHVlID0gY29sb3IucmdiKCkudmFsdWUoKTsKLQotICAgIGVuY29kZXIgPDwg
dHJ1ZTsKLSAgICBlbmNvZGVyIDw8IHZhbHVlOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8Q29s
b3I+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29sb3ImIGNvbG9yKQotewotICAgIGJvb2wg
aXNFeHRlbmRlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCBy
ZWQ7Ci0gICAgICAgIGZsb2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBm
bG9hdCBhbHBoYTsKLSAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29sb3IgPSBDb2xvcihyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgY29s
b3IgPSBDb2xvcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1aW50MzJf
dCB2YWx1ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29sb3IgPSBTaW1wbGVDb2xvciB7IHZhbHVlIH07Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLU9wdGlvbmFsPENvbG9yPiBBcmd1bWVudENvZGVyPENvbG9yPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgQ29sb3IgY29sb3I7Ci0gICAgaWYgKCFkZWNvZGUo
ZGVjb2RlciwgY29sb3IpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIGNvbG9yOwotfQotCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHZvaWQgQXJndW1lbnRD
b2RlcjxEcmFnRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAgY2xh
c3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiBjbGFz
cyBCbG9iUGFydDsKIGNsYXNzIENlcnRpZmljYXRlSW5mbzsKLWNsYXNzIENvbG9yOwogY2xhc3Mg
Q3JlZGVudGlhbDsKIGNsYXNzIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb247CiBjbGFzcyBDdXJz
b3I7CkBAIC00NDMsMTIgKzQ0Miw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZToKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb2xvcj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpDb2xvciYpOwotICAgIHN0YXRp
YyBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpEcmFnRGF0YT4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6RHJhZ0RhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBXZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3UK
ICAgICBpZiAoem9vbVNjYWxlIDwgbWluaW11bVpvb21TY2FsZSkgewogICAgICAgICBDR0Zsb2F0
IHNsb3BlID0gMTI7CiAgICAgICAgIENHRmxvYXQgb3BhY2l0eSA9IHN0ZDo6bWF4PENHRmxvYXQ+
KDEgLSBzbG9wZSAqIChtaW5pbXVtWm9vbVNjYWxlIC0gem9vbVNjYWxlKSwgMCk7Ci0gICAgICAg
IGNvbG9yID0gV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgb3Bh
Y2l0eSk7CisgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcob3BhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399969</attachid>
            <date>2020-05-21 11:13:39 -0700</date>
            <delta_ts>2020-05-21 11:50:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200521111338.patch</filename>
            <type>text/plain</type>
            <size>43592</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA1LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBlZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3cpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92
ZXJyaWRlQWxwaGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp1cGRhdGVD
dWVGcm9tQ3VlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6cmdiIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdFRpbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSBjb25zdCk6CisKIDIwMjAt
MDUtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgaW1wbGljaXQgVVJMLT5TdHJpbmcgY29udmVyc2lvbiBvcGVyYXRvcnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJl
dmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODgyLDEzICs4ODIsMTMgQEAgQ29sb3IgSFRNTENv
bnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Y29sb3IoKS5yZ2IoKSksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplZENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmNvbG9yKCksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5j
b2xvcigpLnJnYigpKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuY29sb3IoKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTAsNyArMTA1MCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5
bGUoTXUKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgY29sb3IgPSBDb2xvcihw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKIAotICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvci5yZ2IoKSkpOworICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICAg
ICAgICAgIHN0eWxlID0gQ2FudmFzU3R5bGUoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5yZ2IoKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoc3R5bGUuaGFzT3ZlcnJpZGVBbHBoYSgpKQorICAgICAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkp
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CkBAIC00MDIsMTAgKzQwMSw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmhhc092ZXJy
aWRlQWxwaGEoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFJHQkEz
MiBoZXJlLgotICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLnJnYigpLCBzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFs
cGhhKCkpCisgICAgICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92
ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHlsZSA9IENhbnZh
c1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
Y2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKQEAgLTEzMTAsOCArMTMw
OCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICBzZXRTaGFkb3coRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJn
YigpLCBhbHBoYSkpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZygqYWxwaGEpOworICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVh
dGVGcm9tU3RyaW4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBDb2xvciB7IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iucmdi
KCksIGFscGhhKSB9OworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgSW5i
YW5kR2VuZXJpY1RleHRUcmFjazo6dXBkYXRlQ3VlRnIKICAgICBpZiAoaW5iYW5kQ3VlLnNpemUo
KSA+IDApCiAgICAgICAgIGN1ZS5zZXRTaXplKHN0ZDo6cm91bmQoaW5iYW5kQ3VlLnNpemUoKSkp
OwogICAgIGlmIChpbmJhbmRDdWUuYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICBjdWUuc2V0QmFja2dyb3VuZENvbG9yKGluYmFuZEN1ZS5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGN1ZS5zZXRCYWNrZ3JvdW5kQ29sb3IoaW5iYW5kQ3VlLmJhY2tncm91bmRD
b2xvcigpKTsKICAgICBpZiAoaW5iYW5kQ3VlLmZvcmVncm91bmRDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgY3VlLnNldEZvcmVncm91bmRDb2xvcihpbmJhbmRDdWUuZm9yZWdyb3VuZENvbG9y
KCkucmdiKCkpOworICAgICAgICBjdWUuc2V0Rm9yZWdyb3VuZENvbG9yKGluYmFuZEN1ZS5mb3Jl
Z3JvdW5kQ29sb3IoKSk7CiAgICAgaWYgKGluYmFuZEN1ZS5oaWdobGlnaHRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5oaWdobGlnaHRD
b2xvcigpLnJnYigpKTsKKyAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5o
aWdobGlnaHRDb2xvcigpKTsKIAogICAgIGlmIChpbmJhbmRDdWUuYWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6QWxpZ25tZW50OjpTdGFydCkKICAgICAgICAgY3VlLnNldEFsaWduKCJzdGFydCJf
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIFJHQkEzMiBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhmbG9hdCByLCBmbG8KICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRv
UkdCQUJ5dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwogfQogCi1SR0JBMzIgY29sb3JXaXRoT3Zl
cnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIHsgKGNvbG9yLnZhbHVlKCkgJiAweDAwRkZGRkZGKSB8IGNvbG9yRmxvYXRUb1JHQkFCeXRl
KG92ZXJyaWRlQWxwaGEpIDw8IDI0IH07Ci19Ci0KIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZs
b2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkK
IHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDI1NS4wOwpAQCAtMzM4LDE0ICszMzMs
MTUgQEAgU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZQogCiBTdHJpbmcg
Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
SGFuZGxlIGV4dGVuZGVkIGNvbG9ycy4KKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKICAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAocmdiKCkgPT0gYmxhY2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgcmdiKCkgPT0gYmxh
Y2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9h
dCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTM3MCw3ICszNjYs
NyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25z
dAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSB3aGl0ZSkKKyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiByZ2IoKSA9PSB3aGl0
ZSkKICAgICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCiAgICAgY29uc3QgZmxvYXQg
c2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC00MTUsNiArNDExLDgg
QEAgY29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZQogCiBDb2xvciBDb2xv
cjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBpZiAoIWlz
VmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gc291cmNlOwog
CkBAIC00MzEsNiArNDI5LDggQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBzb3Vy
Y2UpIAogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAg
IC8vIElmIHRoZSBjb2xvciBjb250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9u
ZS4KICAgICBpZiAoIWlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTQ2MCwx
NCArNDYwLDMyIEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgKICAg
ICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogfQogCitDb2xvciBDb2xvcjo6Y29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1v
dW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5kZWQo
KSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CiAK
LSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsgLy8gV2h5IGRvZXNuJ3QgdGhpcyB1c2Ug
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoKSBsaWtlIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoKT8KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KKyAgICBpbnQgbmV3QWxwaGEgPSBh
bHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCksIGJsdWUo
KSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBtYWtlUkdCQShyZWQoKSwgZ3JlZW4o
KSwgYmx1ZSgpLCBuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVz
dWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNv
bnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3It
PmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworCisgICAgQ29sb3IgcmVzdWx0
ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29sb3JGbG9h
dFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDk4LDI1
ICs1MTYsMzEgQEAgRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50cwogICAg
IHJldHVybiB7IH07CiB9CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEz
MiBwaXhlbENvbG9yKQorUkdCQTMyIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENv
bG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwog
ICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKFJHQkEzMiBwaXhlbENvbG9yKQogewotICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0g
ICAgICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVJH
Qihjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVl
bigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1KTsKLSAgICAgICAgcmV0
dXJuIGNvbG9yLnJnYigpOwotICAgIH0KKyAgICBpZiAoIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgIHJldHVybiBwaXhlbENv
bG9yOworfQogCi0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9y
LmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICog
MjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSk7CitSR0JBMzIgQ29sb3I6OnBy
ZW11bHRpcGxpZWRBUkdCKCkgY29uc3QKK3sKKyAgICBpZiAoaXNPcGFxdWUoKSkgeworICAgICAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VSR0IoYXNFeHRlbmRl
ZCgpLnJlZCgpICogMjU1LCBhc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgp
LmJsdWUoKSAqIDI1NSk7CisgICAgICAgIHJldHVybiByZ2IoKTsKKyAgICB9CiAKLSAgICByZXR1
cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xv
ci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAg
IHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBh
c0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUpOworICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJH
QkEocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiB9CiAKIGJvb2wgZXh0ZW5kZWRD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC01MjgsMzAgKzU1
MiwzNSBAQCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29s
b3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkKQorQ29sb3Ig
Q29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgLy8gV2UgbmVl
ZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0
aGUgYW5pbWF0aW9uCiAgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoYmxl
bmRQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgIC8vIFNpbmNlIHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgICAg
IENvbG9yIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoZnJvbSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgICAgIENvbG9yIHByZW11bHRU
byA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcih0bykgOiBDb2xvcjo6
dHJhbnNwYXJlbnQ7Ci0KLSAgICAgICAgQ29sb3IgcHJlbXVsdEJsZW5kZWQoYmxlbmQocHJlbXVs
dEZyb20ucmVkKCksIHByZW11bHRUby5yZWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxl
bmQocHJlbXVsdEZyb20uZ3JlZW4oKSwgcHJlbXVsdFRvLmdyZWVuKCksIHByb2dyZXNzKSwKLSAg
ICAgICAgICAgIGJsZW5kKHByZW11bHRGcm9tLmJsdWUoKSwgcHJlbXVsdFRvLmJsdWUoKSwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQocHJlbXVsdEZyb20uYWxwaGEoKSwgcHJlbXVsdFRv
LmFscGhhKCksIHByb2dyZXNzKSk7Ci0KLSAgICAgICAgcmV0dXJuIENvbG9yKGNvbG9yRnJvbVBy
ZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkLnJnYigpKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIENvbG9yKGJsZW5kKGZyb20ucmVkKCksIHRvLnJlZCgpLCBwcm9ncmVzcyksCi0gICAgICAg
IGJsZW5kKGZyb20uZ3JlZW4oKSwgdG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVu
ZChmcm9tLmJsdWUoKSwgdG8uYmx1ZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20u
YWxwaGEoKSwgdG8uYWxwaGEoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgLy8gU2luY2UgcHJlbXVs
dGlwbGllZEFSR0IoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBzcGVjaWFsLWNhc2UgdGhhdC4KKyAg
ICAgICAgUkdCQTMyIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gZnJvbS5wcmVtdWx0aXBs
aWVkQVJHQigpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgICAgICBSR0JBMzIgcHJlbXVsdFRv
ID0gdG8uYWxwaGEoKSA/IHRvLnByZW11bHRpcGxpZWRBUkdCKCkgOiBDb2xvcjo6dHJhbnNwYXJl
bnQ7CisKKyAgICAgICAgUkdCQTMyIHByZW11bHRCbGVuZGVkID0gbWFrZVJHQkEoCisgICAgICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRv
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0RnJvbS5ncmVlbkNvbXBvbmVudCgpLCBwcmVtdWx0VG8uZ3JlZW5Db21wb25lbnQoKSwg
cHJvZ3Jlc3MpLAorICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYmx1ZUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0
VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgICAgICk7CisKKyAgICAgICAgcmV0
dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKHByZW11bHRCbGVuZGVkKTsKKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLnJlZCgpLCB0by5yZWQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmdyZWVuKCksIHRvLmdy
ZWVuKCksIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbS5ibHVlKCksIHRv
LmJsdWUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmFscGhhKCks
IHRvLmFscGhhKCksIHByb2dyZXNzKQorICAgIH07CiB9CiAKIHZvaWQgQ29sb3I6OnRhZ0FzVmFs
aWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw4ICs5Miw4IEBAIGNvbnN0ZXhwciBSR0JBMzIgbWFrZVJH
QkEoaW50IHIsIGludCBnLCAKIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwogUkdCQTMyIG1ha2VVblBy
ZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAotV0VCQ09SRV9F
WFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBv
dmVycmlkZUFscGhhKTsKLVJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xv
ciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOworUkdCQTMyIGNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKFJHQkEzMik7CitSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Io
UkdCQTMyKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CkBA
IC0xMzcsNyArMTM3LDYgQEAgcHVibGljOgogICAgICAgICBzZXRSR0IobWFrZVJHQkEzMkZyb21G
bG9hdHMociwgZywgYiwgYSkpOwogICAgIH0KIAotICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3Ig
ZnJvbSB0aGUgc3BlY2lmaWMgQ01ZSyBhbmQgYWxwaGEgdmFsdWVzLgogICAgIENvbG9yKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiAgICAgewogICAgICAgICBz
ZXRSR0IobWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwpAQCAtMTk2LDE1ICsxOTUs
MTggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiByZ2IoKS5pc09wYXF1ZSgpOyB9
CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlzaWJsZSgpOyB9CiAKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIHByZXNlbmNl
IG9mIEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IHJlZCgpIGNvbnN0IHsgcmV0dXJuIHJnYigpLnJl
ZENvbXBvbmVudCgpOyB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBkb2VzIG5vdCBt
YWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAgIGludCBncmVl
bigpIGNvbnN0IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50KCk7IH0KKyAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMuIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIHByZXNlbmNlIG9m
IEV4dGVuZGVkQ29sb3IuCiAgICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVl
Q29tcG9uZW50KCk7IH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvciBtYWtlIHRoaXMg
d29yayB3aXRoIEV4dGVuZGVkQ29sb3IKICAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBy
Z2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CiAKICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19j
YXN0PGZsb2F0PihyZ2IoKS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KIAotICAgIFJHQkEz
MiByZ2IoKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IGNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CkBAIC0yMjMsMTAgKzIyNSwxNSBAQCBwdWJsaWM6CiAg
ICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhX
aGl0ZSgpIGNvbnN0OwogCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxv
YXQpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29u
c3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkID0g
dHJ1ZSk7CiAKLSAgICAvLyBSZXR1cm5zIGEgY29sb3IgdGhhdCBoYXMgdGhlIHNhbWUgUkdCIHZh
bHVlcywgYnV0IHdpdGggdGhlIGdpdmVuIEEuCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQpIGNvbnN0OwogICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBj
b25zdDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91
bmRpbmcgdmFyaWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBD
b2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhm
bG9hdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworCiAgICAgQ29sb3Igb3BhcXVlQ29s
b3IoKSBjb25zdCB7IHJldHVybiBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQogCiAgICAgLy8gVHJ1
ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUu
CkBAIC0yODQsNyArMjkxLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29s
b3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29s
b3ImKTsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29s
b3I+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0IoKSBj
b25zdDsKKwogcHJpdmF0ZToKKyAgICBSR0JBMzIgcmdiKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRS
R0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFrZVJHQihyLCBnLCBiKSk7IH0KICAg
ICB2b2lkIHNldFJHQihSR0JBMzIpOwogICAgIHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQ7IH0KQEAgLTMxMiw4
ICszMjUsNiBAQCBwcml2YXRlOgogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAK
LUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMik7Ci1SR0JBMzIgcHJlbXVs
dGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImKTsKIC8vIE9uZSBvciBib3RoIG11c3Qg
YmUgZXh0ZW5kZWQgY29sb3JzLgogV0VCQ09SRV9FWFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIApAQCAtMzYxLDYgKzM3MiwxMSBAQCBp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjCiAgICAgcmV0dXJuIChhLm1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkg
PT0gKGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNv
bG9yQml0KTsKIH0KIAoraW5saW5lIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25z
dCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCit7
CisgICAgcmV0dXJuIENvbG9yOjpibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MsIGJsZW5kUHJlbXVs
dGlwbGllZCk7Cit9CisKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKQEAgLTM5MywxNiArNDA5LDkgQEAgaW5saW5lIHVpbnQxNl90
IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdAogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJl
bWFpbmRlciA+PiA4KTsKIH0KIAotaW5saW5lIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhh
KFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIG92ZXJyaWRlQWxwaGEgPyBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBvdmVycmlk
ZUFscGhhLnZhbHVlKCkpIDogY29sb3I7Ci19Ci0KIGlubGluZSBSR0JBMzIgQ29sb3I6OnJnYigp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkg
aGVyZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRl
bmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFs
bCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZQogICAgIHJldHVybiB7IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIpIH07CiB9CiAK
QEAgLTQ0Miw2ICs0NTEsNzQgQEAgY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50
IGcsIAogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1heCgwLCBzdGQ6
Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAweEZGKSkgPDwg
MTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKGIsIDB4RkYpKSkgfTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQg
Q29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGlmIChpc0V4dGVu
ZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVyIDw8IGFz
RXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4o
KTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOworICAgICAgICBlbmNv
ZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5k
ZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbmNvZGVy
IDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBm
YWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCisKKyAgICB1aW50MzJfdCB2
YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2Rl
ciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPENvbG9y
PiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYm9vbCBpc0V4dGVuZGVk
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRlbmRlZCkgeworICAgICAgICBmbG9hdCByZWQ7
CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAgICBmbG9hdCBibHVlOworICAgICAgICBmbG9h
dCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVuKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhh
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2Up
OworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlz
VmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFpc1ZhbGlk
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHVpbnQzMl90IHZhbHVlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxw
aGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3JXaXRo
T3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgY29sb3IuYWxwaGEoKSAvIDI1NS5mICogZ2xvYmFs
QWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNv
bG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGNvbG9yLmFscGhhKCkgLyAyNTUu
ZiAqIGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldFNvdXJjZVJH
QkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjE5NzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDgg
QEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNp
Z25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3Ry
aWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0
aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAg
ICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBp
eGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENv
bG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgYXV0
byBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUkdCQShsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENv
bXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29t
cG9uZW50KCkpOwogICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29s
b3IocGl4ZWxDb2xvcikudmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAy
NjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDI0ICsxMjMsMTggQEAgc3RhdGljIENHQ29sb3JSZWYg
bGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmICghY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAg
IHN3aXRjaCAoY29sb3IucmdiKCkudmFsdWUoKSkgewotICAgICAgICBjYXNlIENvbG9yOjp0cmFu
c3BhcmVudC52YWx1ZSgpOiB7Ci0gICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3Bh
cmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJh
bnNwYXJlbnRDR0NvbG9yOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29sb3I6OmJsYWNrLnZh
bHVlKCk6IHsKLSAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxl
YWtDR0NvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBDb2xvcjo6d2hpdGUudmFsdWUoKTogewotICAgICAgICAgICAg
c3RhdGljIENHQ29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwotICAg
ICAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsKLSAgICAgICAgfQotICAgICAgICB9CisgICAg
aWYgKGNvbG9yID09IENvbG9yOjp0cmFuc3BhcmVudCkgeworICAgICAgICBzdGF0aWMgQ0dDb2xv
clJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJl
dHVybiB0cmFuc3BhcmVudENHQ29sb3I7CisgICAgfQorICAgIGlmIChDb2xvcjo6aXNCbGFja0Nv
bG9yKGNvbG9yKSkgeworICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiBibGFja0NHQ29sb3IgPSBs
ZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7CisgICAgfQor
ICAgIGlmIChDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbG9yKSkgeworICAgICAgICBzdGF0aWMgQ0dD
b2xvclJlZiB3aGl0ZUNHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVy
biB3aGl0ZUNHQ29sb3I7CiAgICAgfQotCi0gICAgQVNTRVJUKGNvbG9yLmlzRXh0ZW5kZWQoKSB8
fCBjb2xvci5yZ2IoKS52YWx1ZSgpKTsKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55
TFJVQ2FjaGU8Q29sb3IsIFJldGFpblB0cjxDR0NvbG9yUmVmPiwgMzI+PiBjYWNoZTsKICAgICBy
ZXR1cm4gY2FjaGUuZ2V0KCkuZ2V0KGNvbG9yKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNp
b24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsNyBAQCB2b2lkIEZFRmxvb2Q6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeSgpIGJ1dCB0aGF0IGhhcyBkaWZmZXJlbnQgcm91bmRpbmcgb2YgdGhlIGFscGhh
IGNvbXBvbmVudCB0aGF0IGJyZWFrcyBzb21lIHRlc3RzLgotICAgIGZsb2F0IGNvbG9yQWxwaGEg
PSBmbG9vZENvbG9yKCkuYWxwaGEoKSAvIDI1NS4wOwotICAgIGF1dG8gY29sb3IgPSBjb2xvcldp
dGhPdmVycmlkZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgY29sb3JBbHBoYSAqIGZsb29kT3Bh
Y2l0eSgpKTsKKyAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb29kT3BhY2l0eSgpKTsKICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
NCw3ICsyNTQsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDCiAg
ICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAogICAgIC8vIEZJWE1FOiBE
byB0aGUgcHJlbXVsdGlwbHkgb24gRmxvYXRDb21wb25lbnRzIGRpcmVjdGx5LgotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gQ29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29sb3IpKS50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihj
b2xvci5wcmVtdWx0aXBsaWVkQVJHQigpKS50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAg
Z2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBn
bExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTQxNiw3ICs0MTYsNyBAQCBzdGF0aWMgdm9pZCBwcmVw
YXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8v
IFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRl
eHR1cmUgZm9yIGNvbXBvc2l0aW5nLgogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVt
dWx0aXBseSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCi0gICAgICAgICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xv
cigpKSkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgICAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBDb2xvcihzaGFkb3cuY29sb3IoKS5wcmVtdWx0aXBsaWVkQVJHQigpKS50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9y
TG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFt
LmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChz
aXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09m
ZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNjc5LDcgKzY3OSw3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbUlEKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBseSBvbiBGbG9hdENv
bXBvbmVudHMgZGlyZWN0bHkuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBDb2xvcihwcmVtdWx0
aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKGNvbG9yLnByZW11bHRpcGxpZWRBUkdCKCkpLnRv
U1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dl
ZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE5ICs0MSwxNCBAQCBDb2xvcjo6
Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9G
KCkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gYXNSR0JB
ID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwotICAgICAgICByZXR1cm4gRDJEMTo6Q29sb3JG
KGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50c1sxXSwgYXNSR0JBLmNvbXBv
bmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBjb2xv
ckFscGhhID0gYWxwaGEoKSAvIDI1NS4wZjsKLSAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHJnYigp
LnZhbHVlKCksIGNvbG9yQWxwaGEpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOworICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9
CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBh
c1JHQkEgPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0dXJuIEQyRDE6OlZlY3Rv
cjRGKGFzUkdCQS5jb21wb25lbnRzWzBdLCBhc1JHQkEuY29tcG9uZW50c1sxXSwgYXNSR0JBLmNv
bXBvbmVudHNbMl0sIGFzUkdCQS5jb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYo
ciwgZywgYiwgYSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDEw
ICszNzksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAKIEQy
RDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENv
bG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBmbG9hdCBjb2xvckFscGhhID0gY29sb3IuYWxwaGFB
c0Zsb2F0KCk7Ci0gICAgZmxvYXQgZ2xvYmFsQWxwaGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxB
bHBoYSgpOwotCi0gICAgcmV0dXJuIEQyRDE6OkNvbG9yRihjb2xvci5yZ2IoKSwgZ2xvYmFsQWxw
aGEgKiBjb2xvckFscGhhKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBt
X2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIAogSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw3
IEBAIHN0YXRpYyBib29sIGRyYXdDZWxsRm9jdXNSaW5nV2l0aEZyYW1lQXQKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbG9yIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBSZW5kZXJUaGVtZU1hYy4gRm9y
IG5vdyBqdXN0IHVzZSB0aGUgc2FtZSBOU0NvbG9yIGNvbG9yLgogICAgIC8vIFRoZSBjb2xvciBp
cyBleHBlY3RlZCB0byBiZSBvcGFxdWUsIHNpbmNlIENvcmVHcmFwaGljcyB3aWxsIGFwcGx5IG9w
YWNpdHkgd2hlbiBkcmF3aW5nIChiZWNhdXNlIG9wYWNpdHkgaXMgbm9ybWFsbHkgYW5pbWF0ZWQp
LgotICAgIGF1dG8gY29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkucmdiKCksIDEpOworICAg
IGF1dG8gY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRp
Y2F0b3JDb2xvcl0pLm9wYXF1ZUNvbG9yKCk7CiAgICAgYXV0byBzdHlsZSA9IGFkb3B0Q0YoQ0dT
dHlsZUNyZWF0ZUZvY3VzUmluZ1dpdGhDb2xvcigmZm9jdXNSaW5nU3R5bGUsIGNhY2hlZENHQ29s
b3IoY29sb3IpKSk7CiAgICAgQ0dDb250ZXh0U2V0U3R5bGUoY2dDb250ZXh0LCBzdHlsZS5nZXQo
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA5Myw3ICsxMDkzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRGaWxlVXBsb2FkSWNvbgogICAgICAgICB0aHVtYm5haWxSZWN0LmNvbnRy
YWN0KGtNdWx0aXBsZVRodW1ibmFpbFNocmlua1NpemUsIGtNdWx0aXBsZVRodW1ibmFpbFNocmlu
a1NpemUpOwogCiAgICAgICAgIC8vIEJhY2tncm91bmQgcGljdHVyZSBmcmFtZSBhbmQgc2ltcGxl
IGJhY2tncm91bmQgaWNvbiB3aXRoIGEgZ3JhZGllbnQgbWF0Y2hpbmcgdGhlIGJ1dHRvbi4KLSAg
ICAgICAgQ29sb3IgYmFja2dyb3VuZEltYWdlQ29sb3IgPSBDb2xvcihidXR0b25SZW5kZXJlci5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciku
cmdiKCkpOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kSW1hZ2VDb2xvciA9IGJ1dHRvblJlbmRl
cmVyLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoRmxvYXRS
b3VuZGVkUmVjdCh0aHVtYm5haWxQaWN0dXJlRnJhbWVSZWN0LCBjb3JuZXJTaXplLCBjb3JuZXJT
aXplLCBjb3JuZXJTaXplLCBjb3JuZXJTaXplKSwgcGljdHVyZUZyYW1lQ29sb3IpOwogICAgICAg
ICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHRodW1ibmFpbFJlY3QsIGJhY2tncm91bmRJ
bWFnZUNvbG9yKTsKICAgICAgICAgewpAQCAtMTU1NCw3ICsxNTU0LDEyIEBAIENvbG9yIFJlbmRl
clRoZW1lSU9TOjpzeXN0ZW1Db2xvcihDU1NWYWwKICAgICAgICAgICAgIGF1dG8gaXQgPSBnbG9i
YWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAoKS5maW5kKENTU1ZhbHVlS2V5IHsgY3NzVmFsdWVJ
RCwgdXNlRGFya0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsIH0pOwog
ICAgICAgICAgICAgaWYgKGl0ID09IGdsb2JhbENTU1ZhbHVlVG9TeXN0ZW1Db2xvck1hcCgpLmVu
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3Nz
VmFsdWVJRCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoaXQtPnZhbHVlLnJn
YigpLCBDb2xvcjo6U2VtYW50aWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBjb2xvciB3aXRoIHRoZSBTZW1hbnRpYyBiaXQg
c2V0LiBVbmNsZWFyIHdoeQorICAgICAgICAgICAgLy8gdGhpcyB3YXMgZG9uZSBvbmx5IGhlcmUg
KGUuZy4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKCkgZG9lcyBub3QgZG8gdGhhdCkgYW5kCisg
ICAgICAgICAgICAvLyB3aHkgaXQgd2Fzbid0IGRvbmUgcHJpb3IgdG8gcHV0dGluZyB0aGUgY29s
b3IgaW4gdGhlIG1hcCB0byBiZWdpbiB3aXRoLgorICAgICAgICAgICAgLy8gKioqIFJhdGlvbmFs
aXplIHRoaXMgYmVmb3JlIGxhbmRpbmcgKioqIAorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1
ZTsKICAgICAgICAgfQogICAgICAgICBhdXRvIGNvbG9yID0gc3lzdGVtQ29sb3JGcm9tQ1NTVmFs
dWVJRChjc3NWYWx1ZUlELCB1c2VEYXJrQXBwZWFyYW5jZSwgdXNlRWxldmF0ZWRVc2VySW50ZXJm
YWNlTGV2ZWwpOwogICAgICAgICBpZiAoY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3
ICs0NjksNyBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1JpbmdDCiAgICAg
ICAgIHJldHVybiBvbGRBcXVhRm9jdXNSaW5nQ29sb3IoKTsKICAgICBMb2NhbERlZmF1bHRTeXN0
ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRpb25zLmNvbnRhaW5zKFN0eWxlQ29sb3I6
Ok9wdGlvbnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVj
dGVkIHRvIGJlIG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3
aGVuIGRyYXdpbmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAg
cmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBr
ZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgcmV0dXJuIGNvbG9y
RnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3BhcXVl
Q29sb3IoKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMjMgKzIzOCwyMyBAQCB2b2lkIFJl
bmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAKICAgICAgICAgaWYgKG8ucGFyZW50
KCkpIHsKICAgICAgICAgICAgIENvbG9yIGNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5yZ2IoKSAhPSBj
b2xvci5yZ2IoKSkKKyAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Io
by5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIGNvbG9yKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFtjb2xvcj0iIDw8IGNvbG9yLm5h
bWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIl0iOwogCiAgICAgICAgICAgICAvLyBEbyBub3Qg
ZHVtcCBpbnZhbGlkIG9yIHRyYW5zcGFyZW50IGJhY2tncm91bmRzLCBzaW5jZSB0aGF0IGlzIHRo
ZSBkZWZhdWx0LgogICAgICAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gby5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAg
ICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpICE9IGJhY2tncm91bmRDb2xvci5yZ2IoKQot
ICAgICAgICAgICAgICAgICYmIGJhY2tncm91bmRDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNw
YXJlbnQpCisgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFy
ZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSwgYmFja2dyb3VuZENvbG9yKQorICAgICAgICAgICAgICAgICYmIGJhY2tncm91bmRD
b2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBbYmdj
b2xvcj0iIDw8IGJhY2tncm91bmRDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJd
IjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29sb3IgdGV4dEZpbGxDb2xvciA9IG8uc3R5
bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9y
KTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpLnJnYigpICE9IHRleHRGaWxsQ29s
b3IucmdiKCkgIAotICAgICAgICAgICAgICAgICYmIHRleHRGaWxsQ29sb3IucmdiKCkgIT0gY29s
b3IucmdiKCkgJiYgdGV4dEZpbGxDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCisg
ICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFyZW50KCktPnN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xv
ciksIHRleHRGaWxsQ29sb3IpCisgICAgICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciAhPSBj
b2xvciAmJiB0ZXh0RmlsbENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAg
ICAgICB0cyA8PCAiIFt0ZXh0RmlsbENvbG9yPSIgPDwgdGV4dEZpbGxDb2xvci5uYW1lRm9yUmVu
ZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsKIAogICAgICAgICAgICAgQ29sb3IgdGV4dFN0cm9rZUNv
bG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvcik7Ci0gICAgICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpLnJnYigp
ICE9IHRleHRTdHJva2VDb2xvci5yZ2IoKQotICAgICAgICAgICAgICAgICYmIHRleHRTdHJva2VD
b2xvci5yZ2IoKSAhPSBjb2xvci5yZ2IoKSAmJiB0ZXh0U3Ryb2tlQ29sb3IucmdiKCkgIT0gQ29s
b3I6OnRyYW5zcGFyZW50KQorICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWND
b2xvcihvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eVdlYmtpdFRleHRTdHJva2VDb2xvciksIHRleHRTdHJva2VDb2xvcikKKyAgICAgICAgICAgICAg
ICAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gY29sb3IgJiYgdGV4dFN0cm9rZUNvbG9yICE9IENvbG9y
Ojp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0U3Ryb2tlQ29sb3I9
IiA8PCB0ZXh0U3Ryb2tlQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiXSI7CiAK
ICAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpICE9
IG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAmJiBvLnN0eWxlKCkudGV4dFN0cm9rZVdpZHRo
KCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lv
biAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCw5ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29s
b3JJbmNsdWRpbmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAgICAg
YXV0byBzdG9wQ29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihzdmdTdHls
ZS5zdG9wQ29sb3IoKSk7CiAKLSAgICBmbG9hdCBjb2xvckFscGhhID0gc3RvcENvbG9yLmFscGhh
KCkgLyAyNTUuMDsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KCkgYnV0IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0aGUgYWxw
aGEgY29tcG9uZW50LgotICAgIHJldHVybiBjb2xvcldpdGhPdmVycmlkZUFscGhhKHN0b3BDb2xv
ci5yZ2IoKSwgY29sb3JBbHBoYSAqIHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOworICAgIHJldHVy
biBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjE5ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDIwLTA1LTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBNYWtlIENvbG9yOjpyZ2IoKSBw
cml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
T1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb2xvcj46OmVuY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbToKKyAgICAgICAg
KHNjcm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIwLTA1LTIwICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBEaWN0YXRpb24gY29udGV4dCBzaG91bGQgYmUg
YW4gb2JqZWN0IGlkZW50aWZpZXIsIG5vdCBhIHR5cGUtcHVubmVkIHBvaW50ZXIKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNp
b24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw4NCArMTUyNiw2IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxXaW5kb3dGZWF0dXJlcz46OmRlY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi12b2lk
IEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgZW5j
b2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQo
KTsKLSAgICAgICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAg
ICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBlbmNvZGVy
IDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8IGNvbG9y
LmFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBlbmNvZGVyIDw8IGZhbHNlOwotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQz
Ml90IHZhbHVlID0gY29sb3IucmdiKCkudmFsdWUoKTsKLQotICAgIGVuY29kZXIgPDwgdHJ1ZTsK
LSAgICBlbmNvZGVyIDw8IHZhbHVlOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8Q29sb3I+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ29sb3ImIGNvbG9yKQotewotICAgIGJvb2wgaXNFeHRl
bmRlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCByZWQ7Ci0g
ICAgICAgIGZsb2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBmbG9hdCBh
bHBoYTsKLSAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29sb3IgPSBDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgY29sb3IgPSBD
b2xvcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCB2YWx1
ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgY29sb3IgPSBTaW1wbGVDb2xvciB7IHZhbHVlIH07Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLU9wdGlvbmFsPENvbG9yPiBBcmd1bWVudENvZGVyPENvbG9yPjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgQ29sb3IgY29sb3I7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2Rl
ciwgY29sb3IpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIGNv
bG9yOwotfQotCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHZvaWQgQXJndW1lbnRDb2RlcjxE
cmFnRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAgY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiBjbGFzcyBCbG9i
UGFydDsKIGNsYXNzIENlcnRpZmljYXRlSW5mbzsKLWNsYXNzIENvbG9yOwogY2xhc3MgQ3JlZGVu
dGlhbDsKIGNsYXNzIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb247CiBjbGFzcyBDdXJzb3I7CkBA
IC00NDMsMTIgKzQ0Miw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZToKICAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBX
ZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpDb2xvcj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpDb2xvciYpOwotICAgIHN0YXRpYyBPcHRp
b25hbDxXZWJDb3JlOjpDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KICNpZiBFTkFCTEUo
RFJBR19TVVBQT1JUKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpE
cmFnRGF0YT4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6RHJhZ0RhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tX
ZWJWaWV3SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9p
b3MvV0tXZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcg
KzUxMyw3IEBAIHN0YXRpYyBXZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3UKICAgICBp
ZiAoem9vbVNjYWxlIDwgbWluaW11bVpvb21TY2FsZSkgewogICAgICAgICBDR0Zsb2F0IHNsb3Bl
ID0gMTI7CiAgICAgICAgIENHRmxvYXQgb3BhY2l0eSA9IHN0ZDo6bWF4PENHRmxvYXQ+KDEgLSBz
bG9wZSAqIChtaW5pbXVtWm9vbVNjYWxlIC0gem9vbVNjYWxlKSwgMCk7Ci0gICAgICAgIGNvbG9y
ID0gV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgb3BhY2l0eSk7
CisgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcob3BhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399972</attachid>
            <date>2020-05-21 11:50:37 -0700</date>
            <delta_ts>2020-05-21 13:16:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200521115036.patch</filename>
            <type>text/plain</type>
            <size>44669</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA1LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBlZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3cpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92
ZXJyaWRlQWxwaGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp1cGRhdGVD
dWVGcm9tQ3VlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6cmdiIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdFRpbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSBjb25zdCk6CisKIDIwMjAt
MDUtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgaW1wbGljaXQgVVJMLT5TdHJpbmcgY29udmVyc2lvbiBvcGVyYXRvcnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJl
dmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODgyLDEzICs4ODIsMTMgQEAgQ29sb3IgSFRNTENv
bnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Y29sb3IoKS5yZ2IoKSksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplZENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmNvbG9yKCksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5j
b2xvcigpLnJnYigpKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuY29sb3IoKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTAsNyArMTA1MCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5
bGUoTXUKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgY29sb3IgPSBDb2xvcihw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKIAotICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvci5yZ2IoKSkpOworICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICAg
ICAgICAgIHN0eWxlID0gQ2FudmFzU3R5bGUoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5yZ2IoKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoc3R5bGUuaGFzT3ZlcnJpZGVBbHBoYSgpKQorICAgICAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkp
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CkBAIC00MDIsMTAgKzQwMSw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmhhc092ZXJy
aWRlQWxwaGEoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFJHQkEz
MiBoZXJlLgotICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLnJnYigpLCBzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFs
cGhhKCkpCisgICAgICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92
ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHlsZSA9IENhbnZh
c1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
Y2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKQEAgLTEzMTAsOCArMTMw
OCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICBzZXRTaGFkb3coRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJn
YigpLCBhbHBoYSkpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZygqYWxwaGEpOworICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVh
dGVGcm9tU3RyaW4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBDb2xvciB7IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iucmdi
KCksIGFscGhhKSB9OworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgSW5i
YW5kR2VuZXJpY1RleHRUcmFjazo6dXBkYXRlQ3VlRnIKICAgICBpZiAoaW5iYW5kQ3VlLnNpemUo
KSA+IDApCiAgICAgICAgIGN1ZS5zZXRTaXplKHN0ZDo6cm91bmQoaW5iYW5kQ3VlLnNpemUoKSkp
OwogICAgIGlmIChpbmJhbmRDdWUuYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICBjdWUuc2V0QmFja2dyb3VuZENvbG9yKGluYmFuZEN1ZS5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGN1ZS5zZXRCYWNrZ3JvdW5kQ29sb3IoaW5iYW5kQ3VlLmJhY2tncm91bmRD
b2xvcigpKTsKICAgICBpZiAoaW5iYW5kQ3VlLmZvcmVncm91bmRDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgY3VlLnNldEZvcmVncm91bmRDb2xvcihpbmJhbmRDdWUuZm9yZWdyb3VuZENvbG9y
KCkucmdiKCkpOworICAgICAgICBjdWUuc2V0Rm9yZWdyb3VuZENvbG9yKGluYmFuZEN1ZS5mb3Jl
Z3JvdW5kQ29sb3IoKSk7CiAgICAgaWYgKGluYmFuZEN1ZS5oaWdobGlnaHRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5oaWdobGlnaHRD
b2xvcigpLnJnYigpKTsKKyAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5o
aWdobGlnaHRDb2xvcigpKTsKIAogICAgIGlmIChpbmJhbmRDdWUuYWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6QWxpZ25tZW50OjpTdGFydCkKICAgICAgICAgY3VlLnNldEFsaWduKCJzdGFydCJf
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIFJHQkEzMiBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhmbG9hdCByLCBmbG8KICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRv
UkdCQUJ5dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwogfQogCi1SR0JBMzIgY29sb3JXaXRoT3Zl
cnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIHsgKGNvbG9yLnZhbHVlKCkgJiAweDAwRkZGRkZGKSB8IGNvbG9yRmxvYXRUb1JHQkFCeXRl
KG92ZXJyaWRlQWxwaGEpIDw8IDI0IH07Ci19Ci0KIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZs
b2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkK
IHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDI1NS4wOwpAQCAtMzM4LDE0ICszMzMs
MTUgQEAgU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZQogCiBTdHJpbmcg
Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
SGFuZGxlIGV4dGVuZGVkIGNvbG9ycy4KKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKICAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAocmdiKCkgPT0gYmxhY2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgcmdiKCkgPT0gYmxh
Y2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9h
dCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTM3MCw3ICszNjYs
NyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25z
dAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSB3aGl0ZSkKKyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiByZ2IoKSA9PSB3aGl0
ZSkKICAgICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCiAgICAgY29uc3QgZmxvYXQg
c2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC00MTUsNiArNDExLDgg
QEAgY29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZQogCiBDb2xvciBDb2xv
cjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBpZiAoIWlz
VmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gc291cmNlOwog
CkBAIC00MzEsNiArNDI5LDggQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBzb3Vy
Y2UpIAogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAg
IC8vIElmIHRoZSBjb2xvciBjb250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9u
ZS4KICAgICBpZiAoIWlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTQ2MCwx
NCArNDYwLDMyIEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgKICAg
ICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogfQogCitDb2xvciBDb2xvcjo6Y29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1v
dW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5kZWQo
KSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CiAK
LSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsgLy8gV2h5IGRvZXNuJ3QgdGhpcyB1c2Ug
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoKSBsaWtlIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoKT8KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KKyAgICBpbnQgbmV3QWxwaGEgPSBh
bHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCksIGJsdWUo
KSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBtYWtlUkdCQShyZWQoKSwgZ3JlZW4o
KSwgYmx1ZSgpLCBuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVz
dWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNv
bnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3It
PmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworCisgICAgQ29sb3IgcmVzdWx0
ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29sb3JGbG9h
dFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDk4LDI1
ICs1MTYsMzEgQEAgRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50cwogICAg
IHJldHVybiB7IH07CiB9CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEz
MiBwaXhlbENvbG9yKQorUkdCQTMyIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENv
bG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwog
ICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKFJHQkEzMiBwaXhlbENvbG9yKQogewotICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0g
ICAgICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVJH
Qihjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVl
bigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1KTsKLSAgICAgICAgcmV0
dXJuIGNvbG9yLnJnYigpOwotICAgIH0KKyAgICBpZiAoIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgIHJldHVybiBwaXhlbENv
bG9yOworfQogCi0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9y
LmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICog
MjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSk7CitSR0JBMzIgQ29sb3I6OnBy
ZW11bHRpcGxpZWRBUkdCKCkgY29uc3QKK3sKKyAgICBpZiAoaXNPcGFxdWUoKSkgeworICAgICAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VSR0IoYXNFeHRlbmRl
ZCgpLnJlZCgpICogMjU1LCBhc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgp
LmJsdWUoKSAqIDI1NSk7CisgICAgICAgIHJldHVybiByZ2IoKTsKKyAgICB9CiAKLSAgICByZXR1
cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xv
ci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAg
IHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBh
c0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUpOworICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJH
QkEocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiB9CiAKIGJvb2wgZXh0ZW5kZWRD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC01MjgsMzAgKzU1
MiwzNSBAQCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29s
b3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkKQorQ29sb3Ig
Q29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgLy8gV2UgbmVl
ZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0
aGUgYW5pbWF0aW9uCiAgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoYmxl
bmRQcmVtdWx0aXBsaWVkKSB7CiAgICAgICAgIC8vIFNpbmNlIHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgICAg
IENvbG9yIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoZnJvbSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgICAgIENvbG9yIHByZW11bHRU
byA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcih0bykgOiBDb2xvcjo6
dHJhbnNwYXJlbnQ7Ci0KLSAgICAgICAgQ29sb3IgcHJlbXVsdEJsZW5kZWQoYmxlbmQocHJlbXVs
dEZyb20ucmVkKCksIHByZW11bHRUby5yZWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxl
bmQocHJlbXVsdEZyb20uZ3JlZW4oKSwgcHJlbXVsdFRvLmdyZWVuKCksIHByb2dyZXNzKSwKLSAg
ICAgICAgICAgIGJsZW5kKHByZW11bHRGcm9tLmJsdWUoKSwgcHJlbXVsdFRvLmJsdWUoKSwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQocHJlbXVsdEZyb20uYWxwaGEoKSwgcHJlbXVsdFRv
LmFscGhhKCksIHByb2dyZXNzKSk7CisgICAgICAgIFJHQkEzMiBwcmVtdWx0RnJvbSA9IGZyb20u
YWxwaGEoKSA/IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGZyb20ucmdiKCkpIDogQ29sb3I6
OnRyYW5zcGFyZW50OworICAgICAgICBSR0JBMzIgcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IHBy
ZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHRvLnJnYigpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsK
IAotICAgICAgICByZXR1cm4gQ29sb3IoY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IocHJlbXVs
dEJsZW5kZWQucmdiKCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQ29sb3IoYmxlbmQoZnJvbS5y
ZWQoKSwgdG8ucmVkKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS5ncmVlbigpLCB0
by5ncmVlbigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20uYmx1ZSgpLCB0by5ibHVl
KCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS5hbHBoYSgpLCB0by5hbHBoYSgpLCBw
cm9ncmVzcykpOworICAgICAgICBSR0JBMzIgcHJlbXVsdEJsZW5kZWQgPSBtYWtlUkdCQSgKKyAg
ICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLnJlZENvbXBvbmVudCgpLCBwcmVt
dWx0VG8ucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKKyAgICAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVlbkNvbXBvbmVu
dCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5i
bHVlQ29tcG9uZW50KCksIHByZW11bHRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKKyAg
ICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmFscGhhQ29tcG9uZW50KCksIHBy
ZW11bHRUby5hbHBoYUNvbXBvbmVudCgpLCBwcm9ncmVzcykKKyAgICAgICAgKTsKKworICAgICAg
ICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IocHJlbXVsdEJsZW5kZWQpOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb20ucmVkKCksIHRv
LnJlZCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb20uZ3JlZW4oKSwg
dG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmJsdWUo
KSwgdG8uYmx1ZSgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb20uYWxw
aGEoKSwgdG8uYWxwaGEoKSwgcHJvZ3Jlc3MpCisgICAgfTsKIH0KIAogdm9pZCBDb2xvcjo6dGFn
QXNWYWxpZCgpCkBAIC01NjUsNiArNTk0LDE1IEBAIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9y
Ojphc0V4dGVuZGVkKCkKICAgICByZXR1cm4gKm1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3I7CiB9
CiAKK0NvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlz
RXh0ZW5kZWQoKSk7CisKKyAgICBDb2xvciByZXN1bHQgPSAqdGhpczsKKyAgICByZXN1bHQuc2V0
SXNTZW1hbnRpYygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICByZXR1cm4g
dHMgPDwgY29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTIs
OCArOTIsOCBAQCBjb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgCiBSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29s
IGNlaWxpbmcgPSB0cnVlKTsKIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSk7CiAKLVdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhP
dmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7Ci1SR0JBMzIg
Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZsb2F0PiBvdmVy
cmlkZUFscGhhKTsKK1JHQkEzMiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQihSR0JBMzIpOwor
UkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKFJHQkEzMik7CiAKIFdFQkNPUkVfRVhQ
T1JUIFJHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0
IGgsIGZsb2F0IHMsIGZsb2F0IGwsIGZsb2F0IGEpOwpAQCAtMTM3LDcgKzEzNyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpKTsKICAg
ICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsg
YW5kIGFscGhhIHZhbHVlcy4KICAgICBDb2xvcihmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKQogICAgIHsKICAgICAgICAgc2V0UkdCKG1ha2VSR0JBRnJvbUNNWUtB
KGMsIG0sIHksIGssIGEpKTsKQEAgLTE5NiwxNSArMTk1LDE4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQogICAgIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAg
OiByZ2IoKS5pc1Zpc2libGUoKTsgfQogCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBk
b2VzIG5vdCBtYWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAg
IGludCByZWQoKSBjb25zdCB7IHJldHVybiByZ2IoKS5yZWRDb21wb25lbnQoKTsgfQorICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcy4gSXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiB0aGUgcHJlc2Vu
Y2Ugb2YgRXh0ZW5kZWRDb2xvci4KICAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2Io
KS5ncmVlbkNvbXBvbmVudCgpOyB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBkb2Vz
IG5vdCBtYWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAgIGlu
dCBibHVlKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuYmx1ZUNvbXBvbmVudCgpOyB9CisKKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgb3IgbWFrZSB0aGlzIHdvcmsgd2l0aCBFeHRlbmRlZENvbG9y
CiAgICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuYWxwaGFDb21wb25lbnQoKTsg
fQogCiAgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4ocmdiKCkuYWxwaGFD
b21wb25lbnQoKSkgLyAweEZGOyB9CiAKLSAgICBSR0JBMzIgcmdiKCkgY29uc3Q7Ci0KICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29s
b3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0
OwpAQCAtMjIzLDE1ICsyMjUsMjcgQEAgcHVibGljOgogICAgIENvbG9yIGJsZW5kKGNvbnN0IENv
bG9yJikgY29uc3Q7CiAgICAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoKSBjb25zdDsKIAotICAgIENv
bG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsKKyAgICBzdGF0aWMg
Q29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kUHJlbXVsdGlwbGllZCA9IHRydWUpOwogCi0gICAgLy8gUmV0dXJu
cyBhIGNvbG9yIHRoYXQgaGFzIHRoZSBzYW1lIFJHQiB2YWx1ZXMsIGJ1dCB3aXRoIHRoZSBnaXZl
biBBLgorICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsK
ICAgICBDb2xvciBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNldHRs
aW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3IuCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZs
b2F0KSBjb25zdDsKKwogICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY29s
b3JXaXRoQWxwaGEoMS4wZik7IH0KIAogICAgIC8vIFRydWUgaWYgdGhlIGNvbG9yIG9yaWdpbmF0
ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgY29uc2lkZXIgc3VwcG9ydGluZyBzZW1hbnRpYyBFeHRlbmRlZENvbG9yIGNvbG9ycworICAg
IC8vIGFuZCB1c2luZyBvbmUgb2YgdGhlIGV4dHJhIGJpdHMgaW4gdGhlIHBvaW50ZXIgdG8gcmVw
cmVzZW50IGl0LgogICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVu
ZGVkKCkgJiYgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIGlzU2VtYW50aWNSQkdBQ29sb3JC
aXQpOyB9CiAKKyAgICAvLyBUaGlzIHJldHVybnMgYSBjb3B5IG9mIHRoZSBDb2xvciB3aXRoIHRo
ZSBzZW1hbnRpYyBiaXQgc2V0LiBJdCBpcyBub3QKKyAgICAvLyB2YWxpZCB0byBjYWxsIHRoaXMg
b24gYW4gRXh0ZW5kZWRDb2xvciBDb2xvciwgYXMgdGhleSBkb24ndCBjdXJyZW50bHkKKyAgICAv
LyBzdXBwb3J0IHRoZSBzZW1hbnRpYyBiaXQuCisgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNv
bnN0OworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKICAg
ICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CkBAIC0yODQsNyArMjk4LDEzIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMg
Ym9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBS
R0JBMzIgcHJlbXVsdGlwbGllZEFSR0IoKSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBSR0JBMzIg
cmdiKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRS
R0IobWFrZVJHQihyLCBnLCBiKSk7IH0KICAgICB2b2lkIHNldFJHQihSR0JBMzIpOwogICAgIHZv
aWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50
aWNSQkdBQ29sb3JCaXQ7IH0KQEAgLTMxMiw4ICszMzIsNiBAQCBwcml2YXRlOgogYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRB
UkdCKFJHQkEzMik7Ci1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29s
b3ImKTsKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgogV0VCQ09SRV9F
WFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKIApAQCAtMzYxLDYgKzM3OSwxMSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcihjCiAgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xv
cjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdz
ICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9yQml0KTsKIH0KIAoraW5saW5lIENvbG9yIGJs
ZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBibGVuZFByZW11bHRpcGxpZWQpCit7CisgICAgcmV0dXJuIENvbG9yOjpibGVuZChmcm9t
LCB0bywgcHJvZ3Jlc3MsIGJsZW5kUHJlbXVsdGlwbGllZCk7Cit9CisKIGlubGluZSB1bnNpZ25l
ZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKQEAgLTM5Mywx
NiArNDE2LDkgQEAgaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdAogICAg
IHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotaW5saW5lIFJH
QkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+
IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0dXJuIG92ZXJyaWRlQWxwaGEgPyBjb2xvcldpdGhP
dmVycmlkZUFscGhhKGNvbG9yLCBvdmVycmlkZUFscGhhLnZhbHVlKCkpIDogY29sb3I7Ci19Ci0K
IGlubGluZSBSR0JBMzIgQ29sb3I6OnJnYigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJH
QkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIs
Ci0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5k
bGUgZXh0ZW5kZWQuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQo
KSkgaGVyZQogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgPj4gMzIpIH07CiB9CiAKQEAgLTQ0Miw2ICs0NTgsNzQgQEAgY29uc3RleHBy
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIAogICAgIHJldHVybiB7IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihyLCAweEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAw
eEZGKSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKIH0KIAordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0
cnVlOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5j
b2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVu
ZGVkKCkuYmx1ZSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOwor
ICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBlbmNvZGVyIDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlk
KCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMg
c2VtYW50aWMuCisKKyAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBl
bmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2RlciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK09wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgYm9vbCBpc0V4dGVuZGVkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNF
eHRlbmRlZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRl
bmRlZCkgeworICAgICAgICBmbG9hdCByZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAg
ICBmbG9hdCBibHVlOworICAgICAgICBmbG9hdCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBj
b2xvclNwYWNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVu
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoYmx1ZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKwor
ICAgIHVpbnQzMl90IHZhbHVlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29s
b3IgeyB2YWx1ZSB9IH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNl
IFdURiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJv
Q29udGV4dFNvdXJjZShjYQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNv
dXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxwaGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNl
UkdCQUZyb21Db2xvcihjciwgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgY29s
b3IuYWxwaGEoKSAvIDI1NS5mICogZ2xvYmFsQWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGNvbG9yLmFscGhhKCkgLyAyNTUuZiAqIGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDggQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2ln
bmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29s
b3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3Ig
PSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9y
LmFscGhhKCkpOworICAgICAgICAgICAgYXV0byBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVs
dGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUkdCQShs
b29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9u
ZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwogICAgICAgICAgICAgKnBpeGVs
ID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUoKTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
OCBAQCBzdGF0aWMgUkdCQTMyIG1ha2VSR0JBRnJvbUNHQ29sb3IoQ0dDb2xvCiAKIENvbG9yOjpD
b2xvcihDR0NvbG9yUmVmIGNvbG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0g
bmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIGlmICghY29sb3IpIHsKICAgICAg
ICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTIsNiArOTQsOCBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
IAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFnKQogeworICAgIC8v
IEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwog
ICAgIGlmICghY29sb3IpIHsKICAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52
YWxpZFJHQkFDb2xvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMTIzLDI0ICsxMjcsMTggQEAgc3Rh
dGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hl
ZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmICghY29sb3IuaXNFeHRlbmRl
ZCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29sb3IucmdiKCkudmFsdWUoKSkgewotICAgICAgICBj
YXNlIENvbG9yOjp0cmFuc3BhcmVudC52YWx1ZSgpOiB7Ci0gICAgICAgICAgICBzdGF0aWMgQ0dD
b2xvclJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q29sb3I6OmJsYWNrLnZhbHVlKCk6IHsKLSAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJs
YWNrQ0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJldHVybiBibGFj
a0NHQ29sb3I7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb2xvcjo6d2hpdGUudmFsdWUoKTog
ewotICAgICAgICAgICAgc3RhdGljIENHQ29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29s
b3IoY29sb3IpOwotICAgICAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsKLSAgICAgICAgfQot
ICAgICAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbG9yLCBDb2xv
cjo6dHJhbnNwYXJlbnQpKSB7CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50
Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50
Q0dDb2xvcjsKKyAgICB9CisgICAgaWYgKENvbG9yOjppc0JsYWNrQ29sb3IoY29sb3IpKSB7Cisg
ICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9y
KTsKKyAgICAgICAgcmV0dXJuIGJsYWNrQ0dDb2xvcjsKKyAgICB9CisgICAgaWYgKENvbG9yOjpp
c1doaXRlQ29sb3IoY29sb3IpKSB7CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHdoaXRlQ0dD
b2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsK
ICAgICB9Ci0KLSAgICBBU1NFUlQoY29sb3IuaXNFeHRlbmRlZCgpIHx8IGNvbG9yLnJnYigpLnZh
bHVlKCkpOwogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbnlMUlVDYWNoZTxDb2xvciwg
UmV0YWluUHRyPENHQ29sb3JSZWY+LCAzMj4+IGNhY2hlOwogICAgIHJldHVybiBjYWNoZS5nZXQo
KS5nZXQoY29sb3IpLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw5ICs2Myw3IEBAIHZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KCkgYnV0
IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0aGUgYWxwaGEgY29tcG9uZW50IHRoYXQg
YnJlYWtzIHNvbWUgdGVzdHMuCi0gICAgZmxvYXQgY29sb3JBbHBoYSA9IGZsb29kQ29sb3IoKS5h
bHBoYSgpIC8gMjU1LjA7Ci0gICAgYXV0byBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
Zmxvb2RDb2xvcigpLnJnYigpLCBjb2xvckFscGhhICogZmxvb2RPcGFjaXR5KCkpOworICAgIGF1
dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOwogICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IEMKICAgICBnbFVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBs
eSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBD
b2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKGNvbG9yLnByZW11bHRpcGxp
ZWRBUkdCKCkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRo
KTsKIApAQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KFRleHR1cmUKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdl
IG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9z
aXRpbmcuCiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0
Q29tcG9uZW50cyBkaXJlY3RseS4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29s
b3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHNo
YWRvdy5jb2xvcigpLnByZW11bHRpcGxpZWRBUkdCKCkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKICAgICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0
aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsK
ICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwg
MCwgMCk7CkBAIC02NzksNyArNjc5LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xp
ZENvbG9yKGNvbgogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKICAg
ICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0Q29tcG9uZW50cyBkaXJlY3Rs
eS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKGNvbG9yKSkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gQ29sb3IoY29sb3IucHJlbXVsdGlwbGllZEFSR0IoKSkudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywg
YiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFn
cyB8PSBTaG91bGRCbGVuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTkgKzQxLDE0IEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9S
X0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAg
IGlmIChpc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgYXV0byBhc1JHQkEgPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7Ci0gICAgICAgIHJldHVybiBEMkQxOjpDb2xvckYoYXNSR0JBLmNvbXBvbmVu
dHNbMF0sIGFzUkdCQS5jb21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNSR0JB
LmNvbXBvbmVudHNbM10pOwotICAgIH0KLQotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBhbHBoYSgp
IC8gMjU1LjBmOwotICAgIHJldHVybiBEMkQxOjpDb2xvckYocmdiKCkudmFsdWUoKSwgY29sb3JB
bHBoYSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
CisgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJh
dG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsKLSAgICBhdXRvIGFzUkdCQSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKLSAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYoYXNSR0JBLmNvbXBv
bmVudHNbMF0sIGFzUkdCQS5jb21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNS
R0JBLmNvbXBvbmVudHNbM10pOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOworICAgIHJldHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjE5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksMTAgKzM3OSw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3QKIAogRDJEMV9DT0xPUl9GIEdyYXBo
aWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25z
dAogewotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBjb2xvci5hbHBoYUFzRmxvYXQoKTsKLSAgICBm
bG9hdCBnbG9iYWxBbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7Ci0KLSAgICBy
ZXR1cm4gRDJEMTo6Q29sb3JGKGNvbG9yLnJnYigpLCBnbG9iYWxBbHBoYSAqIGNvbG9yQWxwaGEp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEds
b2JhbEFscGhhKCkpOwogfQogCiBJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1h
Yy5tbQkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgc3RhdGljIGJvb2wg
ZHJhd0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdAogCiAgICAgLy8gRklYTUU6IFRoaXMgY29sb3Ig
c2hvdWxkIGJlIHNoYXJlZCB3aXRoIFJlbmRlclRoZW1lTWFjLiBGb3Igbm93IGp1c3QgdXNlIHRo
ZSBzYW1lIE5TQ29sb3IgY29sb3IuCiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJl
IG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3aGVuIGRyYXdp
bmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAgYXV0byBjb2xv
ciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBrZXli
b2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgYXV0byBjb2xvciA9IGNv
bG9yRnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3Bh
cXVlQ29sb3IoKTsKICAgICBhdXRvIHN0eWxlID0gYWRvcHRDRihDR1N0eWxlQ3JlYXRlRm9jdXNS
aW5nV2l0aENvbG9yKCZmb2N1c1JpbmdTdHlsZSwgY2FjaGVkQ0dDb2xvcihjb2xvcikpKTsKICAg
ICBDR0NvbnRleHRTZXRTdHlsZShjZ0NvbnRleHQsIHN0eWxlLmdldCgpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uCiAgICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRpcGxlVGh1
bWJuYWlsU2hyaW5rU2l6ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAKICAgICAg
ICAgLy8gQmFja2dyb3VuZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3VuZCBpY29u
IHdpdGggYSBncmFkaWVudCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xvciBiYWNr
Z3JvdW5kSW1hZ2VDb2xvciA9IENvbG9yKGJ1dHRvblJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKSk7CisgICAgICAg
IENvbG9yIGJhY2tncm91bmRJbWFnZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIuc3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHRodW1i
bmFpbFBpY3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUs
IGNvcm5lclNpemUpLCBwaWN0dXJlRnJhbWVDb2xvcik7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZmlsbFJlY3QodGh1bWJuYWlsUmVjdCwgYmFja2dyb3VuZEltYWdlQ29sb3IpOwogICAg
ICAgICB7CkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBDb2xvciBSZW5kZXJUaGVtZUlPUzo6c3lzdGVt
Q29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRvIGl0ID0gZ2xvYmFsQ1NTVmFsdWVUb1N5c3Rl
bUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7IGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJh
bmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCB9KTsKICAgICAgICAgICAgIGlmIChp
dCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAoKS5lbmQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSUQsIG9wdGlvbnMp
OwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0LT52YWx1ZS5yZ2IoKSwgQ29sb3I6OlNlbWFu
dGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUtPnNlbWFudGljQ29sb3IoKTsKICAg
ICAgICAgfQogICAgICAgICBhdXRvIGNvbG9yID0gc3lzdGVtQ29sb3JGcm9tQ1NTVmFsdWVJRChj
c3NWYWx1ZUlELCB1c2VEYXJrQXBwZWFyYW5jZSwgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2
ZWwpOwogICAgICAgICBpZiAoY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3ICs0Njks
NyBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1JpbmdDCiAgICAgICAgIHJl
dHVybiBvbGRBcXVhRm9jdXNSaW5nQ29sb3IoKTsKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBl
YXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRpb25zLmNvbnRhaW5zKFN0eWxlQ29sb3I6Ok9wdGlv
bnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVjdGVkIHRv
IGJlIG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3aGVuIGRy
YXdpbmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAgcmV0dXJu
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBrZXlib2Fy
ZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgcmV0dXJuIGNvbG9yRnJvbU5T
Q29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3BhcXVlQ29sb3Io
KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMjMgKzIzOCwyMyBAQCB2b2lkIFJlbmRlclRy
ZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAKICAgICAgICAgaWYgKG8ucGFyZW50KCkpIHsK
ICAgICAgICAgICAgIENvbG9yIGNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5yZ2IoKSAhPSBjb2xvci5y
Z2IoKSkKKyAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5wYXJl
bnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIGNv
bG9yKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFtjb2xvcj0iIDw8IGNvbG9yLm5hbWVGb3JS
ZW5kZXJUcmVlQXNUZXh0KCkgPDwgIl0iOwogCiAgICAgICAgICAgICAvLyBEbyBub3QgZHVtcCBp
bnZhbGlkIG9yIHRyYW5zcGFyZW50IGJhY2tncm91bmRzLCBzaW5jZSB0aGF0IGlzIHRoZSBkZWZh
dWx0LgogICAgICAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gby5zdHlsZSgpLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAg
ICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpLnJnYigpICE9IGJhY2tncm91bmRDb2xvci5yZ2IoKQotICAgICAg
ICAgICAgICAgICYmIGJhY2tncm91bmRDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQp
CisgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFyZW50KCkt
PnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSwgYmFja2dyb3VuZENvbG9yKQorICAgICAgICAgICAgICAgICYmIGJhY2tncm91bmRDb2xvciAh
PSBDb2xvcjo6dHJhbnNwYXJlbnQpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBbYmdjb2xvcj0i
IDw8IGJhY2tncm91bmRDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgQ29sb3IgdGV4dEZpbGxDb2xvciA9IG8uc3R5bGUoKS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKTsKLSAg
ICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpLnJnYigpICE9IHRleHRGaWxsQ29sb3Iucmdi
KCkgIAotICAgICAgICAgICAgICAgICYmIHRleHRGaWxsQ29sb3IucmdiKCkgIT0gY29sb3Iucmdi
KCkgJiYgdGV4dEZpbGxDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgICAg
ICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFyZW50KCktPnN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciksIHRl
eHRGaWxsQ29sb3IpCisgICAgICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciAhPSBjb2xvciAm
JiB0ZXh0RmlsbENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0
cyA8PCAiIFt0ZXh0RmlsbENvbG9yPSIgPDwgdGV4dEZpbGxDb2xvci5uYW1lRm9yUmVuZGVyVHJl
ZUFzVGV4dCgpIDw8ICJdIjsKIAogICAgICAgICAgICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9yID0g
by5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJv
a2VDb2xvcik7Ci0gICAgICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpLnJnYigpICE9IHRl
eHRTdHJva2VDb2xvci5yZ2IoKQotICAgICAgICAgICAgICAgICYmIHRleHRTdHJva2VDb2xvci5y
Z2IoKSAhPSBjb2xvci5yZ2IoKSAmJiB0ZXh0U3Ryb2tlQ29sb3IucmdiKCkgIT0gQ29sb3I6OnRy
YW5zcGFyZW50KQorICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihv
LnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dFRleHRTdHJva2VDb2xvciksIHRleHRTdHJva2VDb2xvcikKKyAgICAgICAgICAgICAgICAmJiB0
ZXh0U3Ryb2tlQ29sb3IgIT0gY29sb3IgJiYgdGV4dFN0cm9rZUNvbG9yICE9IENvbG9yOjp0cmFu
c3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0U3Ryb2tlQ29sb3I9IiA8PCB0
ZXh0U3Ryb2tlQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiXSI7CiAKICAgICAg
ICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpICE9IG8uc3R5
bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAmJiBvLnN0eWxlKCkudGV4dFN0cm9rZVdpZHRoKCkgPiAw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjE5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw5ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNs
dWRpbmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAgICAgYXV0byBz
dG9wQ29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihzdmdTdHlsZS5zdG9w
Q29sb3IoKSk7CiAKLSAgICBmbG9hdCBjb2xvckFscGhhID0gc3RvcENvbG9yLmFscGhhKCkgLyAy
NTUuMDsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KCkgYnV0IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0aGUgYWxwaGEgY29t
cG9uZW50LgotICAgIHJldHVybiBjb2xvcldpdGhPdmVycmlkZUFscGhhKHN0b3BDb2xvci5yZ2Io
KSwgY29sb3JBbHBoYSAqIHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOworICAgIHJldHVybiBzdG9w
Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmco
c3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NjE5ODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDIwLTA1LTIwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXT1JLIElO
IFBST0dSRVNTCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb2xvcj46OmVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbToKKyAgICAgICAgKHNjcm9s
bFZpZXdCYWNrZ3JvdW5kQ29sb3IpOgorCiAyMDIwLTA1LTIwICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBEaWN0YXRpb24gY29udGV4dCBzaG91bGQgYmUgYW4gb2Jq
ZWN0IGlkZW50aWZpZXIsIG5vdCBhIHR5cGUtcHVubmVkIHBvaW50ZXIKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjYx
OTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUyNiw4NCArMTUyNiw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxX
aW5kb3dGZWF0dXJlcz46OmRlY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29sb3ImIGNv
bG9yKQotewotICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgZW5jb2RlciA8
PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5yZWQoKTsKLSAg
ICAgICAgZW5jb2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAgICAgZW5j
b2RlciA8PCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBlbmNvZGVyIDw8IGNv
bG9yLmFzRXh0ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0
ZW5kZWQoKS5jb2xvclNwYWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNv
ZGVyIDw8IGZhbHNlOwotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZW5j
b2RlciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IHZh
bHVlID0gY29sb3IucmdiKCkudmFsdWUoKTsKLQotICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAgICBl
bmNvZGVyIDw8IHZhbHVlOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgQ29sb3ImIGNvbG9yKQotewotICAgIGJvb2wgaXNFeHRlbmRlZDsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCByZWQ7Ci0gICAgICAg
IGZsb2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBmbG9hdCBhbHBoYTsK
LSAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZ3JlZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGJsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgY29sb3IgPSBDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wg
aXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCB2YWx1ZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29sb3IgPSBTaW1wbGVDb2xvciB7IHZhbHVlIH07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LU9wdGlvbmFsPENvbG9yPiBBcmd1bWVudENvZGVyPENvbG9yPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgQ29sb3IgY29sb3I7Ci0gICAgaWYgKCFkZWNvZGUoZGVjb2RlciwgY29s
b3IpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIGNvbG9yOwot
fQotCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHZvaWQgQXJndW1lbnRDb2RlcjxEcmFnRGF0
YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAko
cmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAgY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiBjbGFzcyBCbG9iUGFydDsK
IGNsYXNzIENlcnRpZmljYXRlSW5mbzsKLWNsYXNzIENvbG9yOwogY2xhc3MgQ3JlZGVudGlhbDsK
IGNsYXNzIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb247CiBjbGFzcyBDdXJzb3I7CkBAIC00NDMs
MTIgKzQ0Miw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKICAg
ICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3Jl
OjpXaW5kb3dGZWF0dXJlcyYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpDb2xvcj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKTsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpDb2xvciYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxX
ZWJDb3JlOjpDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0
YT4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJh
Z0RhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tX
ZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3
IEBAIHN0YXRpYyBXZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3UKICAgICBpZiAoem9v
bVNjYWxlIDwgbWluaW11bVpvb21TY2FsZSkgewogICAgICAgICBDR0Zsb2F0IHNsb3BlID0gMTI7
CiAgICAgICAgIENHRmxvYXQgb3BhY2l0eSA9IHN0ZDo6bWF4PENHRmxvYXQ+KDEgLSBzbG9wZSAq
IChtaW5pbXVtWm9vbVNjYWxlIC0gem9vbVNjYWxlKSwgMCk7Ci0gICAgICAgIGNvbG9yID0gV2Vi
Q29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgb3BhY2l0eSk7CisgICAg
ICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmco
b3BhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399976</attachid>
            <date>2020-05-21 13:16:14 -0700</date>
            <delta_ts>2020-05-23 11:31:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200521131613.patch</filename>
            <type>text/plain</type>
            <size>44668</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA1LTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBNYWtlIENvbG9yOjpyZ2IoKSBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAgKiBlZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3cpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92
ZXJyaWRlQWxwaGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRHZW5lcmljVGV4dFRyYWNrOjp1cGRhdGVD
dWVGcm9tQ3VlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6ZGFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JX
aXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwcmVtdWx0
aXBsaWVkQVJHQiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6cmdiIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENHQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdFRpbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnN5c3RlbUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3Qp
OgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSBjb25zdCk6CisKIDIwMjAt
MDUtMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgaW1wbGljaXQgVVJMLT5TdHJpbmcgY29udmVyc2lvbiBvcGVyYXRvcnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0JKHJl
dmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtODgyLDEzICs4ODIsMTMgQEAgQ29sb3IgSFRNTENv
bnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNv
bXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Y29sb3IoKS5yZ2IoKSksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsaXplZENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmNvbG9yKCksIGlnbm9yZURlZmF1bHRDb2xvciwgZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5j
b2xvcigpLnJnYigpKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuY29sb3IoKSwgaWdub3JlRGVmYXVsdENvbG9yLCBlbGVtZW50KTsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTAsNyArMTA1MCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5
bGUoTXUKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgY29sb3IgPSBDb2xvcihw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKIAotICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZShjb2xvci5yZ2IoKSkpOworICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFscGhhKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICAg
ICAgICAgIHN0eWxlID0gQ2FudmFzU3R5bGUoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5yZ2IoKSwgc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoc3R5bGUuaGFzT3ZlcnJpZGVBbHBoYSgpKQorICAgICAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkp
KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CkBAIC00MDIsMTAgKzQwMSw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmhhc092ZXJy
aWRlQWxwaGEoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFJHQkEz
MiBoZXJlLgotICAgICAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLnJnYigpLCBzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChzdHlsZS5oYXNPdmVycmlkZUFs
cGhhKCkpCisgICAgICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92
ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHlsZSA9IENhbnZh
c1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpKTsKICAgICB9IGVsc2UKICAgICAgICAg
Y2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKQEAgLTEzMTAsOCArMTMw
OCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8v
IEZJWE1FOiBTaG91bGQgbm90IHVzZSBSR0JBMzIgaGVyZS4KLSAgICBzZXRTaGFkb3coRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJn
YigpLCBhbHBoYSkpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZygqYWxwaGEpOworICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVh
dGVGcm9tU3RyaW4KICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBDb2xvciB7IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iucmdi
KCksIGFscGhhKSB9OworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhhbHBoYSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmlj
VGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgSW5i
YW5kR2VuZXJpY1RleHRUcmFjazo6dXBkYXRlQ3VlRnIKICAgICBpZiAoaW5iYW5kQ3VlLnNpemUo
KSA+IDApCiAgICAgICAgIGN1ZS5zZXRTaXplKHN0ZDo6cm91bmQoaW5iYW5kQ3VlLnNpemUoKSkp
OwogICAgIGlmIChpbmJhbmRDdWUuYmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICBjdWUuc2V0QmFja2dyb3VuZENvbG9yKGluYmFuZEN1ZS5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2Io
KSk7CisgICAgICAgIGN1ZS5zZXRCYWNrZ3JvdW5kQ29sb3IoaW5iYW5kQ3VlLmJhY2tncm91bmRD
b2xvcigpKTsKICAgICBpZiAoaW5iYW5kQ3VlLmZvcmVncm91bmRDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgY3VlLnNldEZvcmVncm91bmRDb2xvcihpbmJhbmRDdWUuZm9yZWdyb3VuZENvbG9y
KCkucmdiKCkpOworICAgICAgICBjdWUuc2V0Rm9yZWdyb3VuZENvbG9yKGluYmFuZEN1ZS5mb3Jl
Z3JvdW5kQ29sb3IoKSk7CiAgICAgaWYgKGluYmFuZEN1ZS5oaWdobGlnaHRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5oaWdobGlnaHRD
b2xvcigpLnJnYigpKTsKKyAgICAgICAgY3VlLnNldEhpZ2hsaWdodENvbG9yKGluYmFuZEN1ZS5o
aWdobGlnaHRDb2xvcigpKTsKIAogICAgIGlmIChpbmJhbmRDdWUuYWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6QWxpZ25tZW50OjpTdGFydCkKICAgICAgICAgY3VlLnNldEFsaWduKCJzdGFydCJf
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSw2IEBAIFJHQkEzMiBtYWtlUkdCQTMy
RnJvbUZsb2F0cyhmbG9hdCByLCBmbG8KICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRv
UkdCQUJ5dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShiKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwogfQogCi1SR0JBMzIgY29sb3JXaXRoT3Zl
cnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0
dXJuIHsgKGNvbG9yLnZhbHVlKCkgJiAweDAwRkZGRkZGKSB8IGNvbG9yRmxvYXRUb1JHQkFCeXRl
KG92ZXJyaWRlQWxwaGEpIDw8IDI0IH07Ci19Ci0KIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZs
b2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkK
IHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDI1NS4wOwpAQCAtMzM4LDE0ICszMzMs
MTUgQEAgU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZQogCiBTdHJpbmcg
Q29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
SGFuZGxlIGV4dGVuZGVkIGNvbG9ycy4KKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKICAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKIH0KIAogQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAocmdiKCkgPT0gYmxhY2spCisgICAgaWYgKCFpc0V4dGVuZGVkKCkgJiYgcmdiKCkgPT0gYmxh
Y2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKICAgICAKICAgICBjb25zdCBmbG9h
dCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKQEAgLTM3MCw3ICszNjYs
NyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25z
dAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSB3aGl0ZSkKKyAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiByZ2IoKSA9PSB3aGl0
ZSkKICAgICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCiAgICAgY29uc3QgZmxvYXQg
c2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CkBAIC00MTUsNiArNDExLDgg
QEAgY29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZQogCiBDb2xvciBDb2xv
cjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisKICAgICBpZiAoIWlz
VmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gc291cmNlOwog
CkBAIC00MzEsNiArNDI5LDggQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBzb3Vy
Y2UpIAogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAg
IC8vIElmIHRoZSBjb2xvciBjb250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9u
ZS4KICAgICBpZiAoIWlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTQ2MCwx
NCArNDYwLDMyIEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgKICAg
ICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogfQogCitDb2xvciBDb2xvcjo6Y29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1v
dW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5kZWQo
KSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CiAK
LSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsgLy8gV2h5IGRvZXNuJ3QgdGhpcyB1c2Ug
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoKSBsaWtlIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoKT8KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KKyAgICBpbnQgbmV3QWxwaGEgPSBh
bHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCksIGJsdWUo
KSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBtYWtlUkdCQShyZWQoKSwgZ3JlZW4o
KSwgYmx1ZSgpLCBuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVz
dWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xv
cjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNv
bnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3It
PmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworCisgICAgQ29sb3IgcmVzdWx0
ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29sb3JGbG9h
dFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDk4LDI1
ICs1MTYsMzEgQEAgRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50cwogICAg
IHJldHVybiB7IH07CiB9CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEz
MiBwaXhlbENvbG9yKQorUkdCQTMyIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGlmIChwaXhlbENvbG9yLmlzVmlzaWJsZSgpICYmICFwaXhlbENv
bG9yLmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBp
eGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwog
ICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKFJHQkEzMiBwaXhlbENvbG9yKQogewotICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0g
ICAgICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVJH
Qihjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVl
bigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1KTsKLSAgICAgICAgcmV0
dXJuIGNvbG9yLnJnYigpOwotICAgIH0KKyAgICBpZiAoIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBv
bmVudCgpLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOworICAgIHJldHVybiBwaXhlbENv
bG9yOworfQogCi0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUsIGNvbG9y
LmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYmx1ZSgpICog
MjU1LCBjb2xvci5hc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSk7CitSR0JBMzIgQ29sb3I6OnBy
ZW11bHRpcGxpZWRBUkdCKCkgY29uc3QKK3sKKyAgICBpZiAoaXNPcGFxdWUoKSkgeworICAgICAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VSR0IoYXNFeHRlbmRl
ZCgpLnJlZCgpICogMjU1LCBhc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgp
LmJsdWUoKSAqIDI1NSk7CisgICAgICAgIHJldHVybiByZ2IoKTsKKyAgICB9CiAKLSAgICByZXR1
cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xv
ci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAg
IHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1LCBh
c0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSwgYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSwgYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUpOworICAgIHJldHVybiBtYWtlUHJlbXVsdGlwbGllZFJH
QkEocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7CiB9CiAKIGJvb2wgZXh0ZW5kZWRD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBAIC01MjgsMzAgKzU1
MiwzNSBAQCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29s
b3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRQcmVtdWx0aXBsaWVkKQorQ29sb3Ig
Q29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFByZW11bHRpcGxpZWQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorCiAgICAgLy8gV2UgbmVl
ZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0
aGUgYW5pbWF0aW9uCiAgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoYmxl
bmRQcmVtdWx0aXBsaWVkKSB7CiAgICAgICAgIC8vIFNpbmNlIHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgICAg
IENvbG9yIHByZW11bHRGcm9tID0gZnJvbS5hbHBoYSgpID8gcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoZnJvbSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgICAgIENvbG9yIHByZW11bHRU
byA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcih0bykgOiBDb2xvcjo6
dHJhbnNwYXJlbnQ7Ci0KLSAgICAgICAgQ29sb3IgcHJlbXVsdEJsZW5kZWQoYmxlbmQocHJlbXVs
dEZyb20ucmVkKCksIHByZW11bHRUby5yZWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxl
bmQocHJlbXVsdEZyb20uZ3JlZW4oKSwgcHJlbXVsdFRvLmdyZWVuKCksIHByb2dyZXNzKSwKLSAg
ICAgICAgICAgIGJsZW5kKHByZW11bHRGcm9tLmJsdWUoKSwgcHJlbXVsdFRvLmJsdWUoKSwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQocHJlbXVsdEZyb20uYWxwaGEoKSwgcHJlbXVsdFRv
LmFscGhhKCksIHByb2dyZXNzKSk7CisgICAgICAgIFJHQkEzMiBwcmVtdWx0RnJvbSA9IGZyb20u
YWxwaGEoKSA/IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGZyb20ucmdiKCkpIDogQ29sb3I6
OnRyYW5zcGFyZW50OworICAgICAgICBSR0JBMzIgcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IHBy
ZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHRvLnJnYigpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsK
IAotICAgICAgICByZXR1cm4gQ29sb3IoY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IocHJlbXVs
dEJsZW5kZWQucmdiKCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQ29sb3IoYmxlbmQoZnJvbS5y
ZWQoKSwgdG8ucmVkKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS5ncmVlbigpLCB0
by5ncmVlbigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20uYmx1ZSgpLCB0by5ibHVl
KCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS5hbHBoYSgpLCB0by5hbHBoYSgpLCBw
cm9ncmVzcykpOworICAgICAgICBSR0JBMzIgcHJlbXVsdEJsZW5kZWQgPSBtYWtlUkdCQSgKKyAg
ICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLnJlZENvbXBvbmVudCgpLCBwcmVt
dWx0VG8ucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKKyAgICAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVlbkNvbXBvbmVu
dCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5i
bHVlQ29tcG9uZW50KCksIHByZW11bHRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKKyAg
ICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmFscGhhQ29tcG9uZW50KCksIHBy
ZW11bHRUby5hbHBoYUNvbXBvbmVudCgpLCBwcm9ncmVzcykKKyAgICAgICAgKTsKKworICAgICAg
ICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IocHJlbXVsdEJsZW5kZWQpOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb20ucmVkKCksIHRv
LnJlZCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb20uZ3JlZW4oKSwg
dG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tLmJsdWUo
KSwgdG8uYmx1ZSgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb20uYWxw
aGEoKSwgdG8uYWxwaGEoKSwgcHJvZ3Jlc3MpCisgICAgfTsKIH0KIAogdm9pZCBDb2xvcjo6dGFn
QXNWYWxpZCgpCkBAIC01NjUsNiArNTk0LDE1IEBAIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9y
Ojphc0V4dGVuZGVkKCkKICAgICByZXR1cm4gKm1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3I7CiB9
CiAKK0NvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlz
RXh0ZW5kZWQoKSk7CisKKyAgICBDb2xvciByZXN1bHQgPSAqdGhpczsKKyAgICByZXN1bHQuc2V0
SXNTZW1hbnRpYygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICByZXR1cm4g
dHMgPDwgY29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTIs
OCArOTIsOCBAQCBjb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgCiBSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29s
IGNlaWxpbmcgPSB0cnVlKTsKIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSk7CiAKLVdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhP
dmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7Ci1SR0JBMzIg
Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZsb2F0PiBvdmVy
cmlkZUFscGhhKTsKK1JHQkEzMiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQihSR0JBMzIpOwor
UkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKFJHQkEzMik7CiAKIFdFQkNPUkVfRVhQ
T1JUIFJHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0
IGgsIGZsb2F0IHMsIGZsb2F0IGwsIGZsb2F0IGEpOwpAQCAtMTM3LDcgKzEzNyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpKTsKICAg
ICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsg
YW5kIGFscGhhIHZhbHVlcy4KICAgICBDb2xvcihmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKQogICAgIHsKICAgICAgICAgc2V0UkdCKG1ha2VSR0JBRnJvbUNNWUtB
KGMsIG0sIHksIGssIGEpKTsKQEAgLTE5NiwxNSArMTk1LDE4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQogICAgIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAg
OiByZ2IoKS5pc1Zpc2libGUoKTsgfQogCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBk
b2VzIG5vdCBtYWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAg
IGludCByZWQoKSBjb25zdCB7IHJldHVybiByZ2IoKS5yZWRDb21wb25lbnQoKTsgfQorICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcy4gSXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiB0aGUgcHJlc2Vu
Y2Ugb2YgRXh0ZW5kZWRDb2xvci4KICAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2Io
KS5ncmVlbkNvbXBvbmVudCgpOyB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLiBJdCBkb2Vz
IG5vdCBtYWtlIHNlbnNlIGluIHRoZSBwcmVzZW5jZSBvZiBFeHRlbmRlZENvbG9yLgogICAgIGlu
dCBibHVlKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuYmx1ZUNvbXBvbmVudCgpOyB9CisKKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgb3IgbWFrZSB0aGlzIHdvcmsgd2l0aCBFeHRlbmRlZENvbG9y
CiAgICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuYWxwaGFDb21wb25lbnQoKTsg
fQogCiAgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4ocmdiKCkuYWxwaGFD
b21wb25lbnQoKSkgLyAweEZGOyB9CiAKLSAgICBSR0JBMzIgcmdiKCkgY29uc3Q7Ci0KICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29s
b3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0
OwpAQCAtMjIzLDE1ICsyMjUsMjcgQEAgcHVibGljOgogICAgIENvbG9yIGJsZW5kKGNvbnN0IENv
bG9yJikgY29uc3Q7CiAgICAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoKSBjb25zdDsKIAotICAgIENv
bG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsKKyAgICBzdGF0aWMg
Q29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kUHJlbXVsdGlwbGllZCA9IHRydWUpOwogCi0gICAgLy8gUmV0dXJu
cyBhIGNvbG9yIHRoYXQgaGFzIHRoZSBzYW1lIFJHQiB2YWx1ZXMsIGJ1dCB3aXRoIHRoZSBnaXZl
biBBLgorICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsK
ICAgICBDb2xvciBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNldHRs
aW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3IuCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZs
b2F0KSBjb25zdDsKKwogICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY29s
b3JXaXRoQWxwaGEoMS4wZik7IH0KIAogICAgIC8vIFRydWUgaWYgdGhlIGNvbG9yIG9yaWdpbmF0
ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgY29uc2lkZXIgc3VwcG9ydGluZyBzZW1hbnRpYyBFeHRlbmRlZENvbG9yIGNvbG9ycworICAg
IC8vIGFuZCB1c2luZyBvbmUgb2YgdGhlIGV4dHJhIGJpdHMgaW4gdGhlIHBvaW50ZXIgdG8gcmVw
cmVzZW50IGl0LgogICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVu
ZGVkKCkgJiYgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIGlzU2VtYW50aWNSQkdBQ29sb3JC
aXQpOyB9CiAKKyAgICAvLyBUaGlzIHJldHVybnMgYSBjb3B5IG9mIHRoZSBDb2xvciB3aXRoIHRo
ZSBzZW1hbnRpYyBiaXQgc2V0LiBJdCBpcyBub3QKKyAgICAvLyB2YWxpZCB0byBjYWxsIHRoaXMg
b24gYW4gRXh0ZW5kZWRDb2xvciBDb2xvciwgYXMgdGhleSBkb24ndCBjdXJyZW50bHkKKyAgICAv
LyBzdXBwb3J0IHRoZSBzZW1hbnRpYyBiaXQuCisgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNv
bnN0OworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKICAg
ICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CkBAIC0yODQsNyArMjk4LDEzIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMg
Ym9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBS
R0JBMzIgcHJlbXVsdGlwbGllZEFSR0IoKSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBSR0JBMzIg
cmdiKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRS
R0IobWFrZVJHQihyLCBnLCBiKSk7IH0KICAgICB2b2lkIHNldFJHQihSR0JBMzIpOwogICAgIHZv
aWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50
aWNSQkdBQ29sb3JCaXQ7IH0KQEAgLTMxMiw4ICszMzIsNiBAQCBwcml2YXRlOgogYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRB
UkdCKFJHQkEzMik7Ci1SR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29s
b3ImKTsKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgogV0VCQ09SRV9F
WFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKIApAQCAtMzYxLDYgKzM3OSwxMSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcihjCiAgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xv
cjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdz
ICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9yQml0KTsKIH0KIAoraW5saW5lIENvbG9yIGJs
ZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBibGVuZFByZW11bHRpcGxpZWQpCit7CisgICAgcmV0dXJuIENvbG9yOjpibGVuZChmcm9t
LCB0bywgcHJvZ3Jlc3MsIGJsZW5kUHJlbXVsdGlwbGllZCk7Cit9CisKIGlubGluZSB1bnNpZ25l
ZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKQEAgLTM5Mywx
NiArNDE2LDkgQEAgaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdAogICAg
IHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotaW5saW5lIFJH
QkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+
IG92ZXJyaWRlQWxwaGEpCi17Ci0gICAgcmV0dXJuIG92ZXJyaWRlQWxwaGEgPyBjb2xvcldpdGhP
dmVycmlkZUFscGhhKGNvbG9yLCBvdmVycmlkZUFscGhhLnZhbHVlKCkpIDogY29sb3I7Ci19Ci0K
IGlubGluZSBSR0JBMzIgQ29sb3I6OnJnYigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJH
QkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIs
Ci0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5k
bGUgZXh0ZW5kZWQuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQo
KSkgaGVyZQogICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgPj4gMzIpIH07CiB9CiAKQEAgLTQ0Miw2ICs0NTgsNzQgQEAgY29uc3RleHBy
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIAogICAgIHJldHVybiB7IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihyLCAweEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAw
eEZGKSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKIH0KIAordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0
cnVlOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5j
b2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVu
ZGVkKCkuYmx1ZSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOwor
ICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBlbmNvZGVyIDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlk
KCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMg
c2VtYW50aWMuCisKKyAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBl
bmNvZGVyIDw8IHRydWU7CisgICAgZW5jb2RlciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK09wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgYm9vbCBpc0V4dGVuZGVkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNF
eHRlbmRlZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRl
bmRlZCkgeworICAgICAgICBmbG9hdCByZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAg
ICBmbG9hdCBibHVlOworICAgICAgICBmbG9hdCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBj
b2xvclNwYWNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVu
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoYmx1ZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKwor
ICAgIHVpbnQzMl90IHZhbHVlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29s
b3IgeyB2YWx1ZSB9IH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNl
IFdURiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJv
Q29udGV4dFNvdXJjZShjYQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNv
dXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxwaGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNl
UkdCQUZyb21Db2xvcihjciwgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvci5yZ2IoKSwgY29s
b3IuYWxwaGEoKSAvIDI1NS5mICogZ2xvYmFsQWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGNvbG9yLmFscGhhKCkgLyAyNTUuZiAqIGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDggQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2ln
bmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29s
b3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3Ig
PSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9y
LmFscGhhKCkpOworICAgICAgICAgICAgYXV0byBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVs
dGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUkdCQShs
b29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9u
ZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwogICAgICAgICAgICAgKnBpeGVs
ID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUoKTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
OCBAQCBzdGF0aWMgUkdCQTMyIG1ha2VSR0JBRnJvbUNHQ29sb3IoQ0dDb2xvCiAKIENvbG9yOjpD
b2xvcihDR0NvbG9yUmVmIGNvbG9yKQogeworICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0g
bmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwogICAgIGlmICghY29sb3IpIHsKICAgICAg
ICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52YWxpZFJHQkFDb2xvcjsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTIsNiArOTQsOCBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
IAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFnKQogeworICAgIC8v
IEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KKwog
ICAgIGlmICghY29sb3IpIHsKICAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gaW52
YWxpZFJHQkFDb2xvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMTIzLDI0ICsxMjcsMTggQEAgc3Rh
dGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hl
ZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmICghY29sb3IuaXNFeHRlbmRl
ZCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29sb3IucmdiKCkudmFsdWUoKSkgewotICAgICAgICBj
YXNlIENvbG9yOjp0cmFuc3BhcmVudC52YWx1ZSgpOiB7Ci0gICAgICAgICAgICBzdGF0aWMgQ0dD
b2xvclJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q29sb3I6OmJsYWNrLnZhbHVlKCk6IHsKLSAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJs
YWNrQ0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIHJldHVybiBibGFj
a0NHQ29sb3I7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb2xvcjo6d2hpdGUudmFsdWUoKTog
ewotICAgICAgICAgICAgc3RhdGljIENHQ29sb3JSZWYgd2hpdGVDR0NvbG9yID0gbGVha0NHQ29s
b3IoY29sb3IpOwotICAgICAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsKLSAgICAgICAgfQot
ICAgICAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbG9yLCBDb2xv
cjo6dHJhbnNwYXJlbnQpKSB7CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50
Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50
Q0dDb2xvcjsKKyAgICB9CisgICAgaWYgKENvbG9yOjppc0JsYWNrQ29sb3IoY29sb3IpKSB7Cisg
ICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9y
KTsKKyAgICAgICAgcmV0dXJuIGJsYWNrQ0dDb2xvcjsKKyAgICB9CisgICAgaWYgKENvbG9yOjpp
c1doaXRlQ29sb3IoY29sb3IpKSB7CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHdoaXRlQ0dD
b2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xvcjsK
ICAgICB9Ci0KLSAgICBBU1NFUlQoY29sb3IuaXNFeHRlbmRlZCgpIHx8IGNvbG9yLnJnYigpLnZh
bHVlKCkpOwogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbnlMUlVDYWNoZTxDb2xvciwg
UmV0YWluUHRyPENHQ29sb3JSZWY+LCAzMj4+IGNhY2hlOwogICAgIHJldHVybiBjYWNoZS5nZXQo
KS5nZXQoY29sb3IpLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lvbiAyNjE5NzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw5ICs2Myw3IEBAIHZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KCkgYnV0
IHRoYXQgaGFzIGRpZmZlcmVudCByb3VuZGluZyBvZiB0aGUgYWxwaGEgY29tcG9uZW50IHRoYXQg
YnJlYWtzIHNvbWUgdGVzdHMuCi0gICAgZmxvYXQgY29sb3JBbHBoYSA9IGZsb29kQ29sb3IoKS5h
bHBoYSgpIC8gMjU1LjA7Ci0gICAgYXV0byBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
Zmxvb2RDb2xvcigpLnJnYigpLCBjb2xvckFscGhhICogZmxvb2RPcGFjaXR5KCkpOworICAgIGF1
dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOwogICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IEMKICAgICBnbFVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoZSBwcmVtdWx0aXBs
eSBvbiBGbG9hdENvbXBvbmVudHMgZGlyZWN0bHkuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBD
b2xvcihwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb2xvcikpLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKGNvbG9yLnByZW11bHRpcGxp
ZWRBUkdCKCkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRo
KTsKIApAQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFt
KFRleHR1cmUKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdl
IG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9z
aXRpbmcuCiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0
Q29tcG9uZW50cyBkaXJlY3RseS4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gQ29s
b3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS50b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHNo
YWRvdy5jb2xvcigpLnByZW11bHRpcGxpZWRBUkdCKCkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KTsKICAgICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBn
LCBiLCBhKTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0
aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsK
ICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwg
MCwgMCk7CkBAIC02NzksNyArNjc5LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xp
ZENvbG9yKGNvbgogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKICAg
ICAvLyBGSVhNRTogRG8gdGhlIHByZW11bHRpcGx5IG9uIEZsb2F0Q29tcG9uZW50cyBkaXJlY3Rs
eS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKGNvbG9yKSkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gQ29sb3IoY29sb3IucHJlbXVsdGlwbGllZEFSR0IoKSkudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwgZywg
YiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2VkKQogICAgICAgICBmbGFn
cyB8PSBTaG91bGRCbGVuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MTk3MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTkgKzQxLDE0IEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9S
X0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAg
IGlmIChpc0V4dGVuZGVkKCkpIHsKLSAgICAgICAgYXV0byBhc1JHQkEgPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7Ci0gICAgICAgIHJldHVybiBEMkQxOjpDb2xvckYoYXNSR0JBLmNvbXBvbmVu
dHNbMF0sIGFzUkdCQS5jb21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNSR0JB
LmNvbXBvbmVudHNbM10pOwotICAgIH0KLQotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBhbHBoYSgp
IC8gMjU1LjBmOwotICAgIHJldHVybiBEMkQxOjpDb2xvckYocmdiKCkudmFsdWUoKSwgY29sb3JB
bHBoYSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
CisgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJh
dG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsKLSAgICBhdXRvIGFzUkdCQSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKLSAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYoYXNSR0JBLmNvbXBv
bmVudHNbMF0sIGFzUkdCQS5jb21wb25lbnRzWzFdLCBhc1JHQkEuY29tcG9uZW50c1syXSwgYXNS
R0JBLmNvbXBvbmVudHNbM10pOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpOworICAgIHJldHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjE5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksMTAgKzM3OSw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3QKIAogRDJEMV9DT0xPUl9GIEdyYXBo
aWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25z
dAogewotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBjb2xvci5hbHBoYUFzRmxvYXQoKTsKLSAgICBm
bG9hdCBnbG9iYWxBbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7Ci0KLSAgICBy
ZXR1cm4gRDJEMTo6Q29sb3JGKGNvbG9yLnJnYigpLCBnbG9iYWxBbHBoYSAqIGNvbG9yQWxwaGEp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OworICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEds
b2JhbEFscGhhKCkpOwogfQogCiBJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1h
Yy5tbQkocmV2aXNpb24gMjYxOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgc3RhdGljIGJvb2wg
ZHJhd0NlbGxGb2N1c1JpbmdXaXRoRnJhbWVBdAogCiAgICAgLy8gRklYTUU6IFRoaXMgY29sb3Ig
c2hvdWxkIGJlIHNoYXJlZCB3aXRoIFJlbmRlclRoZW1lTWFjLiBGb3Igbm93IGp1c3QgdXNlIHRo
ZSBzYW1lIE5TQ29sb3IgY29sb3IuCiAgICAgLy8gVGhlIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJl
IG9wYXF1ZSwgc2luY2UgQ29yZUdyYXBoaWNzIHdpbGwgYXBwbHkgb3BhY2l0eSB3aGVuIGRyYXdp
bmcgKGJlY2F1c2Ugb3BhY2l0eSBpcyBub3JtYWxseSBhbmltYXRlZCkuCi0gICAgYXV0byBjb2xv
ciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBrZXli
b2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CisgICAgYXV0byBjb2xvciA9IGNv
bG9yRnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSkub3Bh
cXVlQ29sb3IoKTsKICAgICBhdXRvIHN0eWxlID0gYWRvcHRDRihDR1N0eWxlQ3JlYXRlRm9jdXNS
aW5nV2l0aENvbG9yKCZmb2N1c1JpbmdTdHlsZSwgY2FjaGVkQ0dDb2xvcihjb2xvcikpKTsKICAg
ICBDR0NvbnRleHRTZXRTdHlsZShjZ0NvbnRleHQsIHN0eWxlLmdldCgpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYxOTcw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEZp
bGVVcGxvYWRJY29uCiAgICAgICAgIHRodW1ibmFpbFJlY3QuY29udHJhY3Qoa011bHRpcGxlVGh1
bWJuYWlsU2hyaW5rU2l6ZSwga011bHRpcGxlVGh1bWJuYWlsU2hyaW5rU2l6ZSk7CiAKICAgICAg
ICAgLy8gQmFja2dyb3VuZCBwaWN0dXJlIGZyYW1lIGFuZCBzaW1wbGUgYmFja2dyb3VuZCBpY29u
IHdpdGggYSBncmFkaWVudCBtYXRjaGluZyB0aGUgYnV0dG9uLgotICAgICAgICBDb2xvciBiYWNr
Z3JvdW5kSW1hZ2VDb2xvciA9IENvbG9yKGJ1dHRvblJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKSk7CisgICAgICAg
IENvbG9yIGJhY2tncm91bmRJbWFnZUNvbG9yID0gYnV0dG9uUmVuZGVyZXIuc3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHRodW1i
bmFpbFBpY3R1cmVGcmFtZVJlY3QsIGNvcm5lclNpemUsIGNvcm5lclNpemUsIGNvcm5lclNpemUs
IGNvcm5lclNpemUpLCBwaWN0dXJlRnJhbWVDb2xvcik7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZmlsbFJlY3QodGh1bWJuYWlsUmVjdCwgYmFja2dyb3VuZEltYWdlQ29sb3IpOwogICAg
ICAgICB7CkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBDb2xvciBSZW5kZXJUaGVtZUlPUzo6c3lzdGVt
Q29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRvIGl0ID0gZ2xvYmFsQ1NTVmFsdWVUb1N5c3Rl
bUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7IGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJh
bmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCB9KTsKICAgICAgICAgICAgIGlmIChp
dCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAoKS5lbmQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSUQsIG9wdGlvbnMp
OwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0LT52YWx1ZS5yZ2IoKSwgQ29sb3I6OlNlbWFu
dGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuc2VtYW50aWNDb2xvcigpOwogICAg
ICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBzeXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEKGNz
c1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZl
bCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDY5LDcgKzQ2OSw3
IEBAIENvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUZvY3VzUmluZ0MKICAgICAgICAgcmV0
dXJuIG9sZEFxdWFGb2N1c1JpbmdDb2xvcigpOwogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVh
cmFuY2UgbG9jYWxBcHBlYXJhbmNlKG9wdGlvbnMuY29udGFpbnMoU3R5bGVDb2xvcjo6T3B0aW9u
czo6VXNlRGFya0FwcGVhcmFuY2UpKTsKICAgICAvLyBUaGUgY29sb3IgaXMgZXhwZWN0ZWQgdG8g
YmUgb3BhcXVlLCBzaW5jZSBDb3JlR3JhcGhpY3Mgd2lsbCBhcHBseSBvcGFjaXR5IHdoZW4gZHJh
d2luZyAoYmVjYXVzZSBvcGFjaXR5IGlzIG5vcm1hbGx5IGFuaW1hdGVkKS4KLSAgICByZXR1cm4g
Y29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGtleWJvYXJk
Rm9jdXNJbmRpY2F0b3JDb2xvcl0pLnJnYigpLCAxKTsKKyAgICByZXR1cm4gY29sb3JGcm9tTlND
b2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5vcGFxdWVDb2xvcigp
OwogfQogCiBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZp
c2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCwyMyArMjM4LDIzIEBAIHZvaWQgUmVuZGVyVHJl
ZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QKIAogICAgICAgICBpZiAoby5wYXJlbnQoKSkgewog
ICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpOwotICAgICAgICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLnJnYigpICE9IGNvbG9yLnJn
YigpKQorICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihvLnBhcmVu
dCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgY29s
b3IpKQogICAgICAgICAgICAgICAgIHRzIDw8ICIgW2NvbG9yPSIgPDwgY29sb3IubmFtZUZvclJl
bmRlclRyZWVBc1RleHQoKSA8PCAiXSI7CiAKICAgICAgICAgICAgIC8vIERvIG5vdCBkdW1wIGlu
dmFsaWQgb3IgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMsIHNpbmNlIHRoYXQgaXMgdGhlIGRlZmF1
bHQuCiAgICAgICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBvLnN0eWxlKCkudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKLSAgICAgICAgICAg
IGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikucmdiKCkgIT0gYmFja2dyb3VuZENvbG9yLnJnYigpCi0gICAgICAg
ICAgICAgICAgJiYgYmFja2dyb3VuZENvbG9yLnJnYigpICE9IENvbG9yOjp0cmFuc3BhcmVudCkK
KyAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5wYXJlbnQoKS0+
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
LCBiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICAgICAgJiYgYmFja2dyb3VuZENvbG9yICE9
IENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIFtiZ2NvbG9yPSIg
PDwgYmFja2dyb3VuZENvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIl0iOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBDb2xvciB0ZXh0RmlsbENvbG9yID0gby5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwotICAg
ICAgICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcikucmdiKCkgIT0gdGV4dEZpbGxDb2xvci5yZ2Io
KSAgCi0gICAgICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvci5yZ2IoKSAhPSBjb2xvci5yZ2Io
KSAmJiB0ZXh0RmlsbENvbG9yLnJnYigpICE9IENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICAgICAg
ICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5wYXJlbnQoKS0+c3R5bGUoKS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSwgdGV4
dEZpbGxDb2xvcikKKyAgICAgICAgICAgICAgICAmJiB0ZXh0RmlsbENvbG9yICE9IGNvbG9yICYm
IHRleHRGaWxsQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQogICAgICAgICAgICAgICAgIHRz
IDw8ICIgW3RleHRGaWxsQ29sb3I9IiA8PCB0ZXh0RmlsbENvbG9yLm5hbWVGb3JSZW5kZXJUcmVl
QXNUZXh0KCkgPDwgIl0iOwogCiAgICAgICAgICAgICBDb2xvciB0ZXh0U3Ryb2tlQ29sb3IgPSBv
LnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9r
ZUNvbG9yKTsKLSAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcikucmdiKCkgIT0gdGV4
dFN0cm9rZUNvbG9yLnJnYigpCi0gICAgICAgICAgICAgICAgJiYgdGV4dFN0cm9rZUNvbG9yLnJn
YigpICE9IGNvbG9yLnJnYigpICYmIHRleHRTdHJva2VDb2xvci5yZ2IoKSAhPSBDb2xvcjo6dHJh
bnNwYXJlbnQpCisgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8u
cGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZUNvbG9yKSwgdGV4dFN0cm9rZUNvbG9yKQorICAgICAgICAgICAgICAgICYmIHRl
eHRTdHJva2VDb2xvciAhPSBjb2xvciAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gQ29sb3I6OnRyYW5z
cGFyZW50KQogICAgICAgICAgICAgICAgIHRzIDw8ICIgW3RleHRTdHJva2VDb2xvcj0iIDw8IHRl
eHRTdHJva2VDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsKIAogICAgICAg
ICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxlKCkudGV4dFN0cm9rZVdpZHRoKCkgIT0gby5zdHls
ZSgpLnRleHRTdHJva2VXaWR0aCgpICYmIG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSA+IDAp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MTk3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDkgKzk0LDcgQEAgQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1
ZGluZwogICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKICAgICBhdXRvIHN0
b3BDb2xvciA9IHN0eWxlLmNvbG9yUmVzb2x2aW5nQ3VycmVudENvbG9yKHN2Z1N0eWxlLnN0b3BD
b2xvcigpKTsKIAotICAgIGZsb2F0IGNvbG9yQWxwaGEgPSBzdG9wQ29sb3IuYWxwaGEoKSAvIDI1
NS4wOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoKSBidXQgdGhhdCBoYXMgZGlmZmVyZW50IHJvdW5kaW5nIG9mIHRoZSBhbHBoYSBjb21w
b25lbnQuCi0gICAgcmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoc3RvcENvbG9yLnJnYigp
LCBjb2xvckFscGhhICogc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CisgICAgcmV0dXJuIHN0b3BD
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhz
dmdTdHlsZS5zdG9wT3BhY2l0eSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2
MTk4MikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMjAtMDUtMjAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IE1ha2UgQ29sb3I6OnJnYigpIHByaXZhdGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE4NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdPUksgSU4g
UFJPR1JFU1MKKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tOgorICAgICAgICAoc2Nyb2xs
Vmlld0JhY2tncm91bmRDb2xvcik6CisKIDIwMjAtMDUtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIERpY3RhdGlvbiBjb250ZXh0IHNob3VsZCBiZSBhbiBvYmpl
Y3QgaWRlbnRpZmllciwgbm90IGEgdHlwZS1wdW5uZWQgcG9pbnRlcgpJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNjE5
NzApCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTI2LDg0ICsxNTI2LDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdp
bmRvd0ZlYXR1cmVzPjo6ZGVjbwogICAgIHJldHVybiB0cnVlOwogfQogCi0KLXZvaWQgQXJndW1l
bnRDb2RlcjxDb2xvcj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBlbmNvZGVyIDw8
IHRydWU7Ci0gICAgICAgIGVuY29kZXIgPDwgY29sb3IuYXNFeHRlbmRlZCgpLnJlZCgpOwotICAg
ICAgICBlbmNvZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5ncmVlbigpOwotICAgICAgICBlbmNv
ZGVyIDw8IGNvbG9yLmFzRXh0ZW5kZWQoKS5ibHVlKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgY29s
b3IuYXNFeHRlbmRlZCgpLmFscGhhKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgY29sb3IuYXNFeHRl
bmRlZCgpLmNvbG9yU3BhY2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVuY29k
ZXIgPDwgZmFsc2U7Ci0KLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBlbmNv
ZGVyIDw8IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3QgdmFs
dWUgPSBjb2xvci5yZ2IoKS52YWx1ZSgpOwotCi0gICAgZW5jb2RlciA8PCB0cnVlOwotICAgIGVu
Y29kZXIgPDwgdmFsdWU7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBDb2xvciYgY29sb3IpCi17Ci0gICAgYm9vbCBpc0V4dGVuZGVkOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChpc0V4dGVuZGVkKSB7Ci0gICAgICAgIGZsb2F0IHJlZDsKLSAgICAgICAg
ZmxvYXQgZ3JlZW47Ci0gICAgICAgIGZsb2F0IGJsdWU7Ci0gICAgICAgIGZsb2F0IGFscGhhOwot
ICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShncmVlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoYWxwaGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBjb2xvciA9IENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
LCBjb2xvclNwYWNlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBp
c1ZhbGlkOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNWYWxpZCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBjb2xvciA9IENvbG9yKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHVpbnQzMl90IHZhbHVlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBjb2xvciA9IFNpbXBsZUNvbG9yIHsgdmFsdWUgfTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
T3B0aW9uYWw8Q29sb3I+IEFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBDb2xvciBjb2xvcjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBjb2xv
cikpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gY29sb3I7Ci19
Ci0KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogdm9pZCBBcmd1bWVudENvZGVyPERyYWdEYXRh
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShy
ZXZpc2lvbiAyNjE5NzApCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIGNsYXNzIEJsb2JQYXJ0Owog
Y2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotY2xhc3MgQ29sb3I7CiBjbGFzcyBDcmVkZW50aWFsOwog
Y2xhc3MgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjsKIGNsYXNzIEN1cnNvcjsKQEAgLTQ0Mywx
MiArNDQyLDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAg
IHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkNvbG9yPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNvbG9yJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFdl
YkNvcmU6OkNvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQogI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRh
PiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEcmFn
RGF0YSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dl
YlZpZXdJT1MubW0JKHJldmlzaW9uIDI2MTk3MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsNyArNTEzLDcg
QEAgc3RhdGljIFdlYkNvcmU6OkNvbG9yIHNjcm9sbFZpZXdCYWNrZ3JvdQogICAgIGlmICh6b29t
U2NhbGUgPCBtaW5pbXVtWm9vbVNjYWxlKSB7CiAgICAgICAgIENHRmxvYXQgc2xvcGUgPSAxMjsK
ICAgICAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gc3RkOjptYXg8Q0dGbG9hdD4oMSAtIHNsb3BlICog
KG1pbmltdW1ab29tU2NhbGUgLSB6b29tU2NhbGUpLCAwKTsKLSAgICAgICAgY29sb3IgPSBXZWJD
b3JlOjpjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJnYigpLCBvcGFjaXR5KTsKKyAgICAg
ICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhv
cGFjaXR5KTsKICAgICB9CiAKICAgICByZXR1cm4gY29sb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400130</attachid>
            <date>2020-05-23 11:31:09 -0700</date>
            <delta_ts>2020-05-23 11:36:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523113108.patch</filename>
            <type>text/plain</type>
            <size>44075</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMC0wNS0yMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogTWFrZSBDb2xvcjo6cmdiKCkgcHJpdmF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xv
clZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3Np
YmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmNv
bG9yVmFsdWUgY29uc3QpOgorICAgICAgICAqIGNzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5o
OgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zV2lu
ZG93Q1NTIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkaWZmZXJlbmNlU3F1YXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmRXaXRoV2hpdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmRDb21wb25lbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Y29s
b3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6fkNvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc09wYXF1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6aXNWaXNpYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpyZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmdyZWVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibHVl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFBc0Zsb2F0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpvcGFxdWVDb2xvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNTZW1hbnRpYyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNFeHRlbmRlZCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0UkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXRJc1NlbWFudGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpyZ2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omlz
QmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNXaGl0ZUNv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYWtlUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VS
R0JBKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6
OnNldEZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFRvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBQW5pbWF0aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46
OnNldEZyb21WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1Zh
bHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhaXJvOjpwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHJh
d0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHJlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxl
Y3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjpzeXN0ZW1Db2xvciBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0aW9uQ29sb3JGdW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDUtMjMgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtURkNdIFVzZWQgaGVpZ2h0
IG9mIGEgY2VsbCBpcyB0aGUgbWF4aW11bSBvZiB0aGUgY29tcHV0ZWQgYW5kIHRoZSBjb250ZW50
IGhlaWdodC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk2MiwxMCArMTk2MiwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojpjb2xvclZhbHVlCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCk7Ci0gICAgciA9IGNvbG9yLnJlZCgpOwot
ICAgIGcgPSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7CisgICAgYXV0byBj
b2xvciA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigp
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgp
OworICAgIGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xvci5ibHVlQ29t
cG9uZW50KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MiwxMyArOTIsMTUgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0
RgogCiAgICAgQ29sb3IgYmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSkgewot
ICAgICAgICBidWZmZXIucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIGJnQ29sb3Iu
cmVkKCksIGJnQ29sb3IuZ3JlZW4oKSwgYmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgYXV0byBz
aW1wbGVCR0NvbG9yID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAg
ICBidWZmZXIucmVzZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIHNpbXBsZUJHQ29sb3Iu
cmVkQ29tcG9uZW50KCksIHNpbXBsZUJHQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQkdD
b2xvci5ibHVlQ29tcG9uZW50KCkpKTsKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1
dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9C
R19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQogCiAgICAgQ29sb3IgZmdDb2xvciA9IHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgaWYgKGZn
Q29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYo
IiVpLCVpLCVpIiwgZmdDb2xvci5yZWQoKSwgZmdDb2xvci5ncmVlbigpLCBmZ0NvbG9yLmJsdWUo
KSkpOworICAgICAgICBhdXRvIHNpbXBsZUZHQ29sb3IgPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVp
LCVpIiwgc2ltcGxlRkdDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxlRkdDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBzaW1wbGVGR0NvbG9yLmJsdWVDb21wb25lbnQoKSkpOwogICAgICAgICByZXN1
bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRf
bmFtZShBVEtfVEVYVF9BVFRSX0ZHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDEwICs2OTgsMTAgQEAgdm9pZCBBWElzb2xhdGVkT2Jq
ZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFs
dWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRvIGNvbG9yID0gY29s
b3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSk7Ci0gICAgciA9IGNv
bG9yLnJlZCgpOwotICAgIGcgPSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7
CisgICAgYXV0byBjb2xvciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNv
bG9yVmFsdWUpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENv
bXBvbmVudCgpOworICAgIGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xv
ci5ibHVlQ29tcG9uZW50KCk7CiB9CiAKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6
YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9u
IDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVk
Q1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJl
Y2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAot
ICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNv
bG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE51bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJp
bWl0aXZlVmFsdWU+IGNyZWF0ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51
bWJlclR5cGUgbnVtYmVyKQpAQCAtNDYsMTUgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1f
cmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIGNvbG9yLnJlZCgpKSkKLSAgICAgICAgLCBtX2dyZWVu
KGNyZWF0ZVdyYXBwZXIob3duZXIsIGNvbG9yLmdyZWVuKCkpKQotICAgICAgICAsIG1fYmx1ZShj
cmVhdGVXcmFwcGVyKG93bmVyLCBjb2xvci5ibHVlKCkpKQotICAgICAgICAsIG1fYWxwaGEoY3Jl
YXRlV3JhcHBlcihvd25lciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQorICAgICAgICA6IG1fY29s
b3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkKKyAgICAgICAgLCBtX3JlZChjcmVh
dGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJlZENvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2dy
ZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCisgICAg
ICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgp
KSkKKyAgICAgICAgLCBtX2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFD
b21wb25lbnRBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKLSAgICBDb2xvciBtX2NvbG9yOwor
ICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2
ZVZhbHVlPiBtX3JlZDsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
Z3JlZW47CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3
ICsyNzYsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhCiAgICAg
Q0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0
YW50KQogICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0
eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCks
IHdpbmRvd0NvbG9yLmdyZWVuKCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50
PihvcGFjaXR5ICogMjU1KSksIGltcG9ydGFudCk7CisgICAgU3RyaW5nIHdpbmRvd1N0eWxlID0g
Y29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgd2luZG93Q29sb3Iu
Y29sb3JXaXRoQWxwaGEob3BhY2l0eSksIGltcG9ydGFudCk7CiAKICAgICBpZiAoIW9wYWNpdHkp
CiAgICAgICAgIHJldHVybiB3aW5kb3dTdHlsZTsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0g
TUFDYXB0aW9uQXBwZWFyYW5jZUdldEJhY2tncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJh
bmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAg
aW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZh
bHVlOwotICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yLCBDb2xvcihiYWNrZ3JvdW5kQ29sb3IucmVkKCksIGJhY2tncm91bmRDb2xvci5ncmVlbigp
LCBiYWNrZ3JvdW5kQ29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUp
KSwgaW1wb3J0YW50KTsKKyAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvciwgYmFja2dyb3VuZENvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpLCBp
bXBvcnRhbnQpOwogfQogCiBDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2Fw
dGlvbnNUZXh0Q29sb3IoYm9vbCYgaW1wb3J0YW50KSBjb25zdApAQCAtMzE3LDcgKzMxNyw3IEBA
IENvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXAKICAgICBDR0Zsb2F0IG9w
YWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01BQ2FwdGlv
bkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQog
ICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7Ci0gICAgcmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4dENvbG9y
LmdyZWVuKCksIHRleHRDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1
NSkpOworICAgIHJldHVybiB0ZXh0Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9CiAg
ICAgCiBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENv
bG9yQ1NTKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEyICsxODAsMTIgQEAgaW50
IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgYwogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBwcm9iYWJseSByZXR1cm4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55
IG9mIHRoZSBjYWxsCiAgICAgLy8gc2l0ZXMgaGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMg
YmFzZWQgb24gZmVlbC4gV2UnZCBuZWVkIHRvIGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0
aG0gdGFibGVzIHRvIGNoYW5nZSB0aGVtIDopCi0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRl
ZCgpID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEucmVkKCk7Ci0gICAgaW50IGMx
R3JlZW4gPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6
IGMxLmdyZWVuKCk7Ci0gICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0
ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5ibHVlKCk7Ci0gICAgaW50IGMyUmVkID0gYzIuaXNF
eHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmVkKCk7Ci0gICAg
aW50IGMyR3JlZW4gPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAq
IDI1NSA6IGMyLmdyZWVuKCk7Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMy
LmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5ibHVlKCk7CisgICAgaW50IGMxUmVkID0g
YzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEucmdiKCku
cmVkQ29tcG9uZW50KCk7CisgICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5h
c0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7Cisg
ICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkg
KiAyNTUgOiBjMS5yZ2IoKS5ibHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNF
eHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmdiKCkucmVkQ29t
cG9uZW50KCk7CisgICAgaW50IGMyR3JlZW4gPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVu
ZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50
IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUg
OiBjMi5yZ2IoKS5ibHVlQ29tcG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFSZWQgLSBjMlJlZDsK
ICAgICBpbnQgZEcgPSBjMUdyZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIgPSBjMUJsdWUgLSBj
MkJsdWU7CkBAIC0yNTAsMTEgKzI1MCwxNSBAQCBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikK
IH0KIAogQ29sb3I6OkNvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpj
cmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29s
b3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRo
ZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCiAg
ICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIg
YmVsb3cuCiAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKLSAgICBhdXRvIGV4dGVu
ZGVkQ29sb3JSZWYgPSBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNv
bG9yU3BhY2UpOwogICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xv
clJlZi5sZWFrUmVmKCk7CiAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiB9CkBAIC0zNjMsMTcg
KzM2NywxNyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgdiA9IHN0
ZDo6bWF4KHsgciwgZywgYiB9KTsKIAotICAgIGlmICh2ID09IDAuMGYpIHsKLSAgICAgICAgLy8g
TGlnaHRlbmVkIGJsYWNrIHdpdGggYWxwaGEuCi0gICAgICAgIHJldHVybiBDb2xvcigweDU0LCAw
eDU0LCAweDU0LCBhbHBoYSgpKTsKLSAgICB9CisgICAgaWYgKHYgPT0gMC4wZikKKyAgICAgICAg
cmV0dXJuIGxpZ2h0ZW5lZEJsYWNrLmNvbG9yV2l0aEFscGhhKGFscGhhKCkpOwogCiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0
dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3Rvciks
Ci0gICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2Fs
ZUZhY3RvciksCi0gICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAq
IGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAgICAgIGFscGhhKCkpOworICAgIHJldHVy
biB7CisgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3Rv
ciksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3Rv
ciksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3Rv
ciksCisgICAgICAgIGFscGhhKCkKKyAgICB9OwogfQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNv
bnN0CkBAIC0zODksMTAgKzM5MywxMiBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAg
ZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0g
c3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBDb2xvcihzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0
b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICBh
bHBoYSgpCisgICAgfTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKQEAgLTQwOSwx
OSArNDE1LDYgQEAgZmxvYXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiAgICAgcmV0dXJuIFdl
YkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwogfQogCi1zdGF0aWMg
aW50IGJsZW5kQ29tcG9uZW50KGludCBjLCBpbnQgYSkKLXsKLSAgICAvLyBXZSB1c2Ugd2hpdGUu
Ci0gICAgZmxvYXQgYWxwaGEgPSBhIC8gMjU1LjBmOwotICAgIGludCB3aGl0ZUJsZW5kID0gMjU1
IC0gYTsKLSAgICBjIC09IHdoaXRlQmxlbmQ7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
YyAvIGFscGhhKTsKLX0KLQotY29uc3QgaW50IGNTdGFydEFscGhhID0gMTUzOyAvLyA2MCUKLWNv
bnN0IGludCBjRW5kQWxwaGEgPSAyMDQ7IC8vIDgwJTsKLWNvbnN0IGludCBjQWxwaGFJbmNyZW1l
bnQgPSAxNzsgLy8gSW5jcmVtZW50cyBpbiBiZXR3ZWVuLgotCiBDb2xvciBDb2xvcjo6YmxlbmQo
Y29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpIHx8IHNv
dXJjZS5pc09wYXF1ZSgpKQpAQCAtNDMwLDM3ICs0MjMsNTUgQEAgQ29sb3IgQ29sb3I6OmJsZW5k
KGNvbnN0IENvbG9yJiBzb3VyY2UpIAogICAgIGlmICghc291cmNlLmFscGhhKCkpCiAgICAgICAg
IHJldHVybiAqdGhpczsKIAotICAgIGludCBkID0gMjU1ICogKGFscGhhKCkgKyBzb3VyY2UuYWxw
aGEoKSkgLSBhbHBoYSgpICogc291cmNlLmFscGhhKCk7CisgICAgYXV0byBbc2VsZlIsIHNlbGZH
LCBzZWxmQiwgc2VsZkFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtz
b3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOworCisgICAgaW50IGQgPSAyNTUgKiAoc2VsZkEgKyBzb3VyY2VBKSAtIHNl
bGZBICogc291cmNlQTsKICAgICBpbnQgYSA9IGQgLyAyNTU7Ci0gICAgaW50IHIgPSAocmVkKCkg
KiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgp
ICogc291cmNlLnJlZCgpKSAvIGQ7Ci0gICAgaW50IGcgPSAoZ3JlZW4oKSAqIGFscGhhKCkgKiAo
MjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuZ3Jl
ZW4oKSkgLyBkOwotICAgIGludCBiID0gKGJsdWUoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNl
LmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuYmx1ZSgpKSAvIGQ7Ci0g
ICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIGEpOworICAgIGludCByID0gKHNlbGZSICogc2VsZkEg
KiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlUikgLyBkOworICAgIGlu
dCBnID0gKHNlbGZHICogc2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3VyY2VBICog
c291cmNlRykgLyBkOworICAgIGludCBiID0gKHNlbGZCICogc2VsZkEgKiAoMjU1IC0gc291cmNl
QSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlQikgLyBkOworCisgICAgcmV0dXJuIG1ha2VSR0JB
KHIsIGcsIGIsIGEpOwogfQogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAog
eworICAgIGNvbnN0ZXhwciBpbnQgc3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCisgICAgY29uc3Rl
eHByIGludCBlbmRBbHBoYSA9IDIwNDsgLy8gODAlOworICAgIGNvbnN0ZXhwciBpbnQgYWxwaGFJ
bmNyZW1lbnQgPSAxNzsKKworICAgIGF1dG8gYmxlbmRDb21wb25lbnQgPSBbXShpbnQgYywgaW50
IGEpIC0+IGludCB7CisgICAgICAgIGZsb2F0IGFscGhhID0gYSAvIDI1NS4wZjsKKyAgICAgICAg
aW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOworICAgICAgICBjIC09IHdoaXRlQmxlbmQ7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7CisgICAgfQorCiAgICAgLy8g
SWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhhIGFscmVhZHksIHdlIGxlYXZlIGl0IGFsb25lLgog
ICAgIGlmICghaXNPcGFxdWUoKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgQ29sb3Ig
bmV3Q29sb3I7Ci0gICAgZm9yIChpbnQgYWxwaGEgPSBjU3RhcnRBbHBoYTsgYWxwaGEgPD0gY0Vu
ZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNyZW1lbnQpIHsKKyAgICBhdXRvIFtleGlzdGluZ1Is
IGV4aXN0aW5nRywgZXhpc3RpbmdCLCBleGlzdGluZ0FscGhhXSA9IHRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisKKyAgICBDb2xvciByZXN1bHQ7CisgICAgZm9yIChpbnQgYWxwaGEgPSBzdGFy
dEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKICAg
ICAgICAgLy8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBhbiBlcXVpdmFsZW50
IGNvbG9yIHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGggd2hpdGUKICAgICAg
ICAgLy8gYXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0cmFuc3BhcmVuY3kg
aWYgdGhlIG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgotICAgICAgICBpbnQgciA9IGJs
ZW5kQ29tcG9uZW50KHJlZCgpLCBhbHBoYSk7Ci0gICAgICAgIGludCBnID0gYmxlbmRDb21wb25l
bnQoZ3JlZW4oKSwgYWxwaGEpOwotICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGJsdWUo
KSwgYWxwaGEpOworICAgICAgICBpbnQgciA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nUiwgYWxw
aGEpOworICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwor
ICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEpOwogICAgICAg
ICAKLSAgICAgICAgbmV3Q29sb3IgPSBDb2xvcihyLCBnLCBiLCBhbHBoYSk7CisgICAgICAgIHJl
c3VsdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGFscGhhKTsKIAogICAgICAgICBpZiAociA+PSAwICYm
IGcgPj0gMCAmJiBiID49IDApCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICAvLyBG
SVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBj
b3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgbmV3Q29sb3Iuc2V0
SXNTZW1hbnRpYygpOwotICAgIHJldHVybiBuZXdDb2xvcjsKKyAgICAgICAgcmVzdWx0LnNldElz
U2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdApAQCAtNDc3LDEzICs0ODgs
MTUgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VQogCiBDb2xvciBD
b2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0
ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmdyZWVuKCksIG1fY29sb3JEYXRh
LmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3It
PmNvbG9yU3BhY2UoKSB9OworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byYg
ZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgZXh0
ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5kZWRDb2xvci5ncmVlbigpLCBleHRlbmRlZENvbG9yLmJs
dWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpIH07CisgICAgfQogCiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JX
aXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcuCi0gICAgaW50IG5ld0FscGhhID0gYWxw
aGEgKiAyNTU7CisgICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhhICogMjU1OwogCi0gICAgQ29s
b3IgcmVzdWx0ID0geyByZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBuZXdBbHBoYSB9OworICAgIENv
bG9yIHJlc3VsdCA9IHJnYigpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKICAgICBpZiAoaXNT
ZW1hbnRpYygpKQogICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC00OTEsMTUgKzUwNCwzNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEo
ZmxvYXQgYWxwaGEpCiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQot
ICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwg
bV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRD
b2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFj
ZSgpIH07CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENv
bG9yID0gYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9y
LnJlZCgpLCBleHRlbmRlZENvbG9yLmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBo
YSwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkgfTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVz
aW5nCisgICAgdWludDhfdCBuZXdBbHBoYSA9IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGFscGhhKTsK
IAotICAgIENvbG9yIHJlc3VsdCA9IFNpbXBsZUNvbG9yIHsgKHJnYigpLnZhbHVlKCkgJiAweDAw
RkZGRkZGKSB8IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGFscGhhKSA8PCAyNCB9OworICAgIENvbG9y
IHJlc3VsdCA9IHJnYigpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKICAgICBpZiAoaXNTZW1h
bnRpYygpKQogICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK0NvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhh
KSBjb25zdAoreworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBDb2xvciB7
IGFzRXh0ZW5kZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhKSB9OworCisgICAgYXV0
byBbciwgZywgYiwgZXhpc3RpbmdBbHBoYV0gPSByZ2IoKTsKKyAgICByZXR1cm4geyAweGZmIC0g
ciwgMHhmZiAtIGcsIDB4ZmYgLSBiLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgfTsKK30K
KworQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdAoreworICAgIGlmIChpc1NlbWFu
dGljKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIHJldHVybiB7IHRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07Cit9CisKIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBG
bG9hdENvbXBvbmVudHM+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CiB7
CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkgewpAQCAtNTA3LDcgKzU0Miw4IEBAIHN0ZDo6cGFpcjxD
b2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IEMKICAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRD
b2xvci5jb2xvclNwYWNlKCksIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSB9OwogICAgIH0KIAot
ICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHJlZCgpIC8g
MjU1LjBmLCBncmVlbigpIC8gMjU1LjBmLCBibHVlKCkgLyAyNTUuMGYsICBhbHBoYSgpIC8gMjU1
LjBmIH0gfTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYigpOworICAgIHJldHVybiB7IENv
bG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYs
IGIgLyAyNTUuMGYsICBhIC8gMjU1LjBmIH0gfTsKIH0KIAogU2ltcGxlQ29sb3IgQ29sb3I6OnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMjIg
QEAgcHVibGljOgogICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29uc3Q7CiAgICAg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKKyAgICBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3Qg
eyByZXR1cm4geyBtX3ZhbHVlICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9CisKKyAg
ICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNv
bnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAgICAgICAgaWYgY29u
c3RleHByIChOID09IDApCisgICAgICAgICAgICByZXR1cm4gcmVkQ29tcG9uZW50KCk7CisgICAg
ICAgIGVsc2UgaWYgY29uc3RleHByIChOID09IDEpCisgICAgICAgICAgICByZXR1cm4gZ3JlZW5D
b21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMikKKyAgICAgICAg
ICAgIHJldHVybiBibHVlQ29tcG9uZW50KCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChO
ID09IDMpCisgICAgICAgICAgICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CkBAIC0xNzEsNiArMTg3LDcg
QEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0
aGUgdmFsdWVzIGNhbiBhbGwgYmUKICAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vy
cywgd2Ugc2hvdWxkIG1ha2UgYSBub3JtYWwgQ29sb3IuCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29s
b3IoZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIENvbG9yU3BhY2UpOworICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7
CkBAIC0xOTUsMTUgKzIxMiw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3Qg
eyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdi
KCkuaXNPcGFxdWUoKTsgfQogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUo
KTsgfQogCi0gICAgaW50IHJlZCgpIGNvbnN0IHsgcmV0dXJuIHJnYigpLnJlZENvbXBvbmVudCgp
OyB9Ci0gICAgaW50IGdyZWVuKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuZ3JlZW5Db21wb25lbnQo
KTsgfQotICAgIGludCBibHVlKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuYmx1ZUNvbXBvbmVudCgp
OyB9Ci0gICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gcmdiKCkuYWxwaGFDb21wb25lbnQo
KTsgfQotCisgICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUgOiByZ2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CiAgICAg
ZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRl
bmRlZCgpLmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4ocmdiKCkuYWxwaGFDb21wb25lbnQo
KSkgLyAweEZGOyB9CiAKLSAgICBSR0JBMzIgcmdiKCkgY29uc3Q7Ci0KICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwg
RmxvYXRDb21wb25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OwpAQCAtMjI1
LDYgKzIzNiw4IEBAIHB1YmxpYzoKICAgICBDb2xvciBibGVuZChjb25zdCBDb2xvciYpIGNvbnN0
OwogICAgIENvbG9yIGJsZW5kV2l0aFdoaXRlKCkgY29uc3Q7CiAKKyAgICBDb2xvciBpbnZlcnRl
ZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKKwogICAgIENvbG9yIGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsKICAgICBDb2xvciBjb2xvcldpdGhBbHBo
YShmbG9hdCkgY29uc3Q7CiAKQEAgLTIzNSw2ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxv
YXQpIGNvbnN0OwogCiAgICAgQ29sb3Igb3BhcXVlQ29sb3IoKSBjb25zdCB7IHJldHVybiBjb2xv
cldpdGhBbHBoYSgxLjBmKTsgfQorICAgIENvbG9yIHNlbWFudGljQ29sb3IoKSBjb25zdDsKIAog
ICAgIC8vIFRydWUgaWYgdGhlIGNvbG9yIG9yaWdpbmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBj
b2xvciBuYW1lLgogICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVu
ZGVkKCkgJiYgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIGlzU2VtYW50aWNSQkdBQ29sb3JC
aXQpOyB9CkBAIC0yNDcsNiArMjYxLDcgQEAgcHVibGljOgogI2lmIFVTRShDRykKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihD
R0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7CisgICAgZnJpZW5kIENHQ29sb3JSZWYgY2FjaGVkQ0dD
b2xvcihjb25zdCBDb2xvciYpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0yODgs
NiArMzAzLDggQEAgcHVibGljOgogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKICAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5nU2Vt
YW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogCisgICAgZnJpZW5k
IGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisKICAg
ICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgYm9v
bCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKIApAQCAtMjk1LDYgKzMxMiw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRl
Y29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6CisgICAgUkdCQTMyIHJnYigpIGNvbnN0OwogICAg
IHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50IGIpIHsgc2V0UkdCKG1ha2VSR0IociwgZywg
YikpOyB9CiAgICAgdm9pZCBzZXRSR0IoUkdCQTMyKTsKICAgICB2b2lkIHNldElzU2VtYW50aWMo
KSB7IG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyB8PSBpc1NlbWFudGljUkJHQUNvbG9yQml0OyB9
CkBAIC01MzAsMyArNTQ4LDE3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29sb3I+OwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxXZWJDb3JlOjpDb2xvcj47CiB9CisKK25hbWVzcGFjZSBzdGQgeworCit0ZW1wbGF0ZTw+Citj
bGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OlNpbXBsZUNvbG9yPiA6IHB1YmxpYyBzdGQ6OmludGVn
cmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7Cit9OworCit0ZW1wbGF0ZTxzdGQ6OnNpemVf
dCBOPgorY2xhc3MgdHVwbGVfZWxlbWVudDxOLCBXZWJDb3JlOjpTaW1wbGVDb2xvcj4geworcHVi
bGljOgorICAgIHVzaW5nIHR5cGUgPSB1aW50OF90OworfTsKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlz
aW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw0ICs2MywxMCBAQCBTdHJpbmcgRXh0ZW5k
ZWRDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIs
IGNvbG9yU3BhY2UsICcgJywgcmVkKCksICcgJywgZ3JlZW4oKSwgJyAnLCBibHVlKCksICIgLyAi
LCBhbHBoYSgpLCAnKScpOwogfQogCitSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6
aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBhdXRvIFtj
MSwgYzIsIGMzLCBleGlzdGluZ0FscGhhXSA9IGNoYW5uZWxzKCk7CisgICAgcmV0dXJuIEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBhbHBoYSwg
Y29sb3JTcGFjZSgpKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBj
c3NUZXh0KCkgY29uc3Q7CiAKKyAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShmbG9hdCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgRXh0ZW5kZWRDb2xvcihmbG9h
dCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQogICAgICAgICA6IG1fY2hhbm5lbHMoYzEsIGMyLCBjMywgYWxwaGEpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCShyZXZpc2lvbiAyNjIxMDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5p
bWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHZhbHVlLnJlZCgpKSwg
QCh2YWx1ZS5ncmVlbigpKSwgQCh2YWx1ZS5ibHVlKCkpLCBAKHZhbHVlLmFscGhhKCkpXV07Cisg
ICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0
RnJvbVZhbHVlOkBbQChzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpKSwgQChzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpKV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0RnJvbVZhbHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBp
bnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQpAQCAtNDM4LDcgKzQzOSw4IEBAIHZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHUKIHsKICAgICBpZiAoIWlzQmFzaWNB
bmltYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5p
bWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHZhbHVlLnJlZCgpKSwg
QCh2YWx1ZS5ncmVlbigpKSwgQCh2YWx1ZS5ibHVlKCkpLCBAKHZhbHVlLmFscGhhKCkpXV07Cisg
ICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0
VG9WYWx1ZTpAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdy
ZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxl
Q29sb3IuYWxwaGFDb21wb25lbnQoKSldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFRvVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCkBAIC00OTQsNyArNDk2LDggQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcwogICAgICAgICByZXR1cm47CiAKICAgICBb
c3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRW
YWx1ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgIHJl
dHVybiBAW0AoY29sb3IucmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUoKSks
IEAoY29sb3IuYWxwaGEoKSldOworICAgICAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgcmV0dXJuIEBbQChzaW1wbGVDb2xvci5y
ZWRDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSksIEAoc2ltcGxl
Q29sb3IuYmx1ZUNvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpKV07
CiAgICAgfSkuZ2V0KCldOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2Nyw3ICszNjcsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZyb21WYWx1
CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ0dGbG9hdCBhWzRdID0geyB2YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1
ZSgpLCB2YWx1ZS5hbHBoYSgpIH07CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5y
ZWRDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3Iu
Ymx1ZUNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0
YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkp
OwogICAgIENBQ0ZBbmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYuZ2V0
KCkpOwogfQpAQCAtNDE4LDcgKzQxOSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6
c2V0VG9WYWx1ZSgKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHZhbHVlLnJlZCgpLCB2YWx1ZS5ncmVlbigp
LCB2YWx1ZS5ibHVlKCksIHZhbHVlLmFscGhhKCkgfTsKKyAgICBhdXRvIHNpbXBsZUNvbG9yID0g
dmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7IHNp
bXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBz
aW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkg
fTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNy
ZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRpb24uZ2V0
KCksIHYuZ2V0KCkpOwogfQpAQCAtNDg3LDcgKzQ4OSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbldpbjo6c2V0VmFsdWVzKGMKICAgICAgICAgCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFy
cmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6
ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHZhbHVlW2ld
LnJlZCgpLCB2YWx1ZVtpXS5ncmVlbigpLCB2YWx1ZVtpXS5ibHVlKCksIHZhbHVlW2ldLmFscGhh
KCkgfTsKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlW2ldLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7CisgICAgICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29t
cG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVD
b21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OwogICAgICAgICBSZXRh
aW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7
CiAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVDYWlyb0NvbnRl
eHRTb3VyY2UoY2EKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTb2xpZCBjb2xvciBzb3VyY2UK
ICAgICAgICAgaWYgKGdsb2JhbEFscGhhIDwgMSkKLSAgICAgICAgICAgIHNldFNvdXJjZVJHQkFG
cm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGNvbG9yLmFscGhhKCkgLyAyNTUuZiAqIGdsb2JhbEFscGhhKSk7CisgICAgICAgICAgICBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhnbG9iYWxBbHBoYSkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvcik7CiAgICAgfQpAQCAtMTEy
MSw3ICsxMTIxLDcgQEAgdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dENhaXJvJgog
ICAgIC8vIHNvIGFzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgd2UgZHJhdyByZWN0YW5ndWxh
ciBmb2N1cyByaW5ncy4KIAogICAgIC8vIEZvcmNlIHRoZSBhbHBoYSB0byA1MCUuIFRoaXMgbWF0
Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91dGxpbmUgcmluZ3MuCi0gICAgQ29sb3Igcmlu
Z0NvbG9yID0gbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUo
KSwgMTI3KTsKKyAgICBDb2xvciByaW5nQ29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYSguNSk7
CiAKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIGNhaXJvX3Nh
dmUoY3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHJldmlzaW9u
IDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDExIEBA
IGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW8KICAgICAvLyBTZXQgbGln
aHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7CiAK
LSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IG1fbGlnaHRpbmdDb2xvci5yZWQoKTsKLSAg
ICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gbV9saWdodGluZ0NvbG9yLmdyZWVuKCk7Ci0g
ICAgZmxvYXRBcmd1bWVudHMuY29sb3JCbHVlID0gbV9saWdodGluZ0NvbG9yLmJsdWUoKTsKKyAg
ICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CisKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IHNpbXBsZUNvbG9yLnJlZENv
bXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBzaW1wbGVDb2xvci5n
cmVlbkNvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IHNpbXBsZUNv
bG9yLmJsdWVDb21wb25lbnQoKTsKICAgICBmbG9hdEFyZ3VtZW50cy5wYWRkaW5nNCA9IDA7CiAK
ICAgICBpZiAobV9saWdodFNvdXJjZS0+dHlwZSgpID09IExTX1BPSU5UKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4Niw3ICs2ODYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3Io
Y29uCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBnbENsZWFyQ29sb3IoY29sb3IucmVkKCkgLyAyNTUuMGYsIGNvbG9yLmdyZWVu
KCkgLyAyNTUuMGYsIGNvbG9yLmJsdWUoKSAvIDI1NS4wZiwgY29sb3IuYWxwaGEoKSAvIDI1NS4w
Zik7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7CisgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAy
NjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgZHJh
d0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKICAgICAgICAgLy8gUGFpbnQgc2ltcGxl
IHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBh
dm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRl
eHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250
ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29s
b3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93
Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKKyAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBw
b2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBh
cmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29v
cmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3ND
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHJl
dmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1wbGUg
c2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2
b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5jbGVhclNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRl
eHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xv
ci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dD
b2xvci5hbHBoYSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xvciBz
aGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShm
aWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0Rmls
bENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7CiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9p
bnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJl
IGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3Jk
aW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MSw3ICsxMjEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29uCiAg
ICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlp
bmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4K
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZp
bGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hh
ZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFk
b3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEoKSAv
IDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAg
IGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAg
ICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2
ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRp
dmUuCiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0
LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8g
LTEgOiAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAko
cmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoaWMKICAgICAvLyBJZiB0aGUgdGV4dCBjb2xvciBlbmRzIHVw
IGJlaW5nIHRoZSBzYW1lIGFzIHRoZSBzZWxlY3Rpb24gYmFja2dyb3VuZCwgaW52ZXJ0IHRoZSBz
ZWxlY3Rpb24KICAgICAvLyBiYWNrZ3JvdW5kLgogICAgIGlmICh0ZXh0Q29sb3IgPT0gYykKLSAg
ICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZmIC0gYy5ncmVlbigpLCAweGZmIC0g
Yy5ibHVlKCkpOworICAgICAgICBjID0gYy5pbnZlcnRlZENvbG9yV2l0aEFscGhhKDEuMCk7CiAK
ICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwogICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODU0LDcgKzg1NCw3IEBAIGF1dG8gSW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFy
a2UKICAgICAgICAgQ29sb3Igc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIoKS5z
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9y
ID0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOwogICAgICAgICBpZiAoc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yLmlzVmFsaWQoKSAmJiBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSAm
JiBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9PSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ip
Ci0gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB7IDB4ZmYgLSBzZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IucmVkKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuZ3Jl
ZW4oKSwgMHhmZiAtIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5ibHVlKCkgfTsKKyAgICAgICAg
ICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKDEuMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IE1hcmtlZFRleHQ6OlRleHRNYXRjaDogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDk1LDcgKzI0OTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEJveFNoYWRvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29s
b3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCAyNTUpOworICAgICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yID0gc2hhZG93Q29sb3Iub3BhcXVlQ29sb3IoKTsKICAgICAgICAgICAgIGF1dG8g
c2hhZG93Q2FzdGluZ1JlY3QgPSBhcmVhQ2FzdGluZ1NoYWRvd0luSG9sZShib3JkZXJSZWN0LnJl
Y3QoKSwgc2hhZG93UGFpbnRpbmdFeHRlbnQsIHNoYWRvd1NwcmVhZCwgc2hhZG93T2Zmc2V0KTsK
ICAgICAgICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVkT3V0ZXJSZWN0ID0gc25hcFJlY3RUb0Rldmlj
ZVBpeGVscyhzaGFkb3dDYXN0aW5nUmVjdCwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjIx
MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE1NTQsNyArMTU1NCw3IEBAIENvbG9yIFJlbmRlclRoZW1lSU9TOjpzeXN0
ZW1Db2xvcihDU1NWYWwKICAgICAgICAgICAgIGF1dG8gaXQgPSBnbG9iYWxDU1NWYWx1ZVRvU3lz
dGVtQ29sb3JNYXAoKS5maW5kKENTU1ZhbHVlS2V5IHsgY3NzVmFsdWVJRCwgdXNlRGFya0FwcGVh
cmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsIH0pOwogICAgICAgICAgICAgaWYg
KGl0ID09IGdsb2JhbENTU1ZhbHVlVG9TeXN0ZW1Db2xvck1hcCgpLmVuZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJRCwgb3B0aW9u
cyk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoaXQtPnZhbHVlLnJnYigpLCBDb2xvcjo6U2Vt
YW50aWMpOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5zZW1hbnRpY0NvbG9yKCk7CiAg
ICAgICAgIH0KICAgICAgICAgYXV0byBjb2xvciA9IHN5c3RlbUNvbG9yRnJvbUNTU1ZhbHVlSUQo
Y3NzVmFsdWVJRCwgdXNlRGFya0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxl
dmVsKTsKICAgICAgICAgaWYgKGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFs
dWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMiArODEsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBhbmltYXRl
KFNWR0VsZW1lbnQqLCBmbG9hdCBwcm9ncmVzcywgdW5zaWduZWQgcmVwZWF0Q291bnQsIENvbG9y
JiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIENvbG9yIGZyb20gPSBtX2FuaW1hdGlvbk1vZGUg
PT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IG1fZnJvbTsKKyAgICAgICAgYXV0byBz
aW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
ICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2RlOjpU
byA/IGFuaW1hdGVTUkdCIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
ICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CiAgICAgICAgIAotICAgICAgICBmbG9hdCByZWQgPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5yZWQoKSwgbV90by5yZWQo
KSwgdG9BdEVuZE9mRHVyYXRpb24oKS5yZWQoKSwgYW5pbWF0ZWQucmVkKCkpOwotICAgICAgICBm
bG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBmcm9tLmdy
ZWVuKCksIG1fdG8uZ3JlZW4oKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5ncmVlbigpLCBhbmltYXRl
ZC5ncmVlbigpKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3Ms
IHJlcGVhdENvdW50LCBmcm9tLmJsdWUoKSwgbV90by5ibHVlKCksIHRvQXRFbmRPZkR1cmF0aW9u
KCkuYmx1ZSgpLCBhbmltYXRlZC5ibHVlKCkpOwotICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6
OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBmcm9tLmFscGhhKCksIG1fdG8uYWxwaGEo
KSwgdG9BdEVuZE9mRHVyYXRpb24oKS5hbHBoYSgpLCBhbmltYXRlZC5hbHBoYSgpKTsKKyAgICAg
ICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBs
ZUZyb20ucmVkQ29tcG9uZW50KCksIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUb0F0
RW5kT2ZEdXJhdGlvbi5yZWRDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQucmVkQ29tcG9uZW50
KCkpOworICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVh
dENvdW50LCBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvLmdyZWVuQ29tcG9u
ZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUFu
aW1hdGVkLmdyZWVuQ29tcG9uZW50KCkpOworICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5p
bWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpLCBz
aW1wbGVUby5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWVDb21w
b25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQg
YWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5h
bHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5k
T2ZEdXJhdGlvbi5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBoYUNvbXBvbmVu
dCgpKTsKICAgICAgICAgCiAgICAgICAgIGFuaW1hdGVkID0geyByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCByb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhhKSB9
OwogICAgIH0KQEAgLTk5LDIwICsxMDIsMjggQEAgcHVibGljOgogICAgICAgICBDb2xvciB0b0Nv
bG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHRvLnN0cmlwV2hpdGVTcGFjZSgpKTsKICAgICAg
ICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIGZsb2F0IHJlZCA9IGZyb21Db2xvci5yZWQoKSAtIHRvQ29sb3IucmVkKCk7Ci0gICAgICAg
IGZsb2F0IGdyZWVuID0gZnJvbUNvbG9yLmdyZWVuKCkgLSB0b0NvbG9yLmdyZWVuKCk7Ci0gICAg
ICAgIGZsb2F0IGJsdWUgPSBmcm9tQ29sb3IuYmx1ZSgpIC0gdG9Db2xvci5ibHVlKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWRD
b21wb25lbnQoKSAtIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpOworICAgICAgICBmbG9hdCBncmVl
biA9IHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSAtIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50
KCk7CisgICAgICAgIGZsb2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSAtIHNp
bXBsZVRvLmJsdWVDb21wb25lbnQoKTsKKwogICAgICAgICByZXR1cm4gc3RkOjpoeXBvdChyZWQs
IGdyZWVuLCBibHVlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRGcm9tQW5kVG9W
YWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgeworICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1w
bGVUbyA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKwogICAgICAgICAvLyBJZ25v
cmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAg
ICAgICAgIG1fdG8gPSB7Ci0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKG1f
dG8ucmVkKCkgKyBtX2Zyb20ucmVkKCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChtX3RvLmdyZWVuKCkgKyBtX2Zyb20uZ3JlZW4oKSksCi0gICAgICAgICAgICByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKG1fdG8uYmx1ZSgpICsgbV9mcm9tLmJsdWUoKSkKKyAgICAg
ICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9uZW50KCkg
KyBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20uZ3JlZW5D
b21wb25lbnQoKSksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBs
ZVRvLmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQogICAgICAg
ICB9OwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400134</attachid>
            <date>2020-05-23 12:26:57 -0700</date>
            <delta_ts>2020-05-23 13:25:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523122656.patch</filename>
            <type>text/plain</type>
            <size>43362</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA1LTIzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29s
b3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRl
ZCBjb2xvcnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNXaW5kb3dDU1MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zQmFj
a2dyb3VuZENTUyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZENvbXBvbmVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudEFzRmxvYXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJlZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsdWUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxh
dGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OnByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRy
YXdGb2N1c1JpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVy
cy9GRUxpZ2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnN5c3RlbUNvbG9yIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKwogMjAyMC0wNS0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gVXNlZCBoZWlnaHQgb2YgYSBjZWxsIGlzIHRoZSBt
YXhpbXVtIG9mIHRoZSBjb21wdXRlZCBhbmQgdGhlIGNvbnRlbnQgaGVpZ2h0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYy
LDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUK
ICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52
YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdyZWVu
KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9yLmdy
ZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAy
NjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBAQCBz
dGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0Nv
bG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNl
dChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5ncmVl
bigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIHNpbXBsZUJHQ29sb3IgPSBiZ0Nv
bG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0
cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgc2ltcGxlQkdDb2xvci5yZWRDb21wb25lbnQoKSwgc2lt
cGxlQkdDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVCR0NvbG9yLmJsdWVDb21wb25lbnQo
KSkpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdl
dCgpKTsKICAgICB9CiAKICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCBmZ0NvbG9y
LnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZnQ29sb3IuYmx1ZSgpKSk7CisgICAgICAgIGF1dG8g
c2ltcGxlRkdDb2xvciA9IGZnQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAg
ICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCBzaW1wbGVGR0NvbG9y
LnJlZENvbXBvbmVudCgpLCBzaW1wbGVGR0NvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUZH
Q29sb3IuYmx1ZUNvbXBvbmVudCgpKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJf
RkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTgsMTAgKzY5OCwxMCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFByZXZlbnRLZXli
b2FyCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIsIGludCYgZywg
aW50JiBiKSBjb25zdAogewotICAgIGF1dG8gY29sb3IgPSBjb2xvckF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9
IGNvbG9yLmdyZWVuKCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0g
Y29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9
IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsK
IH0KIAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
RGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVl
JiBibHVlKCkgeyByZXR1cm4gbV9ibHVlOyB9CiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWUmIGFscGhhKCkgeyByZXR1cm4gbV9hbHBoYTsgfQogCi0gICAgQ29sb3IgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTnVt
YmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gY3JlYXRl
V3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVyVHlwZSBudW1iZXIpCkBA
IC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBEZXByZWNhdGVkQ1NTT01S
R0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgICAgICA6IG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihv
d25lciwgY29sb3IucmVkKCkpKQotICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuZ3JlZW4oKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIs
IGNvbG9yLmJsdWUoKSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBj
b2xvci5hbHBoYUFzRmxvYXQoKSkpCisgICAgICAgIDogbV9jb2xvcihjb2xvci50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpKQorICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihv
d25lciwgbV9jb2xvci5ncmVlbkNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2JsdWUoY3JlYXRl
V3JhcHBlcihvd25lciwgbV9jb2xvci5ibHVlQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fYWxw
aGEoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKSkp
CiAgICAgewogICAgIH0KIAotICAgIENvbG9yIG1fY29sb3I7CisgICAgU2ltcGxlQ29sb3IgbV9j
b2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAg
IFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVw
cmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZp
c2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2EKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBN
QUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURv
bWFpblVzZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9y
dGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsK
LSAgICBTdHJpbmcgd2luZG93U3R5bGUgPSBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yLCBDb2xvcih3aW5kb3dDb2xvci5yZWQoKSwgd2luZG93Q29sb3IuZ3JlZW4o
KSwgd2luZG93Q29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwg
aW1wb3J0YW50KTsKKyAgICBTdHJpbmcgd2luZG93U3R5bGUgPSBjb2xvclByb3BlcnR5Q1NTKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB3aW5kb3dDb2xvci5jb2xvcldpdGhBbHBoYShvcGFj
aXR5KSwgaW1wb3J0YW50KTsKIAogICAgIGlmICghb3BhY2l0eSkKICAgICAgICAgcmV0dXJuIHdp
bmRvd1N0eWxlOwpAQCAtMzAxLDcgKzMwMSw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2EKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNl
R2V0QmFja2dyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVo
YXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlv
ciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgcmV0dXJuIGNv
bG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENvbG9yKGJhY2tncm91
bmRDb2xvci5yZWQoKSwgYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIGJhY2tncm91bmRDb2xvci5i
bHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpLCBpbXBvcnRhbnQpOworICAg
IHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBiYWNr
Z3JvdW5kQ29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSksIGltcG9ydGFudCk7CiB9CiAKIENv
bG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvcihib29s
JiBpbXBvcnRhbnQpIGNvbnN0CkBAIC0zMTcsNyArMzE3LDcgQEAgQ29sb3IgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcAogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9ydGFudCA9
IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBy
ZXR1cm4gQ29sb3IodGV4dENvbG9yLnJlZCgpLCB0ZXh0Q29sb3IuZ3JlZW4oKSwgdGV4dENvbG9y
LmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSk7CisgICAgcmV0dXJuIHRl
eHRDb2xvci5jb2xvcldpdGhBbHBoYShvcGFjaXR5KTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODAsMTIgKzE4MCwxMiBAQCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQo
Y29uc3QgQ29sb3ImIGMxLCBjCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJl
dHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYnV0IG1hbnkgb2YgdGhlIGNhbGwKICAgICAv
LyBzaXRlcyBoYXZlIHBpY2tlZCBjb21wYXJpc29uIHZhbHVlcyBiYXNlZCBvbiBmZWVsLiBXZSdk
IG5lZWQgdG8gYnJlYWsgb3V0CiAgICAgLy8gb3VyIGxvZ2FyaXRobSB0YWJsZXMgdG8gY2hhbmdl
IHRoZW0gOikKLSAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVk
KCkucmVkKCkgKiAyNTUgOiBjMS5yZWQoKTsKLSAgICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5k
ZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzEuZ3JlZW4oKTsKLSAgICBp
bnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1
NSA6IGMxLmJsdWUoKTsKLSAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4
dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZWQoKTsKLSAgICBpbnQgYzJHcmVlbiA9IGMyLmlz
RXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIuZ3JlZW4oKTsK
LSAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUo
KSAqIDI1NSA6IGMyLmJsdWUoKTsKKyAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBj
MS5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMS5yZ2IoKS5yZWRDb21wb25lbnQoKTsKKyAg
ICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigp
ICogMjU1IDogYzEucmdiKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzFCbHVlID0gYzEu
aXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMxLnJnYigpLmJs
dWVDb21wb25lbnQoKTsKKyAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4
dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZ2IoKS5yZWRDb21wb25lbnQoKTsKKyAgICBpbnQg
YzJHcmVlbiA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1
IDogYzIucmdiKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRl
bmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMyLnJnYigpLmJsdWVDb21w
b25lbnQoKTsKICAgICBpbnQgZFIgPSBjMVJlZCAtIGMyUmVkOwogICAgIGludCBkRyA9IGMxR3Jl
ZW4gLSBjMkdyZWVuOwogICAgIGludCBkQiA9IGMxQmx1ZSAtIGMyQmx1ZTsKQEAgLTI1MCwxMiAr
MjUwLDE2IEBAIENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogfQogCiBDb2xvcjo6Q29sb3Io
ZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKKyAgICA6IENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBh
bHBoYSwgY29sb3JTcGFjZSkpCit7Cit9CisKK0NvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNh
c2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKICAgICAvLyB0b3AgMzIgYml0cyB3
aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KICAgICBtX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOwotICAgIGF1dG8gZXh0ZW5kZWRDb2xvclJlZiA9IEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yUmVmLmxlYWtSZWYoKTsKKyAg
ICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwog
ICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwogfQogCkBAIC0zNjMsMTcgKzM2NywxNyBAQCBDb2xv
ciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywg
YiB9KTsKIAotICAgIGlmICh2ID09IDAuMGYpIHsKLSAgICAgICAgLy8gTGlnaHRlbmVkIGJsYWNr
IHdpdGggYWxwaGEuCi0gICAgICAgIHJldHVybiBDb2xvcigweDU0LCAweDU0LCAweDU0LCBhbHBo
YSgpKTsKLSAgICB9CisgICAgaWYgKHYgPT0gMC4wZikKKyAgICAgICAgcmV0dXJuIGxpZ2h0ZW5l
ZEJsYWNrLmNvbG9yV2l0aEFscGhhKGFscGhhKCkpOwogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9
IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIENvbG9yKHN0YXRp
Y19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgICAgICAgICAgIGFscGhhKCkpOworICAgIHJldHVybiB7CisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIGFs
cGhhKCkKKyAgICB9OwogfQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0zODksMTAg
KzM5MywxMiBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6
bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwg
KHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11
bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAotICAgICAgICAg
ICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICBhbHBoYSgpCisgICAgfTsK
IH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKQEAgLTQwOSwxOSArNDE1LDYgQEAgZmxv
YXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVz
cyh0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwogfQogCi1zdGF0aWMgaW50IGJsZW5kQ29tcG9u
ZW50KGludCBjLCBpbnQgYSkKLXsKLSAgICAvLyBXZSB1c2Ugd2hpdGUuCi0gICAgZmxvYXQgYWxw
aGEgPSBhIC8gMjU1LjBmOwotICAgIGludCB3aGl0ZUJsZW5kID0gMjU1IC0gYTsKLSAgICBjIC09
IHdoaXRlQmxlbmQ7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYyAvIGFscGhhKTsKLX0K
LQotY29uc3QgaW50IGNTdGFydEFscGhhID0gMTUzOyAvLyA2MCUKLWNvbnN0IGludCBjRW5kQWxw
aGEgPSAyMDQ7IC8vIDgwJTsKLWNvbnN0IGludCBjQWxwaGFJbmNyZW1lbnQgPSAxNzsgLy8gSW5j
cmVtZW50cyBpbiBiZXR3ZWVuLgotCiBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNv
dXJjZSkgY29uc3QKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgp
KQpAQCAtNDMwLDM3ICs0MjMsNTUgQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBz
b3VyY2UpIAogICAgIGlmICghc291cmNlLmFscGhhKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgIGludCBkID0gMjU1ICogKGFscGhhKCkgKyBzb3VyY2UuYWxwaGEoKSkgLSBhbHBoYSgp
ICogc291cmNlLmFscGhhKCk7CisgICAgYXV0byBbc2VsZlIsIHNlbGZHLCBzZWxmQiwgc2VsZkFd
ID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VH
LCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
CisgICAgaW50IGQgPSAyNTUgKiAoc2VsZkEgKyBzb3VyY2VBKSAtIHNlbGZBICogc291cmNlQTsK
ICAgICBpbnQgYSA9IGQgLyAyNTU7Ci0gICAgaW50IHIgPSAocmVkKCkgKiBhbHBoYSgpICogKDI1
NSAtIHNvdXJjZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLnJlZCgp
KSAvIGQ7Ci0gICAgaW50IGcgPSAoZ3JlZW4oKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFs
cGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuZ3JlZW4oKSkgLyBkOwotICAg
IGludCBiID0gKGJsdWUoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1
ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuYmx1ZSgpKSAvIGQ7Ci0gICAgcmV0dXJuIENvbG9y
KHIsIGcsIGIsIGEpOworICAgIGludCByID0gKHNlbGZSICogc2VsZkEgKiAoMjU1IC0gc291cmNl
QSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlUikgLyBkOworICAgIGludCBnID0gKHNlbGZHICog
c2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlRykgLyBkOwor
ICAgIGludCBiID0gKHNlbGZCICogc2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3Vy
Y2VBICogc291cmNlQikgLyBkOworCisgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIGEpOwog
fQogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIGNvbnN0ZXhw
ciBpbnQgc3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCisgICAgY29uc3RleHByIGludCBlbmRBbHBo
YSA9IDIwNDsgLy8gODAlOworICAgIGNvbnN0ZXhwciBpbnQgYWxwaGFJbmNyZW1lbnQgPSAxNzsK
KworICAgIGF1dG8gYmxlbmRDb21wb25lbnQgPSBbXShpbnQgYywgaW50IGEpIC0+IGludCB7Cisg
ICAgICAgIGZsb2F0IGFscGhhID0gYSAvIDI1NS4wZjsKKyAgICAgICAgaW50IHdoaXRlQmxlbmQg
PSAyNTUgLSBhOworICAgICAgICBjIC09IHdoaXRlQmxlbmQ7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7CisgICAgfTsKKwogICAgIC8vIElmIHRoZSBjb2xvciBj
b250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9uZS4KICAgICBpZiAoIWlzT3Bh
cXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIENvbG9yIG5ld0NvbG9yOwotICAg
IGZvciAoaW50IGFscGhhID0gY1N0YXJ0QWxwaGE7IGFscGhhIDw9IGNFbmRBbHBoYTsgYWxwaGEg
Kz0gY0FscGhhSW5jcmVtZW50KSB7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4
aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisg
ICAgQ29sb3IgcmVzdWx0OworICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsgYWxwaGEg
PD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CiAgICAgICAgIC8vIFdlIGhh
dmUgYSBzb2xpZCBjb2xvci4gIENvbnZlcnQgdG8gYW4gZXF1aXZhbGVudCBjb2xvciB0aGF0IGxv
b2tzIHRoZSBzYW1lIHdoZW4gYmxlbmRlZCB3aXRoIHdoaXRlCiAgICAgICAgIC8vIGF0IHRoZSBj
dXJyZW50IGFscGhhLiAgVHJ5IHVzaW5nIGxlc3MgdHJhbnNwYXJlbmN5IGlmIHRoZSBudW1iZXJz
IGVuZCB1cCBiZWluZyBuZWdhdGl2ZS4KLSAgICAgICAgaW50IHIgPSBibGVuZENvbXBvbmVudChy
ZWQoKSwgYWxwaGEpOwotICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGdyZWVuKCksIGFs
cGhhKTsKLSAgICAgICAgaW50IGIgPSBibGVuZENvbXBvbmVudChibHVlKCksIGFscGhhKTsKKyAg
ICAgICAgaW50IHIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ1IsIGFscGhhKTsKKyAgICAgICAg
aW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0csIGFscGhhKTsKKyAgICAgICAgaW50IGIg
PSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFscGhhKTsKICAgICAgICAgCi0gICAgICAgIG5l
d0NvbG9yID0gQ29sb3IociwgZywgYiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlUkdC
QShyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+
PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgLy8gRklYTUU6IFdoeSBpcyBw
cmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwog
ICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIG5ld0NvbG9yLnNldElzU2VtYW50aWMoKTsK
LSAgICByZXR1cm4gbmV3Q29sb3I7CisgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKQEAgLTQ3NywxMyArNDg4LDE1IEBAIENvbG9yIENv
bG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVUKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9y
LT5ibHVlKCksIGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkg
fTsKKyAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3Ig
PSBhc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVk
KCksIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBl
eHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIGludCBuZXdBbHBoYSA9IGFscGhhICogMjU1OworICAg
IHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsg
cmVkKCksIGdyZWVuKCksIGJsdWUoKSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBy
Z2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAg
ICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkx
LDE1ICs1MDQsMzcgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKQog
CiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxv
YXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yIHsgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4
dGVuZGVkQ29sb3ItPmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwg
YWxwaGEsIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworICAgIGlm
IChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5k
ZWQoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgZXh0ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5k
ZWRDb2xvci5ncmVlbigpLCBleHRlbmRlZENvbG9yLmJsdWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29s
b3IuY29sb3JTcGFjZSgpIH07CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUg
dGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZworICAgIHVpbnQ4
X3QgbmV3QWxwaGEgPSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSk7CiAKLSAgICBDb2xvciBy
ZXN1bHQgPSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZGRkZGRikgfCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKKyAgICBDb2xvciByZXN1bHQgPSByZ2Io
KS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitDb2xv
ciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBhc0V4dGVuZGVkKCku
aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSkgfTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGV4
aXN0aW5nQWxwaGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgMHhmZiAtIHIsIDB4ZmYgLSBnLCAw
eGZmIC0gYiwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIH07Cit9CisKK0NvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTZW1hbnRpYygpKQorICAgICAg
ICByZXR1cm4gKnRoaXM7CisKKyAgICByZXR1cm4geyB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
LCBTZW1hbnRpYyB9OworfQorCiBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRz
PiBDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAogewogICAgIGlmIChpc0V4
dGVuZGVkKCkpIHsKQEAgLTUwNyw3ICs1NDIsOCBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxv
YXRDb21wb25lbnRzPiBDCiAgICAgICAgIHJldHVybiB7IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFj
ZSgpLCBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBGbG9hdENvbXBvbmVudHMgeyByZWQoKSAvIDI1NS4wZiwgZ3JlZW4o
KSAvIDI1NS4wZiwgYmx1ZSgpIC8gMjU1LjBmLCAgYWxwaGEoKSAvIDI1NS4wZiB9IH07CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSByZ2IoKTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdC
LCBGbG9hdENvbXBvbmVudHMgeyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBmLCAg
YSAvIDI1NS4wZiB9IH07CiB9CiAKIFNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgcHVibGljOgogICAg
IGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlID4+IDI0OyB9CiAKKyAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRB
c0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhQ29tcG9uZW50
KCkpIC8gMHhGRjsgfQorCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpID09IDB4RkY7IH0KICAgICBjb25zdGV4cHIgYm9vbCBpc1Zp
c2libGUoKSBjb25zdCB7IHJldHVybiBhbHBoYUNvbXBvbmVudCgpOyB9CiAKQEAgLTc2LDYgKzc4
LDIyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUygpIGNvbnN0Owog
ICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCisg
ICAgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbG9yV2l0aEFscGhhKHVpbnQ4X3QgYWxwaGEpIGNv
bnN0IHsgcmV0dXJuIHsgKG1fdmFsdWUgJiAweDAwRkZGRkZGKSB8IGFscGhhIDw8IDI0IH07IH0K
KworICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CisgICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoTiA8IDQpOworICAgICAgICBp
ZiBjb25zdGV4cHIgKE4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBn
cmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0Ig
YW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGlu
dGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlz
aWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBv
bmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBv
bmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2Io
KS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsK
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
YmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNv
bnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7
CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZy
aWVuZCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1YmxpYzoKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJp
ZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0
IENvbG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29s
b3ImLCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAK
QEAgLTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgorICAg
IFJHQkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBi
KSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7
CiAgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0g
aXNTZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwxNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbG9yPjsKIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+OwogfQorCituYW1lc3Bh
Y2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1wbGVD
b2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4gewor
fTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2Vi
Q29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhfdDsK
K307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NCArNjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQoKSBjb25zdAogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIHJlZCgpLCAnICcsIGdy
ZWVuKCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsKIH0KIAorUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxw
aGEpIGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjaGFu
bmVscygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBm
IC0gYzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9CisKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJl
dmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCisgICAgUmVmPEV4dGVu
ZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NoYW5uZWxzKGMxLCBj
MiwgYzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTYsNyArMzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21W
YQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAg
W3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJv
bVZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgp
KSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Aoc2ltcGxlQ29sb3IucmVkQ29t
cG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9y
LmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldXTsKIH0K
IAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkK
QEAgLTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9W
YWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRU
b1ZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgp
KSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHNpbXBsZUNvbG9yLnJlZENvbXBv
bmVudCgpKSwgQChzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5i
bHVlQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkpXV07CiB9CiAK
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQpAQCAt
NDk0LDcgKzQ5Niw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICByZXR1cm4gQFtAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5n
cmVlbigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpXTsKKyAgICAgICAgYXV0
byBzaW1wbGVDb2xvciA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IHJldHVybiBAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdy
ZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxl
Q29sb3IuYWxwaGFDb21wb25lbnQoKSldOwogICAgIH0pLmdldCgpXTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDggQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFz
aWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHRmxvYXQgYVs0XSA9IHsgdmFsdWUucmVkKCks
IHZhbHVlLmdyZWVuKCksIHZhbHVlLmJsdWUoKSwgdmFsdWUuYWxwaGEoKSB9OworICAgIGF1dG8g
c2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIENHRmxv
YXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVu
Q29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxw
aGFDb21wb25lbnQoKSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRD
RihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVl
KG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOCw3ICs0MTksOCBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dGbG9hdCBhWzRdID0geyB2
YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1ZSgpLCB2YWx1ZS5hbHBoYSgpIH07
CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+
IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25T
ZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQ4Nyw3ICs0ODks
OCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyhjCiAgICAgICAgIAog
ICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Q0dGbG9hdCBhWzRdID0geyB2YWx1ZVtpXS5yZWQoKSwgdmFsdWVbaV0uZ3JlZW4oKSwgdmFsdWVb
aV0uYmx1ZSgpLCB2YWx1ZVtpXS5hbHBoYSgpIH07CisgICAgICAgIGF1dG8gc2ltcGxlQ29sb3Ig
PSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBDR0Zsb2F0IGFb
NF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29t
cG9uZW50KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENG
KENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJy
YXkuZ2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0
aWMgdm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEpCi0g
ICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhjb2xvci5hbHBoYSgpIC8gMjU1LmYgKiBnbG9iYWxB
bHBoYSkpOworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFsQWxw
aGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihj
ciwgY29sb3IpOwogICAgIH0KQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgZHJhd0ZvY3VzUmlu
ZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYKICAgICAvLyBzbyBhcyB0byBiZSBjb25zaXN0ZW50IHdp
dGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCiAKICAgICAvLyBGb3JjZSB0
aGUgYWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRs
aW5lIHJpbmdzLgotICAgIENvbG9yIHJpbmdDb2xvciA9IG1ha2VSR0JBKGNvbG9yLnJlZCgpLCBj
b2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CisgICAgQ29sb3IgcmluZ0NvbG9yID0g
Y29sb3IuY29sb3JXaXRoQWxwaGEoLjUpOwogCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNv
bnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkod29ya2luZyBj
b3B5KQpAQCAtMTExLDkgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAgICAgZmxvYXRB
cmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBt
X2xpZ2h0aW5nQ29sb3IucmVkKCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IG1f
bGlnaHRpbmdDb2xvci5ncmVlbigpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IG1f
bGlnaHRpbmdDb2xvci5ibHVlKCk7CisgICAgYXV0byBzaW1wbGVDb2xvciA9IG1fbGlnaHRpbmdD
b2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgZmxvYXRBcmd1bWVudHMuY29s
b3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3VtZW50cy5j
b2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3Vt
ZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCk7CiAgICAgZmxvYXRB
cmd1bWVudHMucGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9
PSBMU19QT0lOVCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MjEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNyArNjg2LDggQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xl
YXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZ2xDbGVhckNvbG9yKGNvbG9yLnJl
ZCgpIC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xvci5ibHVlKCkgLyAyNTUu
MGYsIGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4MCw3ICs3ODAsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJl
bHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2lu
Zy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBz
aGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEo
KSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7
CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2Ug
aGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVn
YXRpdmUuCiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zm
c2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
ID8gLTEgOiAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24K
ICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVs
eWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5n
LgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBz
aGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNo
YWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5hbHBoYSgp
IC8gMjU1KTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwogICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwog
ICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhh
dmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0
aXZlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNj
YWRlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBv
dXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2lu
ZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNo
YWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENv
bG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwg
c2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBo
YSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxs
Q29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3Iu
YWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSAr
IHNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmlu
ZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZs
aXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9
IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsx
MzQsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgLy8g
SWYgdGhlIHRleHQgY29sb3IgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0aW9u
IGJhY2tncm91bmQsIGludmVydCB0aGUgc2VsZWN0aW9uCiAgICAgLy8gYmFja2dyb3VuZC4KICAg
ICBpZiAodGV4dENvbG9yID09IGMpCi0gICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwg
MHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKKyAgICAgICAgYyA9IGMuaW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJv
eCA9IHJvb3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBhdXRvIElubGluZVRl
eHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlCiAgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvciA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAg
ICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKICAg
ICAgICAgaWYgKHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLmFscGhhKCkgJiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0g
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENv
bG9yID0geyAweGZmIC0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLnJlZCgpLCAweGZmIC0gc2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yLmdyZWVuKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IuYmx1ZSgpIH07CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6IHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hh
ZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwg
MjU1KTsKKyAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNv
bG9yKCk7CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0Nhc3RpbmdSZWN0ID0gYXJlYUNhc3RpbmdT
aGFkb3dJbkhvbGUoYm9yZGVyUmVjdC5yZWN0KCksIHNoYWRvd1BhaW50aW5nRXh0ZW50LCBzaGFk
b3dTcHJlYWQsIHNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHBpeGVsU25hcHBlZE91
dGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoc2hhZG93Q2FzdGluZ1JlY3QsIGRldmlj
ZVNjYWxlRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBD
b2xvciBSZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRv
IGl0ID0gZ2xvYmFsQ1NTVmFsdWVUb1N5c3RlbUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7
IGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VM
ZXZlbCB9KTsKICAgICAgICAgICAgIGlmIChpdCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29s
b3JNYXAoKS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3Rl
bUNvbG9yKGNzc1ZhbHVlSUQsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0
LT52YWx1ZS5yZ2IoKSwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+
dmFsdWUuc2VtYW50aWNDb2xvcigpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBz
eXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEKGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1
c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDE1IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVu
c2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAgICBDb2xv
ciBmcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQg
OiBtX2Zyb207CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlv
bk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0
aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAg
ICAgICAKLSAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0
Q291bnQsIGZyb20ucmVkKCksIG1fdG8ucmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkucmVkKCks
IGFuaW1hdGVkLnJlZCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHBy
b2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ncmVlbigpLCBtX3RvLmdyZWVuKCksIHRvQXRFbmRP
ZkR1cmF0aW9uKCkuZ3JlZW4oKSwgYW5pbWF0ZWQuZ3JlZW4oKSk7Ci0gICAgICAgIGZsb2F0IGJs
dWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ibHVlKCksIG1f
dG8uYmx1ZSgpLCB0b0F0RW5kT2ZEdXJhdGlvbigpLmJsdWUoKSwgYW5pbWF0ZWQuYmx1ZSgpKTsK
LSAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3Vu
dCwgZnJvbS5hbHBoYSgpLCBtX3RvLmFscGhhKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYWxwaGEo
KSwgYW5pbWF0ZWQuYWxwaGEoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUo
cHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVU
by5yZWRDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCks
IHNpbXBsZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKKyAg
ICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVD
b21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxw
aGFDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBhbmlt
YXRlZCA9IHsgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkgfTsKICAgICB9CkBAIC05OSwyMCArMTAyLDI4IEBA
IHB1YmxpYzoKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0
by5zdHJpcFdoaXRlU3BhY2UoKSk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBmbG9hdCByZWQgPSBmcm9tQ29sb3IucmVk
KCkgLSB0b0NvbG9yLnJlZCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IGZyb21Db2xvci5ncmVl
bigpIC0gdG9Db2xvci5ncmVlbigpOwotICAgICAgICBmbG9hdCBibHVlID0gZnJvbUNvbG9yLmJs
dWUoKSAtIHRvQ29sb3IuYmx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgIGF1dG8gc2ltcGxl
RnJvbSA9IGZyb21Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRv
IHNpbXBsZVRvID0gdG9Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgICAg
IGZsb2F0IHJlZCA9IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21w
b25lbnQoKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50
KCkgLSBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCBibHVlID0gc2lt
cGxlRnJvbS5ibHVlQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisKICAg
ICAgICAgcmV0dXJuIHN0ZDo6aHlwb3QocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQogCiBwcml2
YXRlOgogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisKICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEg
b24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBtX3RvID0gewotICAgICAgICAgICAg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLnJlZCgpICsgbV9mcm9tLnJlZCgpKSwKLSAg
ICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwobV90by5ncmVlbigpICsgbV9mcm9t
LmdyZWVuKCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLmJs
dWUoKSArIG1fZnJvbS5ibHVlKCkpCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSks
CisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29t
cG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAorICAgICAgICAgICAgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVG
cm9tLmJsdWVDb21wb25lbnQoKSkKICAgICAgICAgfTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400136</attachid>
            <date>2020-05-23 13:25:59 -0700</date>
            <delta_ts>2020-05-23 13:48:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523132558.patch</filename>
            <type>text/plain</type>
            <size>44982</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA1LTIzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29s
b3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRl
ZCBjb2xvcnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNXaW5kb3dDU1MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zQmFj
a2dyb3VuZENTUyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZENvbXBvbmVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudEFzRmxvYXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJlZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsdWUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxh
dGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OnByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRy
YXdGb2N1c1JpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVy
cy9GRUxpZ2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnN5c3RlbUNvbG9yIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKwogMjAyMC0wNS0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gVXNlZCBoZWlnaHQgb2YgYSBjZWxsIGlzIHRoZSBt
YXhpbXVtIG9mIHRoZSBjb21wdXRlZCBhbmQgdGhlIGNvbnRlbnQgaGVpZ2h0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYy
LDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUK
ICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52
YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdyZWVu
KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9yLmdy
ZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAy
NjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBAQCBz
dGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0Nv
bG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNl
dChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5ncmVl
bigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIHNpbXBsZUJHQ29sb3IgPSBiZ0Nv
bG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0
cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgc2ltcGxlQkdDb2xvci5yZWRDb21wb25lbnQoKSwgc2lt
cGxlQkdDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVCR0NvbG9yLmJsdWVDb21wb25lbnQo
KSkpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdl
dCgpKTsKICAgICB9CiAKICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCBmZ0NvbG9y
LnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZnQ29sb3IuYmx1ZSgpKSk7CisgICAgICAgIGF1dG8g
c2ltcGxlRkdDb2xvciA9IGZnQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAg
ICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCBzaW1wbGVGR0NvbG9y
LnJlZENvbXBvbmVudCgpLCBzaW1wbGVGR0NvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUZH
Q29sb3IuYmx1ZUNvbXBvbmVudCgpKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJf
RkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTgsMTAgKzY5OCwxMCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFByZXZlbnRLZXli
b2FyCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIsIGludCYgZywg
aW50JiBiKSBjb25zdAogewotICAgIGF1dG8gY29sb3IgPSBjb2xvckF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9
IGNvbG9yLmdyZWVuKCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0g
Y29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9
IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsK
IH0KIAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
RGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVl
JiBibHVlKCkgeyByZXR1cm4gbV9ibHVlOyB9CiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWUmIGFscGhhKCkgeyByZXR1cm4gbV9hbHBoYTsgfQogCi0gICAgQ29sb3IgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTnVt
YmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gY3JlYXRl
V3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVyVHlwZSBudW1iZXIpCkBA
IC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBEZXByZWNhdGVkQ1NTT01S
R0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgICAgICA6IG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihv
d25lciwgY29sb3IucmVkKCkpKQotICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuZ3JlZW4oKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIs
IGNvbG9yLmJsdWUoKSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBj
b2xvci5hbHBoYUFzRmxvYXQoKSkpCisgICAgICAgIDogbV9jb2xvcihjb2xvci50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpKQorICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihv
d25lciwgbV9jb2xvci5ncmVlbkNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2JsdWUoY3JlYXRl
V3JhcHBlcihvd25lciwgbV9jb2xvci5ibHVlQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fYWxw
aGEoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKSkp
CiAgICAgewogICAgIH0KIAotICAgIENvbG9yIG1fY29sb3I7CisgICAgU2ltcGxlQ29sb3IgbV9j
b2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAg
IFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVw
cmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZp
c2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2EKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBN
QUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURv
bWFpblVzZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9y
dGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsK
LSAgICBTdHJpbmcgd2luZG93U3R5bGUgPSBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yLCBDb2xvcih3aW5kb3dDb2xvci5yZWQoKSwgd2luZG93Q29sb3IuZ3JlZW4o
KSwgd2luZG93Q29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwg
aW1wb3J0YW50KTsKKyAgICBTdHJpbmcgd2luZG93U3R5bGUgPSBjb2xvclByb3BlcnR5Q1NTKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB3aW5kb3dDb2xvci5jb2xvcldpdGhBbHBoYShvcGFj
aXR5KSwgaW1wb3J0YW50KTsKIAogICAgIGlmICghb3BhY2l0eSkKICAgICAgICAgcmV0dXJuIHdp
bmRvd1N0eWxlOwpAQCAtMzAxLDcgKzMwMSw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2EKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNl
R2V0QmFja2dyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVo
YXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlv
ciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgcmV0dXJuIGNv
bG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENvbG9yKGJhY2tncm91
bmRDb2xvci5yZWQoKSwgYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIGJhY2tncm91bmRDb2xvci5i
bHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpLCBpbXBvcnRhbnQpOworICAg
IHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBiYWNr
Z3JvdW5kQ29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSksIGltcG9ydGFudCk7CiB9CiAKIENv
bG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvcihib29s
JiBpbXBvcnRhbnQpIGNvbnN0CkBAIC0zMTcsNyArMzE3LDcgQEAgQ29sb3IgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcAogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9ydGFudCA9
IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBy
ZXR1cm4gQ29sb3IodGV4dENvbG9yLnJlZCgpLCB0ZXh0Q29sb3IuZ3JlZW4oKSwgdGV4dENvbG9y
LmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSk7CisgICAgcmV0dXJuIHRl
eHRDb2xvci5jb2xvcldpdGhBbHBoYShvcGFjaXR5KTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODAsMTIgKzE4MCwxMiBAQCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQo
Y29uc3QgQ29sb3ImIGMxLCBjCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJl
dHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYnV0IG1hbnkgb2YgdGhlIGNhbGwKICAgICAv
LyBzaXRlcyBoYXZlIHBpY2tlZCBjb21wYXJpc29uIHZhbHVlcyBiYXNlZCBvbiBmZWVsLiBXZSdk
IG5lZWQgdG8gYnJlYWsgb3V0CiAgICAgLy8gb3VyIGxvZ2FyaXRobSB0YWJsZXMgdG8gY2hhbmdl
IHRoZW0gOikKLSAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVk
KCkucmVkKCkgKiAyNTUgOiBjMS5yZWQoKTsKLSAgICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5k
ZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzEuZ3JlZW4oKTsKLSAgICBp
bnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1
NSA6IGMxLmJsdWUoKTsKLSAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4
dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZWQoKTsKLSAgICBpbnQgYzJHcmVlbiA9IGMyLmlz
RXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIuZ3JlZW4oKTsK
LSAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUo
KSAqIDI1NSA6IGMyLmJsdWUoKTsKKyAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBj
MS5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMS5yZ2IoKS5yZWRDb21wb25lbnQoKTsKKyAg
ICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigp
ICogMjU1IDogYzEucmdiKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzFCbHVlID0gYzEu
aXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMxLnJnYigpLmJs
dWVDb21wb25lbnQoKTsKKyAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4
dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZ2IoKS5yZWRDb21wb25lbnQoKTsKKyAgICBpbnQg
YzJHcmVlbiA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1
IDogYzIucmdiKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRl
bmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMyLnJnYigpLmJsdWVDb21w
b25lbnQoKTsKICAgICBpbnQgZFIgPSBjMVJlZCAtIGMyUmVkOwogICAgIGludCBkRyA9IGMxR3Jl
ZW4gLSBjMkdyZWVuOwogICAgIGludCBkQiA9IGMxQmx1ZSAtIGMyQmx1ZTsKQEAgLTI1MCwxMiAr
MjUwLDE2IEBAIENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogfQogCiBDb2xvcjo6Q29sb3Io
ZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKKyAgICA6IENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBh
bHBoYSwgY29sb3JTcGFjZSkpCit7Cit9CisKK0NvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNh
c2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKICAgICAvLyB0b3AgMzIgYml0cyB3
aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KICAgICBtX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOwotICAgIGF1dG8gZXh0ZW5kZWRDb2xvclJlZiA9IEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yUmVmLmxlYWtSZWYoKTsKKyAg
ICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwog
ICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwogfQogCkBAIC0zNjMsMTcgKzM2NywxNyBAQCBDb2xv
ciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywg
YiB9KTsKIAotICAgIGlmICh2ID09IDAuMGYpIHsKLSAgICAgICAgLy8gTGlnaHRlbmVkIGJsYWNr
IHdpdGggYWxwaGEuCi0gICAgICAgIHJldHVybiBDb2xvcigweDU0LCAweDU0LCAweDU0LCBhbHBo
YSgpKTsKLSAgICB9CisgICAgaWYgKHYgPT0gMC4wZikKKyAgICAgICAgcmV0dXJuIGxpZ2h0ZW5l
ZEJsYWNrLmNvbG9yV2l0aEFscGhhKGFscGhhKCkpOwogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9
IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIENvbG9yKHN0YXRp
Y19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgICAgICAgICAgIGFscGhhKCkpOworICAgIHJldHVybiB7CisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIGFs
cGhhKCkKKyAgICB9OwogfQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0zODksMTAg
KzM5MywxMiBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6
bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwg
KHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11
bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAotICAgICAgICAg
ICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICBhbHBoYSgpCisgICAgfTsK
IH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKQEAgLTQwOSwxOSArNDE1LDYgQEAgZmxv
YXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVz
cyh0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwogfQogCi1zdGF0aWMgaW50IGJsZW5kQ29tcG9u
ZW50KGludCBjLCBpbnQgYSkKLXsKLSAgICAvLyBXZSB1c2Ugd2hpdGUuCi0gICAgZmxvYXQgYWxw
aGEgPSBhIC8gMjU1LjBmOwotICAgIGludCB3aGl0ZUJsZW5kID0gMjU1IC0gYTsKLSAgICBjIC09
IHdoaXRlQmxlbmQ7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYyAvIGFscGhhKTsKLX0K
LQotY29uc3QgaW50IGNTdGFydEFscGhhID0gMTUzOyAvLyA2MCUKLWNvbnN0IGludCBjRW5kQWxw
aGEgPSAyMDQ7IC8vIDgwJTsKLWNvbnN0IGludCBjQWxwaGFJbmNyZW1lbnQgPSAxNzsgLy8gSW5j
cmVtZW50cyBpbiBiZXR3ZWVuLgotCiBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNv
dXJjZSkgY29uc3QKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgp
KQpAQCAtNDMwLDM3ICs0MjMsNTUgQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBz
b3VyY2UpIAogICAgIGlmICghc291cmNlLmFscGhhKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgIGludCBkID0gMjU1ICogKGFscGhhKCkgKyBzb3VyY2UuYWxwaGEoKSkgLSBhbHBoYSgp
ICogc291cmNlLmFscGhhKCk7CisgICAgYXV0byBbc2VsZlIsIHNlbGZHLCBzZWxmQiwgc2VsZkFd
ID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VH
LCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
CisgICAgaW50IGQgPSAyNTUgKiAoc2VsZkEgKyBzb3VyY2VBKSAtIHNlbGZBICogc291cmNlQTsK
ICAgICBpbnQgYSA9IGQgLyAyNTU7Ci0gICAgaW50IHIgPSAocmVkKCkgKiBhbHBoYSgpICogKDI1
NSAtIHNvdXJjZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLnJlZCgp
KSAvIGQ7Ci0gICAgaW50IGcgPSAoZ3JlZW4oKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFs
cGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuZ3JlZW4oKSkgLyBkOwotICAg
IGludCBiID0gKGJsdWUoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1
ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuYmx1ZSgpKSAvIGQ7Ci0gICAgcmV0dXJuIENvbG9y
KHIsIGcsIGIsIGEpOworICAgIGludCByID0gKHNlbGZSICogc2VsZkEgKiAoMjU1IC0gc291cmNl
QSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlUikgLyBkOworICAgIGludCBnID0gKHNlbGZHICog
c2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlRykgLyBkOwor
ICAgIGludCBiID0gKHNlbGZCICogc2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3Vy
Y2VBICogc291cmNlQikgLyBkOworCisgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIGEpOwog
fQogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIGNvbnN0ZXhw
ciBpbnQgc3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCisgICAgY29uc3RleHByIGludCBlbmRBbHBo
YSA9IDIwNDsgLy8gODAlOworICAgIGNvbnN0ZXhwciBpbnQgYWxwaGFJbmNyZW1lbnQgPSAxNzsK
KworICAgIGF1dG8gYmxlbmRDb21wb25lbnQgPSBbXShpbnQgYywgaW50IGEpIC0+IGludCB7Cisg
ICAgICAgIGZsb2F0IGFscGhhID0gYSAvIDI1NS4wZjsKKyAgICAgICAgaW50IHdoaXRlQmxlbmQg
PSAyNTUgLSBhOworICAgICAgICBjIC09IHdoaXRlQmxlbmQ7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7CisgICAgfTsKKwogICAgIC8vIElmIHRoZSBjb2xvciBj
b250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9uZS4KICAgICBpZiAoIWlzT3Bh
cXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIENvbG9yIG5ld0NvbG9yOwotICAg
IGZvciAoaW50IGFscGhhID0gY1N0YXJ0QWxwaGE7IGFscGhhIDw9IGNFbmRBbHBoYTsgYWxwaGEg
Kz0gY0FscGhhSW5jcmVtZW50KSB7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4
aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisg
ICAgQ29sb3IgcmVzdWx0OworICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsgYWxwaGEg
PD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CiAgICAgICAgIC8vIFdlIGhh
dmUgYSBzb2xpZCBjb2xvci4gIENvbnZlcnQgdG8gYW4gZXF1aXZhbGVudCBjb2xvciB0aGF0IGxv
b2tzIHRoZSBzYW1lIHdoZW4gYmxlbmRlZCB3aXRoIHdoaXRlCiAgICAgICAgIC8vIGF0IHRoZSBj
dXJyZW50IGFscGhhLiAgVHJ5IHVzaW5nIGxlc3MgdHJhbnNwYXJlbmN5IGlmIHRoZSBudW1iZXJz
IGVuZCB1cCBiZWluZyBuZWdhdGl2ZS4KLSAgICAgICAgaW50IHIgPSBibGVuZENvbXBvbmVudChy
ZWQoKSwgYWxwaGEpOwotICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGdyZWVuKCksIGFs
cGhhKTsKLSAgICAgICAgaW50IGIgPSBibGVuZENvbXBvbmVudChibHVlKCksIGFscGhhKTsKKyAg
ICAgICAgaW50IHIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ1IsIGFscGhhKTsKKyAgICAgICAg
aW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0csIGFscGhhKTsKKyAgICAgICAgaW50IGIg
PSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFscGhhKTsKICAgICAgICAgCi0gICAgICAgIG5l
d0NvbG9yID0gQ29sb3IociwgZywgYiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlUkdC
QShyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+
PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgLy8gRklYTUU6IFdoeSBpcyBw
cmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwog
ICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIG5ld0NvbG9yLnNldElzU2VtYW50aWMoKTsK
LSAgICByZXR1cm4gbmV3Q29sb3I7CisgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKQEAgLTQ3NywxMyArNDg4LDE1IEBAIENvbG9yIENv
bG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVUKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9y
LT5ibHVlKCksIGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkg
fTsKKyAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3Ig
PSBhc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVk
KCksIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBl
eHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIGludCBuZXdBbHBoYSA9IGFscGhhICogMjU1OworICAg
IHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsg
cmVkKCksIGdyZWVuKCksIGJsdWUoKSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBy
Z2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAg
ICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkx
LDE1ICs1MDQsMzcgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKQog
CiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxv
YXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yIHsgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4
dGVuZGVkQ29sb3ItPmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwg
YWxwaGEsIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworICAgIGlm
IChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5k
ZWQoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgZXh0ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5k
ZWRDb2xvci5ncmVlbigpLCBleHRlbmRlZENvbG9yLmJsdWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29s
b3IuY29sb3JTcGFjZSgpIH07CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUg
dGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZworICAgIHVpbnQ4
X3QgbmV3QWxwaGEgPSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSk7CiAKLSAgICBDb2xvciBy
ZXN1bHQgPSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZGRkZGRikgfCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKKyAgICBDb2xvciByZXN1bHQgPSByZ2Io
KS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitDb2xv
ciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBhc0V4dGVuZGVkKCku
aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSkgfTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGV4
aXN0aW5nQWxwaGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgMHhmZiAtIHIsIDB4ZmYgLSBnLCAw
eGZmIC0gYiwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIH07Cit9CisKK0NvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTZW1hbnRpYygpKQorICAgICAg
ICByZXR1cm4gKnRoaXM7CisKKyAgICByZXR1cm4geyB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
LCBTZW1hbnRpYyB9OworfQorCiBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRz
PiBDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAogewogICAgIGlmIChpc0V4
dGVuZGVkKCkpIHsKQEAgLTUwNyw3ICs1NDIsOCBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxv
YXRDb21wb25lbnRzPiBDCiAgICAgICAgIHJldHVybiB7IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFj
ZSgpLCBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBGbG9hdENvbXBvbmVudHMgeyByZWQoKSAvIDI1NS4wZiwgZ3JlZW4o
KSAvIDI1NS4wZiwgYmx1ZSgpIC8gMjU1LjBmLCAgYWxwaGEoKSAvIDI1NS4wZiB9IH07CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSByZ2IoKTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdC
LCBGbG9hdENvbXBvbmVudHMgeyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBmLCAg
YSAvIDI1NS4wZiB9IH07CiB9CiAKIFNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgcHVibGljOgogICAg
IGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlID4+IDI0OyB9CiAKKyAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRB
c0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhQ29tcG9uZW50
KCkpIC8gMHhGRjsgfQorCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpID09IDB4RkY7IH0KICAgICBjb25zdGV4cHIgYm9vbCBpc1Zp
c2libGUoKSBjb25zdCB7IHJldHVybiBhbHBoYUNvbXBvbmVudCgpOyB9CiAKQEAgLTc2LDYgKzc4
LDIyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUygpIGNvbnN0Owog
ICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCisg
ICAgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbG9yV2l0aEFscGhhKHVpbnQ4X3QgYWxwaGEpIGNv
bnN0IHsgcmV0dXJuIHsgKG1fdmFsdWUgJiAweDAwRkZGRkZGKSB8IGFscGhhIDw8IDI0IH07IH0K
KworICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CisgICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoTiA8IDQpOworICAgICAgICBp
ZiBjb25zdGV4cHIgKE4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBn
cmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0Ig
YW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGlu
dGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlz
aWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBv
bmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBv
bmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2Io
KS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsK
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
YmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNv
bnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7
CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZy
aWVuZCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1YmxpYzoKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJp
ZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0
IENvbG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29s
b3ImLCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAK
QEAgLTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgorICAg
IFJHQkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBi
KSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7
CiAgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0g
aXNTZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwxNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbG9yPjsKIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+OwogfQorCituYW1lc3Bh
Y2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1wbGVD
b2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4gewor
fTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2Vi
Q29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhfdDsK
K307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NCArNjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQoKSBjb25zdAogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIHJlZCgpLCAnICcsIGdy
ZWVuKCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsKIH0KIAorUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxw
aGEpIGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjaGFu
bmVscygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBm
IC0gYzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9CisKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJl
dmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCisgICAgUmVmPEV4dGVu
ZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NoYW5uZWxzKGMxLCBj
MiwgYzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTYsNyArMzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21W
YQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAg
W3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJv
bVZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgp
KSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Aoc2ltcGxlQ29sb3IucmVkQ29t
cG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9y
LmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldXTsKIH0K
IAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkK
QEAgLTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9W
YWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRU
b1ZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgp
KSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHNpbXBsZUNvbG9yLnJlZENvbXBv
bmVudCgpKSwgQChzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5i
bHVlQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkpXV07CiB9CiAK
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQpAQCAt
NDk0LDcgKzQ5Niw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICByZXR1cm4gQFtAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5n
cmVlbigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpXTsKKyAgICAgICAgYXV0
byBzaW1wbGVDb2xvciA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IHJldHVybiBAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdy
ZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxl
Q29sb3IuYWxwaGFDb21wb25lbnQoKSldOwogICAgIH0pLmdldCgpXTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDggQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFz
aWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHRmxvYXQgYVs0XSA9IHsgdmFsdWUucmVkKCks
IHZhbHVlLmdyZWVuKCksIHZhbHVlLmJsdWUoKSwgdmFsdWUuYWxwaGEoKSB9OworICAgIGF1dG8g
c2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIENHRmxv
YXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVu
Q29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxw
aGFDb21wb25lbnQoKSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRD
RihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVl
KG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOCw3ICs0MTksOCBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dGbG9hdCBhWzRdID0geyB2
YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1ZSgpLCB2YWx1ZS5hbHBoYSgpIH07
CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+
IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25T
ZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQ4Nyw3ICs0ODks
OCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyhjCiAgICAgICAgIAog
ICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Q0dGbG9hdCBhWzRdID0geyB2YWx1ZVtpXS5yZWQoKSwgdmFsdWVbaV0uZ3JlZW4oKSwgdmFsdWVb
aV0uYmx1ZSgpLCB2YWx1ZVtpXS5hbHBoYSgpIH07CisgICAgICAgIGF1dG8gc2ltcGxlQ29sb3Ig
PSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBDR0Zsb2F0IGFb
NF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29t
cG9uZW50KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENG
KENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJy
YXkuZ2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0
aWMgdm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEpCi0g
ICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhjb2xvci5hbHBoYSgpIC8gMjU1LmYgKiBnbG9iYWxB
bHBoYSkpOworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFsQWxw
aGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihj
ciwgY29sb3IpOwogICAgIH0KQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgZHJhd0ZvY3VzUmlu
ZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYKICAgICAvLyBzbyBhcyB0byBiZSBjb25zaXN0ZW50IHdp
dGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCiAKICAgICAvLyBGb3JjZSB0
aGUgYWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRs
aW5lIHJpbmdzLgotICAgIENvbG9yIHJpbmdDb2xvciA9IG1ha2VSR0JBKGNvbG9yLnJlZCgpLCBj
b2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CisgICAgQ29sb3IgcmluZ0NvbG9yID0g
Y29sb3IuY29sb3JXaXRoQWxwaGEoLjUpOwogCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNv
bnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkod29ya2luZyBj
b3B5KQpAQCAtMTExLDkgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAgICAgZmxvYXRB
cmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBt
X2xpZ2h0aW5nQ29sb3IucmVkKCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IG1f
bGlnaHRpbmdDb2xvci5ncmVlbigpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IG1f
bGlnaHRpbmdDb2xvci5ibHVlKCk7CisgICAgYXV0byBzaW1wbGVDb2xvciA9IG1fbGlnaHRpbmdD
b2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgZmxvYXRBcmd1bWVudHMuY29s
b3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3VtZW50cy5j
b2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3Vt
ZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCk7CiAgICAgZmxvYXRB
cmd1bWVudHMucGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9
PSBMU19QT0lOVCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MjEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNyArNjg2LDggQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xl
YXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZ2xDbGVhckNvbG9yKGNvbG9yLnJl
ZCgpIC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xvci5ibHVlKCkgLyAyNTUu
MGYsIGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4MCw3ICs3ODAsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJl
bHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2lu
Zy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBz
aGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEo
KSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7
CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2Ug
aGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVn
YXRpdmUuCiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zm
c2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
ID8gLTEgOiAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24K
ICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVs
eWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5n
LgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBz
aGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNo
YWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5hbHBoYSgp
IC8gMjU1KTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwogICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwog
ICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhh
dmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0
aXZlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNj
YWRlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBv
dXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2lu
ZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNo
YWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENv
bG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwg
c2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBo
YSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxs
Q29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3Iu
YWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSAr
IHNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmlu
ZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZs
aXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9
IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsx
MzQsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgLy8g
SWYgdGhlIHRleHQgY29sb3IgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0aW9u
IGJhY2tncm91bmQsIGludmVydCB0aGUgc2VsZWN0aW9uCiAgICAgLy8gYmFja2dyb3VuZC4KICAg
ICBpZiAodGV4dENvbG9yID09IGMpCi0gICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwg
MHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKKyAgICAgICAgYyA9IGMuaW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJv
eCA9IHJvb3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBhdXRvIElubGluZVRl
eHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlCiAgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvciA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAg
ICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKICAg
ICAgICAgaWYgKHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLmFscGhhKCkgJiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0g
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENv
bG9yID0geyAweGZmIC0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLnJlZCgpLCAweGZmIC0gc2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yLmdyZWVuKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IuYmx1ZSgpIH07CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6IHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hh
ZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwg
MjU1KTsKKyAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNv
bG9yKCk7CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0Nhc3RpbmdSZWN0ID0gYXJlYUNhc3RpbmdT
aGFkb3dJbkhvbGUoYm9yZGVyUmVjdC5yZWN0KCksIHNoYWRvd1BhaW50aW5nRXh0ZW50LCBzaGFk
b3dTcHJlYWQsIHNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHBpeGVsU25hcHBlZE91
dGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoc2hhZG93Q2FzdGluZ1JlY3QsIGRldmlj
ZVNjYWxlRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBD
b2xvciBSZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRv
IGl0ID0gZ2xvYmFsQ1NTVmFsdWVUb1N5c3RlbUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7
IGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VM
ZXZlbCB9KTsKICAgICAgICAgICAgIGlmIChpdCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29s
b3JNYXAoKS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3Rl
bUNvbG9yKGNzc1ZhbHVlSUQsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0
LT52YWx1ZS5yZ2IoKSwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+
dmFsdWUuc2VtYW50aWNDb2xvcigpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBz
eXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEKGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1
c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDE1IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVu
c2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAgICBDb2xv
ciBmcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQg
OiBtX2Zyb207CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlv
bk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0
aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAg
ICAgICAKLSAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0
Q291bnQsIGZyb20ucmVkKCksIG1fdG8ucmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkucmVkKCks
IGFuaW1hdGVkLnJlZCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHBy
b2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ncmVlbigpLCBtX3RvLmdyZWVuKCksIHRvQXRFbmRP
ZkR1cmF0aW9uKCkuZ3JlZW4oKSwgYW5pbWF0ZWQuZ3JlZW4oKSk7Ci0gICAgICAgIGZsb2F0IGJs
dWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ibHVlKCksIG1f
dG8uYmx1ZSgpLCB0b0F0RW5kT2ZEdXJhdGlvbigpLmJsdWUoKSwgYW5pbWF0ZWQuYmx1ZSgpKTsK
LSAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3Vu
dCwgZnJvbS5hbHBoYSgpLCBtX3RvLmFscGhhKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYWxwaGEo
KSwgYW5pbWF0ZWQuYWxwaGEoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUo
cHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVU
by5yZWRDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCks
IHNpbXBsZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKKyAg
ICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVD
b21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxw
aGFDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBhbmlt
YXRlZCA9IHsgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkgfTsKICAgICB9CkBAIC05OSwyMCArMTAyLDI4IEBA
IHB1YmxpYzoKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0
by5zdHJpcFdoaXRlU3BhY2UoKSk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBmbG9hdCByZWQgPSBmcm9tQ29sb3IucmVk
KCkgLSB0b0NvbG9yLnJlZCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IGZyb21Db2xvci5ncmVl
bigpIC0gdG9Db2xvci5ncmVlbigpOwotICAgICAgICBmbG9hdCBibHVlID0gZnJvbUNvbG9yLmJs
dWUoKSAtIHRvQ29sb3IuYmx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgIGF1dG8gc2ltcGxl
RnJvbSA9IGZyb21Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRv
IHNpbXBsZVRvID0gdG9Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgICAg
IGZsb2F0IHJlZCA9IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21w
b25lbnQoKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50
KCkgLSBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCBibHVlID0gc2lt
cGxlRnJvbS5ibHVlQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisKICAg
ICAgICAgcmV0dXJuIHN0ZDo6aHlwb3QocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQogCiBwcml2
YXRlOgogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisKICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEg
b24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBtX3RvID0gewotICAgICAgICAgICAg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLnJlZCgpICsgbV9mcm9tLnJlZCgpKSwKLSAg
ICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwobV90by5ncmVlbigpICsgbV9mcm9t
LmdyZWVuKCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLmJs
dWUoKSArIG1fZnJvbS5ibHVlKCkpCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSks
CisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29t
cG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAorICAgICAgICAgICAgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVG
cm9tLmJsdWVDb21wb25lbnQoKSkKICAgICAgICAgfTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNjIxMDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRp
cmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBh
bHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAg
ICAgKFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisKIDIwMjAtMDUt
MjMgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIEVycm9y
IHNlbmRpbmcgSVBDIG1lc3NhZ2U6IEJyb2tlbiBwaXBlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkocmV2aXNpb24gMjYyMTAx
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Bs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5Myw4ICs2OTMs
OCBAQCBzdGF0aWMgTlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyCiAgICAgICAgIHJl
dHVybiBAKGtleWZyYW1lVmFsdWUubnVtYmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAKICAgICBj
YXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkNvbG9yS2V5VHlw
ZTogewotICAgICAgICBDb2xvciBjb2xvciA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4gQFsgQChjb2xvci5yZWQoKSksIEAoY29sb3IuZ3JlZW4oKSksIEAoY29s
b3IuYmx1ZSgpKSwgQChjb2xvci5hbHBoYSgpKSBdOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgICAgIHJldHVybiBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgfQogCiAg
ICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtl
eVR5cGU6IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400138</attachid>
            <date>2020-05-23 13:48:36 -0700</date>
            <delta_ts>2020-05-23 13:56:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523134835.patch</filename>
            <type>text/plain</type>
            <size>49698</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA1LTIzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29s
b3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRl
ZCBjb2xvcnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNXaW5kb3dDU1MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zQmFj
a2dyb3VuZENTUyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZENvbXBvbmVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudEFzRmxvYXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJlZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsdWUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxh
dGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OnByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRy
YXdGb2N1c1JpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVy
cy9GRUxpZ2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnN5c3RlbUNvbG9yIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKwogMjAyMC0wNS0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gVXNlZCBoZWlnaHQgb2YgYSBjZWxsIGlzIHRoZSBt
YXhpbXVtIG9mIHRoZSBjb21wdXRlZCBhbmQgdGhlIGNvbnRlbnQgaGVpZ2h0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYy
LDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUK
ICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52
YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdyZWVu
KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9yLmdy
ZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAy
NjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBAQCBz
dGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0Nv
bG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNl
dChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5ncmVl
bigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIHNpbXBsZUJHQ29sb3IgPSBiZ0Nv
bG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0
cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgc2ltcGxlQkdDb2xvci5yZWRDb21wb25lbnQoKSwgc2lt
cGxlQkdDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVCR0NvbG9yLmJsdWVDb21wb25lbnQo
KSkpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdl
dCgpKTsKICAgICB9CiAKICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCBmZ0NvbG9y
LnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZnQ29sb3IuYmx1ZSgpKSk7CisgICAgICAgIGF1dG8g
c2ltcGxlRkdDb2xvciA9IGZnQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAg
ICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCBzaW1wbGVGR0NvbG9y
LnJlZENvbXBvbmVudCgpLCBzaW1wbGVGR0NvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUZH
Q29sb3IuYmx1ZUNvbXBvbmVudCgpKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJf
RkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTgsMTAgKzY5OCwxMCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFByZXZlbnRLZXli
b2FyCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIsIGludCYgZywg
aW50JiBiKSBjb25zdAogewotICAgIGF1dG8gY29sb3IgPSBjb2xvckF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9
IGNvbG9yLmdyZWVuKCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0g
Y29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9
IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsK
IH0KIAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVz
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
RGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVl
JiBibHVlKCkgeyByZXR1cm4gbV9ibHVlOyB9CiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZl
VmFsdWUmIGFscGhhKCkgeyByZXR1cm4gbV9hbHBoYTsgfQogCi0gICAgQ29sb3IgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTnVt
YmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gY3JlYXRl
V3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVyVHlwZSBudW1iZXIpCkBA
IC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBEZXByZWNhdGVkQ1NTT01S
R0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgICAgICA6IG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihv
d25lciwgY29sb3IucmVkKCkpKQotICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuZ3JlZW4oKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIs
IGNvbG9yLmJsdWUoKSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBj
b2xvci5hbHBoYUFzRmxvYXQoKSkpCisgICAgICAgIDogbV9jb2xvcihjb2xvci50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpKQorICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihv
d25lciwgbV9jb2xvci5ncmVlbkNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2JsdWUoY3JlYXRl
V3JhcHBlcihvd25lciwgbV9jb2xvci5ibHVlQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fYWxw
aGEoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKSkp
CiAgICAgewogICAgIH0KIAotICAgIENvbG9yIG1fY29sb3I7CisgICAgU2ltcGxlQ29sb3IgbV9j
b2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fcmVkOwogICAg
IFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAgICBSZWY8RGVw
cmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZp
c2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2EKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBN
QUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURv
bWFpblVzZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9y
dGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsK
LSAgICBTdHJpbmcgd2luZG93U3R5bGUgPSBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yLCBDb2xvcih3aW5kb3dDb2xvci5yZWQoKSwgd2luZG93Q29sb3IuZ3JlZW4o
KSwgd2luZG93Q29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwg
aW1wb3J0YW50KTsKKyAgICBTdHJpbmcgd2luZG93U3R5bGUgPSBjb2xvclByb3BlcnR5Q1NTKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB3aW5kb3dDb2xvci5jb2xvcldpdGhBbHBoYShvcGFj
aXR5KSwgaW1wb3J0YW50KTsKIAogICAgIGlmICghb3BhY2l0eSkKICAgICAgICAgcmV0dXJuIHdp
bmRvd1N0eWxlOwpAQCAtMzAxLDcgKzMwMSw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2EKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNl
R2V0QmFja2dyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVo
YXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlv
ciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgcmV0dXJuIGNv
bG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENvbG9yKGJhY2tncm91
bmRDb2xvci5yZWQoKSwgYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIGJhY2tncm91bmRDb2xvci5i
bHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpLCBpbXBvcnRhbnQpOworICAg
IHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBiYWNr
Z3JvdW5kQ29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSksIGltcG9ydGFudCk7CiB9CiAKIENv
bG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvcihib29s
JiBpbXBvcnRhbnQpIGNvbnN0CkBAIC0zMTcsNyArMzE3LDcgQEAgQ29sb3IgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OmNhcAogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9ydGFudCA9
IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBy
ZXR1cm4gQ29sb3IodGV4dENvbG9yLnJlZCgpLCB0ZXh0Q29sb3IuZ3JlZW4oKSwgdGV4dENvbG9y
LmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSk7CisgICAgcmV0dXJuIHRl
eHRDb2xvci5jb2xvcldpdGhBbHBoYShvcGFjaXR5KTsKIH0KICAgICAKIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODAsMTIgKzE4MCwxMiBAQCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQo
Y29uc3QgQ29sb3ImIGMxLCBjCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHJl
dHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYnV0IG1hbnkgb2YgdGhlIGNhbGwKICAgICAv
LyBzaXRlcyBoYXZlIHBpY2tlZCBjb21wYXJpc29uIHZhbHVlcyBiYXNlZCBvbiBmZWVsLiBXZSdk
IG5lZWQgdG8gYnJlYWsgb3V0CiAgICAgLy8gb3VyIGxvZ2FyaXRobSB0YWJsZXMgdG8gY2hhbmdl
IHRoZW0gOikKLSAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVk
KCkucmVkKCkgKiAyNTUgOiBjMS5yZWQoKTsKLSAgICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5k
ZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzEuZ3JlZW4oKTsKLSAgICBp
bnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1
NSA6IGMxLmJsdWUoKTsKLSAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4
dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZWQoKTsKLSAgICBpbnQgYzJHcmVlbiA9IGMyLmlz
RXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIuZ3JlZW4oKTsK
LSAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUo
KSAqIDI1NSA6IGMyLmJsdWUoKTsKKyAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBj
MS5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMS5yZ2IoKS5yZWRDb21wb25lbnQoKTsKKyAg
ICBpbnQgYzFHcmVlbiA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigp
ICogMjU1IDogYzEucmdiKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzFCbHVlID0gYzEu
aXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMxLnJnYigpLmJs
dWVDb21wb25lbnQoKTsKKyAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4
dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZ2IoKS5yZWRDb21wb25lbnQoKTsKKyAgICBpbnQg
YzJHcmVlbiA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1
IDogYzIucmdiKCkuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRl
bmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmJsdWUoKSAqIDI1NSA6IGMyLnJnYigpLmJsdWVDb21w
b25lbnQoKTsKICAgICBpbnQgZFIgPSBjMVJlZCAtIGMyUmVkOwogICAgIGludCBkRyA9IGMxR3Jl
ZW4gLSBjMkdyZWVuOwogICAgIGludCBkQiA9IGMxQmx1ZSAtIGMyQmx1ZTsKQEAgLTI1MCwxMiAr
MjUwLDE2IEBAIENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogfQogCiBDb2xvcjo6Q29sb3Io
ZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKKyAgICA6IENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBh
bHBoYSwgY29sb3JTcGFjZSkpCit7Cit9CisKK0NvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJiBleHRlbmRlZENvbG9yKQogewogICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNh
c2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKICAgICAvLyB0b3AgMzIgYml0cyB3
aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KICAgICBtX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOwotICAgIGF1dG8gZXh0ZW5kZWRDb2xvclJlZiA9IEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yUmVmLmxlYWtSZWYoKTsKKyAg
ICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwog
ICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwogfQogCkBAIC0zNjMsMTcgKzM2NywxNyBAQCBDb2xv
ciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywg
YiB9KTsKIAotICAgIGlmICh2ID09IDAuMGYpIHsKLSAgICAgICAgLy8gTGlnaHRlbmVkIGJsYWNr
IHdpdGggYWxwaGEuCi0gICAgICAgIHJldHVybiBDb2xvcigweDU0LCAweDU0LCAweDU0LCBhbHBo
YSgpKTsKLSAgICB9CisgICAgaWYgKHYgPT0gMC4wZikKKyAgICAgICAgcmV0dXJuIGxpZ2h0ZW5l
ZEJsYWNrLmNvbG9yV2l0aEFscGhhKGFscGhhKCkpOwogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9
IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIENvbG9yKHN0YXRp
Y19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgICAgICAgICAgIGFscGhhKCkpOworICAgIHJldHVybiB7CisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0
YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIGFs
cGhhKCkKKyAgICB9OwogfQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0zODksMTAg
KzM5MywxMiBAQCBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6
bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwg
KHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11
bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAotICAgICAgICAg
ICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICBhbHBoYSgpCisgICAgfTsK
IH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKQEAgLTQwOSwxOSArNDE1LDYgQEAgZmxv
YXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVz
cyh0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwogfQogCi1zdGF0aWMgaW50IGJsZW5kQ29tcG9u
ZW50KGludCBjLCBpbnQgYSkKLXsKLSAgICAvLyBXZSB1c2Ugd2hpdGUuCi0gICAgZmxvYXQgYWxw
aGEgPSBhIC8gMjU1LjBmOwotICAgIGludCB3aGl0ZUJsZW5kID0gMjU1IC0gYTsKLSAgICBjIC09
IHdoaXRlQmxlbmQ7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYyAvIGFscGhhKTsKLX0K
LQotY29uc3QgaW50IGNTdGFydEFscGhhID0gMTUzOyAvLyA2MCUKLWNvbnN0IGludCBjRW5kQWxw
aGEgPSAyMDQ7IC8vIDgwJTsKLWNvbnN0IGludCBjQWxwaGFJbmNyZW1lbnQgPSAxNzsgLy8gSW5j
cmVtZW50cyBpbiBiZXR3ZWVuLgotCiBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3ImIHNv
dXJjZSkgY29uc3QKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgp
KQpAQCAtNDMwLDM3ICs0MjMsNTUgQEAgQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBz
b3VyY2UpIAogICAgIGlmICghc291cmNlLmFscGhhKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgIGludCBkID0gMjU1ICogKGFscGhhKCkgKyBzb3VyY2UuYWxwaGEoKSkgLSBhbHBoYSgp
ICogc291cmNlLmFscGhhKCk7CisgICAgYXV0byBbc2VsZlIsIHNlbGZHLCBzZWxmQiwgc2VsZkFd
ID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VH
LCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
CisgICAgaW50IGQgPSAyNTUgKiAoc2VsZkEgKyBzb3VyY2VBKSAtIHNlbGZBICogc291cmNlQTsK
ICAgICBpbnQgYSA9IGQgLyAyNTU7Ci0gICAgaW50IHIgPSAocmVkKCkgKiBhbHBoYSgpICogKDI1
NSAtIHNvdXJjZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLnJlZCgp
KSAvIGQ7Ci0gICAgaW50IGcgPSAoZ3JlZW4oKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFs
cGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuZ3JlZW4oKSkgLyBkOwotICAg
IGludCBiID0gKGJsdWUoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1
ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuYmx1ZSgpKSAvIGQ7Ci0gICAgcmV0dXJuIENvbG9y
KHIsIGcsIGIsIGEpOworICAgIGludCByID0gKHNlbGZSICogc2VsZkEgKiAoMjU1IC0gc291cmNl
QSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlUikgLyBkOworICAgIGludCBnID0gKHNlbGZHICog
c2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3VyY2VBICogc291cmNlRykgLyBkOwor
ICAgIGludCBiID0gKHNlbGZCICogc2VsZkEgKiAoMjU1IC0gc291cmNlQSkgKyAyNTUgKiBzb3Vy
Y2VBICogc291cmNlQikgLyBkOworCisgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIGEpOwog
fQogCiBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogeworICAgIGNvbnN0ZXhw
ciBpbnQgc3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCisgICAgY29uc3RleHByIGludCBlbmRBbHBo
YSA9IDIwNDsgLy8gODAlOworICAgIGNvbnN0ZXhwciBpbnQgYWxwaGFJbmNyZW1lbnQgPSAxNzsK
KworICAgIGF1dG8gYmxlbmRDb21wb25lbnQgPSBbXShpbnQgYywgaW50IGEpIC0+IGludCB7Cisg
ICAgICAgIGZsb2F0IGFscGhhID0gYSAvIDI1NS4wZjsKKyAgICAgICAgaW50IHdoaXRlQmxlbmQg
PSAyNTUgLSBhOworICAgICAgICBjIC09IHdoaXRlQmxlbmQ7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7CisgICAgfTsKKwogICAgIC8vIElmIHRoZSBjb2xvciBj
b250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9uZS4KICAgICBpZiAoIWlzT3Bh
cXVlKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIENvbG9yIG5ld0NvbG9yOwotICAg
IGZvciAoaW50IGFscGhhID0gY1N0YXJ0QWxwaGE7IGFscGhhIDw9IGNFbmRBbHBoYTsgYWxwaGEg
Kz0gY0FscGhhSW5jcmVtZW50KSB7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4
aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisg
ICAgQ29sb3IgcmVzdWx0OworICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsgYWxwaGEg
PD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CiAgICAgICAgIC8vIFdlIGhh
dmUgYSBzb2xpZCBjb2xvci4gIENvbnZlcnQgdG8gYW4gZXF1aXZhbGVudCBjb2xvciB0aGF0IGxv
b2tzIHRoZSBzYW1lIHdoZW4gYmxlbmRlZCB3aXRoIHdoaXRlCiAgICAgICAgIC8vIGF0IHRoZSBj
dXJyZW50IGFscGhhLiAgVHJ5IHVzaW5nIGxlc3MgdHJhbnNwYXJlbmN5IGlmIHRoZSBudW1iZXJz
IGVuZCB1cCBiZWluZyBuZWdhdGl2ZS4KLSAgICAgICAgaW50IHIgPSBibGVuZENvbXBvbmVudChy
ZWQoKSwgYWxwaGEpOwotICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGdyZWVuKCksIGFs
cGhhKTsKLSAgICAgICAgaW50IGIgPSBibGVuZENvbXBvbmVudChibHVlKCksIGFscGhhKTsKKyAg
ICAgICAgaW50IHIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ1IsIGFscGhhKTsKKyAgICAgICAg
aW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0csIGFscGhhKTsKKyAgICAgICAgaW50IGIg
PSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFscGhhKTsKICAgICAgICAgCi0gICAgICAgIG5l
d0NvbG9yID0gQ29sb3IociwgZywgYiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlUkdC
QShyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+
PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgLy8gRklYTUU6IFdoeSBpcyBw
cmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwog
ICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIG5ld0NvbG9yLnNldElzU2VtYW50aWMoKTsK
LSAgICByZXR1cm4gbmV3Q29sb3I7CisgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKQEAgLTQ3NywxMyArNDg4LDE1IEBAIENvbG9yIENv
bG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVUKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9y
LT5ibHVlKCksIGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkg
fTsKKyAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3Ig
PSBhc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVk
KCksIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBl
eHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIGludCBuZXdBbHBoYSA9IGFscGhhICogMjU1OworICAg
IHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsg
cmVkKCksIGdyZWVuKCksIGJsdWUoKSwgbmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSBy
Z2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAg
ICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkx
LDE1ICs1MDQsMzcgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKQog
CiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxv
YXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yIHsgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4
dGVuZGVkQ29sb3ItPmdyZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwg
YWxwaGEsIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworICAgIGlm
IChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5k
ZWQoKTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgZXh0ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5k
ZWRDb2xvci5ncmVlbigpLCBleHRlbmRlZENvbG9yLmJsdWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29s
b3IuY29sb3JTcGFjZSgpIH07CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUg
dGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZworICAgIHVpbnQ4
X3QgbmV3QWxwaGEgPSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSk7CiAKLSAgICBDb2xvciBy
ZXN1bHQgPSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZGRkZGRikgfCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKKyAgICBDb2xvciByZXN1bHQgPSByZ2Io
KS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitDb2xv
ciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBhc0V4dGVuZGVkKCku
aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSkgfTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGV4
aXN0aW5nQWxwaGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgMHhmZiAtIHIsIDB4ZmYgLSBnLCAw
eGZmIC0gYiwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIH07Cit9CisKK0NvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTZW1hbnRpYygpKQorICAgICAg
ICByZXR1cm4gKnRoaXM7CisKKyAgICByZXR1cm4geyB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
LCBTZW1hbnRpYyB9OworfQorCiBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRz
PiBDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAogewogICAgIGlmIChpc0V4
dGVuZGVkKCkpIHsKQEAgLTUwNyw3ICs1NDIsOCBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxv
YXRDb21wb25lbnRzPiBDCiAgICAgICAgIHJldHVybiB7IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFj
ZSgpLCBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBGbG9hdENvbXBvbmVudHMgeyByZWQoKSAvIDI1NS4wZiwgZ3JlZW4o
KSAvIDI1NS4wZiwgYmx1ZSgpIC8gMjU1LjBmLCAgYWxwaGEoKSAvIDI1NS4wZiB9IH07CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSByZ2IoKTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdC
LCBGbG9hdENvbXBvbmVudHMgeyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8gMjU1LjBmLCAg
YSAvIDI1NS4wZiB9IH07CiB9CiAKIFNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgcHVibGljOgogICAg
IGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlID4+IDI0OyB9CiAKKyAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRB
c0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhQ29tcG9uZW50
KCkpIC8gMHhGRjsgfQorCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpID09IDB4RkY7IH0KICAgICBjb25zdGV4cHIgYm9vbCBpc1Zp
c2libGUoKSBjb25zdCB7IHJldHVybiBhbHBoYUNvbXBvbmVudCgpOyB9CiAKQEAgLTc2LDYgKzc4
LDIyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUygpIGNvbnN0Owog
ICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCisg
ICAgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbG9yV2l0aEFscGhhKHVpbnQ4X3QgYWxwaGEpIGNv
bnN0IHsgcmV0dXJuIHsgKG1fdmFsdWUgJiAweDAwRkZGRkZGKSB8IGFscGhhIDw8IDI0IH07IH0K
KworICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CisgICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoTiA8IDQpOworICAgICAgICBp
ZiBjb25zdGV4cHIgKE4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBn
cmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0Ig
YW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGlu
dGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlz
aWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBv
bmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBv
bmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2Io
KS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsK
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
YmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNv
bnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7
CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZy
aWVuZCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1YmxpYzoKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJp
ZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0
IENvbG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29s
b3ImLCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAK
QEAgLTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgorICAg
IFJHQkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBi
KSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7
CiAgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0g
aXNTZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwxNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbG9yPjsKIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+OwogfQorCituYW1lc3Bh
Y2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1wbGVD
b2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4gewor
fTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2Vi
Q29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhfdDsK
K307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NCArNjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQoKSBjb25zdAogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIHJlZCgpLCAnICcsIGdy
ZWVuKCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsKIH0KIAorUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxw
aGEpIGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjaGFu
bmVscygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBm
IC0gYzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9CisKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJl
dmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCisgICAgUmVmPEV4dGVu
ZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NoYW5uZWxzKGMxLCBj
MiwgYzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTYsNyArMzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21W
YQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAg
W3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJv
bVZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgp
KSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Aoc2ltcGxlQ29sb3IucmVkQ29t
cG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9y
LmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldXTsKIH0K
IAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkK
QEAgLTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9W
YWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRU
b1ZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgp
KSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHNpbXBsZUNvbG9yLnJlZENvbXBv
bmVudCgpKSwgQChzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5i
bHVlQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkpXV07CiB9CiAK
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQpAQCAt
NDk0LDcgKzQ5Niw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICByZXR1cm4gQFtAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5n
cmVlbigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpXTsKKyAgICAgICAgYXV0
byBzaW1wbGVDb2xvciA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IHJldHVybiBAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdy
ZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxl
Q29sb3IuYWxwaGFDb21wb25lbnQoKSldOwogICAgIH0pLmdldCgpXTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDggQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFz
aWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHRmxvYXQgYVs0XSA9IHsgdmFsdWUucmVkKCks
IHZhbHVlLmdyZWVuKCksIHZhbHVlLmJsdWUoKSwgdmFsdWUuYWxwaGEoKSB9OworICAgIGF1dG8g
c2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIENHRmxv
YXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVu
Q29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxw
aGFDb21wb25lbnQoKSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRD
RihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVl
KG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOCw3ICs0MTksOCBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dGbG9hdCBhWzRdID0geyB2
YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1ZSgpLCB2YWx1ZS5hbHBoYSgpIH07
CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+
IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25T
ZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQ4Nyw3ICs0ODks
OCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyhjCiAgICAgICAgIAog
ICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Q0dGbG9hdCBhWzRdID0geyB2YWx1ZVtpXS5yZWQoKSwgdmFsdWVbaV0uZ3JlZW4oKSwgdmFsdWVb
aV0uYmx1ZSgpLCB2YWx1ZVtpXS5hbHBoYSgpIH07CisgICAgICAgIGF1dG8gc2ltcGxlQ29sb3Ig
PSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBDR0Zsb2F0IGFb
NF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29t
cG9uZW50KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENG
KENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJy
YXkuZ2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0
aWMgdm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEpCi0g
ICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhjb2xvci5hbHBoYSgpIC8gMjU1LmYgKiBnbG9iYWxB
bHBoYSkpOworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFsQWxw
aGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihj
ciwgY29sb3IpOwogICAgIH0KQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgZHJhd0ZvY3VzUmlu
ZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYKICAgICAvLyBzbyBhcyB0byBiZSBjb25zaXN0ZW50IHdp
dGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCiAKICAgICAvLyBGb3JjZSB0
aGUgYWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRs
aW5lIHJpbmdzLgotICAgIENvbG9yIHJpbmdDb2xvciA9IG1ha2VSR0JBKGNvbG9yLnJlZCgpLCBj
b2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CisgICAgQ29sb3IgcmluZ0NvbG9yID0g
Y29sb3IuY29sb3JXaXRoQWxwaGEoLjUpOwogCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNv
bnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkod29ya2luZyBj
b3B5KQpAQCAtMTExLDkgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAgICAgZmxvYXRB
cmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBt
X2xpZ2h0aW5nQ29sb3IucmVkKCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IG1f
bGlnaHRpbmdDb2xvci5ncmVlbigpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IG1f
bGlnaHRpbmdDb2xvci5ibHVlKCk7CisgICAgYXV0byBzaW1wbGVDb2xvciA9IG1fbGlnaHRpbmdD
b2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgZmxvYXRBcmd1bWVudHMuY29s
b3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3VtZW50cy5j
b2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3Vt
ZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCk7CiAgICAgZmxvYXRB
cmd1bWVudHMucGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9
PSBMU19QT0lOVCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MjEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNyArNjg2LDggQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xl
YXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZ2xDbGVhckNvbG9yKGNvbG9yLnJl
ZCgpIC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xvci5ibHVlKCkgLyAyNTUu
MGYsIGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4MCw3ICs3ODAsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJl
bHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2lu
Zy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBz
aGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEo
KSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7
CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2Ug
aGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVn
YXRpdmUuCiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zm
c2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
ID8gLTEgOiAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24K
ICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVs
eWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5n
LgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBz
aGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNo
YWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5hbHBoYSgp
IC8gMjU1KTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwogICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwog
ICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhh
dmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0
aXZlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNj
YWRlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBv
dXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2lu
ZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNo
YWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENv
bG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwg
c2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBo
YSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxs
Q29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3Iu
YWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSAr
IHNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmlu
ZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZs
aXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9
IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsx
MzQsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgLy8g
SWYgdGhlIHRleHQgY29sb3IgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0aW9u
IGJhY2tncm91bmQsIGludmVydCB0aGUgc2VsZWN0aW9uCiAgICAgLy8gYmFja2dyb3VuZC4KICAg
ICBpZiAodGV4dENvbG9yID09IGMpCi0gICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwg
MHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKKyAgICAgICAgYyA9IGMuaW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJv
eCA9IHJvb3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBhdXRvIElubGluZVRl
eHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlCiAgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvciA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAg
ICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKICAg
ICAgICAgaWYgKHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLmFscGhhKCkgJiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0g
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENv
bG9yID0geyAweGZmIC0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLnJlZCgpLCAweGZmIC0gc2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yLmdyZWVuKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IuYmx1ZSgpIH07CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6IHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hh
ZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwg
MjU1KTsKKyAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNv
bG9yKCk7CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0Nhc3RpbmdSZWN0ID0gYXJlYUNhc3RpbmdT
aGFkb3dJbkhvbGUoYm9yZGVyUmVjdC5yZWN0KCksIHNoYWRvd1BhaW50aW5nRXh0ZW50LCBzaGFk
b3dTcHJlYWQsIHNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHBpeGVsU25hcHBlZE91
dGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoc2hhZG93Q2FzdGluZ1JlY3QsIGRldmlj
ZVNjYWxlRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBD
b2xvciBSZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRv
IGl0ID0gZ2xvYmFsQ1NTVmFsdWVUb1N5c3RlbUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7
IGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VM
ZXZlbCB9KTsKICAgICAgICAgICAgIGlmIChpdCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29s
b3JNYXAoKS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3Rl
bUNvbG9yKGNzc1ZhbHVlSUQsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0
LT52YWx1ZS5yZ2IoKSwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+
dmFsdWUuc2VtYW50aWNDb2xvcigpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBz
eXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlEKGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1
c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDE1IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVu
c2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAgICBDb2xv
ciBmcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQg
OiBtX2Zyb207CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlv
bk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0
aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAg
ICAgICAKLSAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0
Q291bnQsIGZyb20ucmVkKCksIG1fdG8ucmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkucmVkKCks
IGFuaW1hdGVkLnJlZCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHBy
b2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ncmVlbigpLCBtX3RvLmdyZWVuKCksIHRvQXRFbmRP
ZkR1cmF0aW9uKCkuZ3JlZW4oKSwgYW5pbWF0ZWQuZ3JlZW4oKSk7Ci0gICAgICAgIGZsb2F0IGJs
dWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ibHVlKCksIG1f
dG8uYmx1ZSgpLCB0b0F0RW5kT2ZEdXJhdGlvbigpLmJsdWUoKSwgYW5pbWF0ZWQuYmx1ZSgpKTsK
LSAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3Vu
dCwgZnJvbS5hbHBoYSgpLCBtX3RvLmFscGhhKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYWxwaGEo
KSwgYW5pbWF0ZWQuYWxwaGEoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUo
cHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVU
by5yZWRDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCks
IHNpbXBsZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKKyAg
ICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVD
b21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxw
aGFDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBhbmlt
YXRlZCA9IHsgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkgfTsKICAgICB9CkBAIC05OSwyMCArMTAyLDI4IEBA
IHB1YmxpYzoKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0
by5zdHJpcFdoaXRlU3BhY2UoKSk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBmbG9hdCByZWQgPSBmcm9tQ29sb3IucmVk
KCkgLSB0b0NvbG9yLnJlZCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IGZyb21Db2xvci5ncmVl
bigpIC0gdG9Db2xvci5ncmVlbigpOwotICAgICAgICBmbG9hdCBibHVlID0gZnJvbUNvbG9yLmJs
dWUoKSAtIHRvQ29sb3IuYmx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgIGF1dG8gc2ltcGxl
RnJvbSA9IGZyb21Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRv
IHNpbXBsZVRvID0gdG9Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgICAg
IGZsb2F0IHJlZCA9IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21w
b25lbnQoKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50
KCkgLSBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCBibHVlID0gc2lt
cGxlRnJvbS5ibHVlQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisKICAg
ICAgICAgcmV0dXJuIHN0ZDo6aHlwb3QocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQogCiBwcml2
YXRlOgogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisKICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEg
b24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBtX3RvID0gewotICAgICAgICAgICAg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLnJlZCgpICsgbV9mcm9tLnJlZCgpKSwKLSAg
ICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwobV90by5ncmVlbigpICsgbV9mcm9t
LmdyZWVuKCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLmJs
dWUoKSArIG1fZnJvbS5ibHVlKCkpCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSks
CisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29t
cG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAorICAgICAgICAgICAgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVG
cm9tLmJsdWVDb21wb25lbnQoKSkKICAgICAgICAgfTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNjIxMDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRp
cmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBh
bHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAg
ICAgKFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisKIDIwMjAtMDUt
MjMgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIEVycm9y
IHNlbmRpbmcgSVBDIG1lc3NhZ2U6IEJyb2tlbiBwaXBlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkocmV2aXNpb24gMjYyMTAx
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Bs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5Myw4ICs2OTMs
OCBAQCBzdGF0aWMgTlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyCiAgICAgICAgIHJl
dHVybiBAKGtleWZyYW1lVmFsdWUubnVtYmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAKICAgICBj
YXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkNvbG9yS2V5VHlw
ZTogewotICAgICAgICBDb2xvciBjb2xvciA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4gQFsgQChjb2xvci5yZWQoKSksIEAoY29sb3IuZ3JlZW4oKSksIEAoY29s
b3IuYmx1ZSgpKSwgQChjb2xvci5hbHBoYSgpKSBdOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgICAgIHJldHVybiBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgfQogCiAg
ICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtl
eVR5cGU6IHsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI2MjEwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRp
cmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBh
bHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorCiAyMDIwLTA1LTIyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgTWFrZSBkb3dubG9hZCByZXN1bWUgd29ya2Fyb3VuZCBmb3JnaXZp
bmcgb2YgY2hhbmdlcyBpbiBDRk5ldHdvcmsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAi
VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
b2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JVdGlsaXRpZXMuaD4KIApAQCAtMzMsNiAr
MzQsMjggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKIAorVEVTVChDb2xvciwgUHJlbXVsdGlwbHkpCit7CisgICAgLy8gZm9yICh1bnNpZ25l
ZCByID0gMDsgciA8IDI1NjsgKytyKSB7CisgICAgLy8gICAgIGZvciAodW5zaWduZWQgZyA9IDA7
IGcgPCAyNTY7ICsrZykgeworICAgIC8vICAgICAgICAgZm9yICh1bnNpZ25lZCBiID0gMDsgYiA8
IDI1NjsgKytiKSB7CisgICAgLy8gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhID0gMDsgYSA8
IDI1NjsgKythKQorICAgIC8vCisgICAgLy8gICAgICAgICB9CisgICAgLy8gICAgIH0KKyAgICAv
LyB9CisgICAgYXV0byByZ2JhID0gbWFrZVJHQkEoMjU0LCAxMDAsIDI1NCwgMTAwKTsKKyAgICAK
KyAgICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBDb2xvcihtYWtlUHJlbXVsdGlwbGllZFJHQkEo
cmdiYSkpLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBh
Ml0gPSBwcmVtdWx0aXBseUFscGhhKENvbG9yKHJnYmEpLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KSk7CisgICAgCisgICAgRVhQRUNUX0ZMT0FUX0VRKHIxLCByMik7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKGcxLCBnMik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGIxLCBiMik7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKGExLCBhMik7CisgICAgCit9CisKIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQog
ewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OndoaXRlOwpAQCAtMTgyLDI2ICsyMDUsMjkgQEAg
VEVTVChDb2xvciwgVmFsaWRpdHkpCiAgICAgdmFsaWRDb2xvciA9IENvbG9yKDEsIDIsIDMsIDQp
OwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFM
U0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yLnJl
ZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5ncmVlbigpLCAyKTsKLSAgICBFWFBF
Q1RfRVEodmFsaWRDb2xvci5ibHVlKCksIDMpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yLmFs
cGhhKCksIDQpOworICAgIGF1dG8gc2ltcGxlVmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5yZWRD
b21wb25lbnQoKSwgMSk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5Db21w
b25lbnQoKSwgMik7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVu
dCgpLCAzKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgp
LCA0KTsKIAogICAgIENvbG9yIHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xv
cikpOwogICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAg
RVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEo
eWV0QW5vdGhlclZhbGlkQ29sb3IuZ3JlZW4oKSwgMik7Ci0gICAgRVhQRUNUX0VRKHlldEFub3Ro
ZXJWYWxpZENvbG9yLmJsdWUoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENv
bG9yLmFscGhhKCksIDQpOworICAgIGF1dG8gc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IgPSB5
ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIEVYUEVD
VF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7CisgICAg
RVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50KCksIDIp
OworICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50
KCksIDMpOworICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5hbHBoYUNv
bXBvbmVudCgpLCA0KTsKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhl
clZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkp
OwogICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBF
WFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJW
YWxpZENvbG9yLmdyZWVuKCksIDIpOwotICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3IuYmx1
ZSgpLCAzKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLmFscGhhKCksIDQpOworICAg
IGF1dG8gc2ltcGxlT3RoZXJWYWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5yZWRD
b21wb25lbnQoKSwgMSk7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ncmVl
bkNvbXBvbmVudCgpLCAyKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmJs
dWVDb21wb25lbnQoKSwgMyk7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5h
bHBoYUNvbXBvbmVudCgpLCA0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMjYyMTAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMjAgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgQ29sb3I6OmdldEhTTCgpIHdpdGggc1JH
QlRvSFNMIHRvIGVuc3VyZSBpdCBhdCBsZWFzdCBnaXZlcyBzb21ld2hhdCBzZW5zaWJsZSByZXN1
bHRzIGZvciBFeHRlbmRlZENvbG9ycyBhbmQgcmVkdWNlIGNvZGUgZHVwbGljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE0MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9wYXN0
ZWJvYXJkL3Bhc3RlLWRhcmstbW9kZS1jb2xvci1maWx0ZXJlZC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWRhcmstbW9kZS1jb2xvci1maWx0ZXJlZC5o
dG1sOgorICAgICAgICBVcGRhdGUgdGVzdCB0byBpbmNsdWRlIGEgdGVzdCBjYXNlIHRoYXQgdXNl
cyBleHRlbmRlZCBjb2xvcnMuCisKIDIwMjAtMDUtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtURkNdIFVzZWQgaGVpZ2h0IG9mIGEgY2VsbCBpcyB0
aGUgbWF4aW11bSBvZiB0aGUgY29tcHV0ZWQgYW5kIHRoZSBjb250ZW50IGhlaWdodC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400139</attachid>
            <date>2020-05-23 13:58:06 -0700</date>
            <delta_ts>2020-05-23 17:18:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523135805.patch</filename>
            <type>text/plain</type>
            <size>48561</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA1LTIzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVw
OiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29s
b3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRl
ZCBjb2xvcnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6Cisg
ICAgICAgICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogcGFnZS9D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNXaW5kb3dDU1MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zQmFj
a2dyb3VuZENTUyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZENvbXBvbmVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudEFzRmxvYXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjphbHBoYUFzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJlZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Z3JlZW4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsdWUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxh
dGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OnByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRy
YXdGb2N1c1JpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVy
cy9GRUxpZ2h0aW5nTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseU5lb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGVhckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnN5c3RlbUNvbG9yIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKwogMjAyMC0wNS0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gVXNlZCBoZWlnaHQgb2YgYSBjZWxsIGlzIHRoZSBt
YXhpbXVtIG9mIHRoZSBjb21wdXRlZCBhbmQgdGhlIGNvbnRlbnQgaGVpZ2h0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYy
LDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUK
ICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52
YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdyZWVu
KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9yLmdy
ZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAy
NjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBAQCBz
dGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0Nv
bG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNl
dChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5ncmVl
bigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29s
b3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3Ry
ZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRv
QXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19U
RVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIENvbG9yIGZn
Q29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwog
ICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBidWZmZXIucmVzZXQoZ19zdHJk
dXBfcHJpbnRmKCIlaSwlaSwlaSIsIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwgZmdD
b2xvci5ibHVlKCkpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmlu
dGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJp
YnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X0ZHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk4LDEwICs2OTgsMTAgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5
Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcs
IGludCYgYikgY29uc3QKIHsKLSAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSk7Ci0gICAgciA9IGNvbG9yLnJlZCgpOwotICAgIGcg
PSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7CisgICAgYXV0byBjb2xvciA9
IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOworICAgIGcg
PSBjb2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50KCk7
CiB9CiAKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRl
c3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1
ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2
ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIENvbG9yIGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE51
bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IGNyZWF0
ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51bWJlclR5cGUgbnVtYmVyKQpA
QCAtNDYsMTUgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikK
LSAgICAgICAgOiBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIGNvbG9yLnJlZCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3du
ZXIsIGNvbG9yLmdyZWVuKCkpKQotICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVy
LCBjb2xvci5ibHVlKCkpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwg
Y29sb3IuYWxwaGFBc0Zsb2F0KCkpKQorICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKSkKKyAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBt
X2NvbG9yLnJlZENvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCisgICAgICAgICwgbV9ibHVlKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2Fs
cGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkp
KQogICAgIHsKICAgICB9CiAKLSAgICBDb2xvciBtX2NvbG9yOworICAgIFNpbXBsZUNvbG9yIG1f
Y29sb3I7CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX3JlZDsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fZ3JlZW47CiAgICAgUmVmPERl
cHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAkocmV2
aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBTdHJpbmcg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0g
TUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBv
cnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7
Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCksIHdpbmRvd0NvbG9yLmdyZWVu
KCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSks
IGltcG9ydGFudCk7CisgICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgd2luZG93Q29sb3IuY29sb3JXaXRoQWxwaGEob3Bh
Y2l0eSksIGltcG9ydGFudCk7CiAKICAgICBpZiAoIW9wYWNpdHkpCiAgICAgICAgIHJldHVybiB3
aW5kb3dTdHlsZTsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5j
ZUdldEJhY2tncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJl
aGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZp
b3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIHJldHVybiBj
b2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBDb2xvcihiYWNrZ3Jv
dW5kQ29sb3IucmVkKCksIGJhY2tncm91bmRDb2xvci5ncmVlbigpLCBiYWNrZ3JvdW5kQ29sb3Iu
Ymx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwgaW1wb3J0YW50KTsKKyAg
ICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgYmFj
a2dyb3VuZENvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpLCBpbXBvcnRhbnQpOwogfQogCiBD
b2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IoYm9v
bCYgaW1wb3J0YW50KSBjb25zdApAQCAtMzE3LDcgKzMxNyw3IEBAIENvbG9yIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjpjYXAKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRpb25B
cHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5V
c2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRhbnQg
PSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAg
cmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4dENvbG9yLmdyZWVuKCksIHRleHRDb2xv
ci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpOworICAgIHJldHVybiB0
ZXh0Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9CiAgICAgCiBTdHJpbmcgQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9u
IDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgwLDEyICsxODAsMTIgQEAgaW50IGRpZmZlcmVuY2VTcXVhcmVk
KGNvbnN0IENvbG9yJiBjMSwgYwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBy
ZXR1cm4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55IG9mIHRoZSBjYWxsCiAgICAg
Ly8gc2l0ZXMgaGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMgYmFzZWQgb24gZmVlbC4gV2Un
ZCBuZWVkIHRvIGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0aG0gdGFibGVzIHRvIGNoYW5n
ZSB0aGVtIDopCi0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRl
ZCgpLnJlZCgpICogMjU1IDogYzEucmVkKCk7Ci0gICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4dGVu
ZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLmdyZWVuKCk7Ci0gICAg
aW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAy
NTUgOiBjMS5ibHVlKCk7Ci0gICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNF
eHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmVkKCk7Ci0gICAgaW50IGMyR3JlZW4gPSBjMi5p
c0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLmdyZWVuKCk7
Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ibHVl
KCkgKiAyNTUgOiBjMi5ibHVlKCk7CisgICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8g
YzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEucmdiKCkucmVkQ29tcG9uZW50KCk7Cisg
ICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4o
KSAqIDI1NSA6IGMxLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMxQmx1ZSA9IGMx
LmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5yZ2IoKS5i
bHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNF
eHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmdiKCkucmVkQ29tcG9uZW50KCk7CisgICAgaW50
IGMyR3JlZW4gPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1
NSA6IGMyLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0
ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5yZ2IoKS5ibHVlQ29t
cG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFSZWQgLSBjMlJlZDsKICAgICBpbnQgZEcgPSBjMUdy
ZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIgPSBjMUJsdWUgLSBjMkJsdWU7CkBAIC0yNTAsMTIg
KzI1MCwxNiBAQCBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKIH0KIAogQ29sb3I6OkNvbG9y
KGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywg
YWxwaGEsIGNvbG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29sb3IoUmVmPEV4dGVuZGVkQ29s
b3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBj
YXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCiAgICAgLy8gdG9wIDMyIGJpdHMg
d2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCiAgICAgbV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzID0gMDsKLSAgICBhdXRvIGV4dGVuZGVkQ29sb3JSZWYgPSBFeHRl
bmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAgIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvclJlZi5sZWFrUmVmKCk7Cisg
ICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yLmxlYWtSZWYoKTsK
ICAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKIH0KIApAQCAtMzYzLDE3ICszNjcsMTcgQEAgQ29s
b3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcs
IGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKSB7Ci0gICAgICAgIC8vIExpZ2h0ZW5lZCBibGFj
ayB3aXRoIGFscGhhLgotICAgICAgICByZXR1cm4gQ29sb3IoMHg1NCwgMHg1NCwgMHg1NCwgYWxw
aGEoKSk7Ci0gICAgfQorICAgIGlmICh2ID09IDAuMGYpCisgICAgICAgIHJldHVybiBsaWdodGVu
ZWRCbGFjay5jb2xvcldpdGhBbHBoYShhbHBoYSgpKTsKIAogICAgIGZsb2F0IG11bHRpcGxpZXIg
PSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIAotICAgIHJldHVybiBDb2xvcihzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0
b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICBh
bHBoYSgpCisgICAgfTsKIH0KIAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdApAQCAtMzg5LDEw
ICszOTMsMTIgQEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIGZsb2F0IHYgPSBzdGQ6
Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYs
ICh2IC0gMC4zM2YpIC8gdik7CiAKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50Piht
dWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
ICAgICAgICAgYWxwaGEoKSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQorICAgIH07
CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC00MDksMTkgKzQxNSw2IEBAIGZs
b2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5l
c3ModG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIH0KIAotc3RhdGljIGludCBibGVuZENvbXBv
bmVudChpbnQgYywgaW50IGEpCi17Ci0gICAgLy8gV2UgdXNlIHdoaXRlLgotICAgIGZsb2F0IGFs
cGhhID0gYSAvIDI1NS4wZjsKLSAgICBpbnQgd2hpdGVCbGVuZCA9IDI1NSAtIGE7Ci0gICAgYyAt
PSB3aGl0ZUJsZW5kOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7Ci19
Ci0KLWNvbnN0IGludCBjU3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCi1jb25zdCBpbnQgY0VuZEFs
cGhhID0gMjA0OyAvLyA4MCU7Ci1jb25zdCBpbnQgY0FscGhhSW5jcmVtZW50ID0gMTc7IC8vIElu
Y3JlbWVudHMgaW4gYmV0d2Vlbi4KLQogQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9yJiBz
b3VyY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1Zpc2libGUoKSB8fCBzb3VyY2UuaXNPcGFxdWUo
KSkKQEAgLTQzMCwzNyArNDIzLDU1IEBAIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYg
c291cmNlKSAKICAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQogICAgICAgICByZXR1cm4gKnRoaXM7
CiAKLSAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEo
KSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGF1dG8gW3NlbGZSLCBzZWxmRywgc2VsZkIsIHNlbGZB
XSA9IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbc291cmNlUiwgc291cmNl
Rywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsK
KworICAgIGludCBkID0gMjU1ICogKHNlbGZBICsgc291cmNlQSkgLSBzZWxmQSAqIHNvdXJjZUE7
CiAgICAgaW50IGEgPSBkIC8gMjU1OwotICAgIGludCByID0gKHJlZCgpICogYWxwaGEoKSAqICgy
NTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5yZWQo
KSkgLyBkOwotICAgIGludCBnID0gKGdyZWVuKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5h
bHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmdyZWVuKCkpIC8gZDsKLSAg
ICBpbnQgYiA9IChibHVlKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5hbHBoYSgpKSArIDI1
NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmJsdWUoKSkgLyBkOwotICAgIHJldHVybiBDb2xv
cihyLCBnLCBiLCBhKTsKKyAgICBpbnQgciA9IChzZWxmUiAqIHNlbGZBICogKDI1NSAtIHNvdXJj
ZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZVIpIC8gZDsKKyAgICBpbnQgZyA9IChzZWxmRyAq
IHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsK
KyAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICogc291
cmNlQSAqIHNvdXJjZUIpIC8gZDsKKworICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCBhKTsK
IH0KIAogQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKIHsKKyAgICBjb25zdGV4
cHIgaW50IHN0YXJ0QWxwaGEgPSAxNTM7IC8vIDYwJQorICAgIGNvbnN0ZXhwciBpbnQgZW5kQWxw
aGEgPSAyMDQ7IC8vIDgwJTsKKyAgICBjb25zdGV4cHIgaW50IGFscGhhSW5jcmVtZW50ID0gMTc7
CisKKyAgICBhdXRvIGJsZW5kQ29tcG9uZW50ID0gW10oaW50IGMsIGludCBhKSAtPiBpbnQgewor
ICAgICAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7CisgICAgICAgIGludCB3aGl0ZUJsZW5k
ID0gMjU1IC0gYTsKKyAgICAgICAgYyAtPSB3aGl0ZUJsZW5kOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworICAgIH07CisKICAgICAvLyBJZiB0aGUgY29sb3Ig
Y29udGFpbnMgYWxwaGEgYWxyZWFkeSwgd2UgbGVhdmUgaXQgYWxvbmUuCiAgICAgaWYgKCFpc09w
YXF1ZSgpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBDb2xvciBuZXdDb2xvcjsKLSAg
ICBmb3IgKGludCBhbHBoYSA9IGNTdGFydEFscGhhOyBhbHBoYSA8PSBjRW5kQWxwaGE7IGFscGhh
ICs9IGNBbHBoYUluY3JlbWVudCkgeworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBl
eGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKwor
ICAgIENvbG9yIHJlc3VsdDsKKyAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFscGhh
IDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkgewogICAgICAgICAvLyBXZSBo
YXZlIGEgc29saWQgY29sb3IuICBDb252ZXJ0IHRvIGFuIGVxdWl2YWxlbnQgY29sb3IgdGhhdCBs
b29rcyB0aGUgc2FtZSB3aGVuIGJsZW5kZWQgd2l0aCB3aGl0ZQogICAgICAgICAvLyBhdCB0aGUg
Y3VycmVudCBhbHBoYS4gIFRyeSB1c2luZyBsZXNzIHRyYW5zcGFyZW5jeSBpZiB0aGUgbnVtYmVy
cyBlbmQgdXAgYmVpbmcgbmVnYXRpdmUuCi0gICAgICAgIGludCByID0gYmxlbmRDb21wb25lbnQo
cmVkKCksIGFscGhhKTsKLSAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChncmVlbigpLCBh
bHBoYSk7Ci0gICAgICAgIGludCBiID0gYmxlbmRDb21wb25lbnQoYmx1ZSgpLCBhbHBoYSk7Cisg
ICAgICAgIGludCByID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdSLCBhbHBoYSk7CisgICAgICAg
IGludCBnID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdHLCBhbHBoYSk7CisgICAgICAgIGludCBi
ID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdCLCBhbHBoYSk7CiAgICAgICAgIAotICAgICAgICBu
ZXdDb2xvciA9IENvbG9yKHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZVJH
QkEociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIg
Pj0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBXaHkgaXMg
cHJlc2VydmluZyB0aGUgc2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVyZT8K
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICBuZXdDb2xvci5zZXRJc1NlbWFudGljKCk7
Ci0gICAgcmV0dXJuIG5ld0NvbG9yOworICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0CkBAIC00NzcsMTMgKzQ4OCwxNSBAQCBDb2xvciBD
b2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVCiAKIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAg
ICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgp
IH07CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9y
ID0gYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9yLnJl
ZCgpLCBleHRlbmRlZENvbG9yLmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBoYSwg
ZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkgfTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogVGhp
cyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKKyAg
ICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAyNTU7CiAKLSAgICBDb2xvciByZXN1bHQgPSB7
IHJlZCgpLCBncmVlbigpLCBibHVlKCksIG5ld0FscGhhIH07CisgICAgQ29sb3IgcmVzdWx0ID0g
cmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAg
ICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ5
MSwxNSArNTA0LDM3IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkK
IAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZs
b2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVy
biBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2NvbG9yRGF0YS5l
eHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5ibHVlKCks
IGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkgfTsKKyAgICBp
ZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4dGVu
ZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVkKCksIGV4dGVu
ZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBleHRlbmRlZENv
bG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJl
IHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcKKyAgICB1aW50
OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpOwogCi0gICAgQ29sb3Ig
cmVzdWx0ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CisgICAgQ29sb3IgcmVzdWx0ID0gcmdi
KCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAg
ICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgYXNFeHRlbmRlZCgp
LmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpIH07CisKKyAgICBhdXRvIFtyLCBnLCBiLCBl
eGlzdGluZ0FscGhhXSA9IHJnYigpOworICAgIHJldHVybiB7IDB4ZmYgLSByLCAweGZmIC0gZywg
MHhmZiAtIGIsIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGFscGhhKSB9OworfQorCitDb2xvciBDb2xv
cjo6c2VtYW50aWNDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworCisgICAgcmV0dXJuIHsgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KSwgU2VtYW50aWMgfTsKK30KKwogc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50
cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNF
eHRlbmRlZCgpKSB7CkBAIC01MDcsNyArNTQyLDggQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZs
b2F0Q29tcG9uZW50cz4gQwogICAgICAgICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9yU3Bh
Y2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07CiAgICAgfQogCi0gICAgcmV0dXJuIHsg
Q29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVu
KCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9OworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JH
QiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwg
IGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoKICAg
ICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZSA+PiAyNDsgfQogCisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50
QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBvbmVu
dCgpKSAvIDB4RkY7IH0KKwogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyBy
ZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQogCkBAIC03Niw2ICs3
OCwyMiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25zdDsK
ICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKIAor
ICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBj
b25zdCB7IHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9
CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50OF90IGdl
dCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAgICAgICAg
aWYgY29uc3RleHByICghTikKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsKKyAg
ICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBncmVl
bkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAgICAg
ICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0KKwog
cHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsxODks
NyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0IgYW5k
IHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVn
ZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9SVCBD
b2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xvciYm
KTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBy
Z2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlzaWJs
ZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9uZW50
KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBvbmVu
dCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9uZW50
KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBvbmVu
dCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2IoKS5h
bHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsKKyAg
ICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBhbHBo
YUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxw
aGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3IgYmxl
bmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7
CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7CiAg
ICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUwLDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNvbG9y
KCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBzZW1h
bnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVk
IGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMoKSBj
b25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mg
JiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1YmxpYzoK
ICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZyaWVu
ZCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1YmxpYzoKICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5k
IGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0IENv
bG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAKQEAg
LTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgorICAgIFJH
QkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBiKSB7
IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7CiAg
ICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gaXNT
ZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwxNyBAQCBuYW1lc3BhY2UgV1RG
IHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbG9yPjsKIHRlbXBs
YXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+OwogfQorCituYW1lc3BhY2Ug
c3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1wbGVDb2xv
cj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4geworfTsK
KwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2ViQ29y
ZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhfdDsKK307
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNCAr
NjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVy
biBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIHJlZCgpLCAnICcsIGdyZWVu
KCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsKIH0KIAorUmVmPEV4dGVuZGVk
Q29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjaGFubmVs
cygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0g
YzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlz
aW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCisgICAgUmVmPEV4dGVuZGVk
Q29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworCiBwcml2YXRlOgog
ICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxw
aGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NoYW5uZWxzKGMxLCBjMiwg
YzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5t
bQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTYsNyArMzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYQog
ewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgW3N0
YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZh
bHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgpKSwg
QCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9u
ZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJs
dWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldXTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKQEAg
LTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1
CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBb
c3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1Zh
bHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSksIEAodmFsdWUuYmx1ZSgpKSwg
QCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHNpbXBsZUNvbG9yLnJlZENvbXBvbmVu
dCgpKSwgQChzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5ibHVl
Q29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkpXV07CiB9CiAKIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQpAQCAtNDk0
LDcgKzQ5Niw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRv
JiBjb2xvcikgewotICAgICAgICByZXR1cm4gQFtAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVl
bigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpXTsKKyAgICAgICAgYXV0byBz
aW1wbGVDb2xvciA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIHJl
dHVybiBAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVu
Q29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29s
b3IuYWxwaGFDb21wb25lbnQoKSldOwogICAgIH0pLmdldCgpXTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENHRmxvYXQgYVs0XSA9IHsgdmFsdWUucmVkKCksIHZh
bHVlLmdyZWVuKCksIHZhbHVlLmJsdWUoKSwgdmFsdWUuYWxwaGEoKSB9OworICAgIGF1dG8gc2lt
cGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIENHRmxvYXQg
YVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29t
cG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFD
b21wb25lbnQoKSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihD
QUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVlKG1f
YW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOCw3ICs0MTksOCBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dGbG9hdCBhWzRdID0geyB2YWx1
ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1ZSgpLCB2YWx1ZS5hbHBoYSgpIH07Cisg
ICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxlQ29s
b3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVD
b2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYg
PSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRU
b1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQ4Nyw3ICs0ODksOCBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyhjCiAgICAgICAgIAogICAg
IFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVh
dGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0dG
bG9hdCBhWzRdID0geyB2YWx1ZVtpXS5yZWQoKSwgdmFsdWVbaV0uZ3JlZW4oKSwgdmFsdWVbaV0u
Ymx1ZSgpLCB2YWx1ZVtpXS5hbHBoYSgpIH07CisgICAgICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2
YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBDR0Zsb2F0IGFbNF0g
PSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVu
dCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9u
ZW50KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENB
Q0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXku
Z2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMg
dm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEpCi0gICAg
ICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhjb2xvci5hbHBoYSgpIC8gMjU1LmYgKiBnbG9iYWxBbHBo
YSkpOworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFsQWxwaGEp
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwg
Y29sb3IpOwogICAgIH0KQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgZHJhd0ZvY3VzUmluZyhQ
bGF0Zm9ybUNvbnRleHRDYWlybyYKICAgICAvLyBzbyBhcyB0byBiZSBjb25zaXN0ZW50IHdpdGgg
aG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCiAKICAgICAvLyBGb3JjZSB0aGUg
YWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRsaW5l
IHJpbmdzLgotICAgIENvbG9yIHJpbmdDb2xvciA9IG1ha2VSR0JBKGNvbG9yLnJlZCgpLCBjb2xv
ci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CisgICAgQ29sb3IgcmluZ0NvbG9yID0gY29s
b3IuY29sb3JXaXRoQWxwaGEoLjUpOwogCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRl
eHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxp
Z2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjIxMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDkgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAgICAgZmxvYXRBcmd1
bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBtX2xp
Z2h0aW5nQ29sb3IucmVkKCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IG1fbGln
aHRpbmdDb2xvci5ncmVlbigpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IG1fbGln
aHRpbmdDb2xvci5ibHVlKCk7CisgICAgYXV0byBzaW1wbGVDb2xvciA9IG1fbGlnaHRpbmdDb2xv
ci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgZmxvYXRBcmd1bWVudHMuY29sb3JS
ZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xv
ckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3VtZW50
cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCk7CiAgICAgZmxvYXRBcmd1
bWVudHMucGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9PSBM
U19QT0lOVCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MjEwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNyArNjg2LDggQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZ2xDbGVhckNvbG9yKGNvbG9yLnJlZCgp
IC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xvci5ibHVlKCkgLyAyNTUuMGYs
IGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsK
ICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
MCw3ICs3ODAsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiAg
ICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlp
bmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4K
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZp
bGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hh
ZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFk
b3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEoKSAv
IDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYSgpKTsKICAgICAgICAgZmxvYXQg
c2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAg
Ly8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFw
cGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0
KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDR1dpbi5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2
LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAv
LyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENH
IHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3Ig
PSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxD
b2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3Iu
Ymx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOwor
ICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBo
YU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGEoKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKICAgICAgICAgZmxvYXQgc2hhZG93VGV4
dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hh
ZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhl
IFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
c2NhZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb24KICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQg
b2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFs
aWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAg
Q29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBD
b2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVu
KCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5h
bHBoYSgpIC8gMjU1KTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhKCkpOwogICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwog
ICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhh
dmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0
aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNl
dC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/
IC0xIDogMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJ
KHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIEVsbGlwc2lzQm94
OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgLy8gSWYgdGhlIHRleHQgY29sb3IgZW5kcyB1
cCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0aW9uIGJhY2tncm91bmQsIGludmVydCB0aGUg
c2VsZWN0aW9uCiAgICAgLy8gYmFja2dyb3VuZC4KICAgICBpZiAodGV4dENvbG9yID09IGMpCi0g
ICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAt
IGMuYmx1ZSgpKTsKKyAgICAgICAgYyA9IGMuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwog
CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJvb3QoKTsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyNjIxMDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1NCw3ICs4NTQsNyBAQCBhdXRvIElubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1h
cmtlCiAgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCku
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xv
ciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKICAgICAgICAgaWYgKHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLmFscGhhKCkg
JiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0geyAweGZmIC0gc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLnJlZCgpLCAweGZmIC0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLmdy
ZWVuKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuYmx1ZSgpIH07CisgICAgICAg
ICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52
ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMjYyMTAxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0Nv
bG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgMjU1KTsKKyAgICAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNvbG9yKCk7CiAgICAgICAgICAgICBhdXRv
IHNoYWRvd0Nhc3RpbmdSZWN0ID0gYXJlYUNhc3RpbmdTaGFkb3dJbkhvbGUoYm9yZGVyUmVjdC5y
ZWN0KCksIHNoYWRvd1BhaW50aW5nRXh0ZW50LCBzaGFkb3dTcHJlYWQsIHNoYWRvd09mZnNldCk7
CiAgICAgICAgICAgICBhdXRvIHBpeGVsU25hcHBlZE91dGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMoc2hhZG93Q2FzdGluZ1JlY3QsIGRldmljZVNjYWxlRmFjdG9yKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYy
MTAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBDb2xvciBSZW5kZXJUaGVtZUlPUzo6c3lz
dGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRvIGl0ID0gZ2xvYmFsQ1NTVmFsdWVUb1N5
c3RlbUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7IGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBl
YXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCB9KTsKICAgICAgICAgICAgIGlm
IChpdCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAoKS5lbmQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSUQsIG9wdGlv
bnMpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0LT52YWx1ZS5yZ2IoKSwgQ29sb3I6OlNl
bWFudGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUuc2VtYW50aWNDb2xvcigpOwog
ICAgICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBzeXN0ZW1Db2xvckZyb21DU1NWYWx1ZUlE
KGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VM
ZXZlbCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZh
bHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0
ZShTVkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBDb2xv
ciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAgICBDb2xvciBmcm9tID0gbV9hbmltYXRpb25Nb2Rl
ID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQgOiBtX2Zyb207CisgICAgICAgIGF1dG8g
c2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAg
ICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6
VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24o
KS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAgICAgICAKLSAgICAgICAgZmxvYXQgcmVk
ID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIGZyb20ucmVkKCksIG1fdG8u
cmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkucmVkKCksIGFuaW1hdGVkLnJlZCgpKTsKLSAgICAg
ICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJv
bS5ncmVlbigpLCBtX3RvLmdyZWVuKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuZ3JlZW4oKSwgYW5p
bWF0ZWQuZ3JlZW4oKSk7Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBCYXNlOjphbmltYXRlKHByb2dy
ZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ibHVlKCksIG1fdG8uYmx1ZSgpLCB0b0F0RW5kT2ZEdXJh
dGlvbigpLmJsdWUoKSwgYW5pbWF0ZWQuYmx1ZSgpKTsKLSAgICAgICAgZmxvYXQgYWxwaGEgPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5hbHBoYSgpLCBtX3RvLmFs
cGhhKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYWxwaGEoKSwgYW5pbWF0ZWQuYWxwaGEoKSk7Cisg
ICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUby5yZWRDb21wb25lbnQoKSwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLnJlZENvbXBv
bmVudCgpKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCBy
ZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUby5ncmVlbkNv
bXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVlbkNvbXBvbmVudCgpLCBzaW1w
bGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6
OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQo
KSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVl
Q29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25lbnQoKSk7CisgICAgICAgIGZs
b2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG9B
dEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21w
b25lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBhbmltYXRlZCA9IHsgcm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBo
YSkgfTsKICAgICB9CkBAIC05OSwyMCArMTAyLDI4IEBAIHB1YmxpYzoKICAgICAgICAgQ29sb3Ig
dG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0by5zdHJpcFdoaXRlU3BhY2UoKSk7CiAg
ICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICBmbG9hdCByZWQgPSBmcm9tQ29sb3IucmVkKCkgLSB0b0NvbG9yLnJlZCgpOwotICAg
ICAgICBmbG9hdCBncmVlbiA9IGZyb21Db2xvci5ncmVlbigpIC0gdG9Db2xvci5ncmVlbigpOwot
ICAgICAgICBmbG9hdCBibHVlID0gZnJvbUNvbG9yLmJsdWUoKSAtIHRvQ29sb3IuYmx1ZSgpOwor
ICAgICAgICAgICAgCisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgICAgIGZsb2F0IHJlZCA9IHNpbXBsZUZyb20u
cmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21wb25lbnQoKTsKKyAgICAgICAgZmxvYXQg
Z3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ncmVlbkNvbXBv
bmVudCgpOworICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCkg
LSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisKICAgICAgICAgcmV0dXJuIHN0ZDo6aHlwb3Qo
cmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHZvaWQgYWRkRnJvbUFu
ZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgYXV0byBzaW1w
bGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8g
c2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKICAgICAgICAgLy8g
SWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVl
LgogICAgICAgICBtX3RvID0gewotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChtX3RvLnJlZCgpICsgbV9mcm9tLnJlZCgpKSwKLSAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwobV90by5ncmVlbigpICsgbV9mcm9tLmdyZWVuKCkpLAotICAgICAgICAgICAg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLmJsdWUoKSArIG1fZnJvbS5ibHVlKCkpCisg
ICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLnJlZENvbXBvbmVu
dCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSksCisgICAgICAgICAgICByb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmdy
ZWVuQ29tcG9uZW50KCkpLAorICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChz
aW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSkKICAg
ICAgICAgfTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIxMDMpCisrKyBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIw
LTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRl
ZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVy
bHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0IHdpdGggcmVz
cGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6YW5pbWF0aW9uVmFs
dWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisKIDIwMjAtMDUtMjMgIENoYXJsaWUgVHVybmVyICA8Y3R1
cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIEVycm9yIHNlbmRpbmcgSVBDIG1lc3NhZ2U6IEJy
b2tlbiBwaXBlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZS5tbQkocmV2aXNpb24gMjYyMTAxKQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY5Myw4ICs2OTMsOCBAQCBzdGF0aWMgTlNPYmplY3QqIGFu
aW1hdGlvblZhbHVlRnJvbUtleWZyCiAgICAgICAgIHJldHVybiBAKGtleWZyYW1lVmFsdWUubnVt
YmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OktleWZyYW1lVmFsdWU6OkNvbG9yS2V5VHlwZTogewotICAgICAgICBDb2xvciBjb2xv
ciA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQFsgQChjb2xv
ci5yZWQoKSksIEAoY29sb3IuZ3JlZW4oKSksIEAoY29sb3IuYmx1ZSgpKSwgQChjb2xvci5hbHBo
YSgpKSBdOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JW
YWx1ZSgpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIHJldHVybiBAWyBAKHIp
LCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgfQogCiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtleVR5cGU6IHsKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwMykK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIw
LTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRl
ZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHVuZGVy
bHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMgaW5jb3JyZWN0IHdpdGggcmVz
cGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3Rz
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIwLTA1LTIyICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBk
b3dubG9hZCByZXN1bWUgd29ya2Fyb3VuZCBmb3JnaXZpbmcgb2YgY2hhbmdlcyBpbiBDRk5ldHdv
cmsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHAJKHJldmlzaW9uIDI2MjEwMSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDI2ICsxODIsMjkg
QEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAgICAgdmFsaWRDb2xvciA9IENvbG9yKDEsIDIsIDMs
IDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1Rf
RkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9y
LnJlZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5ncmVlbigpLCAyKTsKLSAgICBF
WFBFQ1RfRVEodmFsaWRDb2xvci5ibHVlKCksIDMpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9y
LmFscGhhKCksIDQpOworICAgIGF1dG8gc2ltcGxlVmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5y
ZWRDb21wb25lbnQoKSwgMSk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgMik7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBv
bmVudCgpLCAzKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVu
dCgpLCA0KTsKIAogICAgIENvbG9yIHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRD
b2xvcikpOwogICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0g
ICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBFQ1Rf
RVEoeWV0QW5vdGhlclZhbGlkQ29sb3IuZ3JlZW4oKSwgMik7Ci0gICAgRVhQRUNUX0VRKHlldEFu
b3RoZXJWYWxpZENvbG9yLmJsdWUoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxp
ZENvbG9yLmFscGhhKCksIDQpOworICAgIGF1dG8gc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3Ig
PSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIEVY
UEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7Cisg
ICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50KCks
IDIpOworICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9u
ZW50KCksIDMpOworICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5hbHBo
YUNvbXBvbmVudCgpLCA0KTsKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5v
dGhlclZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlk
KCkpOwogICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAg
ICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEob3Ro
ZXJWYWxpZENvbG9yLmdyZWVuKCksIDIpOwotICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3Iu
Ymx1ZSgpLCAzKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLmFscGhhKCksIDQpOwor
ICAgIGF1dG8gc2ltcGxlT3RoZXJWYWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5y
ZWRDb21wb25lbnQoKSwgMSk7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5n
cmVlbkNvbXBvbmVudCgpLCAyKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9y
LmJsdWVDb21wb25lbnQoKSwgMyk7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xv
ci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMjAgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgQ29sb3I6OmdldEhTTCgpIHdpdGgg
c1JHQlRvSFNMIHRvIGVuc3VyZSBpdCBhdCBsZWFzdCBnaXZlcyBzb21ld2hhdCBzZW5zaWJsZSBy
ZXN1bHRzIGZvciBFeHRlbmRlZENvbG9ycyBhbmQgcmVkdWNlIGNvZGUgZHVwbGljYXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9w
YXN0ZWJvYXJkL3Bhc3RlLWRhcmstbW9kZS1jb2xvci1maWx0ZXJlZC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWRhcmstbW9kZS1jb2xvci1maWx0ZXJl
ZC5odG1sOgorICAgICAgICBVcGRhdGUgdGVzdCB0byBpbmNsdWRlIGEgdGVzdCBjYXNlIHRoYXQg
dXNlcyBleHRlbmRlZCBjb2xvcnMuCisKIDIwMjAtMDUtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtURkNdIFVzZWQgaGVpZ2h0IG9mIGEgY2VsbCBp
cyB0aGUgbWF4aW11bSBvZiB0aGUgY29tcHV0ZWQgYW5kIHRoZSBjb250ZW50IGhlaWdodC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400143</attachid>
            <date>2020-05-23 17:18:35 -0700</date>
            <delta_ts>2020-05-23 17:20:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523171834.patch</filename>
            <type>text/plain</type>
            <size>53216</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0yMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogU3RvcCBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNv
bG9yIChpdCBpcyBhbG1vc3QgYWx3YXlzIGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5k
ZWQgY29sb3JzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSBNYWtlcyBDb2xvcjo6cmdiKCkgcHJpdmF0ZSwgcmVtb3ZpbmcgYSBjbGFzcyBvZiBleHRl
bmRlZCBjb2xvciBidWdzIGZyb20gdXNlcnMgCisgICAgICAgICAgb2YgdGhlIENvbG9yIGNsYXNz
LiBUbyBnZXQgdGhlIGVxdWl2aWxlbnQgZnVuY3Rpb25hbGl0eSwgdXNlcnMgb2YgdGhlIGNsYXNz
IG11c3QKKyAgICAgICAgICBub3cgdXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgd2hpY2gg
ZG9lcyBhY3R1YWxseSBkb2VzIHRoZSBjb252ZXJzaW9uIHRvIHNSR0IKKyAgICAgICAgICBpZiBu
ZWNlc3NhcnkgYW5kIG1ha2VzIGl0IGNsZWFyIHRvIHRoZSBjYWxsZXIgdGhhdCBwcmVjaXNpb24g
aXMgYmVpbmcgbG9zdC4gCisgICAgICAgIC0gUmVtb3ZlcyBDb2xvcjo6cmVkKCkvZ3JlZW4oKS9i
bHVlKCkgZW50aXJlbHkuIFRoZXkgd2VyZSBqdXN0IGNhbGxpbmcgZG93biB0byAKKyAgICAgICAg
ICBDb2xvcjo6cmdiKCksIGFuZCBnb2luZyBmb3J3YXJkLCBpdCB3b24ndCBtYWtlIHNlbnNlIHRv
IHRoaW5rIGFib3V0IHJnYiBjb21wb25lbnRzCisgICAgICAgICAgb2YgQ29sb3JzIGluIGdlbmVy
YWwsIHNpbmNlIHNvbWUgZXh0ZW5kZWQgY29sb3Igc3BhY2VzIGRvbid0IGRlYWwgaW4gdGhlbSAo
ZS5nLiBMYWIpCisgICAgICAgICAgQ29sb3I6OmFscGhhKCkgd2FzIGtlcHQgKGFuZCBmaXhlZCB0
byB3b3JrIGV2ZW4gd2l0aCBFeHRlbmRlZENvbG9yKSBzaW5jZSBhbGwKKyAgICAgICAgICBFeHRl
bmRlZENvbG9ycyBkbyBuZWVkIHRvIGhhdmUgYWxwaGEuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgVXNlIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6
CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8g
Y29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVj
dDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIGNzcy9E
ZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSB0byBnZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBw
YWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1dpbmRvd0NTUyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
bnNCYWNrZ3JvdW5kQ1NTIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6CisgICAgICAgIFVzZXIg
Q29sb3I6OmNvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgdGhlIG5lZWQgdG8gbXVjayB3aXRoIGNv
bXBvbmVudHMgZGlyZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaWZmZXJlbmNlU3F1YXJlZCk6CisgICAgICAgIFVzZSBy
Z2IoKSBkaXJlY3RseSwgd2hpY2ggaXMgb2ssIHNpbmNlIHRoaXMgaXMgZXhwbGljaXRseSBjaGVj
a2luZyBpc0V4dGVuZGVkKCkuCisgICAgICAgIFRoaXMgY29kZSBpcyBzdGlsbCB3cm9uZyAodGhl
cmUgaXMgYSBGSVhNRSkgYXMgaXQgYXNzdW1lcyB0aGUgdHdvIGNvbG9ycyBhcmUgaW4KKyAgICAg
ICAgdGhlIHNhbWUgY29sb3Igc3BhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xv
cik6CisgICAgICAgIEFkZCBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBhbiBFeHRlbmRlZENvbG9y
IHRvIGFsbG93IGZ1bmN0aW9ucyBsaWtlIAorICAgICAgICBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYSB0byBkZWxlZ2F0ZSB0aGVpciBmdW5jdGlvbmFsaXR5IHRvIEV4dGVuZGVkQ29sb3Iu
CisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAg
ICAgVXNlIG5ldyBTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEoKSB0byBhdm9pZCBoYXJkY29k
aW5nIGNvbnN0YW50cyBoZXJlLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xv
ciBjb21wb25lbnRzLiBUaGVzZQorICAgICAgICBhcmUgc3RpbGwgbm90IGlkZWFsIGltcGxlbWVu
dGF0aW9ucywgYXMgdGhleSBkb24ndCBwcmVzZXJ2ZSBleHRlbmRlZCBjb2xvcnMKKyAgICAgICAg
YXMgd2VsbCBhcyB0aGV5IGNvdWxkLCBidXQgbm93IHRoZXkgZG9uJ3QgcmV0dXJuIGJvZ3VzIHZh
bHVlcyBmb3IgZXh0ZW5kZWQKKyAgICAgICAgY29sb3JzLiBNaW5vciBjbGVhbnVwIGJyaW5naW5n
IGNvbnN0YW50cyBhbmQgbGFtYmRhIGluc2lkZSB0aGUgZnVuY3Rpb24gdGhleQorICAgICAgICBh
cmUgdXNlZCBpbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRo
QWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgTWlub3IgY2xlYW51cHMgdG8g
dXNlIGEgbW9yZSBjb25zaXN0ZW50IHN0eWxlIGFuZCBtYWtlIHVzZSBvZiB0aGUgbmV3CisgICAg
ICAgIFNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIEFkZGVk
LiBVc2VkIHRvIGF2b2lkIGRpcmVjdCBjb21wb25lbnQgdXNhZ2UgaW4gbGluZSBib3ggY29kZS4K
KworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlbWFudGljQ29sb3IgY29uc3QpOgorICAgICAg
ICBBZGRlZC4gSG9wZWZ1bGx5IHRlbXBvcmFyeS4gVXNlZCBieSBSZW5kZXJUaGVtZUlPUy5tbSB0
byBjb252ZXJ0CisgICAgICAgIGEgQ29sb3IgZnJvbSBhIG1hcCBpbnRvIGEgQ29sb3Igd2l0aCB0
aGUgc2VtYW50aWMgYml0IHNldC4gVGhpcyAKKyAgICAgICAgc2hvdWxkIG5vdCBiZSBuZWNlc3Nh
cnkgYXMgZXZlcnkgY29sb3IgaW4gdGhlIG1hcCBzaG91bGQgYWxyZWFkeQorICAgICAgICBoYXZl
IGl0IHNldCwgYnV0IHRvIGF2b2lkIHVuY2Vzc2FyeSBwb3NzaWJsZSBiZWhhdmlvciBjaGFuZ2Vz
IHRoaXMKKyAgICAgICAgcHJlc2VydmVzIHRoYXQgZnVuY3Rpb25hbGl0eSB1bnRpbCBpdCBjYW4g
YmUgcmVzZWFyY2hlZCBmdXJ0aGVyLgorICAgICAgICBGaXhpbmcgY29kZXJzIHRvIHByZXNlcnZl
IHRoZSBzZW1hbnRpYyBiaXQgbWF5IGJlIHJlcXVpcmVkIHRvIAorICAgICAgICBlbGxpbWluYXRl
IHRoZSBuZWVkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNl
QW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIFVzZSByZ2IoKSByYXRoZXIgdGhhbiB0aGUg
aW5kaXZpZHVhbCBjb21wb25lbnRzIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgICAK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIEFkZGVk
LiBOZWVkZWQgYnkgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgYW5kIHVzZWZ1bCB0byBDb2xvci4K
KworICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToK
KyAgICAgICAgVXNlZnVsIHRvIHNpbXBsaWZ5IENvbG9yOjpjb2xvcldpdGhBbHBoYSBpbXBsZW1l
bnRhdGlvbnMgYW5kCisgICAgICAgIGluIENvbG9yOjpkYXJrKCkuCisKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAgICBBZGRlZCB0dXBsZSBpbnRlcmZh
Y2UgdG8gU2ltcGxlQ29sb3IgdG8gc3VwcG9ydCBzdHJ1Y3R1cmUgYmluZGluZ3MuCisgICAgICAg
IE5PVEU6IFVubGlrZSB0aGUgc3RvcmFnZSBvZiBTaW1wbGVDb2xvciAoQVJHQiksIHRoaXMgcHJv
ZHVjZXMgdGhlCisgICAgICAgIGJpbmRpbmdzIGluIHRoZSBtb3JlIGZhbWlsaWFyIFtyLGcsYixh
XSB0byBtYXRjaCBGbG9hdENvbXBvbmVudHMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgTWFkZSB3b3JrIHdpdGggRXh0ZW5kZWRDb2xv
ciBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpyZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmdyZWVuIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgUmVtb3ZlZC4KKworICAgICAgICAoQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKTogCisgICAg
ICAgIChpbnQgZGlmZmVyZW5jZVNxdWFyZWQpOiAKKyAgICAgICAgTWFkZSBmcmllbmRzIHNvIHRo
ZXkgY291bGQgdXNlIENvbG9yOjpyZ2IoKS4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJn
YiBjb25zdCk6IAorICAgICAgICBNYWRlIHByaXZhdGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29s
b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgQWRkZWQgaW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYSB0byBhbGxvdyBpbnZlcnNpb24gdG8gYmUgZW5jYXBzdWxhdGVkLgorICAgICAgICBXaGVu
IGZ1dHVyZSBjb2xvciBzcGFjZXMgYXJlIGFkZGVkLCB3ZSBtYXkgbmVlZCB0byBjaG9vc2UgcGVy
LWNvbG9yc3BhY2UKKyAgICAgICAgYWxnb3JpdGhtcyBmb3IgdGhpcyBpbnN0ZWFkIG9mIHRoZSB0
cml2aWFsIG9uZSB1c2VkIHRvZGF5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgVXNlIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAo
UGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgVXNlIHRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgVXNlIENvbG9y
Ojpjb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVudHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGlu
Z05FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9u
KToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0
byBjb2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmNsZWFyQ29sb3IpOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSB0byBn
ZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAgVXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICBVc2UgY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25lbnRzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICBVc2UgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25l
bnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIFVzZSBpbnZlcnRl
ZENvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4K
KworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQpOgorICAgICAgICBV
c2UgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNv
bXBvbmVudHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KToKKyAgICAgICAgVXNlIG9wYXF1ZUNvbG9yKCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8g
Y29tcG9uZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Db2xvciBjb25zdCk6CisgICAg
ICAgIFVzZSBvcGFxdWVDb2xvcigpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVu
dHMuCisKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8g
Z2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCiAyMDIwLTA1LTIzICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBUYWtlIHJvdyBib3Jk
ZXIgaW50byBhY2NvdW50IHdoZW4gY29tcHV0aW5nIGNvbGxhcHNlZCBib3JkZXJzLgpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYyLDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFs
dWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgp
KS52YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdy
ZWVuKCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9y
LmdyZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRp
ZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBA
QCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBi
Z0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5y
ZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5n
cmVlbigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJn
Q29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYnVmZmVyLnJlc2V0KGdf
c3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIENvbG9y
IGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
OwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBidWZmZXIucmVzZXQoZ19z
dHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwg
ZmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9w
cmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9B
VFRSX0ZHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjk4LDEwICs2OTgsMTAgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50
S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQm
IGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSk7Ci0gICAgciA9IGNvbG9yLnJlZCgpOwotICAg
IGcgPSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7CisgICAgYXV0byBjb2xv
ciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOworICAg
IGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50
KCk7CiB9CiAKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVW
YWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1p
dGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIENvbG9yIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE51bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IGNy
ZWF0ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51bWJlclR5cGUgbnVtYmVy
KQpAQCAtNDYsMTUgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENT
U09NUkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKLSAgICAgICAgOiBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBw
ZXIob3duZXIsIGNvbG9yLnJlZCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIGNvbG9yLmdyZWVuKCkpKQotICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93
bmVyLCBjb2xvci5ibHVlKCkpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQorICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSkKKyAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVy
LCBtX2NvbG9yLnJlZENvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBw
ZXIob3duZXIsIG1fY29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBt
X2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0
KCkpKQogICAgIHsKICAgICB9CiAKLSAgICBDb2xvciBtX2NvbG9yOworICAgIFNpbXBsZUNvbG9y
IG1fY29sb3I7CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX3JlZDsK
ICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fZ3JlZW47CiAgICAgUmVm
PERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAko
cmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBTdHJp
bmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5
ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFu
Y2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBp
bXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFs
dWU7Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCksIHdpbmRvd0NvbG9yLmdy
ZWVuKCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1
KSksIGltcG9ydGFudCk7CisgICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNT
UyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgd2luZG93Q29sb3IuY29sb3JXaXRoQWxwaGEo
b3BhY2l0eSksIGltcG9ydGFudCk7CiAKICAgICBpZiAoIW9wYWNpdHkpCiAgICAgICAgIHJldHVy
biB3aW5kb3dTdHlsZTsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFy
YW5jZUdldEJhY2tncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
JmJlaGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50ID0gYmVo
YXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIHJldHVy
biBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBDb2xvcihiYWNr
Z3JvdW5kQ29sb3IucmVkKCksIGJhY2tncm91bmRDb2xvci5ncmVlbigpLCBiYWNrZ3JvdW5kQ29s
b3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwgaW1wb3J0YW50KTsK
KyAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwg
YmFja2dyb3VuZENvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpLCBpbXBvcnRhbnQpOwogfQog
CiBDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3Io
Ym9vbCYgaW1wb3J0YW50KSBjb25zdApAQCAtMzE3LDcgKzMxNyw3IEBAIENvbG9yIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXAKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRp
b25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRh
bnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0g
ICAgcmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4dENvbG9yLmdyZWVuKCksIHRleHRD
b2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpOworICAgIHJldHVy
biB0ZXh0Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9CiAgICAgCiBTdHJpbmcgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEyICsxODAsMTIgQEAgaW50IGRpZmZlcmVuY2VTcXVh
cmVkKGNvbnN0IENvbG9yJiBjMSwgYwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSByZXR1cm4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55IG9mIHRoZSBjYWxsCiAg
ICAgLy8gc2l0ZXMgaGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMgYmFzZWQgb24gZmVlbC4g
V2UnZCBuZWVkIHRvIGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0aG0gdGFibGVzIHRvIGNo
YW5nZSB0aGVtIDopCi0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRl
bmRlZCgpLnJlZCgpICogMjU1IDogYzEucmVkKCk7Ci0gICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4
dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLmdyZWVuKCk7Ci0g
ICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkg
KiAyNTUgOiBjMS5ibHVlKCk7Ci0gICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIu
YXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmVkKCk7Ci0gICAgaW50IGMyR3JlZW4gPSBj
Mi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLmdyZWVu
KCk7Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5i
bHVlKCkgKiAyNTUgOiBjMi5ibHVlKCk7CisgICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgp
ID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEucmdiKCkucmVkQ29tcG9uZW50KCk7
CisgICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKSAqIDI1NSA6IGMxLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMxQmx1ZSA9
IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5yZ2Io
KS5ibHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIu
YXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmdiKCkucmVkQ29tcG9uZW50KCk7CisgICAg
aW50IGMyR3JlZW4gPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAq
IDI1NSA6IGMyLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlz
RXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5yZ2IoKS5ibHVl
Q29tcG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFSZWQgLSBjMlJlZDsKICAgICBpbnQgZEcgPSBj
MUdyZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIgPSBjMUJsdWUgLSBjMkJsdWU7CkBAIC0yNTAs
MTIgKzI1MCwxNiBAQCBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKIH0KIAogQ29sb3I6OkNv
bG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBj
MywgYWxwaGEsIGNvbG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29sb3IoUmVmPEV4dGVuZGVk
Q29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBp
biBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCiAgICAgLy8gdG9wIDMyIGJp
dHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCiAgICAgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKLSAgICBhdXRvIGV4dGVuZGVkQ29sb3JSZWYgPSBF
eHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvclJlZi5sZWFrUmVmKCk7
CisgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yLmxlYWtSZWYo
KTsKICAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKIH0KIApAQCAtMzYzLDE3ICszNjcsMTcgQEAg
Q29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKSB7Ci0gICAgICAgIC8vIExpZ2h0ZW5lZCBi
bGFjayB3aXRoIGFscGhhLgotICAgICAgICByZXR1cm4gQ29sb3IoMHg1NCwgMHg1NCwgMHg1NCwg
YWxwaGEoKSk7Ci0gICAgfQorICAgIGlmICh2ID09IDAuMGYpCisgICAgICAgIHJldHVybiBsaWdo
dGVuZWRCbGFjay5jb2xvcldpdGhBbHBoYShhbHBoYSgpKTsKIAogICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIAotICAgIHJldHVybiBDb2xvcihz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAot
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVG
YWN0b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBhbHBoYSgpCisgICAgfTsKIH0KIAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdApAQCAtMzg5
LDEwICszOTMsMTIgQEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIGZsb2F0IHYgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAu
MGYsICh2IC0gMC4zM2YpIC8gdik7CiAKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50
PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAg
ICAgICAgICAgICAgYWxwaGEoKSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQorICAg
IH07CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC00MDksMTkgKzQxNSw2IEBA
IGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpsaWdo
dG5lc3ModG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIH0KIAotc3RhdGljIGludCBibGVuZENv
bXBvbmVudChpbnQgYywgaW50IGEpCi17Ci0gICAgLy8gV2UgdXNlIHdoaXRlLgotICAgIGZsb2F0
IGFscGhhID0gYSAvIDI1NS4wZjsKLSAgICBpbnQgd2hpdGVCbGVuZCA9IDI1NSAtIGE7Ci0gICAg
YyAtPSB3aGl0ZUJsZW5kOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7
Ci19Ci0KLWNvbnN0IGludCBjU3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCi1jb25zdCBpbnQgY0Vu
ZEFscGhhID0gMjA0OyAvLyA4MCU7Ci1jb25zdCBpbnQgY0FscGhhSW5jcmVtZW50ID0gMTc7IC8v
IEluY3JlbWVudHMgaW4gYmV0d2Vlbi4KLQogQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9y
JiBzb3VyY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1Zpc2libGUoKSB8fCBzb3VyY2UuaXNPcGFx
dWUoKSkKQEAgLTQzMCwzNyArNDIzLDU1IEBAIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xv
ciYgc291cmNlKSAKICAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAKLSAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxw
aGEoKSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGF1dG8gW3NlbGZSLCBzZWxmRywgc2VsZkIsIHNl
bGZBXSA9IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbc291cmNlUiwgc291
cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKworICAgIGludCBkID0gMjU1ICogKHNlbGZBICsgc291cmNlQSkgLSBzZWxmQSAqIHNvdXJj
ZUE7CiAgICAgaW50IGEgPSBkIC8gMjU1OwotICAgIGludCByID0gKHJlZCgpICogYWxwaGEoKSAq
ICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5y
ZWQoKSkgLyBkOwotICAgIGludCBnID0gKGdyZWVuKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJj
ZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmdyZWVuKCkpIC8gZDsK
LSAgICBpbnQgYiA9IChibHVlKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5hbHBoYSgpKSAr
IDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmJsdWUoKSkgLyBkOwotICAgIHJldHVybiBD
b2xvcihyLCBnLCBiLCBhKTsKKyAgICBpbnQgciA9IChzZWxmUiAqIHNlbGZBICogKDI1NSAtIHNv
dXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZVIpIC8gZDsKKyAgICBpbnQgZyA9IChzZWxm
RyAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZUcpIC8g
ZDsKKyAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICog
c291cmNlQSAqIHNvdXJjZUIpIC8gZDsKKworICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCBh
KTsKIH0KIAogQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKIHsKKyAgICBjb25z
dGV4cHIgaW50IHN0YXJ0QWxwaGEgPSAxNTM7IC8vIDYwJQorICAgIGNvbnN0ZXhwciBpbnQgZW5k
QWxwaGEgPSAyMDQ7IC8vIDgwJTsKKyAgICBjb25zdGV4cHIgaW50IGFscGhhSW5jcmVtZW50ID0g
MTc7CisKKyAgICBhdXRvIGJsZW5kQ29tcG9uZW50ID0gW10oaW50IGMsIGludCBhKSAtPiBpbnQg
eworICAgICAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7CisgICAgICAgIGludCB3aGl0ZUJs
ZW5kID0gMjU1IC0gYTsKKyAgICAgICAgYyAtPSB3aGl0ZUJsZW5kOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworICAgIH07CisKICAgICAvLyBJZiB0aGUgY29s
b3IgY29udGFpbnMgYWxwaGEgYWxyZWFkeSwgd2UgbGVhdmUgaXQgYWxvbmUuCiAgICAgaWYgKCFp
c09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBDb2xvciBuZXdDb2xvcjsK
LSAgICBmb3IgKGludCBhbHBoYSA9IGNTdGFydEFscGhhOyBhbHBoYSA8PSBjRW5kQWxwaGE7IGFs
cGhhICs9IGNBbHBoYUluY3JlbWVudCkgeworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdH
LCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsK
KworICAgIENvbG9yIHJlc3VsdDsKKyAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFs
cGhhIDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkgewogICAgICAgICAvLyBX
ZSBoYXZlIGEgc29saWQgY29sb3IuICBDb252ZXJ0IHRvIGFuIGVxdWl2YWxlbnQgY29sb3IgdGhh
dCBsb29rcyB0aGUgc2FtZSB3aGVuIGJsZW5kZWQgd2l0aCB3aGl0ZQogICAgICAgICAvLyBhdCB0
aGUgY3VycmVudCBhbHBoYS4gIFRyeSB1c2luZyBsZXNzIHRyYW5zcGFyZW5jeSBpZiB0aGUgbnVt
YmVycyBlbmQgdXAgYmVpbmcgbmVnYXRpdmUuCi0gICAgICAgIGludCByID0gYmxlbmRDb21wb25l
bnQocmVkKCksIGFscGhhKTsKLSAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChncmVlbigp
LCBhbHBoYSk7Ci0gICAgICAgIGludCBiID0gYmxlbmRDb21wb25lbnQoYmx1ZSgpLCBhbHBoYSk7
CisgICAgICAgIGludCByID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdSLCBhbHBoYSk7CisgICAg
ICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdHLCBhbHBoYSk7CisgICAgICAgIGlu
dCBiID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdCLCBhbHBoYSk7CiAgICAgICAgIAotICAgICAg
ICBuZXdDb2xvciA9IENvbG9yKHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFr
ZVJHQkEociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYm
IGIgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBXaHkg
aXMgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVy
ZT8KICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICBuZXdDb2xvci5zZXRJc1NlbWFudGlj
KCk7Ci0gICAgcmV0dXJuIG5ld0NvbG9yOworICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0CkBAIC00NzcsMTMgKzQ4OCwxNSBAQCBDb2xv
ciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVCiAKIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQot
ICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwg
bV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRD
b2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFj
ZSgpIH07CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENv
bG9yID0gYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9y
LnJlZCgpLCBleHRlbmRlZENvbG9yLmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBo
YSwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkgfTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTog
VGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsK
KyAgICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAyNTU7CiAKLSAgICBDb2xvciByZXN1bHQg
PSB7IHJlZCgpLCBncmVlbigpLCBibHVlKCksIG5ld0FscGhhIH07CisgICAgQ29sb3IgcmVzdWx0
ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkp
CiAgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTQ5MSwxNSArNTA0LDM3IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBo
YSkKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJl
dHVybiBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2NvbG9yRGF0
YS5leHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5ibHVl
KCksIGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkgfTsKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4
dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVkKCksIGV4
dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBleHRlbmRl
ZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdo
ZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcKKyAgICB1
aW50OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpOwogCi0gICAgQ29s
b3IgcmVzdWx0ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CisgICAgQ29sb3IgcmVzdWx0ID0g
cmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAg
ICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
Q29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7
CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgYXNFeHRlbmRl
ZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpIH07CisKKyAgICBhdXRvIFtyLCBnLCBi
LCBleGlzdGluZ0FscGhhXSA9IHJnYigpOworICAgIHJldHVybiB7IDB4ZmYgLSByLCAweGZmIC0g
ZywgMHhmZiAtIGIsIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGFscGhhKSB9OworfQorCitDb2xvciBD
b2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworCisgICAgcmV0dXJuIHsgdG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKSwgU2VtYW50aWMgfTsKK30KKwogc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9u
ZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKSB7CkBAIC01MDcsNyArNTQyLDggQEAgc3RkOjpwYWlyPENvbG9yU3BhY2Us
IEZsb2F0Q29tcG9uZW50cz4gQwogICAgICAgICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9y
U3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07CiAgICAgfQogCi0gICAgcmV0dXJu
IHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdy
ZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9Owor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6
U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4w
ZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoK
ICAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQogCisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9u
ZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBv
bmVudCgpKSAvIDB4RkY7IH0KKwogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3Qg
eyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQogCkBAIC03Niw2
ICs3OCwyMiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25z
dDsKICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsK
IAorICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhh
KSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9
OyB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50OF90
IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAgICAg
ICAgaWYgY29uc3RleHByICghTikKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBn
cmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0Ig
YW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGlu
dGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlz
aWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBv
bmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBv
bmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2Io
KS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsK
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
YmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNv
bnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7
CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZy
aWVuZCBXRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3Im
KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1Ymxp
YzoKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3Qg
Q29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNx
dWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNC
bGFja0NvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNv
bnN0IENvbG9yJik7CiAKQEAgLTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwog
CiBwcml2YXRlOgorICAgIFJHQkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQg
ciwgaW50IGcsIGludCBiKSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQg
c2V0UkdCKFJHQkEzMik7CiAgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwx
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQorCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4geworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNCArNjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcs
IHJlZCgpLCAnICcsIGdyZWVuKCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsK
IH0KIAorUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3Rp
bmdBbHBoYV0gPSBjaGFubmVscygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUo
MS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBA
QCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owog
CisgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBm
bG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBt
X2NoYW5uZWxzKGMxLCBjMiwgYzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSks
IEAodmFsdWUuYmx1ZSgpKSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29s
b3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxD
QUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Aoc2lt
cGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkp
LCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21w
b25lbnQoKSldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21W
YWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCkKQEAgLTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0VG9WYWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSks
IEAodmFsdWUuYmx1ZSgpKSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29s
b3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxD
QUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHNpbXBs
ZUNvbG9yLnJlZENvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpKSwg
QChzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmFscGhhQ29tcG9u
ZW50KCkpXV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVl
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9w
ZXJ0eUluZGV4KQpAQCAtNDk0LDcgKzQ5Niw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpzZXRWYWx1ZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5
ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJy
YXkodmFsdWUsIFtdIChhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1cm4gQFtAKGNvbG9yLnJl
ZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkp
XTsKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CisgICAgICAgIHJldHVybiBAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBA
KHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25l
bnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldOwogICAgIH0pLmdldCgpXTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24g
MjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDggQEAg
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHRmxvYXQgYVs0XSA9
IHsgdmFsdWUucmVkKCksIHZhbHVlLmdyZWVuKCksIHZhbHVlLmJsdWUoKSwgdmFsdWUuYWxwaGEo
KSB9OworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOworICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNp
bXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwg
c2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9y
UmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0
aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOCw3
ICs0MTksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dG
bG9hdCBhWzRdID0geyB2YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1ZSgpLCB2
YWx1ZS5hbHBoYSgpIH07CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21w
b25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNv
bXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0YWluUHRy
PENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAg
IENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0K
QEAgLTQ4Nyw3ICs0ODksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVl
cyhjCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJh
eUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgQ0dGbG9hdCBhWzRdID0geyB2YWx1ZVtpXS5yZWQoKSwgdmFsdWVbaV0u
Z3JlZW4oKSwgdmFsdWVbaV0uYmx1ZSgpLCB2YWx1ZVtpXS5hbHBoYSgpIH07CisgICAgICAgIGF1
dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAg
ICAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVD
b2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBs
ZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JS
ZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9i
YWxBbHBoYSA8IDEpCi0gICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xv
ci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhjb2xvci5hbHBoYSgpIC8g
MjU1LmYgKiBnbG9iYWxBbHBoYSkpOworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xv
cihjciwgY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoZ2xvYmFsQWxwaGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNl
UkdCQUZyb21Db2xvcihjciwgY29sb3IpOwogICAgIH0KQEAgLTExMjEsNyArMTEyMSw3IEBAIHZv
aWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYKICAgICAvLyBzbyBhcyB0byBi
ZSBjb25zaXN0ZW50IHdpdGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCiAK
ICAgICAvLyBGb3JjZSB0aGUgYWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFj
IGRvZXMgd2l0aCBvdXRsaW5lIHJpbmdzLgotICAgIENvbG9yIHJpbmdDb2xvciA9IG1ha2VSR0JB
KGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CisgICAgQ29s
b3IgcmluZ0NvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGEoLjUpOwogCiAgICAgY2Fpcm9fdCog
Y3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05F
T04uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVu
dHMuCiAgICAgZmxvYXRBcmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgZmxvYXRBcmd1bWVu
dHMuY29sb3JSZWQgPSBtX2xpZ2h0aW5nQ29sb3IucmVkKCk7Ci0gICAgZmxvYXRBcmd1bWVudHMu
Y29sb3JHcmVlbiA9IG1fbGlnaHRpbmdDb2xvci5ncmVlbigpOwotICAgIGZsb2F0QXJndW1lbnRz
LmNvbG9yQmx1ZSA9IG1fbGlnaHRpbmdDb2xvci5ibHVlKCk7CisgICAgYXV0byBzaW1wbGVDb2xv
ciA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgZmxv
YXRBcmd1bWVudHMuY29sb3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBm
bG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKTsK
KyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50
KCk7CiAgICAgZmxvYXRBcmd1bWVudHMucGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRT
b3VyY2UtPnR5cGUoKSA9PSBMU19QT0lOVCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJ
KHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNyArNjg2LDgg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZ2xDbGVh
ckNvbG9yKGNvbG9yLnJlZCgpIC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xv
ci5ibHVlKCkgLyAyNTUuMGYsIGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGdsQ2xlYXJD
b2xvcihyLCBnLCBiLCBhKTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmCiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZl
cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBp
eGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7
CiAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsK
LSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dD
b2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBm
aWxsQ29sb3IuYWxwaGEoKSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9
IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYSgp
KTsKICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQu
d2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3Jtcywg
dGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93
biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgPyAtMSA6IDEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVh
ZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRp
YWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAg
ICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAg
IENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3Jl
ZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICogZmlsbENvbG9y
LmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dD
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGEoKSk7CiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKICAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsK
ICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBo
YXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdh
dGl2ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fz
Y2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24KICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mg
b3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Np
bmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJT
aGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxD
b2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCks
IHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxw
aGEoKSAqIGZpbGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKKyAgICAgICAgQ29sb3Igc2hhZG93Rmls
bENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9y
LmFscGhhKCkpOwogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRv
d09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFu
c2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0
LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50
LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBA
QCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgLy8gSWYgdGhl
IHRleHQgY29sb3IgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0aW9uIGJhY2tn
cm91bmQsIGludmVydCB0aGUgc2VsZWN0aW9uCiAgICAgLy8gYmFja2dyb3VuZC4KICAgICBpZiAo
dGV4dENvbG9yID09IGMpCi0gICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwgMHhmZiAt
IGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKKyAgICAgICAgYyA9IGMuaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYSgxLjApOwogCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJv
b3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZp
c2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBhdXRvIElubGluZVRleHRCb3g6
OnJlc29sdmVTdHlsZUZvck1hcmtlCiAgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91bmRD
b2xvciA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIHN0
eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKICAgICAgICAg
aWYgKHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yLmFscGhhKCkgJiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0gc2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0g
eyAweGZmIC0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLnJlZCgpLCAweGZmIC0gc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLmdyZWVuKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Iu
Ymx1ZSgpIH07CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6IHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hhZG93Q29s
b3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgMjU1KTsK
KyAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNvbG9yKCk7
CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0Nhc3RpbmdSZWN0ID0gYXJlYUNhc3RpbmdTaGFkb3dJ
bkhvbGUoYm9yZGVyUmVjdC5yZWN0KCksIHNoYWRvd1BhaW50aW5nRXh0ZW50LCBzaGFkb3dTcHJl
YWQsIHNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHBpeGVsU25hcHBlZE91dGVyUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoc2hhZG93Q2FzdGluZ1JlY3QsIGRldmljZVNjYWxl
RmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBDb2xvciBS
ZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRvIGl0ID0g
Z2xvYmFsQ1NTVmFsdWVUb1N5c3RlbUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7IGNzc1Zh
bHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCB9
KTsKICAgICAgICAgICAgIGlmIChpdCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAo
KS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9y
KGNzc1ZhbHVlSUQsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0LT52YWx1
ZS5yZ2IoKSwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUu
c2VtYW50aWNDb2xvcigpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBzeXN0ZW1D
b2xvckZyb21DU1NWYWx1ZUlEKGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2
YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlv
bkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDE1IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVuc2lnbmVk
IHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAgICBDb2xvciBmcm9t
ID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQgOiBtX2Zy
b207CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUg
PT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0g
dG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAgICAgICAK
LSAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IGZyb20ucmVkKCksIG1fdG8ucmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkucmVkKCksIGFuaW1h
dGVkLnJlZCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNz
LCByZXBlYXRDb3VudCwgZnJvbS5ncmVlbigpLCBtX3RvLmdyZWVuKCksIHRvQXRFbmRPZkR1cmF0
aW9uKCkuZ3JlZW4oKSwgYW5pbWF0ZWQuZ3JlZW4oKSk7Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ibHVlKCksIG1fdG8uYmx1
ZSgpLCB0b0F0RW5kT2ZEdXJhdGlvbigpLmJsdWUoKSwgYW5pbWF0ZWQuYmx1ZSgpKTsKLSAgICAg
ICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJv
bS5hbHBoYSgpLCBtX3RvLmFscGhhKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYWxwaGEoKSwgYW5p
bWF0ZWQuYWxwaGEoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jl
c3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUby5yZWRD
b21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCksIHNpbXBs
ZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjph
bmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgp
LCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVl
bkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKKyAgICAgICAg
ZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVG
cm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0
RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25l
bnQoKSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVw
ZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21w
b25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxl
QW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBhbmltYXRlZCA9
IHsgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChhbHBoYSkgfTsKICAgICB9CkBAIC05OSwyMCArMTAyLDI4IEBAIHB1Ymxp
YzoKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0by5zdHJp
cFdoaXRlU3BhY2UoKSk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICBmbG9hdCByZWQgPSBmcm9tQ29sb3IucmVkKCkgLSB0
b0NvbG9yLnJlZCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IGZyb21Db2xvci5ncmVlbigpIC0g
dG9Db2xvci5ncmVlbigpOwotICAgICAgICBmbG9hdCBibHVlID0gZnJvbUNvbG9yLmJsdWUoKSAt
IHRvQ29sb3IuYmx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9
IGZyb21Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBs
ZVRvID0gdG9Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgICAgIGZsb2F0
IHJlZCA9IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21wb25lbnQo
KTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkgLSBz
aW1wbGVUby5ncmVlbkNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJv
bS5ibHVlQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisKICAgICAgICAg
cmV0dXJuIHN0ZDo6aHlwb3QocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQogCiBwcml2YXRlOgog
ICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQogICAgIHsK
KyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisKICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVz
dWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBtX3RvID0gewotICAgICAgICAgICAgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLnJlZCgpICsgbV9mcm9tLnJlZCgpKSwKLSAgICAgICAg
ICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwobV90by5ncmVlbigpICsgbV9mcm9tLmdyZWVu
KCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLmJsdWUoKSAr
IG1fZnJvbS5ibHVlKCkpCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNp
bXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSksCisgICAg
ICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50
KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAorICAgICAgICAgICAgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmJs
dWVDb21wb25lbnQoKSkKICAgICAgICAgfTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDIwLTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBh
Y2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdl
YktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisgICAgICAgIFVzZSB0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4K
KwogMjAyMC0wNS0yMyAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgRXJyb3Igc2VuZGluZyBJUEMgbWVzc2FnZTogQnJva2VuIHBpcGUKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCShyZXZp
c2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NjkzLDggKzY5Myw4IEBAIHN0YXRpYyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnIK
ICAgICAgICAgcmV0dXJuIEAoa2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6
Q29sb3JLZXlUeXBlOiB7Ci0gICAgICAgIENvbG9yIGNvbG9yID0ga2V5ZnJhbWVWYWx1ZS5jb2xv
clZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBAWyBAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVl
bigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpIF07CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKKyAgICAgICAgcmV0dXJuIEBbIEAociksIEAoZyksIEAoYiksIEAoYSkgXTsK
ICAgICB9CiAKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFs
dWU6OlBvaW50S2V5VHlwZTogewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMjMgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IFN0b3Ag
YWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBTaW1wbGVDb2xvciAoaXQg
aXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRvIGV4dGVuZGVkIGNvbG9y
cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRv
IGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKwogMjAyMC0wNS0yMiAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgZG93bmxv
YWQgcmVzdW1lIHdvcmthcm91bmQgZm9yZ2l2aW5nIG9mIGNoYW5nZXMgaW4gQ0ZOZXR3b3JrCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwyNiArMTgyLDI5IEBAIFRF
U1QoQ29sb3IsIFZhbGlkaXR5KQogICAgIHZhbGlkQ29sb3IgPSBDb2xvcigxLCAyLCAzLCA0KTsK
ICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5yZWQo
KSwgMSk7Ci0gICAgRVhQRUNUX0VRKHZhbGlkQ29sb3IuZ3JlZW4oKSwgMik7Ci0gICAgRVhQRUNU
X0VRKHZhbGlkQ29sb3IuYmx1ZSgpLCAzKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5hbHBo
YSgpLCA0KTsKKyAgICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IucmVkQ29t
cG9uZW50KCksIDEpOworICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmdyZWVuQ29tcG9u
ZW50KCksIDIpOworICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmJsdWVDb21wb25lbnQo
KSwgMyk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwg
NCk7CiAKICAgICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3Ip
KTsKICAgICBFWFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAg
IEVYUEVDVF9GQUxTRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIEVY
UEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvci5yZWQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHll
dEFub3RoZXJWYWxpZENvbG9yLmdyZWVuKCksIDIpOwotICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVy
VmFsaWRDb2xvci5ibHVlKCksIDMpOwotICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xv
ci5hbHBoYSgpLCA0KTsKKyAgICBhdXRvIHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yID0geWV0
QW5vdGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBFWFBFQ1Rf
RVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOworICAgIEVY
UEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsK
KyAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgp
LCAzKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGFDb21w
b25lbnQoKSwgNCk7CiAKICAgICBvdGhlclZhbGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJW
YWxpZENvbG9yKTsKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgRVhQ
RUNUX0VRKG90aGVyVmFsaWRDb2xvci5yZWQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKG90aGVyVmFs
aWRDb2xvci5ncmVlbigpLCAyKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLmJsdWUo
KSwgMyk7Ci0gICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvci5hbHBoYSgpLCA0KTsKKyAgICBh
dXRvIHNpbXBsZU90aGVyVmFsaWRDb2xvciA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOworICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IucmVkQ29t
cG9uZW50KCksIDEpOworICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgMik7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ibHVl
Q29tcG9uZW50KCksIDMpOworICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYWxw
aGFDb21wb25lbnQoKSwgNCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA1LTIwICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIENvbG9yOjpnZXRIU0woKSB3aXRoIHNSR0JU
b0hTTCB0byBlbnN1cmUgaXQgYXQgbGVhc3QgZ2l2ZXMgc29tZXdoYXQgc2Vuc2libGUgcmVzdWx0
cyBmb3IgRXh0ZW5kZWRDb2xvcnMgYW5kIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxNDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVi
b2FyZC9wYXN0ZS1kYXJrLW1vZGUtY29sb3ItZmlsdGVyZWQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1kYXJrLW1vZGUtY29sb3ItZmlsdGVyZWQuaHRt
bDoKKyAgICAgICAgVXBkYXRlIHRlc3QgdG8gaW5jbHVkZSBhIHRlc3QgY2FzZSB0aGF0IHVzZXMg
ZXh0ZW5kZWQgY29sb3JzLgorCiAyMDIwLTA1LTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBUYWtlIHJvdyBib3JkZXIgaW50byBhY2NvdW50
IHdoZW4gY29tcHV0aW5nIGNvbGxhcHNlZCBib3JkZXJzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400144</attachid>
            <date>2020-05-23 17:21:19 -0700</date>
            <delta_ts>2020-05-23 20:31:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523172118.patch</filename>
            <type>text/plain</type>
            <size>52380</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0yMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogU3RvcCBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNv
bG9yIChpdCBpcyBhbG1vc3QgYWx3YXlzIGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5k
ZWQgY29sb3JzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSBNYWtlcyBDb2xvcjo6cmdiKCkgcHJpdmF0ZSwgcmVtb3ZpbmcgYSBjbGFzcyBvZiBleHRl
bmRlZCBjb2xvciBidWdzIGZyb20gdXNlcnMgCisgICAgICAgICAgb2YgdGhlIENvbG9yIGNsYXNz
LiBUbyBnZXQgdGhlIGVxdWl2aWxlbnQgZnVuY3Rpb25hbGl0eSwgdXNlcnMgb2YgdGhlIGNsYXNz
IG11c3QKKyAgICAgICAgICBub3cgdXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgd2hpY2gg
ZG9lcyBhY3R1YWxseSBkb2VzIHRoZSBjb252ZXJzaW9uIHRvIHNSR0IKKyAgICAgICAgICBpZiBu
ZWNlc3NhcnkgYW5kIG1ha2VzIGl0IGNsZWFyIHRvIHRoZSBjYWxsZXIgdGhhdCBwcmVjaXNpb24g
aXMgYmVpbmcgbG9zdC4gCisgICAgICAgIC0gUmVtb3ZlcyBDb2xvcjo6cmVkKCkvZ3JlZW4oKS9i
bHVlKCkgZW50aXJlbHkuIFRoZXkgd2VyZSBqdXN0IGNhbGxpbmcgZG93biB0byAKKyAgICAgICAg
ICBDb2xvcjo6cmdiKCksIGFuZCBnb2luZyBmb3J3YXJkLCBpdCB3b24ndCBtYWtlIHNlbnNlIHRv
IHRoaW5rIGFib3V0IHJnYiBjb21wb25lbnRzCisgICAgICAgICAgb2YgQ29sb3JzIGluIGdlbmVy
YWwsIHNpbmNlIHNvbWUgZXh0ZW5kZWQgY29sb3Igc3BhY2VzIGRvbid0IGRlYWwgaW4gdGhlbSAo
ZS5nLiBMYWIpCisgICAgICAgICAgQ29sb3I6OmFscGhhKCkgd2FzIGtlcHQgKGFuZCBmaXhlZCB0
byB3b3JrIGV2ZW4gd2l0aCBFeHRlbmRlZENvbG9yKSBzaW5jZSBhbGwKKyAgICAgICAgICBFeHRl
bmRlZENvbG9ycyBkbyBuZWVkIHRvIGhhdmUgYWxwaGEuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgVXNlIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6
CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8g
Y29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVj
dDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIGNzcy9E
ZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSB0byBnZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBw
YWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1dpbmRvd0NTUyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
bnNCYWNrZ3JvdW5kQ1NTIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6CisgICAgICAgIFVzZXIg
Q29sb3I6OmNvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgdGhlIG5lZWQgdG8gbXVjayB3aXRoIGNv
bXBvbmVudHMgZGlyZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaWZmZXJlbmNlU3F1YXJlZCk6CisgICAgICAgIFVzZSBy
Z2IoKSBkaXJlY3RseSwgd2hpY2ggaXMgb2ssIHNpbmNlIHRoaXMgaXMgZXhwbGljaXRseSBjaGVj
a2luZyBpc0V4dGVuZGVkKCkuCisgICAgICAgIFRoaXMgY29kZSBpcyBzdGlsbCB3cm9uZyAodGhl
cmUgaXMgYSBGSVhNRSkgYXMgaXQgYXNzdW1lcyB0aGUgdHdvIGNvbG9ycyBhcmUgaW4KKyAgICAg
ICAgdGhlIHNhbWUgY29sb3Igc3BhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xv
cik6CisgICAgICAgIEFkZCBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBhbiBFeHRlbmRlZENvbG9y
IHRvIGFsbG93IGZ1bmN0aW9ucyBsaWtlIAorICAgICAgICBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYSB0byBkZWxlZ2F0ZSB0aGVpciBmdW5jdGlvbmFsaXR5IHRvIEV4dGVuZGVkQ29sb3Iu
CisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAg
ICAgVXNlIG5ldyBTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEoKSB0byBhdm9pZCBoYXJkY29k
aW5nIGNvbnN0YW50cyBoZXJlLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xv
ciBjb21wb25lbnRzLiBUaGVzZQorICAgICAgICBhcmUgc3RpbGwgbm90IGlkZWFsIGltcGxlbWVu
dGF0aW9ucywgYXMgdGhleSBkb24ndCBwcmVzZXJ2ZSBleHRlbmRlZCBjb2xvcnMKKyAgICAgICAg
YXMgd2VsbCBhcyB0aGV5IGNvdWxkLCBidXQgbm93IHRoZXkgZG9uJ3QgcmV0dXJuIGJvZ3VzIHZh
bHVlcyBmb3IgZXh0ZW5kZWQKKyAgICAgICAgY29sb3JzLiBNaW5vciBjbGVhbnVwIGJyaW5naW5n
IGNvbnN0YW50cyBhbmQgbGFtYmRhIGluc2lkZSB0aGUgZnVuY3Rpb24gdGhleQorICAgICAgICBh
cmUgdXNlZCBpbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRo
QWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgTWlub3IgY2xlYW51cHMgdG8g
dXNlIGEgbW9yZSBjb25zaXN0ZW50IHN0eWxlIGFuZCBtYWtlIHVzZSBvZiB0aGUgbmV3CisgICAg
ICAgIFNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIEFkZGVk
LiBVc2VkIHRvIGF2b2lkIGRpcmVjdCBjb21wb25lbnQgdXNhZ2UgaW4gbGluZSBib3ggY29kZS4K
KworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlbWFudGljQ29sb3IgY29uc3QpOgorICAgICAg
ICBBZGRlZC4gSG9wZWZ1bGx5IHRlbXBvcmFyeS4gVXNlZCBieSBSZW5kZXJUaGVtZUlPUy5tbSB0
byBjb252ZXJ0CisgICAgICAgIGEgQ29sb3IgZnJvbSBhIG1hcCBpbnRvIGEgQ29sb3Igd2l0aCB0
aGUgc2VtYW50aWMgYml0IHNldC4gVGhpcyAKKyAgICAgICAgc2hvdWxkIG5vdCBiZSBuZWNlc3Nh
cnkgYXMgZXZlcnkgY29sb3IgaW4gdGhlIG1hcCBzaG91bGQgYWxyZWFkeQorICAgICAgICBoYXZl
IGl0IHNldCwgYnV0IHRvIGF2b2lkIHVuY2Vzc2FyeSBwb3NzaWJsZSBiZWhhdmlvciBjaGFuZ2Vz
IHRoaXMKKyAgICAgICAgcHJlc2VydmVzIHRoYXQgZnVuY3Rpb25hbGl0eSB1bnRpbCBpdCBjYW4g
YmUgcmVzZWFyY2hlZCBmdXJ0aGVyLgorICAgICAgICBGaXhpbmcgY29kZXJzIHRvIHByZXNlcnZl
IHRoZSBzZW1hbnRpYyBiaXQgbWF5IGJlIHJlcXVpcmVkIHRvIAorICAgICAgICBlbGxpbWluYXRl
IHRoZSBuZWVkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNl
QW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIFVzZSByZ2IoKSByYXRoZXIgdGhhbiB0aGUg
aW5kaXZpZHVhbCBjb21wb25lbnRzIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgICAK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIEFkZGVk
LiBOZWVkZWQgYnkgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgYW5kIHVzZWZ1bCB0byBDb2xvci4K
KworICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToK
KyAgICAgICAgVXNlZnVsIHRvIHNpbXBsaWZ5IENvbG9yOjpjb2xvcldpdGhBbHBoYSBpbXBsZW1l
bnRhdGlvbnMgYW5kCisgICAgICAgIGluIENvbG9yOjpkYXJrKCkuCisKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAgICBBZGRlZCB0dXBsZSBpbnRlcmZh
Y2UgdG8gU2ltcGxlQ29sb3IgdG8gc3VwcG9ydCBzdHJ1Y3R1cmUgYmluZGluZ3MuCisgICAgICAg
IE5PVEU6IFVubGlrZSB0aGUgc3RvcmFnZSBvZiBTaW1wbGVDb2xvciAoQVJHQiksIHRoaXMgcHJv
ZHVjZXMgdGhlCisgICAgICAgIGJpbmRpbmdzIGluIHRoZSBtb3JlIGZhbWlsaWFyIFtyLGcsYixh
XSB0byBtYXRjaCBGbG9hdENvbXBvbmVudHMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgTWFkZSB3b3JrIHdpdGggRXh0ZW5kZWRDb2xv
ciBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpyZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmdyZWVuIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgUmVtb3ZlZC4KKworICAgICAgICAoQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKTogCisgICAg
ICAgIChpbnQgZGlmZmVyZW5jZVNxdWFyZWQpOiAKKyAgICAgICAgTWFkZSBmcmllbmRzIHNvIHRo
ZXkgY291bGQgdXNlIENvbG9yOjpyZ2IoKS4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJn
YiBjb25zdCk6IAorICAgICAgICBNYWRlIHByaXZhdGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29s
b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgQWRkZWQgaW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYSB0byBhbGxvdyBpbnZlcnNpb24gdG8gYmUgZW5jYXBzdWxhdGVkLgorICAgICAgICBXaGVu
IGZ1dHVyZSBjb2xvciBzcGFjZXMgYXJlIGFkZGVkLCB3ZSBtYXkgbmVlZCB0byBjaG9vc2UgcGVy
LWNvbG9yc3BhY2UKKyAgICAgICAgYWxnb3JpdGhtcyBmb3IgdGhpcyBpbnN0ZWFkIG9mIHRoZSB0
cml2aWFsIG9uZSB1c2VkIHRvZGF5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgVXNlIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAo
UGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgVXNlIHRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgVXNlIENvbG9y
Ojpjb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVudHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGlu
Z05FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9u
KToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0
byBjb2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmNsZWFyQ29sb3IpOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSB0byBn
ZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAgVXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICBVc2UgY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25lbnRzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICBVc2UgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25l
bnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIFVzZSBpbnZlcnRl
ZENvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4K
KworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQpOgorICAgICAgICBV
c2UgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNv
bXBvbmVudHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KToKKyAgICAgICAgVXNlIG9wYXF1ZUNvbG9yKCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8g
Y29tcG9uZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Db2xvciBjb25zdCk6CisgICAg
ICAgIFVzZSBvcGFxdWVDb2xvcigpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVu
dHMuCisKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8g
Z2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCiAyMDIwLTA1LTIzICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBUYWtlIHJvdyBib3Jk
ZXIgaW50byBhY2NvdW50IHdoZW4gY29tcHV0aW5nIGNvbGxhcHNlZCBib3JkZXJzLgpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYyLDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFs
dWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgp
KS52YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdy
ZWVuKCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9y
LmdyZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRp
ZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBA
QCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBi
Z0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5y
ZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5n
cmVlbigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJn
Q29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYnVmZmVyLnJlc2V0KGdf
c3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIENvbG9y
IGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
OwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBidWZmZXIucmVzZXQoZ19z
dHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwg
ZmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9w
cmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9B
VFRSX0ZHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjk4LDEwICs2OTgsMTAgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50
S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQm
IGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSk7Ci0gICAgciA9IGNvbG9yLnJlZCgpOwotICAg
IGcgPSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7CisgICAgYXV0byBjb2xv
ciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOworICAg
IGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50
KCk7CiB9CiAKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVW
YWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1p
dGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIENvbG9yIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE51bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IGNy
ZWF0ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51bWJlclR5cGUgbnVtYmVy
KQpAQCAtNDYsMTUgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENT
U09NUkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKLSAgICAgICAgOiBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBw
ZXIob3duZXIsIGNvbG9yLnJlZCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIGNvbG9yLmdyZWVuKCkpKQotICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93
bmVyLCBjb2xvci5ibHVlKCkpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQorICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSkKKyAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVy
LCBtX2NvbG9yLnJlZENvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBw
ZXIob3duZXIsIG1fY29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBt
X2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0
KCkpKQogICAgIHsKICAgICB9CiAKLSAgICBDb2xvciBtX2NvbG9yOworICAgIFNpbXBsZUNvbG9y
IG1fY29sb3I7CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX3JlZDsK
ICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fZ3JlZW47CiAgICAgUmVm
PERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAko
cmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBTdHJp
bmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5
ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFu
Y2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBp
bXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFs
dWU7Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCksIHdpbmRvd0NvbG9yLmdy
ZWVuKCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1
KSksIGltcG9ydGFudCk7CisgICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNT
UyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgd2luZG93Q29sb3IuY29sb3JXaXRoQWxwaGEo
b3BhY2l0eSksIGltcG9ydGFudCk7CiAKICAgICBpZiAoIW9wYWNpdHkpCiAgICAgICAgIHJldHVy
biB3aW5kb3dTdHlsZTsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFy
YW5jZUdldEJhY2tncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
JmJlaGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50ID0gYmVo
YXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIHJldHVy
biBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBDb2xvcihiYWNr
Z3JvdW5kQ29sb3IucmVkKCksIGJhY2tncm91bmRDb2xvci5ncmVlbigpLCBiYWNrZ3JvdW5kQ29s
b3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwgaW1wb3J0YW50KTsK
KyAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwg
YmFja2dyb3VuZENvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpLCBpbXBvcnRhbnQpOwogfQog
CiBDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3Io
Ym9vbCYgaW1wb3J0YW50KSBjb25zdApAQCAtMzE3LDcgKzMxNyw3IEBAIENvbG9yIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXAKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRp
b25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRh
bnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0g
ICAgcmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4dENvbG9yLmdyZWVuKCksIHRleHRD
b2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpOworICAgIHJldHVy
biB0ZXh0Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9CiAgICAgCiBTdHJpbmcgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEyICsxODAsMTIgQEAgaW50IGRpZmZlcmVuY2VTcXVh
cmVkKGNvbnN0IENvbG9yJiBjMSwgYwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSByZXR1cm4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55IG9mIHRoZSBjYWxsCiAg
ICAgLy8gc2l0ZXMgaGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMgYmFzZWQgb24gZmVlbC4g
V2UnZCBuZWVkIHRvIGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0aG0gdGFibGVzIHRvIGNo
YW5nZSB0aGVtIDopCi0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRl
bmRlZCgpLnJlZCgpICogMjU1IDogYzEucmVkKCk7Ci0gICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4
dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLmdyZWVuKCk7Ci0g
ICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkg
KiAyNTUgOiBjMS5ibHVlKCk7Ci0gICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIu
YXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmVkKCk7Ci0gICAgaW50IGMyR3JlZW4gPSBj
Mi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLmdyZWVu
KCk7Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5i
bHVlKCkgKiAyNTUgOiBjMi5ibHVlKCk7CisgICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgp
ID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEucmdiKCkucmVkQ29tcG9uZW50KCk7
CisgICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKSAqIDI1NSA6IGMxLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMxQmx1ZSA9
IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5yZ2Io
KS5ibHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIu
YXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmdiKCkucmVkQ29tcG9uZW50KCk7CisgICAg
aW50IGMyR3JlZW4gPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAq
IDI1NSA6IGMyLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlz
RXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5yZ2IoKS5ibHVl
Q29tcG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFSZWQgLSBjMlJlZDsKICAgICBpbnQgZEcgPSBj
MUdyZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIgPSBjMUJsdWUgLSBjMkJsdWU7CkBAIC0yNTAs
MTIgKzI1MCwxNiBAQCBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKIH0KIAogQ29sb3I6OkNv
bG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBj
MywgYWxwaGEsIGNvbG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29sb3IoUmVmPEV4dGVuZGVk
Q29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBp
biBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCiAgICAgLy8gdG9wIDMyIGJp
dHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCiAgICAgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKLSAgICBhdXRvIGV4dGVuZGVkQ29sb3JSZWYgPSBF
eHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvclJlZi5sZWFrUmVmKCk7
CisgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yLmxlYWtSZWYo
KTsKICAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKIH0KIApAQCAtMzYzLDE3ICszNjcsMTcgQEAg
Q29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKSB7Ci0gICAgICAgIC8vIExpZ2h0ZW5lZCBi
bGFjayB3aXRoIGFscGhhLgotICAgICAgICByZXR1cm4gQ29sb3IoMHg1NCwgMHg1NCwgMHg1NCwg
YWxwaGEoKSk7Ci0gICAgfQorICAgIGlmICh2ID09IDAuMGYpCisgICAgICAgIHJldHVybiBsaWdo
dGVuZWRCbGFjay5jb2xvcldpdGhBbHBoYShhbHBoYSgpKTsKIAogICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIAotICAgIHJldHVybiBDb2xvcihz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAot
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVG
YWN0b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBhbHBoYSgpCisgICAgfTsKIH0KIAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdApAQCAtMzg5
LDEwICszOTMsMTIgQEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIGZsb2F0IHYgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAu
MGYsICh2IC0gMC4zM2YpIC8gdik7CiAKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50
PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAg
ICAgICAgICAgICAgYWxwaGEoKSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQorICAg
IH07CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC00MDksMTkgKzQxNSw2IEBA
IGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpsaWdo
dG5lc3ModG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIH0KIAotc3RhdGljIGludCBibGVuZENv
bXBvbmVudChpbnQgYywgaW50IGEpCi17Ci0gICAgLy8gV2UgdXNlIHdoaXRlLgotICAgIGZsb2F0
IGFscGhhID0gYSAvIDI1NS4wZjsKLSAgICBpbnQgd2hpdGVCbGVuZCA9IDI1NSAtIGE7Ci0gICAg
YyAtPSB3aGl0ZUJsZW5kOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7
Ci19Ci0KLWNvbnN0IGludCBjU3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCi1jb25zdCBpbnQgY0Vu
ZEFscGhhID0gMjA0OyAvLyA4MCU7Ci1jb25zdCBpbnQgY0FscGhhSW5jcmVtZW50ID0gMTc7IC8v
IEluY3JlbWVudHMgaW4gYmV0d2Vlbi4KLQogQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9y
JiBzb3VyY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1Zpc2libGUoKSB8fCBzb3VyY2UuaXNPcGFx
dWUoKSkKQEAgLTQzMCwzNyArNDIzLDU1IEBAIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xv
ciYgc291cmNlKSAKICAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAKLSAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxw
aGEoKSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGF1dG8gW3NlbGZSLCBzZWxmRywgc2VsZkIsIHNl
bGZBXSA9IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbc291cmNlUiwgc291
cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKworICAgIGludCBkID0gMjU1ICogKHNlbGZBICsgc291cmNlQSkgLSBzZWxmQSAqIHNvdXJj
ZUE7CiAgICAgaW50IGEgPSBkIC8gMjU1OwotICAgIGludCByID0gKHJlZCgpICogYWxwaGEoKSAq
ICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5y
ZWQoKSkgLyBkOwotICAgIGludCBnID0gKGdyZWVuKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJj
ZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmdyZWVuKCkpIC8gZDsK
LSAgICBpbnQgYiA9IChibHVlKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5hbHBoYSgpKSAr
IDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmJsdWUoKSkgLyBkOwotICAgIHJldHVybiBD
b2xvcihyLCBnLCBiLCBhKTsKKyAgICBpbnQgciA9IChzZWxmUiAqIHNlbGZBICogKDI1NSAtIHNv
dXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZVIpIC8gZDsKKyAgICBpbnQgZyA9IChzZWxm
RyAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZUcpIC8g
ZDsKKyAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICog
c291cmNlQSAqIHNvdXJjZUIpIC8gZDsKKworICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCBh
KTsKIH0KIAogQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKIHsKKyAgICBjb25z
dGV4cHIgaW50IHN0YXJ0QWxwaGEgPSAxNTM7IC8vIDYwJQorICAgIGNvbnN0ZXhwciBpbnQgZW5k
QWxwaGEgPSAyMDQ7IC8vIDgwJTsKKyAgICBjb25zdGV4cHIgaW50IGFscGhhSW5jcmVtZW50ID0g
MTc7CisKKyAgICBhdXRvIGJsZW5kQ29tcG9uZW50ID0gW10oaW50IGMsIGludCBhKSAtPiBpbnQg
eworICAgICAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7CisgICAgICAgIGludCB3aGl0ZUJs
ZW5kID0gMjU1IC0gYTsKKyAgICAgICAgYyAtPSB3aGl0ZUJsZW5kOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworICAgIH07CisKICAgICAvLyBJZiB0aGUgY29s
b3IgY29udGFpbnMgYWxwaGEgYWxyZWFkeSwgd2UgbGVhdmUgaXQgYWxvbmUuCiAgICAgaWYgKCFp
c09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBDb2xvciBuZXdDb2xvcjsK
LSAgICBmb3IgKGludCBhbHBoYSA9IGNTdGFydEFscGhhOyBhbHBoYSA8PSBjRW5kQWxwaGE7IGFs
cGhhICs9IGNBbHBoYUluY3JlbWVudCkgeworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdH
LCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsK
KworICAgIENvbG9yIHJlc3VsdDsKKyAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFs
cGhhIDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkgewogICAgICAgICAvLyBX
ZSBoYXZlIGEgc29saWQgY29sb3IuICBDb252ZXJ0IHRvIGFuIGVxdWl2YWxlbnQgY29sb3IgdGhh
dCBsb29rcyB0aGUgc2FtZSB3aGVuIGJsZW5kZWQgd2l0aCB3aGl0ZQogICAgICAgICAvLyBhdCB0
aGUgY3VycmVudCBhbHBoYS4gIFRyeSB1c2luZyBsZXNzIHRyYW5zcGFyZW5jeSBpZiB0aGUgbnVt
YmVycyBlbmQgdXAgYmVpbmcgbmVnYXRpdmUuCi0gICAgICAgIGludCByID0gYmxlbmRDb21wb25l
bnQocmVkKCksIGFscGhhKTsKLSAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChncmVlbigp
LCBhbHBoYSk7Ci0gICAgICAgIGludCBiID0gYmxlbmRDb21wb25lbnQoYmx1ZSgpLCBhbHBoYSk7
CisgICAgICAgIGludCByID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdSLCBhbHBoYSk7CisgICAg
ICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdHLCBhbHBoYSk7CisgICAgICAgIGlu
dCBiID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdCLCBhbHBoYSk7CiAgICAgICAgIAotICAgICAg
ICBuZXdDb2xvciA9IENvbG9yKHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFr
ZVJHQkEociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYm
IGIgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBXaHkg
aXMgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVy
ZT8KICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICBuZXdDb2xvci5zZXRJc1NlbWFudGlj
KCk7Ci0gICAgcmV0dXJuIG5ld0NvbG9yOworICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0CkBAIC00NzcsMTMgKzQ4OCwxNSBAQCBDb2xv
ciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVCiAKIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQot
ICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwg
bV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRD
b2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFj
ZSgpIH07CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENv
bG9yID0gYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9y
LnJlZCgpLCBleHRlbmRlZENvbG9yLmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBo
YSwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkgfTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTog
VGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsK
KyAgICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAyNTU7CiAKLSAgICBDb2xvciByZXN1bHQg
PSB7IHJlZCgpLCBncmVlbigpLCBibHVlKCksIG5ld0FscGhhIH07CisgICAgQ29sb3IgcmVzdWx0
ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkp
CiAgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTQ5MSwxNSArNTA0LDM3IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBo
YSkKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJl
dHVybiBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2NvbG9yRGF0
YS5leHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5ibHVl
KCksIGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkgfTsKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4
dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVkKCksIGV4
dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBleHRlbmRl
ZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdo
ZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcKKyAgICB1
aW50OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpOwogCi0gICAgQ29s
b3IgcmVzdWx0ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CisgICAgQ29sb3IgcmVzdWx0ID0g
cmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAg
ICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
Q29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7
CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgYXNFeHRlbmRl
ZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpIH07CisKKyAgICBhdXRvIFtyLCBnLCBi
LCBleGlzdGluZ0FscGhhXSA9IHJnYigpOworICAgIHJldHVybiB7IDB4ZmYgLSByLCAweGZmIC0g
ZywgMHhmZiAtIGIsIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGFscGhhKSB9OworfQorCitDb2xvciBD
b2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworCisgICAgcmV0dXJuIHsgdG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKSwgU2VtYW50aWMgfTsKK30KKwogc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9u
ZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKSB7CkBAIC01MDcsNyArNTQyLDggQEAgc3RkOjpwYWlyPENvbG9yU3BhY2Us
IEZsb2F0Q29tcG9uZW50cz4gQwogICAgICAgICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9y
U3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07CiAgICAgfQogCi0gICAgcmV0dXJu
IHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdy
ZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9Owor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6
U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4w
ZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoK
ICAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQogCisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9u
ZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBv
bmVudCgpKSAvIDB4RkY7IH0KKwogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3Qg
eyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQogCkBAIC03Niw2
ICs3OCwyMiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25z
dDsKICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsK
IAorICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhh
KSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9
OyB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50OF90
IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAgICAg
ICAgaWYgY29uc3RleHByICghTikKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBn
cmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0Ig
YW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGlu
dGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlz
aWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBv
bmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBv
bmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2Io
KS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsK
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
YmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNv
bnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7
CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZy
aWVuZCBXRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3Im
KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1Ymxp
YzoKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3Qg
Q29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNx
dWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNC
bGFja0NvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNv
bnN0IENvbG9yJik7CiAKQEAgLTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwog
CiBwcml2YXRlOgorICAgIFJHQkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQg
ciwgaW50IGcsIGludCBiKSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQg
c2V0UkdCKFJHQkEzMik7CiAgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwx
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQorCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4geworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNCArNjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcs
IHJlZCgpLCAnICcsIGdyZWVuKCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsK
IH0KIAorUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3Rp
bmdBbHBoYV0gPSBjaGFubmVscygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUo
MS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBA
QCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owog
CisgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBm
bG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBt
X2NoYW5uZWxzKGMxLCBjMiwgYzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSks
IEAodmFsdWUuYmx1ZSgpKSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29s
b3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxD
QUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0Aoc2lt
cGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkp
LCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21w
b25lbnQoKSldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21W
YWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCkKQEAgLTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0VG9WYWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4oKSks
IEAodmFsdWUuYmx1ZSgpKSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gc2ltcGxlQ29s
b3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxD
QUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHNpbXBs
ZUNvbG9yLnJlZENvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpKSwg
QChzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmFscGhhQ29tcG9u
ZW50KCkpXV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVl
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9w
ZXJ0eUluZGV4KQpAQCAtNDk0LDcgKzQ5Niw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpzZXRWYWx1ZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5
ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJy
YXkodmFsdWUsIFtdIChhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1cm4gQFtAKGNvbG9yLnJl
ZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkp
XTsKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CisgICAgICAgIHJldHVybiBAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBA
KHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25l
bnQoKSksIEAoc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldOwogICAgIH0pLmdldCgpXTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24g
MjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDggQEAg
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHRmxvYXQgYVs0XSA9
IHsgdmFsdWUucmVkKCksIHZhbHVlLmdyZWVuKCksIHZhbHVlLmJsdWUoKSwgdmFsdWUuYWxwaGEo
KSB9OworICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOworICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNp
bXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwg
c2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9y
UmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0
aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOCw3
ICs0MTksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dG
bG9hdCBhWzRdID0geyB2YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUuYmx1ZSgpLCB2
YWx1ZS5hbHBoYSgpIH07CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21w
b25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNv
bXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAgUmV0YWluUHRy
PENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAg
IENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0K
QEAgLTQ4Nyw3ICs0ODksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVl
cyhjCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJh
eUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgQ0dGbG9hdCBhWzRdID0geyB2YWx1ZVtpXS5yZWQoKSwgdmFsdWVbaV0u
Z3JlZW4oKSwgdmFsdWVbaV0uYmx1ZSgpLCB2YWx1ZVtpXS5hbHBoYSgpIH07CisgICAgICAgIGF1
dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAg
ICAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVD
b2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBs
ZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JS
ZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9i
YWxBbHBoYSA8IDEpCi0gICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xv
ci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhjb2xvci5hbHBoYSgpIC8g
MjU1LmYgKiBnbG9iYWxBbHBoYSkpOworICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xv
cihjciwgY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoZ2xvYmFsQWxwaGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNl
UkdCQUZyb21Db2xvcihjciwgY29sb3IpOwogICAgIH0KQEAgLTExMjEsNyArMTEyMSw3IEBAIHZv
aWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYKICAgICAvLyBzbyBhcyB0byBi
ZSBjb25zaXN0ZW50IHdpdGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCiAK
ICAgICAvLyBGb3JjZSB0aGUgYWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFj
IGRvZXMgd2l0aCBvdXRsaW5lIHJpbmdzLgotICAgIENvbG9yIHJpbmdDb2xvciA9IG1ha2VSR0JB
KGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIDEyNyk7CisgICAgQ29s
b3IgcmluZ0NvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGEoLjUpOwogCiAgICAgY2Fpcm9fdCog
Y3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05F
T04uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVu
dHMuCiAgICAgZmxvYXRBcmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgZmxvYXRBcmd1bWVu
dHMuY29sb3JSZWQgPSBtX2xpZ2h0aW5nQ29sb3IucmVkKCk7Ci0gICAgZmxvYXRBcmd1bWVudHMu
Y29sb3JHcmVlbiA9IG1fbGlnaHRpbmdDb2xvci5ncmVlbigpOwotICAgIGZsb2F0QXJndW1lbnRz
LmNvbG9yQmx1ZSA9IG1fbGlnaHRpbmdDb2xvci5ibHVlKCk7CisgICAgYXV0byBzaW1wbGVDb2xv
ciA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgZmxv
YXRBcmd1bWVudHMuY29sb3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBm
bG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKTsK
KyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50
KCk7CiAgICAgZmxvYXRBcmd1bWVudHMucGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRT
b3VyY2UtPnR5cGUoKSA9PSBMU19QT0lOVCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJ
KHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNyArNjg2LDgg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZ2xDbGVh
ckNvbG9yKGNvbG9yLnJlZCgpIC8gMjU1LjBmLCBjb2xvci5ncmVlbigpIC8gMjU1LjBmLCBjb2xv
ci5ibHVlKCkgLyAyNTUuMGYsIGNvbG9yLmFscGhhKCkgLyAyNTUuMGYpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGdsQ2xlYXJD
b2xvcihyLCBnLCBiLCBhKTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIGRyYXdHbHlwaHMoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmCiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZl
cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBp
eGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7
CiAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsK
LSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dD
b2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBm
aWxsQ29sb3IuYWxwaGEoKSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9
IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYSgp
KTsKICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQu
d2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3Jtcywg
dGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93
biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgPyAtMSA6IDEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVh
ZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRp
YWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAg
ICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAg
IENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3Jl
ZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICogZmlsbENvbG9y
LmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dD
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGEoKSk7CiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKICAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsK
ICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBo
YXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdh
dGl2ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fz
Y2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24KICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mg
b3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Np
bmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJT
aGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxD
b2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCks
IHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxw
aGEoKSAqIGZpbGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKKyAgICAgICAgQ29sb3Igc2hhZG93Rmls
bENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9y
LmFscGhhKCkpOwogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRv
d09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFu
c2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0
LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50
LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBA
QCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgLy8gSWYgdGhl
IHRleHQgY29sb3IgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0aW9uIGJhY2tn
cm91bmQsIGludmVydCB0aGUgc2VsZWN0aW9uCiAgICAgLy8gYmFja2dyb3VuZC4KICAgICBpZiAo
dGV4dENvbG9yID09IGMpCi0gICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwgMHhmZiAt
IGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKKyAgICAgICAgYyA9IGMuaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYSgxLjApOwogCiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJv
b3QoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZp
c2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBhdXRvIElubGluZVRleHRCb3g6
OnJlc29sdmVTdHlsZUZvck1hcmtlCiAgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91bmRD
b2xvciA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIHN0
eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKICAgICAgICAg
aWYgKHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yLmFscGhhKCkgJiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0gc2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0g
eyAweGZmIC0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLnJlZCgpLCAweGZmIC0gc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLmdyZWVuKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Iu
Ymx1ZSgpIH07CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjApOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6IHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkbwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb2xvciBmaWxsQ29sb3Ioc2hhZG93Q29s
b3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgMjU1KTsK
KyAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNvbG9yKCk7
CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0Nhc3RpbmdSZWN0ID0gYXJlYUNhc3RpbmdTaGFkb3dJ
bkhvbGUoYm9yZGVyUmVjdC5yZWN0KCksIHNoYWRvd1BhaW50aW5nRXh0ZW50LCBzaGFkb3dTcHJl
YWQsIHNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICBhdXRvIHBpeGVsU25hcHBlZE91dGVyUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoc2hhZG93Q2FzdGluZ1JlY3QsIGRldmljZVNjYWxl
RmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBDb2xvciBS
ZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiAgICAgICAgICAgICBhdXRvIGl0ID0g
Z2xvYmFsQ1NTVmFsdWVUb1N5c3RlbUNvbG9yTWFwKCkuZmluZChDU1NWYWx1ZUtleSB7IGNzc1Zh
bHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCB9
KTsKICAgICAgICAgICAgIGlmIChpdCA9PSBnbG9iYWxDU1NWYWx1ZVRvU3lzdGVtQ29sb3JNYXAo
KS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9y
KGNzc1ZhbHVlSUQsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yKGl0LT52YWx1
ZS5yZ2IoKSwgQ29sb3I6OlNlbWFudGljKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUu
c2VtYW50aWNDb2xvcigpOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gY29sb3IgPSBzeXN0ZW1D
b2xvckZyb21DU1NWYWx1ZUlEKGNzc1ZhbHVlSUQsIHVzZURhcmtBcHBlYXJhbmNlLCB1c2VFbGV2
YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCk7CiAgICAgICAgIGlmIChjb2xvcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlv
bkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDE1IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVuc2lnbmVk
IHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQpCiAgICAgewotICAgICAgICBDb2xvciBmcm9t
ID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQgOiBtX2Zy
b207CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUg
PT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0g
dG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAgICAgICAK
LSAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IGZyb20ucmVkKCksIG1fdG8ucmVkKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkucmVkKCksIGFuaW1h
dGVkLnJlZCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNz
LCByZXBlYXRDb3VudCwgZnJvbS5ncmVlbigpLCBtX3RvLmdyZWVuKCksIHRvQXRFbmRPZkR1cmF0
aW9uKCkuZ3JlZW4oKSwgYW5pbWF0ZWQuZ3JlZW4oKSk7Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5ibHVlKCksIG1fdG8uYmx1
ZSgpLCB0b0F0RW5kT2ZEdXJhdGlvbigpLmJsdWUoKSwgYW5pbWF0ZWQuYmx1ZSgpKTsKLSAgICAg
ICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJv
bS5hbHBoYSgpLCBtX3RvLmFscGhhKCksIHRvQXRFbmRPZkR1cmF0aW9uKCkuYWxwaGEoKSwgYW5p
bWF0ZWQuYWxwaGEoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jl
c3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUby5yZWRD
b21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCksIHNpbXBs
ZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjph
bmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgp
LCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVl
bkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKKyAgICAgICAg
ZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVG
cm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0
RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25l
bnQoKSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVw
ZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21w
b25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxl
QW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBhbmltYXRlZCA9
IHsgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChhbHBoYSkgfTsKICAgICB9CkBAIC05OSwyMCArMTAyLDI4IEBAIHB1Ymxp
YzoKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0by5zdHJp
cFdoaXRlU3BhY2UoKSk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICBmbG9hdCByZWQgPSBmcm9tQ29sb3IucmVkKCkgLSB0
b0NvbG9yLnJlZCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IGZyb21Db2xvci5ncmVlbigpIC0g
dG9Db2xvci5ncmVlbigpOwotICAgICAgICBmbG9hdCBibHVlID0gZnJvbUNvbG9yLmJsdWUoKSAt
IHRvQ29sb3IuYmx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9
IGZyb21Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBs
ZVRvID0gdG9Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworCisgICAgICAgIGZsb2F0
IHJlZCA9IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21wb25lbnQo
KTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkgLSBz
aW1wbGVUby5ncmVlbkNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJv
bS5ibHVlQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisKICAgICAgICAg
cmV0dXJuIHN0ZDo6aHlwb3QocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQogCiBwcml2YXRlOgog
ICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQogICAgIHsK
KyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisKICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVz
dWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBtX3RvID0gewotICAgICAgICAgICAgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLnJlZCgpICsgbV9mcm9tLnJlZCgpKSwKLSAgICAgICAg
ICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwobV90by5ncmVlbigpICsgbV9mcm9tLmdyZWVu
KCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChtX3RvLmJsdWUoKSAr
IG1fZnJvbS5ibHVlKCkpCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNp
bXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSksCisgICAg
ICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50
KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAorICAgICAgICAgICAgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmJs
dWVDb21wb25lbnQoKSkKICAgICAgICAgfTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDIwLTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBFeHRlbmRlZCBDb2xvciBDbGVhbnVwOiBTdG9wIGFsbG93aW5nIGRpcmVjdCBh
Y2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgU2ltcGxlQ29sb3IgKGl0IGlzIGFsbW9zdCBhbHdheXMg
aW5jb3JyZWN0IHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBjb2xvcnMpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIxODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdl
YktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisgICAgICAgIFVzZSB0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4K
KwogMjAyMC0wNS0yMyAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgRXJyb3Igc2VuZGluZyBJUEMgbWVzc2FnZTogQnJva2VuIHBpcGUKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCShyZXZp
c2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NjkzLDggKzY5Myw4IEBAIHN0YXRpYyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnIK
ICAgICAgICAgcmV0dXJuIEAoa2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6
Q29sb3JLZXlUeXBlOiB7Ci0gICAgICAgIENvbG9yIGNvbG9yID0ga2V5ZnJhbWVWYWx1ZS5jb2xv
clZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBAWyBAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVl
bigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpIF07CisgICAgICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKKyAgICAgICAgcmV0dXJuIEBbIEAociksIEAoZyksIEAoYiksIEAoYSkgXTsK
ICAgICB9CiAKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFs
dWU6OlBvaW50S2V5VHlwZTogewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMjMgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IFN0b3Ag
YWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBTaW1wbGVDb2xvciAoaXQg
aXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRvIGV4dGVuZGVkIGNvbG9y
cykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRv
IGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKwogMjAyMC0wNS0yMiAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgZG93bmxv
YWQgcmVzdW1lIHdvcmthcm91bmQgZm9yZ2l2aW5nIG9mIGNoYW5nZXMgaW4gQ0ZOZXR3b3JrCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwyNiArMTgyLDI5IEBAIFRF
U1QoQ29sb3IsIFZhbGlkaXR5KQogICAgIHZhbGlkQ29sb3IgPSBDb2xvcigxLCAyLCAzLCA0KTsK
ICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5yZWQo
KSwgMSk7Ci0gICAgRVhQRUNUX0VRKHZhbGlkQ29sb3IuZ3JlZW4oKSwgMik7Ci0gICAgRVhQRUNU
X0VRKHZhbGlkQ29sb3IuYmx1ZSgpLCAzKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5hbHBo
YSgpLCA0KTsKKyAgICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IucmVkQ29t
cG9uZW50KCksIDEpOworICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmdyZWVuQ29tcG9u
ZW50KCksIDIpOworICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmJsdWVDb21wb25lbnQo
KSwgMyk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwg
NCk7CiAKICAgICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3Ip
KTsKICAgICBFWFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAg
IEVYUEVDVF9GQUxTRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIEVY
UEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvci5yZWQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHll
dEFub3RoZXJWYWxpZENvbG9yLmdyZWVuKCksIDIpOwotICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVy
VmFsaWRDb2xvci5ibHVlKCksIDMpOwotICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xv
ci5hbHBoYSgpLCA0KTsKKyAgICBhdXRvIHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yID0geWV0
QW5vdGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBFWFBFQ1Rf
RVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOworICAgIEVY
UEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsK
KyAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgp
LCAzKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGFDb21w
b25lbnQoKSwgNCk7CiAKICAgICBvdGhlclZhbGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJW
YWxpZENvbG9yKTsKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgRVhQ
RUNUX0VRKG90aGVyVmFsaWRDb2xvci5yZWQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKG90aGVyVmFs
aWRDb2xvci5ncmVlbigpLCAyKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLmJsdWUo
KSwgMyk7Ci0gICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvci5hbHBoYSgpLCA0KTsKKyAgICBh
dXRvIHNpbXBsZU90aGVyVmFsaWRDb2xvciA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOworICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IucmVkQ29t
cG9uZW50KCksIDEpOworICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgMik7CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ibHVl
Q29tcG9uZW50KCksIDMpOworICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYWxw
aGFDb21wb25lbnQoKSwgNCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400148</attachid>
            <date>2020-05-23 20:31:06 -0700</date>
            <delta_ts>2020-05-24 08:06:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200523203105.patch</filename>
            <type>text/plain</type>
            <size>55556</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0yMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogU3RvcCBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNv
bG9yIChpdCBpcyBhbG1vc3QgYWx3YXlzIGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5k
ZWQgY29sb3JzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSBNYWtlcyBDb2xvcjo6cmdiKCkgcHJpdmF0ZSwgcmVtb3ZpbmcgYSBjbGFzcyBvZiBleHRl
bmRlZCBjb2xvciBidWdzIGZyb20gdXNlcnMgCisgICAgICAgICAgb2YgdGhlIENvbG9yIGNsYXNz
LiBUbyBnZXQgdGhlIGVxdWl2aWxlbnQgZnVuY3Rpb25hbGl0eSwgdXNlcnMgb2YgdGhlIGNsYXNz
IG11c3QKKyAgICAgICAgICBub3cgdXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgd2hpY2gg
ZG9lcyBhY3R1YWxseSBkb2VzIHRoZSBjb252ZXJzaW9uIHRvIHNSR0IKKyAgICAgICAgICBpZiBu
ZWNlc3NhcnkgYW5kIG1ha2VzIGl0IGNsZWFyIHRvIHRoZSBjYWxsZXIgdGhhdCBwcmVjaXNpb24g
aXMgYmVpbmcgbG9zdC4gCisgICAgICAgIC0gUmVtb3ZlcyBDb2xvcjo6cmVkKCkvZ3JlZW4oKS9i
bHVlKCkgZW50aXJlbHkuIFRoZXkgd2VyZSBqdXN0IGNhbGxpbmcgZG93biB0byAKKyAgICAgICAg
ICBDb2xvcjo6cmdiKCksIGFuZCBnb2luZyBmb3J3YXJkLCBpdCB3b24ndCBtYWtlIHNlbnNlIHRv
IHRoaW5rIGFib3V0IHJnYiBjb21wb25lbnRzCisgICAgICAgICAgb2YgQ29sb3JzIGluIGdlbmVy
YWwsIHNpbmNlIHNvbWUgZXh0ZW5kZWQgY29sb3Igc3BhY2VzIGRvbid0IGRlYWwgaW4gdGhlbSAo
ZS5nLiBMYWIpCisgICAgICAgICAgQ29sb3I6OmFscGhhKCkgd2FzIGtlcHQgKGFuZCBmaXhlZCB0
byB3b3JrIGV2ZW4gd2l0aCBFeHRlbmRlZENvbG9yKSBzaW5jZSBhbGwKKyAgICAgICAgICBFeHRl
bmRlZENvbG9ycyBkbyBuZWVkIHRvIGhhdmUgYWxwaGEuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgVXNlIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6
CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8g
Y29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVj
dDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIGNzcy9E
ZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSB0byBnZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBw
YWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1dpbmRvd0NTUyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
bnNCYWNrZ3JvdW5kQ1NTIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvciBjb25zdCk6CisgICAgICAgIFVzZXIg
Q29sb3I6OmNvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgdGhlIG5lZWQgdG8gbXVjayB3aXRoIGNv
bXBvbmVudHMgZGlyZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaWZmZXJlbmNlU3F1YXJlZCk6CisgICAgICAgIFVzZSBy
Z2IoKSBkaXJlY3RseSwgd2hpY2ggaXMgb2ssIHNpbmNlIHRoaXMgaXMgZXhwbGljaXRseSBjaGVj
a2luZyBpc0V4dGVuZGVkKCkuCisgICAgICAgIFRoaXMgY29kZSBpcyBzdGlsbCB3cm9uZyAodGhl
cmUgaXMgYSBGSVhNRSkgYXMgaXQgYXNzdW1lcyB0aGUgdHdvIGNvbG9ycyBhcmUgaW4KKyAgICAg
ICAgdGhlIHNhbWUgY29sb3Igc3BhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xv
cik6CisgICAgICAgIEFkZCBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBhbiBFeHRlbmRlZENvbG9y
IHRvIGFsbG93IGZ1bmN0aW9ucyBsaWtlIAorICAgICAgICBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYSB0byBkZWxlZ2F0ZSB0aGVpciBmdW5jdGlvbmFsaXR5IHRvIEV4dGVuZGVkQ29sb3Iu
CisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAg
ICAgVXNlIG5ldyBTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEoKSB0byBhdm9pZCBoYXJkY29k
aW5nIGNvbnN0YW50cyBoZXJlLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YmxlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xv
ciBjb21wb25lbnRzLiBUaGVzZQorICAgICAgICBhcmUgc3RpbGwgbm90IGlkZWFsIGltcGxlbWVu
dGF0aW9ucywgYXMgdGhleSBkb24ndCBwcmVzZXJ2ZSBleHRlbmRlZCBjb2xvcnMKKyAgICAgICAg
YXMgd2VsbCBhcyB0aGV5IGNvdWxkLCBidXQgbm93IHRoZXkgZG9uJ3QgcmV0dXJuIGJvZ3VzIHZh
bHVlcyBmb3IgZXh0ZW5kZWQKKyAgICAgICAgY29sb3JzLiBNaW5vciBjbGVhbnVwIGJyaW5naW5n
IGNvbnN0YW50cyBhbmQgbGFtYmRhIGluc2lkZSB0aGUgZnVuY3Rpb24gdGhleQorICAgICAgICBh
cmUgdXNlZCBpbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRo
QWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgTWlub3IgY2xlYW51cHMgdG8g
dXNlIGEgbW9yZSBjb25zaXN0ZW50IHN0eWxlIGFuZCBtYWtlIHVzZSBvZiB0aGUgbmV3CisgICAg
ICAgIFNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIEFkZGVk
LiBVc2VkIHRvIGF2b2lkIGRpcmVjdCBjb21wb25lbnQgdXNhZ2UgaW4gbGluZSBib3ggY29kZS4K
KworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlbWFudGljQ29sb3IgY29uc3QpOgorICAgICAg
ICBBZGRlZC4gSG9wZWZ1bGx5IHRlbXBvcmFyeS4gVXNlZCBieSBSZW5kZXJUaGVtZUlPUy5tbSB0
byBjb252ZXJ0CisgICAgICAgIGEgQ29sb3IgZnJvbSBhIG1hcCBpbnRvIGEgQ29sb3Igd2l0aCB0
aGUgc2VtYW50aWMgYml0IHNldC4gVGhpcyAKKyAgICAgICAgc2hvdWxkIG5vdCBiZSBuZWNlc3Nh
cnkgYXMgZXZlcnkgY29sb3IgaW4gdGhlIG1hcCBzaG91bGQgYWxyZWFkeQorICAgICAgICBoYXZl
IGl0IHNldCwgYnV0IHRvIGF2b2lkIHVuY2Vzc2FyeSBwb3NzaWJsZSBiZWhhdmlvciBjaGFuZ2Vz
IHRoaXMKKyAgICAgICAgcHJlc2VydmVzIHRoYXQgZnVuY3Rpb25hbGl0eSB1bnRpbCBpdCBjYW4g
YmUgcmVzZWFyY2hlZCBmdXJ0aGVyLgorICAgICAgICBGaXhpbmcgY29kZXJzIHRvIHByZXNlcnZl
IHRoZSBzZW1hbnRpYyBiaXQgbWF5IGJlIHJlcXVpcmVkIHRvIAorICAgICAgICBlbGxpbWluYXRl
IHRoZSBuZWVkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNl
QW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIFVzZSByZ2IoKSByYXRoZXIgdGhhbiB0aGUg
aW5kaXZpZHVhbCBjb21wb25lbnRzIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgICAK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIEFkZGVk
LiBOZWVkZWQgYnkgRGVwcmVjYXRlZENTU09NUkdCQ29sb3IgYW5kIHVzZWZ1bCB0byBDb2xvci4K
KworICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToK
KyAgICAgICAgVXNlZnVsIHRvIHNpbXBsaWZ5IENvbG9yOjpjb2xvcldpdGhBbHBoYSBpbXBsZW1l
bnRhdGlvbnMgYW5kCisgICAgICAgIGluIENvbG9yOjpkYXJrKCkuCisKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOgorICAgICAgICBBZGRlZCB0dXBsZSBpbnRlcmZh
Y2UgdG8gU2ltcGxlQ29sb3IgdG8gc3VwcG9ydCBzdHJ1Y3R1cmUgYmluZGluZ3MuCisgICAgICAg
IE5PVEU6IFVubGlrZSB0aGUgc3RvcmFnZSBvZiBTaW1wbGVDb2xvciAoQVJHQiksIHRoaXMgcHJv
ZHVjZXMgdGhlCisgICAgICAgIGJpbmRpbmdzIGluIHRoZSBtb3JlIGZhbWlsaWFyIFtyLGcsYixh
XSB0byBtYXRjaCBGbG9hdENvbXBvbmVudHMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgTWFkZSB3b3JrIHdpdGggRXh0ZW5kZWRDb2xv
ciBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpyZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmdyZWVuIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgUmVtb3ZlZC4KKworICAgICAgICAoQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKTogCisgICAg
ICAgIChpbnQgZGlmZmVyZW5jZVNxdWFyZWQpOiAKKyAgICAgICAgTWFkZSBmcmllbmRzIHNvIHRo
ZXkgY291bGQgdXNlIENvbG9yOjpyZ2IoKS4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnJn
YiBjb25zdCk6IAorICAgICAgICBNYWRlIHByaXZhdGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29s
b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgQWRkZWQgaW52ZXJ0ZWRDb2xvcldpdGhB
bHBoYSB0byBhbGxvdyBpbnZlcnNpb24gdG8gYmUgZW5jYXBzdWxhdGVkLgorICAgICAgICBXaGVu
IGZ1dHVyZSBjb2xvciBzcGFjZXMgYXJlIGFkZGVkLCB3ZSBtYXkgbmVlZCB0byBjaG9vc2UgcGVy
LWNvbG9yc3BhY2UKKyAgICAgICAgYWxnb3JpdGhtcyBmb3IgdGhpcyBpbnN0ZWFkIG9mIHRoZSB0
cml2aWFsIG9uZSB1c2VkIHRvZGF5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgVXNlIHRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUpOgorICAgICAgICAo
UGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgVXNlIHRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgVXNlIENvbG9y
Ojpjb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVudHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGlu
Z05FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9u
KToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0
byBjb2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmNsZWFyQ29sb3IpOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSB0byBn
ZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dDJEOjpkcmF3R2x5cGhzKToKKyAgICAgICAgVXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICBVc2UgY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25lbnRzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICBVc2UgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25l
bnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIFVzZSBpbnZlcnRl
ZENvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4K
KworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQpOgorICAgICAgICBV
c2UgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNv
bXBvbmVudHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KToKKyAgICAgICAgVXNlIG9wYXF1ZUNvbG9yKCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8g
Y29tcG9uZW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Db2xvciBjb25zdCk6CisgICAg
ICAgIFVzZSBvcGFxdWVDb2xvcigpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVu
dHMuCisKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0
aW9uOjphbmltYXRlKToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8g
Z2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCiAyMDIwLTA1LTIzICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBUYWtlIHJvdyBib3Jk
ZXIgaW50byBhY2NvdW50IHdoZW4gY29tcHV0aW5nIGNvbGxhcHNlZCBib3JkZXJzLgpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYyLDEwICsxOTYyLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFs
dWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgp
KS52YWx1ZUFzQ29sb3IoKTsKLSAgICByID0gY29sb3IucmVkKCk7Ci0gICAgZyA9IGNvbG9yLmdy
ZWVuKCk7Ci0gICAgYiA9IGNvbG9yLmJsdWUoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKKyAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7CisgICAgZyA9IGNvbG9y
LmdyZWVuQ29tcG9uZW50KCk7CisgICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKICNlbmRp
ZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEzICs5MiwxNSBA
QCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBi
Z0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5y
ZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgYmdDb2xvci5yZWQoKSwgYmdDb2xvci5n
cmVlbigpLCBiZ0NvbG9yLmJsdWUoKSkpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJn
Q29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYnVmZmVyLnJlc2V0KGdf
c3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIENvbG9y
IGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
OwogICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBidWZmZXIucmVzZXQoZ19z
dHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwg
ZmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9w
cmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9B
VFRSX0ZHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjk4LDEwICs2OTgsMTAgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50
S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQm
IGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSk7Ci0gICAgciA9IGNvbG9yLnJlZCgpOwotICAg
IGcgPSBjb2xvci5ncmVlbigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7CisgICAgYXV0byBjb2xv
ciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOworICAg
IGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50
KCk7CiB9CiAKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVW
YWx1ZSYgYmx1ZSgpIHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1p
dGl2ZVZhbHVlJiBhbHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIENvbG9yIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE51bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IGNy
ZWF0ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51bWJlclR5cGUgbnVtYmVy
KQpAQCAtNDYsMTUgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENT
U09NUkdCQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKLSAgICAgICAgOiBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBw
ZXIob3duZXIsIGNvbG9yLnJlZCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIGNvbG9yLmdyZWVuKCkpKQotICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93
bmVyLCBjb2xvci5ibHVlKCkpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQorICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSkKKyAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVy
LCBtX2NvbG9yLnJlZENvbXBvbmVudCgpKSkKKyAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBw
ZXIob3duZXIsIG1fY29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKKyAgICAgICAgLCBt
X2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0
KCkpKQogICAgIHsKICAgICB9CiAKLSAgICBDb2xvciBtX2NvbG9yOworICAgIFNpbXBsZUNvbG9y
IG1fY29sb3I7CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX3JlZDsK
ICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fZ3JlZW47CiAgICAgUmVm
PERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAko
cmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBTdHJp
bmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5
ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFu
Y2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBp
bXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFs
dWU7Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCksIHdpbmRvd0NvbG9yLmdy
ZWVuKCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1
KSksIGltcG9ydGFudCk7CisgICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNT
UyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgd2luZG93Q29sb3IuY29sb3JXaXRoQWxwaGEo
b3BhY2l0eSksIGltcG9ydGFudCk7CiAKICAgICBpZiAoIW9wYWNpdHkpCiAgICAgICAgIHJldHVy
biB3aW5kb3dTdHlsZTsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OmNhCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFy
YW5jZUdldEJhY2tncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
JmJlaGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50ID0gYmVo
YXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIHJldHVy
biBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBDb2xvcihiYWNr
Z3JvdW5kQ29sb3IucmVkKCksIGJhY2tncm91bmRDb2xvci5ncmVlbigpLCBiYWNrZ3JvdW5kQ29s
b3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKSwgaW1wb3J0YW50KTsK
KyAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwg
YmFja2dyb3VuZENvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpLCBpbXBvcnRhbnQpOwogfQog
CiBDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3Io
Ym9vbCYgaW1wb3J0YW50KSBjb25zdApAQCAtMzE3LDcgKzMxNyw3IEBAIENvbG9yIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXAKICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRp
b25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOwogICAgIGlmICghaW1wb3J0YW50KQogICAgICAgICBpbXBvcnRh
bnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0g
ICAgcmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4dENvbG9yLmdyZWVuKCksIHRleHRD
b2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpOworICAgIHJldHVy
biB0ZXh0Q29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiB9CiAgICAgCiBTdHJpbmcgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEyICsxODAsMTIgQEAgaW50IGRpZmZlcmVuY2VTcXVh
cmVkKGNvbnN0IENvbG9yJiBjMSwgYwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSByZXR1cm4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ1dCBtYW55IG9mIHRoZSBjYWxsCiAg
ICAgLy8gc2l0ZXMgaGF2ZSBwaWNrZWQgY29tcGFyaXNvbiB2YWx1ZXMgYmFzZWQgb24gZmVlbC4g
V2UnZCBuZWVkIHRvIGJyZWFrIG91dAogICAgIC8vIG91ciBsb2dhcml0aG0gdGFibGVzIHRvIGNo
YW5nZSB0aGVtIDopCi0gICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRl
bmRlZCgpLnJlZCgpICogMjU1IDogYzEucmVkKCk7Ci0gICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4
dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMxLmdyZWVuKCk7Ci0g
ICAgaW50IGMxQmx1ZSA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkg
KiAyNTUgOiBjMS5ibHVlKCk7Ci0gICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIu
YXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmVkKCk7Ci0gICAgaW50IGMyR3JlZW4gPSBj
Mi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAqIDI1NSA6IGMyLmdyZWVu
KCk7Ci0gICAgaW50IGMyQmx1ZSA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5i
bHVlKCkgKiAyNTUgOiBjMi5ibHVlKCk7CisgICAgaW50IGMxUmVkID0gYzEuaXNFeHRlbmRlZCgp
ID8gYzEuYXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzEucmdiKCkucmVkQ29tcG9uZW50KCk7
CisgICAgaW50IGMxR3JlZW4gPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKSAqIDI1NSA6IGMxLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMxQmx1ZSA9
IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMS5yZ2Io
KS5ibHVlQ29tcG9uZW50KCk7CisgICAgaW50IGMyUmVkID0gYzIuaXNFeHRlbmRlZCgpID8gYzIu
YXNFeHRlbmRlZCgpLnJlZCgpICogMjU1IDogYzIucmdiKCkucmVkQ29tcG9uZW50KCk7CisgICAg
aW50IGMyR3JlZW4gPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuZ3JlZW4oKSAq
IDI1NSA6IGMyLnJnYigpLmdyZWVuQ29tcG9uZW50KCk7CisgICAgaW50IGMyQmx1ZSA9IGMyLmlz
RXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ibHVlKCkgKiAyNTUgOiBjMi5yZ2IoKS5ibHVl
Q29tcG9uZW50KCk7CiAgICAgaW50IGRSID0gYzFSZWQgLSBjMlJlZDsKICAgICBpbnQgZEcgPSBj
MUdyZWVuIC0gYzJHcmVlbjsKICAgICBpbnQgZEIgPSBjMUJsdWUgLSBjMkJsdWU7CkBAIC0yNTAs
MTIgKzI1MCwxNiBAQCBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKIH0KIAogQ29sb3I6OkNv
bG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBj
MywgYWxwaGEsIGNvbG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29sb3IoUmVmPEV4dGVuZGVk
Q29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKIHsKICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBp
biBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCiAgICAgLy8gdG9wIDMyIGJp
dHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCiAgICAgbV9j
b2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKLSAgICBhdXRvIGV4dGVuZGVkQ29sb3JSZWYgPSBF
eHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvclJlZi5sZWFrUmVmKCk7
CisgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yLmxlYWtSZWYo
KTsKICAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKIH0KIApAQCAtMzYzLDE3ICszNjcsMTcgQEAg
Q29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CiAKLSAgICBpZiAodiA9PSAwLjBmKSB7Ci0gICAgICAgIC8vIExpZ2h0ZW5lZCBi
bGFjayB3aXRoIGFscGhhLgotICAgICAgICByZXR1cm4gQ29sb3IoMHg1NCwgMHg1NCwgMHg1NCwg
YWxwaGEoKSk7Ci0gICAgfQorICAgIGlmICh2ID09IDAuMGYpCisgICAgICAgIHJldHVybiBsaWdo
dGVuZWRCbGFjay5jb2xvcldpdGhBbHBoYShhbHBoYSgpKTsKIAogICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIAotICAgIHJldHVybiBDb2xvcihz
dGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAot
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVG
YWN0b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKKyAgICByZXR1cm4geworICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAg
ICBhbHBoYSgpCisgICAgfTsKIH0KIAogQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdApAQCAtMzg5
LDEwICszOTMsMTIgQEAgQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAogICAgIGZsb2F0IHYgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAu
MGYsICh2IC0gMC4zM2YpIC8gdik7CiAKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50
PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAg
ICAgICAgICAgICAgYWxwaGEoKSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQorICAg
IH07CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC00MDksMTkgKzQxNSw2IEBA
IGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpsaWdo
dG5lc3ModG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIH0KIAotc3RhdGljIGludCBibGVuZENv
bXBvbmVudChpbnQgYywgaW50IGEpCi17Ci0gICAgLy8gV2UgdXNlIHdoaXRlLgotICAgIGZsb2F0
IGFscGhhID0gYSAvIDI1NS4wZjsKLSAgICBpbnQgd2hpdGVCbGVuZCA9IDI1NSAtIGE7Ci0gICAg
YyAtPSB3aGl0ZUJsZW5kOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7
Ci19Ci0KLWNvbnN0IGludCBjU3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCi1jb25zdCBpbnQgY0Vu
ZEFscGhhID0gMjA0OyAvLyA4MCU7Ci1jb25zdCBpbnQgY0FscGhhSW5jcmVtZW50ID0gMTc7IC8v
IEluY3JlbWVudHMgaW4gYmV0d2Vlbi4KLQogQ29sb3IgQ29sb3I6OmJsZW5kKGNvbnN0IENvbG9y
JiBzb3VyY2UpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1Zpc2libGUoKSB8fCBzb3VyY2UuaXNPcGFx
dWUoKSkKQEAgLTQzMCwzNyArNDIzLDU1IEBAIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xv
ciYgc291cmNlKSAKICAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAKLSAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxw
aGEoKSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGF1dG8gW3NlbGZSLCBzZWxmRywgc2VsZkIsIHNl
bGZBXSA9IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbc291cmNlUiwgc291
cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKworICAgIGludCBkID0gMjU1ICogKHNlbGZBICsgc291cmNlQSkgLSBzZWxmQSAqIHNvdXJj
ZUE7CiAgICAgaW50IGEgPSBkIC8gMjU1OwotICAgIGludCByID0gKHJlZCgpICogYWxwaGEoKSAq
ICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5y
ZWQoKSkgLyBkOwotICAgIGludCBnID0gKGdyZWVuKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJj
ZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmdyZWVuKCkpIC8gZDsK
LSAgICBpbnQgYiA9IChibHVlKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5hbHBoYSgpKSAr
IDI1NSAqIHNvdXJjZS5hbHBoYSgpICogc291cmNlLmJsdWUoKSkgLyBkOwotICAgIHJldHVybiBD
b2xvcihyLCBnLCBiLCBhKTsKKyAgICBpbnQgciA9IChzZWxmUiAqIHNlbGZBICogKDI1NSAtIHNv
dXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZVIpIC8gZDsKKyAgICBpbnQgZyA9IChzZWxm
RyAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICogc291cmNlQSAqIHNvdXJjZUcpIC8g
ZDsKKyAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZBICogKDI1NSAtIHNvdXJjZUEpICsgMjU1ICog
c291cmNlQSAqIHNvdXJjZUIpIC8gZDsKKworICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCBh
KTsKIH0KIAogQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKIHsKKyAgICBjb25z
dGV4cHIgaW50IHN0YXJ0QWxwaGEgPSAxNTM7IC8vIDYwJQorICAgIGNvbnN0ZXhwciBpbnQgZW5k
QWxwaGEgPSAyMDQ7IC8vIDgwJTsKKyAgICBjb25zdGV4cHIgaW50IGFscGhhSW5jcmVtZW50ID0g
MTc7CisKKyAgICBhdXRvIGJsZW5kQ29tcG9uZW50ID0gW10oaW50IGMsIGludCBhKSAtPiBpbnQg
eworICAgICAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7CisgICAgICAgIGludCB3aGl0ZUJs
ZW5kID0gMjU1IC0gYTsKKyAgICAgICAgYyAtPSB3aGl0ZUJsZW5kOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworICAgIH07CisKICAgICAvLyBJZiB0aGUgY29s
b3IgY29udGFpbnMgYWxwaGEgYWxyZWFkeSwgd2UgbGVhdmUgaXQgYWxvbmUuCiAgICAgaWYgKCFp
c09wYXF1ZSgpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBDb2xvciBuZXdDb2xvcjsK
LSAgICBmb3IgKGludCBhbHBoYSA9IGNTdGFydEFscGhhOyBhbHBoYSA8PSBjRW5kQWxwaGE7IGFs
cGhhICs9IGNBbHBoYUluY3JlbWVudCkgeworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdH
LCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsK
KworICAgIENvbG9yIHJlc3VsdDsKKyAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFs
cGhhIDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkgewogICAgICAgICAvLyBX
ZSBoYXZlIGEgc29saWQgY29sb3IuICBDb252ZXJ0IHRvIGFuIGVxdWl2YWxlbnQgY29sb3IgdGhh
dCBsb29rcyB0aGUgc2FtZSB3aGVuIGJsZW5kZWQgd2l0aCB3aGl0ZQogICAgICAgICAvLyBhdCB0
aGUgY3VycmVudCBhbHBoYS4gIFRyeSB1c2luZyBsZXNzIHRyYW5zcGFyZW5jeSBpZiB0aGUgbnVt
YmVycyBlbmQgdXAgYmVpbmcgbmVnYXRpdmUuCi0gICAgICAgIGludCByID0gYmxlbmRDb21wb25l
bnQocmVkKCksIGFscGhhKTsKLSAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChncmVlbigp
LCBhbHBoYSk7Ci0gICAgICAgIGludCBiID0gYmxlbmRDb21wb25lbnQoYmx1ZSgpLCBhbHBoYSk7
CisgICAgICAgIGludCByID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdSLCBhbHBoYSk7CisgICAg
ICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdHLCBhbHBoYSk7CisgICAgICAgIGlu
dCBiID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdCLCBhbHBoYSk7CiAgICAgICAgIAotICAgICAg
ICBuZXdDb2xvciA9IENvbG9yKHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFr
ZVJHQkEociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYm
IGIgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBXaHkg
aXMgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVy
ZT8KICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICBuZXdDb2xvci5zZXRJc1NlbWFudGlj
KCk7Ci0gICAgcmV0dXJuIG5ld0NvbG9yOworICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0CkBAIC00NzcsMTMgKzQ4OCwxNSBAQCBDb2xv
ciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVCiAKIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQot
ICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwg
bV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRD
b2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFj
ZSgpIH07CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENv
bG9yID0gYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9y
LnJlZCgpLCBleHRlbmRlZENvbG9yLmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBo
YSwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkgfTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTog
VGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsK
KyAgICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAyNTU7CiAKLSAgICBDb2xvciByZXN1bHQg
PSB7IHJlZCgpLCBncmVlbigpLCBibHVlKCksIG5ld0FscGhhIH07CisgICAgQ29sb3IgcmVzdWx0
ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkp
CiAgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTQ5MSwxNSArNTA0LDM3IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBo
YSkKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0IGFscGhhKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJl
dHVybiBDb2xvciB7IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZCgpLCBtX2NvbG9yRGF0
YS5leHRlbmRlZENvbG9yLT5ncmVlbigpLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5ibHVl
KCksIGFscGhhLCBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5jb2xvclNwYWNlKCkgfTsKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4
dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVkKCksIGV4
dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBleHRlbmRl
ZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdo
ZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcKKyAgICB1
aW50OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpOwogCi0gICAgQ29s
b3IgcmVzdWx0ID0gU2ltcGxlQ29sb3IgeyAocmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIDw8IDI0IH07CisgICAgQ29sb3IgcmVzdWx0ID0g
cmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAg
ICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
Q29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7
CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgYXNFeHRlbmRl
ZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpIH07CisKKyAgICBhdXRvIFtyLCBnLCBi
LCBleGlzdGluZ0FscGhhXSA9IHJnYigpOworICAgIHJldHVybiB7IDB4ZmYgLSByLCAweGZmIC0g
ZywgMHhmZiAtIGIsIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGFscGhhKSB9OworfQorCitDb2xvciBD
b2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworCisgICAgcmV0dXJuIHsgdG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKSwgU2VtYW50aWMgfTsKK30KKwogc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9u
ZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKSB7CkBAIC01MDcsNyArNTQyLDggQEAgc3RkOjpwYWlyPENvbG9yU3BhY2Us
IEZsb2F0Q29tcG9uZW50cz4gQwogICAgICAgICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9y
U3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07CiAgICAgfQogCi0gICAgcmV0dXJu
IHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdy
ZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9Owor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6
U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4w
ZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoK
ICAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQogCisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9u
ZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBv
bmVudCgpKSAvIDB4RkY7IH0KKwogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3Qg
eyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQogCkBAIC03Niw2
ICs3OCwyMiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25z
dDsKICAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsK
IAorICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhh
KSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9
OyB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50OF90
IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAgICAg
ICAgaWYgY29uc3RleHByICghTikKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsK
KyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBn
cmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsx
ODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0Ig
YW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQogICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGlu
dGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5vcm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlz
aWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkgY29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBv
bmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBjb25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9u
ZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBv
bmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2Io
KS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsK
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBh
bHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3Ig
YmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNv
bnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7
CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUw
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBz
ZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5h
dGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZy
aWVuZCBXRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3Im
KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1Ymxp
YzoKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3Qg
Q29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKIAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNx
dWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNC
bGFja0NvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNv
bnN0IENvbG9yJik7CiAKQEAgLTI5NSw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwog
CiBwcml2YXRlOgorICAgIFJHQkEzMiByZ2IoKSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQg
ciwgaW50IGcsIGludCBiKSB7IHNldFJHQihtYWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQg
c2V0UkdCKFJHQkEzMik7CiAgICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5y
Z2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY1JCR0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwx
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQorCituYW1lc3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4geworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNCArNjMsMTAgQEAgU3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcs
IHJlZCgpLCAnICcsIGdyZWVuKCksICcgJywgYmx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsK
IH0KIAorUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3Rp
bmdBbHBoYV0gPSBjaGFubmVscygpOworICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUo
MS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBA
QCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owog
CisgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBm
bG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBt
X2NoYW5uZWxzKGMxLCBjMiwgYzMsIGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyNCArNjQsMjMgQEAgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFuZFRleHRUcgogICAgIGRpc2Nvbm5lY3QoKTsKIH0K
IAotc3RhdGljIGJvb2wgbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShDRkFycmF5UmVmIGNvbG9y
QXJyYXksIFJHQkEzMiYgY29sb3IpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VS
R0JBMzJGcm9tQVJHQkNGQXJyYXkoQ0ZBcnJheVJlZiBjb2xvckFycmF5KQogewogICAgIGlmIChD
RkFycmF5R2V0Q291bnQoY29sb3JBcnJheSkgPCA0KQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBmbG9hdCBjb21wb25lbnRBcnJheVs0
XTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgICBDRk51bWJlclJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KGNvbG9yQXJyYXksIGkpKTsKICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRk51
bWJlckdldFR5cGVJRCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBmbG9hdCBjb21wb25lbnQ7CiAgICAgICAg
IENGTnVtYmVyR2V0VmFsdWUodmFsdWUsIGtDRk51bWJlckZsb2F0VHlwZSwgJmNvbXBvbmVudCk7
CiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ldID0gY29tcG9uZW50OwogICAgIH0KIAotICAgIGNv
bG9yID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFy
cmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0pOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhjb21wb25lbnRBcnJheVsx
XSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVsw
XSk7CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
Ojpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0
cmluZykKQEAgLTI2OCwxMCArMjY3LDEwIEBAIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRU
ZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkg
IT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSR0JBMzIgY29sb3I7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtYWtlUkdCQTMyRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUsIGNvbG9yKSkK
KyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShh
cnJheVZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRGb3JlZ3JvdW5kQ29s
b3IoY29sb3IpOworICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEZvcmVncm91bmRDb2xvcigq
Y29sb3IpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0yODAsMTAgKzI3OSwxMCBAQCBSZWY8SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5k
VGV4dFRyYWNrUHJpCiAgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKGFycmF5VmFsdWUp
ICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgUkdCQTMyIGNvbG9yOwotICAgICAgICAg
ICAgICAgIGlmICghbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlLCBjb2xvcikp
CisgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXko
YXJyYXlWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb2xvcikKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0QmFja2dyb3VuZENv
bG9yKGNvbG9yKTsKKyAgICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRCYWNrZ3JvdW5kQ29sb3Io
KmNvbG9yKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAt
MjkyLDEwICsyOTEsMTAgQEAgUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRUcmFja1By
aQogICAgICAgICAgICAgICAgIGlmIChDRkdldFR5cGVJRChhcnJheVZhbHVlKSAhPSBDRkFycmF5
R2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIFJHQkEzMiBjb2xvcjsKLSAgICAgICAgICAgICAgICBpZiAo
IW1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkoYXJyYXlWYWx1ZSwgY29sb3IpKQorICAgICAgICAg
ICAgICAgIGF1dG8gY29sb3IgPSBtYWtlUkdCQTMyRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUp
OworICAgICAgICAgICAgICAgIGlmICghY29sb3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldEhpZ2hsaWdodENvbG9yKGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBjdWVEYXRhLT5zZXRIaWdobGlnaHRDb2xvcigqY29sb3IpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCShyZXZpc2lvbiAyNjIxMDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhCiB7CiAgICAgaWYgKCFpc0Jhc2lj
QW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0Fu
aW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHZhbHVlLnJlZCgp
KSwgQCh2YWx1ZS5ncmVlbigpKSwgQCh2YWx1ZS5ibHVlKCkpLCBAKHZhbHVlLmFscGhhKCkpXV07
CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkg
c2V0RnJvbVZhbHVlOkBbQChzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSksIEAoc2ltcGxlQ29s
b3IuZ3JlZW5Db21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpKSwgQChz
aW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpKV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9u
LCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQpAQCAtNDM4LDcgKzQzOSw4IEBAIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHUKIHsKICAgICBpZiAoIWlzQmFz
aWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHZhbHVlLnJlZCgp
KSwgQCh2YWx1ZS5ncmVlbigpKSwgQCh2YWx1ZS5ibHVlKCkpLCBAKHZhbHVlLmFscGhhKCkpXV07
CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkg
c2V0VG9WYWx1ZTpAW0Aoc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9y
LmdyZWVuQ29tcG9uZW50KCkpLCBAKHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSksIEAoc2lt
cGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2E6OnNldFRvVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGlu
dCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCkBAIC00OTQsNyArNDk2LDggQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcwogICAgICAgICByZXR1cm47CiAKICAg
ICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBz
ZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0gICAgICAg
IHJldHVybiBAW0AoY29sb3IucmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUo
KSksIEAoY29sb3IuYWxwaGEoKSldOworICAgICAgICBhdXRvIHNpbXBsZUNvbG9yID0gY29sb3Iu
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgcmV0dXJuIEBbQChzaW1wbGVDb2xv
ci5yZWRDb21wb25lbnQoKSksIEAoc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSksIEAoc2lt
cGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpKSwgQChzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgp
KV07CiAgICAgfSkuZ2V0KCldOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRp
b25XaW4uY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2Nyw3ICszNjcsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZyb21W
YWx1CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ0dGbG9hdCBhWzRdID0geyB2YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFsdWUu
Ymx1ZSgpLCB2YWx1ZS5hbHBoYSgpIH07CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xv
ci5yZWRDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29s
b3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAgICAg
UmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwg
YSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYu
Z2V0KCkpOwogfQpAQCAtNDE4LDcgKzQxOSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0VG9WYWx1ZSgKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHZhbHVlLnJlZCgpLCB2YWx1ZS5ncmVl
bigpLCB2YWx1ZS5ibHVlKCksIHZhbHVlLmFscGhhKCkgfTsKKyAgICBhdXRvIHNpbXBsZUNvbG9y
ID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7
IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgp
LCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50
KCkgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3Rv
ckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRpb24u
Z2V0KCksIHYuZ2V0KCkpOwogfQpAQCAtNDg3LDcgKzQ4OSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VmFsdWVzKGMKICAgICAgICAgCiAgICAgUmV0YWluUHRyPENGTXV0YWJs
ZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUu
c2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHZhbHVl
W2ldLnJlZCgpLCB2YWx1ZVtpXS5ncmVlbigpLCB2YWx1ZVtpXS5ibHVlKCksIHZhbHVlW2ldLmFs
cGhhKCkgfTsKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlW2ldLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVk
Q29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJs
dWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OwogICAgICAgICBS
ZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBh
KSk7CiAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVDYWlyb0Nv
bnRleHRTb3VyY2UoY2EKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTb2xpZCBjb2xvciBzb3Vy
Y2UKICAgICAgICAgaWYgKGdsb2JhbEFscGhhIDwgMSkKLSAgICAgICAgICAgIHNldFNvdXJjZVJH
QkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKGNvbG9yLmFscGhhKCkgLyAyNTUuZiAqIGdsb2JhbEFscGhhKSk7CisgICAgICAgICAgICBz
ZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhnbG9iYWxBbHBoYSkpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvcik7CiAgICAgfQpAQCAt
MTEyMSw3ICsxMTIxLDcgQEAgdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dENhaXJv
JgogICAgIC8vIHNvIGFzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgd2UgZHJhdyByZWN0YW5n
dWxhciBmb2N1cyByaW5ncy4KIAogICAgIC8vIEZvcmNlIHRoZSBhbHBoYSB0byA1MCUuIFRoaXMg
bWF0Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91dGxpbmUgcmluZ3MuCi0gICAgQ29sb3Ig
cmluZ0NvbG9yID0gbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJs
dWUoKSwgMTI3KTsKKyAgICBDb2xvciByaW5nQ29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYSgu
NSk7CiAKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIGNhaXJv
X3NhdmUoY3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2Fy
bS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHJldmlz
aW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0v
ZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDEx
IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW8KICAgICAvLyBTZXQg
bGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7
CiAKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IG1fbGlnaHRpbmdDb2xvci5yZWQoKTsK
LSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gbV9saWdodGluZ0NvbG9yLmdyZWVuKCk7
Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JCbHVlID0gbV9saWdodGluZ0NvbG9yLmJsdWUoKTsK
KyAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IHNpbXBsZUNvbG9yLnJl
ZENvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBzaW1wbGVDb2xv
ci5ncmVlbkNvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IHNpbXBs
ZUNvbG9yLmJsdWVDb21wb25lbnQoKTsKICAgICBmbG9hdEFyZ3VtZW50cy5wYWRkaW5nNCA9IDA7
CiAKICAgICBpZiAobV9saWdodFNvdXJjZS0+dHlwZSgpID09IExTX1BPSU5UKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Niw3ICs2ODYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29s
b3IoY29uCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBnbENsZWFyQ29sb3IoY29sb3IucmVkKCkgLyAyNTUuMGYsIGNvbG9yLmdy
ZWVuKCkgLyAyNTUuMGYsIGNvbG9yLmJsdWUoKSAvIDI1NS4wZiwgY29sb3IuYWxwaGEoKSAvIDI1
NS4wZik7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7CisgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xfQ09M
T1JfQlVGRkVSX0JJVCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQg
ZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKICAgICAgICAgLy8gUGFpbnQgc2lt
cGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0
byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0Nv
bnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3ND
b250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93
Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hh
ZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKKyAgICAgICAgQ29s
b3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFgg
PSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93
cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkg
Y29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxvYXQg
c2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhp
Y3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJ
KHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAvLyBQYWludCBzaW1w
bGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRv
IGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0Nv
bnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dD
b2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFk
b3dDb2xvci5hbHBoYSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBDb2xv
ciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0
RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7CiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0g
cG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3Mg
YXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNv
b3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRl
RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMSw3ICsxMjEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJl
bHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2lu
Zy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBz
aGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEo
KSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7
CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2Ug
aGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVn
YXRpdmUuCiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zm
c2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
ID8gLTEgOiAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNw
cAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRWxsaXBzaXNC
b3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWMKICAgICAvLyBJZiB0aGUgdGV4dCBjb2xvciBlbmRz
IHVwIGJlaW5nIHRoZSBzYW1lIGFzIHRoZSBzZWxlY3Rpb24gYmFja2dyb3VuZCwgaW52ZXJ0IHRo
ZSBzZWxlY3Rpb24KICAgICAvLyBiYWNrZ3JvdW5kLgogICAgIGlmICh0ZXh0Q29sb3IgPT0gYykK
LSAgICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZmIC0gYy5ncmVlbigpLCAweGZm
IC0gYy5ibHVlKCkpOworICAgICAgICBjID0gYy5pbnZlcnRlZENvbG9yV2l0aEFscGhhKDEuMCk7
CiAKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODU0LDcgKzg1NCw3IEBAIGF1dG8gSW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9y
TWFya2UKICAgICAgICAgQ29sb3Igc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIo
KS5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENv
bG9yID0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOwogICAgICAgICBpZiAoc2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yLmlzVmFsaWQoKSAmJiBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuYWxwaGEo
KSAmJiBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9PSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IpCi0gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB7IDB4ZmYgLSBzZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IucmVkKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Iu
Z3JlZW4oKSwgMHhmZiAtIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5ibHVlKCkgfTsKKyAgICAg
ICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5p
bnZlcnRlZENvbG9yV2l0aEFscGhhKDEuMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIE1hcmtlZFRleHQ6OlRleHRNYXRjaDogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDk1LDcgKzI0OTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93
Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCAyNTUpOworICAgICAgICAgICAgQ29s
b3IgZmlsbENvbG9yID0gc2hhZG93Q29sb3Iub3BhcXVlQ29sb3IoKTsKICAgICAgICAgICAgIGF1
dG8gc2hhZG93Q2FzdGluZ1JlY3QgPSBhcmVhQ2FzdGluZ1NoYWRvd0luSG9sZShib3JkZXJSZWN0
LnJlY3QoKSwgc2hhZG93UGFpbnRpbmdFeHRlbnQsIHNoYWRvd1NwcmVhZCwgc2hhZG93T2Zmc2V0
KTsKICAgICAgICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVkT3V0ZXJSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhzaGFkb3dDYXN0aW5nUmVjdCwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAy
NjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE1NTQsNyArMTU1NCw3IEBAIENvbG9yIFJlbmRlclRoZW1lSU9TOjpz
eXN0ZW1Db2xvcihDU1NWYWwKICAgICAgICAgICAgIGF1dG8gaXQgPSBnbG9iYWxDU1NWYWx1ZVRv
U3lzdGVtQ29sb3JNYXAoKS5maW5kKENTU1ZhbHVlS2V5IHsgY3NzVmFsdWVJRCwgdXNlRGFya0Fw
cGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsIH0pOwogICAgICAgICAgICAg
aWYgKGl0ID09IGdsb2JhbENTU1ZhbHVlVG9TeXN0ZW1Db2xvck1hcCgpLmVuZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJRCwgb3B0
aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoaXQtPnZhbHVlLnJnYigpLCBDb2xvcjo6
U2VtYW50aWMpOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5zZW1hbnRpY0NvbG9yKCk7
CiAgICAgICAgIH0KICAgICAgICAgYXV0byBjb2xvciA9IHN5c3RlbUNvbG9yRnJvbUNTU1ZhbHVl
SUQoY3NzVmFsdWVJRCwgdXNlRGFya0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFj
ZUxldmVsKTsKICAgICAgICAgaWYgKGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMiArODEsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBhbmlt
YXRlKFNWR0VsZW1lbnQqLCBmbG9hdCBwcm9ncmVzcywgdW5zaWduZWQgcmVwZWF0Q291bnQsIENv
bG9yJiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIENvbG9yIGZyb20gPSBtX2FuaW1hdGlvbk1v
ZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IG1fZnJvbTsKKyAgICAgICAgYXV0
byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2Rl
OjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlv
bigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CiAgICAgICAgIAotICAgICAgICBmbG9hdCBy
ZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5yZWQoKSwgbV90
by5yZWQoKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5yZWQoKSwgYW5pbWF0ZWQucmVkKCkpOwotICAg
ICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBm
cm9tLmdyZWVuKCksIG1fdG8uZ3JlZW4oKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5ncmVlbigpLCBh
bmltYXRlZC5ncmVlbigpKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJv
Z3Jlc3MsIHJlcGVhdENvdW50LCBmcm9tLmJsdWUoKSwgbV90by5ibHVlKCksIHRvQXRFbmRPZkR1
cmF0aW9uKCkuYmx1ZSgpLCBhbmltYXRlZC5ibHVlKCkpOwotICAgICAgICBmbG9hdCBhbHBoYSA9
IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBmcm9tLmFscGhhKCksIG1fdG8u
YWxwaGEoKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5hbHBoYSgpLCBhbmltYXRlZC5hbHBoYSgpKTsK
KyAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCksIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWRDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQucmVkQ29t
cG9uZW50KCkpOworICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3Ms
IHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvLmdyZWVu
Q29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuQ29tcG9uZW50KCksIHNp
bXBsZUFuaW1hdGVkLmdyZWVuQ29tcG9uZW50KCkpOworICAgICAgICBmbG9hdCBibHVlID0gQmFz
ZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVu
dCgpLCBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJs
dWVDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKKyAgICAgICAg
ZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxl
RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVU
b0F0RW5kT2ZEdXJhdGlvbi5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBoYUNv
bXBvbmVudCgpKTsKICAgICAgICAgCiAgICAgICAgIGFuaW1hdGVkID0geyByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFs
cGhhKSB9OwogICAgIH0KQEAgLTk5LDIwICsxMDIsMjggQEAgcHVibGljOgogICAgICAgICBDb2xv
ciB0b0NvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHRvLnN0cmlwV2hpdGVTcGFjZSgpKTsK
ICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgIGZsb2F0IHJlZCA9IGZyb21Db2xvci5yZWQoKSAtIHRvQ29sb3IucmVkKCk7Ci0g
ICAgICAgIGZsb2F0IGdyZWVuID0gZnJvbUNvbG9yLmdyZWVuKCkgLSB0b0NvbG9yLmdyZWVuKCk7
Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBmcm9tQ29sb3IuYmx1ZSgpIC0gdG9Db2xvci5ibHVlKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJv
bS5yZWRDb21wb25lbnQoKSAtIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpOworICAgICAgICBmbG9h
dCBncmVlbiA9IHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSAtIHNpbXBsZVRvLmdyZWVuQ29t
cG9uZW50KCk7CisgICAgICAgIGZsb2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQo
KSAtIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKTsKKwogICAgICAgICByZXR1cm4gc3RkOjpoeXBv
dChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRGcm9t
QW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgeworICAgICAgICBhdXRvIHNp
bXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0
byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKwogICAgICAgICAv
LyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFx
dWUuCiAgICAgICAgIG1fdG8gPSB7Ci0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKG1fdG8ucmVkKCkgKyBtX2Zyb20ucmVkKCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChtX3RvLmdyZWVuKCkgKyBtX2Zyb20uZ3JlZW4oKSksCi0gICAgICAgICAg
ICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKG1fdG8uYmx1ZSgpICsgbV9mcm9tLmJsdWUoKSkK
KyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9u
ZW50KCkgKyBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKKyAgICAgICAgICAgIHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20u
Z3JlZW5Db21wb25lbnQoKSksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQog
ICAgICAgICB9OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjAtMDUtMjMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVu
ZGVkIENvbG9yIENsZWFudXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5k
ZXJseWluZyBTaW1wbGVDb2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0aCBy
ZXNwZWN0IHRvIGV4dGVuZGVkIGNvbG9ycykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMjE4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9Q
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAoV2ViS2l0OjphbmltYXRpb25W
YWx1ZUZyb21LZXlmcmFtZVZhbHVlKToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCiAyMDIwLTA1LTIzICBD
aGFybGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBFcnJvciBzZW5k
aW5nIElQQyBtZXNzYWdlOiBCcm9rZW4gcGlwZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsOCArNjkzLDggQEAg
c3RhdGljIE5TT2JqZWN0KiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcgogICAgICAgICByZXR1cm4g
QChrZXlmcmFtZVZhbHVlLm51bWJlclZhbHVlKCkpOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpDb2xvcktleVR5cGU6IHsK
LSAgICAgICAgQ29sb3IgY29sb3IgPSBrZXlmcmFtZVZhbHVlLmNvbG9yVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIEBbIEAoY29sb3IucmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJs
dWUoKSksIEAoY29sb3IuYWxwaGEoKSkgXTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBr
ZXlmcmFtZVZhbHVlLmNvbG9yVmFsdWUoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAg
ICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwgQChiKSwgQChhKSBdOwogICAgIH0KIAogICAgIGNh
c2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6UG9pbnRLZXlUeXBl
OiB7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjIxMDQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAyMC0wNS0yMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51cDogU3RvcCBhbGxvd2luZyBkaXJlY3Qg
YWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNvbG9yIChpdCBpcyBhbG1vc3QgYWx3YXlz
IGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5kZWQgY29sb3JzKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMTg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBj
b2xvciBjb21wb25lbnRzLgorCiAyMDIwLTA1LTIyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBkb3dubG9hZCByZXN1bWUgd29ya2Fy
b3VuZCBmb3JnaXZpbmcgb2YgY2hhbmdlcyBpbiBDRk5ldHdvcmsKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2
MjEwNCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDI2ICsxODIsMjkgQEAgVEVTVChDb2xvciwgVmFsaWRp
dHkpCiAgICAgdmFsaWRDb2xvciA9IENvbG9yKDEsIDIsIDMsIDQpOwogICAgIEVYUEVDVF9UUlVF
KHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4
dGVuZGVkKCkpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBF
Q1RfRVEodmFsaWRDb2xvci5ncmVlbigpLCAyKTsKLSAgICBFWFBFQ1RfRVEodmFsaWRDb2xvci5i
bHVlKCksIDMpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yLmFscGhhKCksIDQpOworICAgIGF1
dG8gc2ltcGxlVmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7Cisg
ICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7CisgICAg
RVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAzKTsKKyAgICBFWFBF
Q1RfRVEoc2ltcGxlVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKIAogICAgIENvbG9y
IHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwogICAgIEVYUEVDVF9U
UlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHll
dEFub3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgRVhQRUNUX0VRKHlldEFub3Ro
ZXJWYWxpZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29s
b3IuZ3JlZW4oKSwgMik7Ci0gICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yLmJsdWUo
KSwgMyk7Ci0gICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yLmFscGhhKCksIDQpOwor
ICAgIGF1dG8gc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IgPSB5ZXRBbm90aGVyVmFsaWRDb2xv
ci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90
aGVyVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVll
dEFub3RoZXJWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50KCksIDIpOworICAgIEVYUEVDVF9FUShz
aW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOworICAgIEVYUEVD
VF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKIAog
ICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3IpOwogICAg
IEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxT
RShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJWYWxp
ZENvbG9yLnJlZCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yLmdyZWVuKCks
IDIpOwotICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3IuYmx1ZSgpLCAzKTsKLSAgICBFWFBF
Q1RfRVEob3RoZXJWYWxpZENvbG9yLmFscGhhKCksIDQpOworICAgIGF1dG8gc2ltcGxlT3RoZXJW
YWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7Cisg
ICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsK
KyAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmJsdWVDb21wb25lbnQoKSwgMyk7
CisgICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400161</attachid>
            <date>2020-05-24 08:16:48 -0700</date>
            <delta_ts>2020-05-24 08:53:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212184-20200524081647.patch</filename>
            <type>text/plain</type>
            <size>55270</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0yMyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogU3RvcCBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFNpbXBsZUNv
bG9yIChpdCBpcyBhbG1vc3QgYWx3YXlzIGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5k
ZWQgY29sb3JzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyMTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAg
IC0gTWFrZXMgQ29sb3I6OnJnYigpIHByaXZhdGUsIHJlbW92aW5nIGEgY2xhc3Mgb2YgZXh0ZW5k
ZWQgY29sb3IgYnVncyBmcm9tIHVzZXJzIAorICAgICAgICAgIG9mIHRoZSBDb2xvciBjbGFzcy4g
VG8gZ2V0IHRoZSBlcXVpdmlsZW50IGZ1bmN0aW9uYWxpdHksIHVzZXJzIG9mIHRoZSBjbGFzcyBt
dXN0CisgICAgICAgICAgbm93IHVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHdoaWNoIGRv
ZXMgYWN0dWFsbHkgZG9lcyB0aGUgY29udmVyc2lvbiB0byBzUkdCCisgICAgICAgICAgaWYgbmVj
ZXNzYXJ5IGFuZCBtYWtlcyBpdCBjbGVhciB0byB0aGUgY2FsbGVyIHRoYXQgcHJlY2lzaW9uIGlz
IGJlaW5nIGxvc3QuIAorICAgICAgICAtIFJlbW92ZXMgQ29sb3I6OnJlZCgpL2dyZWVuKCkvYmx1
ZSgpIGVudGlyZWx5LiBUaGV5IHdlcmUganVzdCBjYWxsaW5nIGRvd24gdG8gCisgICAgICAgICAg
Q29sb3I6OnJnYigpLCBhbmQgZ29pbmcgZm9yd2FyZCwgaXQgd29uJ3QgbWFrZSBzZW5zZSB0byB0
aGluayBhYm91dCByZ2IgY29tcG9uZW50cworICAgICAgICAgIG9mIENvbG9ycyBpbiBnZW5lcmFs
LCBzaW5jZSBzb21lIGV4dGVuZGVkIGNvbG9yIHNwYWNlcyBkb24ndCBkZWFsIGluIHRoZW0gKGUu
Zy4gTGFiKQorICAgICAgICAgIENvbG9yOjphbHBoYSgpIHdhcyBrZXB0IChhbmQgZml4ZWQgdG8g
d29yayBldmVuIHdpdGggRXh0ZW5kZWRDb2xvcikgc2luY2UgYWxsCisgICAgICAgICAgRXh0ZW5k
ZWRDb2xvcnMgZG8gbmVlZCB0byBoYXZlIGFscGhhLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgIFVzZSB0b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcDoKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgor
ICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSB0byBnZXQgYWNjZXNzIHRvIGNv
bG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6
OmNvbG9yVmFsdWUgY29uc3QpOgorICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KSB0byBnZXQgYWNjZXNzIHRvIGNvbG9yIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBjc3MvRGVw
cmVjYXRlZENTU09NUkdCQ29sb3IuaDoKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCkgdG8gZ2V0IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNXaW5kb3dDU1MgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25z
QmFja2dyb3VuZENTUyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3IgY29uc3QpOgorICAgICAgICBVc2VyIENv
bG9yOjpjb2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIHRoZSBuZWVkIHRvIG11Y2sgd2l0aCBjb21w
b25lbnRzIGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZGlmZmVyZW5jZVNxdWFyZWQpOgorICAgICAgICBVc2Ugcmdi
KCkgZGlyZWN0bHksIHdoaWNoIGlzIG9rLCBzaW5jZSB0aGlzIGlzIGV4cGxpY2l0bHkgY2hlY2tp
bmcgaXNFeHRlbmRlZCgpLgorICAgICAgICBUaGlzIGNvZGUgaXMgc3RpbGwgd3JvbmcgKHRoZXJl
IGlzIGEgRklYTUUpIGFzIGl0IGFzc3VtZXMgdGhlIHR3byBjb2xvcnMgYXJlIGluCisgICAgICAg
IHRoZSBzYW1lIGNvbG9yIHNwYWNlLgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3Ip
OgorICAgICAgICBBZGQgY29uc3RydWN0b3Igd2hpY2ggdGFrZXMgYW4gRXh0ZW5kZWRDb2xvciB0
byBhbGxvdyBmdW5jdGlvbnMgbGlrZSAKKyAgICAgICAgQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEgdG8gZGVsZWdhdGUgdGhlaXIgZnVuY3Rpb25hbGl0eSB0byBFeHRlbmRlZENvbG9yLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodCBjb25zdCk6CisgICAgICAg
IFVzZSBuZXcgU2ltcGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhKCkgdG8gYXZvaWQgaGFyZGNvZGlu
ZyBjb25zdGFudHMgaGVyZS4KKworICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAg
ICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3Ig
Y29tcG9uZW50cy4gVGhlc2UKKyAgICAgICAgYXJlIHN0aWxsIG5vdCBpZGVhbCBpbXBsZW1lbnRh
dGlvbnMsIGFzIHRoZXkgZG9uJ3QgcHJlc2VydmUgZXh0ZW5kZWQgY29sb3JzCisgICAgICAgIGFz
IHdlbGwgYXMgdGhleSBjb3VsZCwgYnV0IG5vdyB0aGV5IGRvbid0IHJldHVybiBib2d1cyB2YWx1
ZXMgZm9yIGV4dGVuZGVkCisgICAgICAgIGNvbG9ycy4gTWlub3IgY2xlYW51cCBicmluZ2luZyBj
b25zdGFudHMgYW5kIGxhbWJkYSBpbnNpZGUgdGhlIGZ1bmN0aW9uIHRoZXkKKyAgICAgICAgYXJl
IHVzZWQgaW4uCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIE1pbm9yIGNsZWFudXBzIHRvIHVz
ZSBhIG1vcmUgY29uc2lzdGVudCBzdHlsZSBhbmQgbWFrZSB1c2Ugb2YgdGhlIG5ldworICAgICAg
ICBTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEuCisgICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAgICAgICBBZGRlZC4g
VXNlZCB0byBhdm9pZCBkaXJlY3QgY29tcG9uZW50IHVzYWdlIGluIGxpbmUgYm94IGNvZGUuCisK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAg
QWRkZWQuIEhvcGVmdWxseSB0ZW1wb3JhcnkuIFVzZWQgYnkgUmVuZGVyVGhlbWVJT1MubW0gdG8g
Y29udmVydAorICAgICAgICBhIENvbG9yIGZyb20gYSBtYXAgaW50byBhIENvbG9yIHdpdGggdGhl
IHNlbWFudGljIGJpdCBzZXQuIFRoaXMgCisgICAgICAgIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5
IGFzIGV2ZXJ5IGNvbG9yIGluIHRoZSBtYXAgc2hvdWxkIGFscmVhZHkKKyAgICAgICAgaGF2ZSBp
dCBzZXQsIGJ1dCB0byBhdm9pZCB1bmNlc3NhcnkgcG9zc2libGUgYmVoYXZpb3IgY2hhbmdlcyB0
aGlzCisgICAgICAgIHByZXNlcnZlcyB0aGF0IGZ1bmN0aW9uYWxpdHkgdW50aWwgaXQgY2FuIGJl
IHJlc2VhcmNoZWQgZnVydGhlci4KKyAgICAgICAgRml4aW5nIGNvZGVycyB0byBwcmVzZXJ2ZSB0
aGUgc2VtYW50aWMgYml0IG1heSBiZSByZXF1aXJlZCB0byAKKyAgICAgICAgZWxsaW1pbmF0ZSB0
aGUgbmVlZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFu
ZENvbXBvbmVudHMgY29uc3QpOgorICAgICAgICBVc2UgcmdiKCkgcmF0aGVyIHRoYW4gdGhlIGlu
ZGl2aWR1YWwgY29tcG9uZW50cyB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudEFzRmxvYXQgY29uc3QpOgorICAgICAgICBBZGRlZC4g
TmVlZGVkIGJ5IERlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yIGFuZCB1c2VmdWwgdG8gQ29sb3IuCisK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6Cisg
ICAgICAgIFVzZWZ1bCB0byBzaW1wbGlmeSBDb2xvcjo6Y29sb3JXaXRoQWxwaGEgaW1wbGVtZW50
YXRpb25zIGFuZAorICAgICAgICBpbiBDb2xvcjo6ZGFyaygpLgorCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVDb2xvcjo6Z2V0IGNvbnN0KToKKyAgICAgICAgQWRkZWQgdHVwbGUgaW50ZXJmYWNl
IHRvIFNpbXBsZUNvbG9yIHRvIHN1cHBvcnQgc3RydWN0dXJlIGJpbmRpbmdzLgorICAgICAgICBO
T1RFOiBVbmxpa2UgdGhlIHN0b3JhZ2Ugb2YgU2ltcGxlQ29sb3IgKEFSR0IpLCB0aGlzIHByb2R1
Y2VzIHRoZQorICAgICAgICBiaW5kaW5ncyBpbiB0aGUgbW9yZSBmYW1pbGlhciBbcixnLGIsYV0g
dG8gbWF0Y2ggRmxvYXRDb21wb25lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjphbHBoYSBjb25zdCk6CisgICAgICAgIE1hZGUgd29yayB3aXRoIEV4dGVuZGVkQ29sb3Ig
YXMgd2VsbC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cmVkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Ymx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IFJlbW92ZWQuCisKKyAgICAgICAgKENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcik6IAorICAgICAg
ICAoaW50IGRpZmZlcmVuY2VTcXVhcmVkKTogCisgICAgICAgIE1hZGUgZnJpZW5kcyBzbyB0aGV5
IGNvdWxkIHVzZSBDb2xvcjo6cmdiKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpyZ2Ig
Y29uc3QpOiAKKyAgICAgICAgTWFkZSBwcml2YXRlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9y
OjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIEFkZGVkIGludmVydGVkQ29sb3JXaXRoQWxw
aGEgdG8gYWxsb3cgaW52ZXJzaW9uIHRvIGJlIGVuY2Fwc3VsYXRlZC4KKyAgICAgICAgV2hlbiBm
dXR1cmUgY29sb3Igc3BhY2VzIGFyZSBhZGRlZCwgd2UgbWF5IG5lZWQgdG8gY2hvb3NlIHBlci1j
b2xvcnNwYWNlCisgICAgICAgIGFsZ29yaXRobXMgZm9yIHRoaXMgaW5zdGVhZCBvZiB0aGUgdHJp
dmlhbCBvbmUgdXNlZCB0b2RheS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyk6CisgICAgICAgIFVzZSB0b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZyb21WYWx1ZSk6Cisg
ICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFBs
YXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAgICAgIFVzZSB0b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIFVzZSBDb2xvcjo6
Y29sb3JXaXRoQWxwaGEoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25lbnRzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdO
RU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvbik6
CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8g
Y29sb3IgY29tcG9uZW50cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
bGVhckNvbG9yKToKKyAgICAgICAgVXNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgdG8gZ2V0
IGFjY2VzcyB0byBjb2xvciBjb21wb25lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6ZHJhd0dseXBocyk6CisgICAgICAgIFVzZSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgp
IHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVudHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgVXNlIGNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5KCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgVXNlIGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KCkgdG8gYXZvaWQgbmVlZGluZyBhY2Nlc3MgdG8gY29tcG9uZW50
cy4KKworICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICBVc2UgaW52ZXJ0ZWRD
b2xvcldpdGhBbHBoYSgpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNvbXBvbmVudHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KToKKyAgICAgICAgVXNl
IGludmVydGVkQ29sb3JXaXRoQWxwaGEoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21w
b25lbnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6
CisgICAgICAgIFVzZSBvcGFxdWVDb2xvcigpIHRvIGF2b2lkIG5lZWRpbmcgYWNjZXNzIHRvIGNv
bXBvbmVudHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IgY29uc3QpOgorICAgICAg
ICBVc2Ugb3BhcXVlQ29sb3IoKSB0byBhdm9pZCBuZWVkaW5nIGFjY2VzcyB0byBjb21wb25lbnRz
LgorCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1
bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JGdW5jdGlv
bjo6YW5pbWF0ZSk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHRvIGdl
dCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKwogMjAyMC0wNS0yMyAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gVGFrZSByb3cgYm9yZGVy
IGludG8gYWNjb3VudCB3aGVuIGNvbXB1dGluZyBjb2xsYXBzZWQgYm9yZGVycy4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2
MiwxMCArMTk2MiwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVl
CiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSku
dmFsdWVBc0NvbG9yKCk7Ci0gICAgciA9IGNvbG9yLnJlZCgpOwotICAgIGcgPSBjb2xvci5ncmVl
bigpOwotICAgIGIgPSBjb2xvci5ibHVlKCk7CisgICAgYXV0byBjb2xvciA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOworICAgIGcgPSBjb2xvci5n
cmVlbkNvbXBvbmVudCgpOworICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50KCk7CiAjZW5kaWYK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24g
MjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMyArOTIsMTUgQEAg
c3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0RgogCiAgICAgQ29sb3IgYmdD
b2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpOwogICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBidWZmZXIucmVz
ZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIGJnQ29sb3IucmVkKCksIGJnQ29sb3IuZ3Jl
ZW4oKSwgYmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0Nv
bG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGJ1ZmZlci5yZXNldChnX3N0
cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtf
VEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKICAgICBDb2xvciBm
Z0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsK
ICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3Ry
ZHVwX3ByaW50ZigiJWksJWksJWkiLCBmZ0NvbG9yLnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZn
Q29sb3IuYmx1ZSgpKSk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBidWZmZXIucmVzZXQoZ19zdHJkdXBfcHJp
bnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRy
aWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5OCwxMCArNjk4LDEwIEBAIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0UHJldmVudEtl
eWJvYXIKIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvclZhbHVlKGludCYgciwgaW50JiBn
LCBpbnQmIGIpIGNvbnN0CiB7Ci0gICAgYXV0byBjb2xvciA9IGNvbG9yQXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpOwotICAgIHIgPSBjb2xvci5yZWQoKTsKLSAgICBn
ID0gY29sb3IuZ3JlZW4oKTsKLSAgICBiID0gY29sb3IuYmx1ZSgpOworICAgIGF1dG8gY29sb3Ig
PSBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKS50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKKyAgICBn
ID0gY29sb3IuZ3JlZW5Db21wb25lbnQoKTsKKyAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgp
OwogfQogCiBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFs
dWUmIGJsdWUoKSB7IHJldHVybiBtX2JsdWU7IH0KICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZSYgYWxwaGEoKSB7IHJldHVybiBtX2FscGhhOyB9CiAKLSAgICBDb2xvciBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBTaW1wbGVDb2xvciBjb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBO
dW1iZXJUeXBlPiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBjcmVh
dGVXcmFwcGVyKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJlcikK
QEAgLTQ2LDE1ICs0NiwxNSBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIERlcHJlY2F0ZWRDU1NP
TVJHQkNvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBjb25zdCBDb2xvciYgY29sb3Ip
Ci0gICAgICAgIDogbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVy
KG93bmVyLCBjb2xvci5yZWQoKSkpCi0gICAgICAgICwgbV9ncmVlbihjcmVhdGVXcmFwcGVyKG93
bmVyLCBjb2xvci5ncmVlbigpKSkKLSAgICAgICAgLCBtX2JsdWUoY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuYmx1ZSgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIs
IGNvbG9yLmFscGhhQXNGbG9hdCgpKSkKKyAgICAgICAgOiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCkpCisgICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihvd25lciwg
bV9jb2xvci5yZWRDb21wb25lbnQoKSkpCisgICAgICAgICwgbV9ncmVlbihjcmVhdGVXcmFwcGVy
KG93bmVyLCBtX2NvbG9yLmdyZWVuQ29tcG9uZW50KCkpKQorICAgICAgICAsIG1fYmx1ZShjcmVh
dGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWVDb21wb25lbnQoKSkpCisgICAgICAgICwgbV9h
bHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmFscGhhQ29tcG9uZW50QXNGbG9hdCgp
KSkKICAgICB7CiAgICAgfQogCi0gICAgQ29sb3IgbV9jb2xvcjsKKyAgICBTaW1wbGVDb2xvciBt
X2NvbG9yOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9yZWQ7CiAg
ICAgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2dyZWVuOwogICAgIFJlZjxE
ZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ibHVlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJl
dmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNyArMjc2LDcgQEAgU3RyaW5n
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYQogICAgIENHRmxvYXQgb3BhY2l0eSA9
IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNl
RG9tYWluVXNlciwgJmJlaGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1w
b3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVl
OwotICAgIFN0cmluZyB3aW5kb3dTdHlsZSA9IGNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IsIENvbG9yKHdpbmRvd0NvbG9yLnJlZCgpLCB3aW5kb3dDb2xvci5ncmVl
bigpLCB3aW5kb3dDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkp
LCBpbXBvcnRhbnQpOworICAgIFN0cmluZyB3aW5kb3dTdHlsZSA9IGNvbG9yUHJvcGVydHlDU1Mo
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHdpbmRvd0NvbG9yLmNvbG9yV2l0aEFscGhhKG9w
YWNpdHkpLCBpbXBvcnRhbnQpOwogCiAgICAgaWYgKCFvcGFjaXR5KQogICAgICAgICByZXR1cm4g
d2luZG93U3R5bGU7CkBAIC0zMDEsNyArMzAxLDcgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpjYQogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFu
Y2VHZXRCYWNrZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZi
ZWhhdmlvcik7CiAgICAgaWYgKCFpbXBvcnRhbnQpCiAgICAgICAgIGltcG9ydGFudCA9IGJlaGF2
aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICByZXR1cm4g
Y29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3IoYmFja2dy
b3VuZENvbG9yLnJlZCgpLCBiYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgYmFja2dyb3VuZENvbG9y
LmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSksIGltcG9ydGFudCk7Cisg
ICAgcmV0dXJuIGNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGJh
Y2tncm91bmRDb2xvci5jb2xvcldpdGhBbHBoYShvcGFjaXR5KSwgaW1wb3J0YW50KTsKIH0KIAog
Q29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJv
b2wmIGltcG9ydGFudCkgY29uc3QKQEAgLTMxNyw3ICszMTcsNyBAQCBDb2xvciBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwCiAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9u
QXBwZWFyYW5jZUdldEZvcmVncm91bmRPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWlu
VXNlciwgJmJlaGF2aW9yKTsKICAgICBpZiAoIWltcG9ydGFudCkKICAgICAgICAgaW1wb3J0YW50
ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAg
IHJldHVybiBDb2xvcih0ZXh0Q29sb3IucmVkKCksIHRleHRDb2xvci5ncmVlbigpLCB0ZXh0Q29s
b3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9wYWNpdHkgKiAyNTUpKTsKKyAgICByZXR1cm4g
dGV4dENvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpOwogfQogICAgIAogU3RyaW5nIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvckNTUygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMiArMTgwLDEyIEBAIGludCBkaWZmZXJlbmNlU3F1YXJl
ZChjb25zdCBDb2xvciYgYzEsIGMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkg
cmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUgY2FsbAogICAg
IC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9uIGZlZWwuIFdl
J2QgbmVlZCB0byBicmVhayBvdXQKICAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxlcyB0byBjaGFu
Z2UgdGhlbSA6KQotICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5k
ZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJlZCgpOwotICAgIGludCBjMUdyZWVuID0gYzEuaXNFeHRl
bmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5ncmVlbigpOwotICAg
IGludCBjMUJsdWUgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICog
MjU1IDogYzEuYmx1ZSgpOwotICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFz
RXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJlZCgpOwotICAgIGludCBjMkdyZWVuID0gYzIu
aXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMi5ncmVlbigp
OwotICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuYmx1
ZSgpICogMjU1IDogYzIuYmx1ZSgpOworICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/
IGMxLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJnYigpLnJlZENvbXBvbmVudCgpOwor
ICAgIGludCBjMUdyZWVuID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVu
KCkgKiAyNTUgOiBjMS5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOworICAgIGludCBjMUJsdWUgPSBj
MS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzEucmdiKCku
Ymx1ZUNvbXBvbmVudCgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFz
RXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJnYigpLnJlZENvbXBvbmVudCgpOworICAgIGlu
dCBjMkdyZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAy
NTUgOiBjMi5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOworICAgIGludCBjMkJsdWUgPSBjMi5pc0V4
dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzIucmdiKCkuYmx1ZUNv
bXBvbmVudCgpOwogICAgIGludCBkUiA9IGMxUmVkIC0gYzJSZWQ7CiAgICAgaW50IGRHID0gYzFH
cmVlbiAtIGMyR3JlZW47CiAgICAgaW50IGRCID0gYzFCbHVlIC0gYzJCbHVlOwpAQCAtMjUwLDEy
ICsyNTAsMTYgQEAgQ29sb3I6OkNvbG9yKENvbG9yJiYgb3RoZXIpCiB9CiAKIENvbG9yOjpDb2xv
cihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQorICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMs
IGFscGhhLCBjb2xvclNwYWNlKSkKK3sKK30KKworQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGV4dGVuZGVkQ29sb3IpCiB7CiAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4g
Y2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQogICAgIC8vIHRvcCAzMiBiaXRz
IHdoZW4gY29weWluZyB0aGUgZXh0ZW5kZWRDb2xvciBwb2ludGVyIGJlbG93LgogICAgIG1fY29s
b3JEYXRhLnJnYmFBbmRGbGFncyA9IDA7Ci0gICAgYXV0byBleHRlbmRlZENvbG9yUmVmID0gRXh0
ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKTsKLSAgICBt
X2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3JSZWYubGVha1JlZigpOwor
ICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7
CiAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiB9CiAKQEAgLTM2MywxNyArMzY3LDE3IEBAIENv
bG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CiAKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBn
LCBiIH0pOwogCi0gICAgaWYgKHYgPT0gMC4wZikgewotICAgICAgICAvLyBMaWdodGVuZWQgYmxh
Y2sgd2l0aCBhbHBoYS4KLSAgICAgICAgcmV0dXJuIENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFs
cGhhKCkpOwotICAgIH0KKyAgICBpZiAodiA9PSAwLjBmKQorICAgICAgICByZXR1cm4gbGlnaHRl
bmVkQmxhY2suY29sb3JXaXRoQWxwaGEoYWxwaGEoKSk7CiAKICAgICBmbG9hdCBtdWx0aXBsaWVy
ID0gc3RkOjptaW4oMS4wZiwgdiArIDAuMzNmKSAvIHY7CiAKLSAgICByZXR1cm4gQ29sb3Ioc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFj
dG9yKSwKLSAgICAgICAgICAgICAgICAgYWxwaGEoKSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAg
YWxwaGEoKQorICAgIH07CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTM4OSwx
MCArMzkzLDEyIEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICBmbG9hdCB2ID0gc3Rk
OjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBm
LCAodiAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4o
bXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
ICAgICAgICAgIGFscGhhKCkpOworICAgIHJldHVybiB7CisgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCisgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCisgICAgICAgIGFscGhhKCkKKyAgICB9
OwogfQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtNDA5LDE5ICs0MTUsNiBAQCBm
bG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKICAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRu
ZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiB9CiAKLXN0YXRpYyBpbnQgYmxlbmRDb21w
b25lbnQoaW50IGMsIGludCBhKQotewotICAgIC8vIFdlIHVzZSB3aGl0ZS4KLSAgICBmbG9hdCBh
bHBoYSA9IGEgLyAyNTUuMGY7Ci0gICAgaW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOwotICAgIGMg
LT0gd2hpdGVCbGVuZDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOwot
fQotCi1jb25zdCBpbnQgY1N0YXJ0QWxwaGEgPSAxNTM7IC8vIDYwJQotY29uc3QgaW50IGNFbmRB
bHBoYSA9IDIwNDsgLy8gODAlOwotY29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJ
bmNyZW1lbnRzIGluIGJldHdlZW4uCi0KIENvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYg
c291cmNlKSBjb25zdAogewogICAgIGlmICghaXNWaXNpYmxlKCkgfHwgc291cmNlLmlzT3BhcXVl
KCkpCkBAIC00MzAsMzcgKzQyMyw1NSBAQCBDb2xvciBDb2xvcjo6YmxlbmQoY29uc3QgQ29sb3Im
IHNvdXJjZSkgCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuICp0aGlz
OwogCi0gICAgaW50IGQgPSAyNTUgKiAoYWxwaGEoKSArIHNvdXJjZS5hbHBoYSgpKSAtIGFscGhh
KCkgKiBzb3VyY2UuYWxwaGEoKTsKLSAgICBpbnQgYSA9IGQgLyAyNTU7Ci0gICAgaW50IHIgPSAo
cmVkKCkgKiBhbHBoYSgpICogKDI1NSAtIHNvdXJjZS5hbHBoYSgpKSArIDI1NSAqIHNvdXJjZS5h
bHBoYSgpICogc291cmNlLnJlZCgpKSAvIGQ7Ci0gICAgaW50IGcgPSAoZ3JlZW4oKSAqIGFscGhh
KCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3Vy
Y2UuZ3JlZW4oKSkgLyBkOwotICAgIGludCBiID0gKGJsdWUoKSAqIGFscGhhKCkgKiAoMjU1IC0g
c291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UuYmx1ZSgpKSAv
IGQ7Ci0gICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIGEpOworICAgIGF1dG8gW3NlbGZSLCBzZWxm
Rywgc2VsZkIsIHNlbGZBXSA9IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBb
c291cmNlUiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKKworICAgIGludCBkID0gMHhGRiAqIChzZWxmQSArIHNvdXJjZUEpIC0g
c2VsZkEgKiBzb3VyY2VBOworICAgIGludCBhID0gZCAvIDB4RkY7CisgICAgaW50IHIgPSAoc2Vs
ZlIgKiBzZWxmQSAqICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZVIp
IC8gZDsKKyAgICBpbnQgZyA9IChzZWxmRyAqIHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4
RkYgKiBzb3VyY2VBICogc291cmNlRykgLyBkOworICAgIGludCBiID0gKHNlbGZCICogc2VsZkEg
KiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VCKSAvIGQ7CisKKyAg
ICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpibGVuZFdp
dGhXaGl0ZSgpIGNvbnN0CiB7CisgICAgY29uc3RleHByIGludCBzdGFydEFscGhhID0gMTUzOyAv
LyA2MCUKKyAgICBjb25zdGV4cHIgaW50IGVuZEFscGhhID0gMjA0OyAvLyA4MCU7CisgICAgY29u
c3RleHByIGludCBhbHBoYUluY3JlbWVudCA9IDE3OworCisgICAgYXV0byBibGVuZENvbXBvbmVu
dCA9IFtdKGludCBjLCBpbnQgYSkgLT4gaW50IHsKKyAgICAgICAgZmxvYXQgYWxwaGEgPSBhIC8g
MjU1LjBmOworICAgICAgICBpbnQgd2hpdGVCbGVuZCA9IDI1NSAtIGE7CisgICAgICAgIGMgLT0g
d2hpdGVCbGVuZDsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYyAvIGFscGhhKTsK
KyAgICB9OworCiAgICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhhIGFscmVhZHksIHdl
IGxlYXZlIGl0IGFsb25lLgogICAgIGlmICghaXNPcGFxdWUoKSkKICAgICAgICAgcmV0dXJuICp0
aGlzOwogCi0gICAgQ29sb3IgbmV3Q29sb3I7Ci0gICAgZm9yIChpbnQgYWxwaGEgPSBjU3RhcnRB
bHBoYTsgYWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNyZW1lbnQpIHsKKyAg
ICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3RpbmdCLCBleGlzdGluZ0FscGhhXSA9
IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICBDb2xvciByZXN1bHQ7CisgICAgZm9y
IChpbnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxw
aGFJbmNyZW1lbnQpIHsKICAgICAgICAgLy8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVy
dCB0byBhbiBlcXVpdmFsZW50IGNvbG9yIHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVk
IHdpdGggd2hpdGUKICAgICAgICAgLy8gYXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcg
bGVzcyB0cmFuc3BhcmVuY3kgaWYgdGhlIG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgot
ICAgICAgICBpbnQgciA9IGJsZW5kQ29tcG9uZW50KHJlZCgpLCBhbHBoYSk7Ci0gICAgICAgIGlu
dCBnID0gYmxlbmRDb21wb25lbnQoZ3JlZW4oKSwgYWxwaGEpOwotICAgICAgICBpbnQgYiA9IGJs
ZW5kQ29tcG9uZW50KGJsdWUoKSwgYWxwaGEpOworICAgICAgICBpbnQgciA9IGJsZW5kQ29tcG9u
ZW50KGV4aXN0aW5nUiwgYWxwaGEpOworICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4
aXN0aW5nRywgYWxwaGEpOworICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5n
QiwgYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgbmV3Q29sb3IgPSBDb2xvcihyLCBnLCBiLCBh
bHBoYSk7CisgICAgICAgIHJlc3VsdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGFscGhhKTsKIAogICAg
ICAgICBpZiAociA+PSAwICYmIGcgPj0gMCAmJiBiID49IDApCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiAKKyAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJp
dCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAg
ICAgICAgbmV3Q29sb3Iuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiBuZXdDb2xvcjsKKyAg
ICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBD
b2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25z
dApAQCAtNDc3LDEzICs0ODgsMTUgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5VQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0
CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmdy
ZWVuKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworICAgIGlmIChpc0V4dGVuZGVkKCkp
IHsKKyAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKKyAgICAgICAg
cmV0dXJuIENvbG9yIHsgZXh0ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5kZWRDb2xvci5ncmVlbigp
LCBleHRlbmRlZENvbG9yLmJsdWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgp
IH07CisgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBk
aWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcuCi0gICAg
aW50IG5ld0FscGhhID0gYWxwaGEgKiAyNTU7CisgICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhh
ICogMHhGRjsKIAotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwg
bmV3QWxwaGEgfTsKKyAgICBDb2xvciByZXN1bHQgPSByZ2IoKS5jb2xvcldpdGhBbHBoYShuZXdB
bHBoYSk7CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAgICAgcmVzdWx0LnNldElzU2VtYW50
aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkxLDE1ICs1MDQsMzcgQEAgQ29sb3IgQ29s
b3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAg
aWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgbV9jb2xvckRhdGEuZXh0
ZW5kZWRDb2xvci0+cmVkKCksIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmdyZWVuKCksIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmJsdWUoKSwgYWxwaGEsIG1fY29sb3JEYXRhLmV4dGVu
ZGVkQ29sb3ItPmNvbG9yU3BhY2UoKSB9OworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAg
ICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKKyAgICAgICAgcmV0dXJuIENv
bG9yIHsgZXh0ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5kZWRDb2xvci5ncmVlbigpLCBleHRlbmRl
ZENvbG9yLmJsdWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpIH07CisgICAg
fQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZy
b20gY29sb3JXaXRoQWxwaGFVc2luZy4KKyAgICB1aW50OF90IG5ld0FscGhhID0gY29sb3JGbG9h
dFRvUkdCQUJ5dGUoYWxwaGEpOwogCi0gICAgQ29sb3IgcmVzdWx0ID0gU2ltcGxlQ29sb3IgeyAo
cmdiKCkudmFsdWUoKSAmIDB4MDBGRkZGRkYpIHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEp
IDw8IDI0IH07CisgICAgQ29sb3IgcmVzdWx0ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxw
aGEpOwogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGlj
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JX
aXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuIENvbG9yIHsgYXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEo
YWxwaGEpIH07CisKKyAgICBhdXRvIFtyLCBnLCBiLCBleGlzdGluZ0FscGhhXSA9IHJnYigpOwor
ICAgIHJldHVybiB7IDB4RkYgLSByLCAweEZGIC0gZywgMHhGRiAtIGIsIGNvbG9yRmxvYXRUb1JH
QkFCeXRlKGFscGhhKSB9OworfQorCitDb2xvciBDb2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0
Cit7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
cmV0dXJuIHsgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSwgU2VtYW50aWMgfTsKK30KKwogc3Rk
OjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CkBAIC01MDcsNyAr
NTQyLDggQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQwogICAgICAg
ICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFu
bmVscygpIH07CiAgICAgfQogCi0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRD
b21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1
NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdi
KCk7CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAv
IDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBT
aW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICBjb25zdGV4cHIgdWludDhfdCBibHVl
Q29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50
OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQogCisg
ICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KKwogICAgIGNv
bnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9
PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
YWxwaGFDb21wb25lbnQoKTsgfQogCkBAIC03Niw2ICs3OCwyMiBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25zdDsKICAgICBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKIAorICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVl
ICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAgICAgICAgaWYgY29uc3RleHByICghTikKKyAgICAg
ICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBncmVlbkNvbXBvbmVudCgpOworICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQorICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25l
bnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB1aW50MzJfdCBt
X3ZhbHVlIHsgMCB9OwogfTsKQEAgLTE3MSw2ICsxODksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQog
ICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIG5v
cm1hbCBDb2xvci4KICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihmbG9hdCwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgQ29sb3JTcGFjZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoUmVmPEV4dGVu
ZGVkQ29sb3I+JiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xvciYmKTsKQEAgLTE5NSwxNCArMjE0LDggQEAg
cHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiByZ2IoKS5pc09wYXF1ZSgpOyB9CiAgICAg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA+IDAuMCA6IHJnYigpLmlzVmlzaWJsZSgpOyB9CiAKLSAgICBpbnQgcmVkKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkucmVkQ29tcG9uZW50KCk7IH0KLSAgICBpbnQgZ3JlZW4oKSBj
b25zdCB7IHJldHVybiByZ2IoKS5ncmVlbkNvbXBvbmVudCgpOyB9Ci0gICAgaW50IGJsdWUoKSBj
b25zdCB7IHJldHVybiByZ2IoKS5ibHVlQ29tcG9uZW50KCk7IH0KLSAgICBpbnQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiByZ2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9Ci0KLSAgICBmbG9hdCBhbHBo
YUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxw
aGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihyZ2IoKS5hbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7
IH0KLQotICAgIFJHQkEzMiByZ2IoKSBjb25zdDsKKyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJl
dHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6IHJnYigpLmFs
cGhhQ29tcG9uZW50KCk7IH0KKyAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IHJnYigpLmFscGhhQ29tcG9u
ZW50QXNGbG9hdCgpOyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTIyNSw2
ICsyMzgsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsK
ICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0OwogCisgICAgQ29sb3IgaW52ZXJ0ZWRD
b2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CisKICAgICBDb2xvciBjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEo
ZmxvYXQpIGNvbnN0OwogCkBAIC0yMzUsNiArMjUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0
KSBjb25zdDsKIAogICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JX
aXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAg
ICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29s
b3IgbmFtZS4KICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRl
ZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0
KTsgfQpAQCAtMjQ3LDYgKzI2Myw3IEBAIHB1YmxpYzoKICNpZiBVU0UoQ0cpCiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dD
b2xvclJlZiwgU2VtYW50aWNUYWcpOworICAgIGZyaWVuZCBXRUJDT1JFX0VYUE9SVCBDR0NvbG9y
UmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKQpAQCAtMjg4LDYgKzMwNSw4IEBAIHB1YmxpYzoKICAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAgICAgZnJpZW5kIGJvb2wgZXF1
YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsK
IAorICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBD
b2xvciYpOworCiAgICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7CiAg
ICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAKQEAgLTI5NSw2ICsz
MTQsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgorICAgIFJHQkEzMiByZ2Io
KSBjb25zdDsKICAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBiKSB7IHNldFJHQiht
YWtlUkdCKHIsIGcsIGIpKTsgfQogICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7CiAgICAgdm9pZCBz
ZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRpY1JC
R0FDb2xvckJpdDsgfQpAQCAtNTMwLDMgKzU1MCwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+OwogfQorCituYW1lc3BhY2Ugc3RkIHsKKwor
dGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJs
aWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4geworfTsKKwordGVtcGxh
dGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxl
Q29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhfdDsKK307CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNCArNjMsMTAgQEAg
U3RyaW5nIEV4dGVuZGVkQ29sb3I6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIHJlZCgpLCAnICcsIGdyZWVuKCksICcgJywg
Ymx1ZSgpLCAiIC8gIiwgYWxwaGEoKSwgJyknKTsKIH0KIAorUmVmPEV4dGVuZGVkQ29sb3I+IEV4
dGVuZGVkQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Cit7
CisgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjaGFubmVscygpOworICAg
IHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYg
LSBjMywgYWxwaGEsIGNvbG9yU3BhY2UoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjEw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCisgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGlu
dmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEV4dGVu
ZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NoYW5uZWxzKGMxLCBjMiwgYzMsIGFscGhh
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0lu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NCwyNCArNjQsMjMgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFu
ZFRleHRUcgogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotc3RhdGljIGJvb2wgbWFrZVJHQkEzMkZy
b21BUkdCQ0ZBcnJheShDRkFycmF5UmVmIGNvbG9yQXJyYXksIFJHQkEzMiYgY29sb3IpCitzdGF0
aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkoQ0ZBcnJh
eVJlZiBjb2xvckFycmF5KQogewogICAgIGlmIChDRkFycmF5R2V0Q291bnQoY29sb3JBcnJheSkg
PCA0KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBmbG9hdCBjb21wb25lbnRBcnJheVs0XTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IDQ7IGkrKykgewogICAgICAgICBDRk51bWJlclJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PENGTnVt
YmVyUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvbG9yQXJyYXksIGkpKTsKICAgICAgICAg
aWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRk51bWJlckdldFR5cGVJRCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
ICAgICBmbG9hdCBjb21wb25lbnQ7CiAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWUsIGtD
Rk51bWJlckZsb2F0VHlwZSwgJmNvbXBvbmVudCk7CiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ld
ID0gY29tcG9uZW50OwogICAgIH0KIAotICAgIGNvbG9yID0gbWFrZVJHQkEzMkZyb21GbG9hdHMo
Y29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwg
Y29tcG9uZW50QXJyYXlbMF0pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtYWtlUkdC
QTMyRnJvbUZsb2F0cyhjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBv
bmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSk7CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmlj
Q3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0
dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZykKQEAgLTI2OCwxMCArMjY3LDEwIEBA
IFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcmkKICAgICAgICAgICAgICAg
ICBpZiAoQ0ZHZXRUeXBlSUQoYXJyYXlWYWx1ZSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBSR0JBMzIgY29sb3I7Ci0gICAgICAgICAgICAgICAgaWYgKCFtYWtlUkdCQTMyRnJvbUFS
R0JDRkFycmF5KGFycmF5VmFsdWUsIGNvbG9yKSkKKyAgICAgICAgICAgICAgICBhdXRvIGNvbG9y
ID0gbWFrZVJHQkEzMkZyb21BUkdCQ0ZBcnJheShhcnJheVZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbG9yKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBjdWVEYXRhLT5zZXRGb3JlZ3JvdW5kQ29sb3IoY29sb3IpOworICAgICAgICAgICAgICAg
IGN1ZURhdGEtPnNldEZvcmVncm91bmRDb2xvcigqY29sb3IpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yODAsMTAgKzI3OSwxMCBA
QCBSZWY8SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpCiAgICAgICAgICAgICAg
ICAgaWYgKENGR2V0VHlwZUlEKGFycmF5VmFsdWUpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgUkdCQTMyIGNvbG9yOwotICAgICAgICAgICAgICAgIGlmICghbWFrZVJHQkEzMkZyb21B
UkdCQ0ZBcnJheShhcnJheVZhbHVlLCBjb2xvcikpCisgICAgICAgICAgICAgICAgYXV0byBjb2xv
ciA9IG1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXkoYXJyYXlWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb2xvcikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgY3VlRGF0YS0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgICAg
ICBjdWVEYXRhLT5zZXRCYWNrZ3JvdW5kQ29sb3IoKmNvbG9yKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMjkyLDEwICsyOTEsMTAgQEAgUmVmPEluYmFu
ZEdlbmVyaWNDdWU+IEluYmFuZFRleHRUcmFja1ByaQogICAgICAgICAgICAgICAgIGlmIChDRkdl
dFR5cGVJRChhcnJheVZhbHVlKSAhPSBDRkFycmF5R2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJHQkEz
MiBjb2xvcjsKLSAgICAgICAgICAgICAgICBpZiAoIW1ha2VSR0JBMzJGcm9tQVJHQkNGQXJyYXko
YXJyYXlWYWx1ZSwgY29sb3IpKQorICAgICAgICAgICAgICAgIGF1dG8gY29sb3IgPSBtYWtlUkdC
QTMyRnJvbUFSR0JDRkFycmF5KGFycmF5VmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY29s
b3IpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGN1ZURh
dGEtPnNldEhpZ2hsaWdodENvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgICAgICBjdWVEYXRhLT5z
ZXRIaWdobGlnaHRDb2xvcigqY29sb3IpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0RnJvbVZhCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgp
KSBzZXRGcm9tVmFsdWU6QFtAKHZhbHVlLnJlZCgpKSwgQCh2YWx1ZS5ncmVlbigpKSwgQCh2YWx1
ZS5ibHVlKCkpLCBAKHZhbHVlLmFscGhhKCkpXV07CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2
YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0AociksIEAoZyks
IEAoYiksIEAoYSldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZy
b21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmls
dGVyUHJvcGVydHlJbmRleCkKQEAgLTQzOCw3ICs0MzksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6c2V0VG9WYWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQCh2YWx1ZS5yZWQoKSksIEAodmFsdWUuZ3JlZW4o
KSksIEAodmFsdWUuYmx1ZSgpKSwgQCh2YWx1ZS5hbHBoYSgpKV1dOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBbc3RhdGljX2Nh
c3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChy
KSwgQChnKSwgQChiKSwgQChhKV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YTo6c2V0VG9WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50IGludGVy
bmFsRmlsdGVyUHJvcGVydHlJbmRleCkKQEAgLTQ5NCw3ICs0OTYsOCBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzCiAgICAgICAgIHJldHVybjsKIAogICAgIFtzdGF0
aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVl
czpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsKLSAgICAgICAgcmV0dXJu
IEBbQChjb2xvci5yZWQoKSksIEAoY29sb3IuZ3JlZW4oKSksIEAoY29sb3IuYmx1ZSgpKSwgQChj
b2xvci5hbHBoYSgpKV07CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgcmV0dXJuIEBbQChyKSwgQChnKSwgQChiKSwg
QChhKV07CiAgICAgfSkuZ2V0KCldOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw3ICszNjcsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZy
b21WYWx1CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQ0dGbG9hdCBhWzRdID0geyB2YWx1ZS5yZWQoKSwgdmFsdWUuZ3JlZW4oKSwgdmFs
dWUuYmx1ZSgpLCB2YWx1ZS5hbHBoYSgpIH07CisgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVl
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVD
b2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CiAg
ICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUo
NCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRpb24uZ2V0KCks
IHYuZ2V0KCkpOwogfQpAQCAtNDE4LDcgKzQxOSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bldpbjo6c2V0VG9WYWx1ZSgKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHZhbHVlLnJlZCgpLCB2YWx1ZS5n
cmVlbigpLCB2YWx1ZS5ibHVlKCksIHZhbHVlLmFscGhhKCkgfTsKKyAgICBhdXRvIHNpbXBsZUNv
bG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBDR0Zsb2F0IGFbNF0g
PSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVu
dCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9u
ZW50KCkgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZl
Y3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRp
b24uZ2V0KCksIHYuZ2V0KCkpOwogfQpAQCAtNDg3LDcgKzQ4OSw4IEBAIHZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKGMKICAgICAgICAgCiAgICAgUmV0YWluUHRyPENGTXV0
YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFs
dWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHZh
bHVlW2ldLnJlZCgpLCB2YWx1ZVtpXS5ncmVlbigpLCB2YWx1ZVtpXS5ibHVlKCksIHZhbHVlW2ld
LmFscGhhKCkgfTsKKyAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlW2ldLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29sb3Iu
cmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNvbG9y
LmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OwogICAgICAg
ICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0
LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVDYWly
b0NvbnRleHRTb3VyY2UoY2EKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTb2xpZCBjb2xvciBz
b3VyY2UKICAgICAgICAgaWYgKGdsb2JhbEFscGhhIDwgMSkKLSAgICAgICAgICAgIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGNvbG9yLmFscGhhKCkgLyAyNTUuZiAqIGdsb2JhbEFscGhhKSk7CisgICAgICAgICAg
ICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhnbG9iYWxBbHBoYSkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvcik7CiAgICAgfQpA
QCAtMTEyMSw3ICsxMTIxLDcgQEAgdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dENh
aXJvJgogICAgIC8vIHNvIGFzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgd2UgZHJhdyByZWN0
YW5ndWxhciBmb2N1cyByaW5ncy4KIAogICAgIC8vIEZvcmNlIHRoZSBhbHBoYSB0byA1MCUuIFRo
aXMgbWF0Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91dGxpbmUgcmluZ3MuCi0gICAgQ29s
b3IgcmluZ0NvbG9yID0gbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9y
LmJsdWUoKSwgMTI3KTsKKyAgICBDb2xvciByaW5nQ29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBo
YSguNSk7CiAKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIGNh
aXJvX3NhdmUoY3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1
L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHJl
dmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9h
cm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTEx
LDExIEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW8KICAgICAvLyBT
ZXQgbGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9
IDE7CiAKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IG1fbGlnaHRpbmdDb2xvci5yZWQo
KTsKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gbV9saWdodGluZ0NvbG9yLmdyZWVu
KCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JCbHVlID0gbV9saWdodGluZ0NvbG9yLmJsdWUo
KTsKKyAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7CisKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IHNpbXBsZUNvbG9y
LnJlZENvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBzaW1wbGVD
b2xvci5ncmVlbkNvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IHNp
bXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKTsKICAgICBmbG9hdEFyZ3VtZW50cy5wYWRkaW5nNCA9
IDA7CiAKICAgICBpZiAobV9saWdodFNvdXJjZS0+dHlwZSgpID09IExTX1BPSU5UKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4Niw3ICs2ODYsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlk
Q29sb3IoY29uCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBnbENsZWFyQ29sb3IoY29sb3IucmVkKCkgLyAyNTUuMGYsIGNvbG9y
LmdyZWVuKCkgLyAyNTUuMGYsIGNvbG9yLmJsdWUoKSAvIDI1NS4wZiwgY29sb3IuYWxwaGEoKSAv
IDI1NS4wZik7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCk7CisgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xf
Q09MT1JfQlVGRkVSX0JJVCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgwLDcgKzc4MCw3IEBAIHZv
aWQgZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYKICAgICAgICAgLy8gUGFpbnQg
c2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dz
LCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGlj
c0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhp
Y3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hh
ZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwg
c2hhZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKKyAgICAgICAg
Q29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZmxvYXQgc2hhZG93VGV4
dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hh
ZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhl
IFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxv
YXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3Jh
cGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5j
cHAJKHJldmlzaW9uIDI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbgogICAgICAgICAvLyBQYWludCBz
aW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3Ms
IHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGlj
c0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFk
b3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBz
aGFkb3dDb2xvci5hbHBoYSgpICogZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBD
b2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7CiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRY
ID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRv
d3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZ
IGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNj
YWRlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29uCiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9m
IHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlh
c2luZy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENv
bG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29s
b3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigp
LCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxw
aGEoKSAvIDI1NSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9y
LmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAg
ICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRo
KCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4g
d2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMg
bmVnYXRpdmUuCiAgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93
T2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpID8gLTEgOiAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRWxsaXBz
aXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWMKICAgICAvLyBJZiB0aGUgdGV4dCBjb2xvciBl
bmRzIHVwIGJlaW5nIHRoZSBzYW1lIGFzIHRoZSBzZWxlY3Rpb24gYmFja2dyb3VuZCwgaW52ZXJ0
IHRoZSBzZWxlY3Rpb24KICAgICAvLyBiYWNrZ3JvdW5kLgogICAgIGlmICh0ZXh0Q29sb3IgPT0g
YykKLSAgICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZmIC0gYy5ncmVlbigpLCAw
eGZmIC0gYy5ibHVlKCkpOworICAgICAgICBjID0gYy5pbnZlcnRlZENvbG9yV2l0aEFscGhhKDEu
MCk7CiAKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDI2MjEwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODU0LDcgKzg1NCw3IEBAIGF1dG8gSW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxl
Rm9yTWFya2UKICAgICAgICAgQ29sb3Igc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gcmVuZGVy
ZXIoKS5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgc3R5bGUuYmFja2dyb3Vu
ZENvbG9yID0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOwogICAgICAgICBpZiAoc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSAmJiBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuYWxw
aGEoKSAmJiBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9PSBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IpCi0gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB7IDB4ZmYgLSBzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IucmVkKCksIDB4ZmYgLSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IuZ3JlZW4oKSwgMHhmZiAtIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5ibHVlKCkgfTsKKyAg
ICAgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xv
ci5pbnZlcnRlZENvbG9yV2l0aEFscGhhKDEuMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIE1hcmtlZFRleHQ6OlRleHRNYXRjaDogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIxMDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDk1LDcgKzI0OTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIENvbG9yIGZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hh
ZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCAyNTUpOworICAgICAgICAgICAg
Q29sb3IgZmlsbENvbG9yID0gc2hhZG93Q29sb3Iub3BhcXVlQ29sb3IoKTsKICAgICAgICAgICAg
IGF1dG8gc2hhZG93Q2FzdGluZ1JlY3QgPSBhcmVhQ2FzdGluZ1NoYWRvd0luSG9sZShib3JkZXJS
ZWN0LnJlY3QoKSwgc2hhZG93UGFpbnRpbmdFeHRlbnQsIHNoYWRvd1NwcmVhZCwgc2hhZG93T2Zm
c2V0KTsKICAgICAgICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVkT3V0ZXJSZWN0ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhzaGFkb3dDYXN0aW5nUmVjdCwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lv
biAyNjIxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE1NTQsNyArMTU1NCw3IEBAIENvbG9yIFJlbmRlclRoZW1lSU9T
OjpzeXN0ZW1Db2xvcihDU1NWYWwKICAgICAgICAgICAgIGF1dG8gaXQgPSBnbG9iYWxDU1NWYWx1
ZVRvU3lzdGVtQ29sb3JNYXAoKS5maW5kKENTU1ZhbHVlS2V5IHsgY3NzVmFsdWVJRCwgdXNlRGFy
a0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsIH0pOwogICAgICAgICAg
ICAgaWYgKGl0ID09IGdsb2JhbENTU1ZhbHVlVG9TeXN0ZW1Db2xvck1hcCgpLmVuZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJRCwg
b3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoaXQtPnZhbHVlLnJnYigpLCBDb2xv
cjo6U2VtYW50aWMpOworICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZS5zZW1hbnRpY0NvbG9y
KCk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBjb2xvciA9IHN5c3RlbUNvbG9yRnJvbUNTU1Zh
bHVlSUQoY3NzVmFsdWVJRCwgdXNlRGFya0FwcGVhcmFuY2UsIHVzZUVsZXZhdGVkVXNlckludGVy
ZmFjZUxldmVsKTsKICAgICAgICAgaWYgKGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMiArODEsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBh
bmltYXRlKFNWR0VsZW1lbnQqLCBmbG9hdCBwcm9ncmVzcywgdW5zaWduZWQgcmVwZWF0Q291bnQs
IENvbG9yJiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIENvbG9yIGZyb20gPSBtX2FuaW1hdGlv
bk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IG1fZnJvbTsKKyAgICAgICAg
YXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25N
b2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJh
dGlvbigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CiAgICAgICAgIAotICAgICAgICBmbG9h
dCByZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgZnJvbS5yZWQoKSwg
bV90by5yZWQoKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5yZWQoKSwgYW5pbWF0ZWQucmVkKCkpOwot
ICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50
LCBmcm9tLmdyZWVuKCksIG1fdG8uZ3JlZW4oKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5ncmVlbigp
LCBhbmltYXRlZC5ncmVlbigpKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUo
cHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBmcm9tLmJsdWUoKSwgbV90by5ibHVlKCksIHRvQXRFbmRP
ZkR1cmF0aW9uKCkuYmx1ZSgpLCBhbmltYXRlZC5ibHVlKCkpOwotICAgICAgICBmbG9hdCBhbHBo
YSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBmcm9tLmFscGhhKCksIG1f
dG8uYWxwaGEoKSwgdG9BdEVuZE9mRHVyYXRpb24oKS5hbHBoYSgpLCBhbmltYXRlZC5hbHBoYSgp
KTsKKyAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291
bnQsIHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCksIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpLCBz
aW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWRDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQucmVk
Q29tcG9uZW50KCkpOworICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jl
c3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvLmdy
ZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuQ29tcG9uZW50KCks
IHNpbXBsZUFuaW1hdGVkLmdyZWVuQ29tcG9uZW50KCkpOworICAgICAgICBmbG9hdCBibHVlID0g
QmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBv
bmVudCgpLCBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9u
LmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKKyAgICAg
ICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2lt
cGxlRnJvbS5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBo
YUNvbXBvbmVudCgpKTsKICAgICAgICAgCiAgICAgICAgIGFuaW1hdGVkID0geyByb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KGFscGhhKSB9OwogICAgIH0KQEAgLTk5LDIwICsxMDIsMjggQEAgcHVibGljOgogICAgICAgICBD
b2xvciB0b0NvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHRvLnN0cmlwV2hpdGVTcGFjZSgp
KTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiB7
IH07Ci0gICAgICAgIGZsb2F0IHJlZCA9IGZyb21Db2xvci5yZWQoKSAtIHRvQ29sb3IucmVkKCk7
Ci0gICAgICAgIGZsb2F0IGdyZWVuID0gZnJvbUNvbG9yLmdyZWVuKCkgLSB0b0NvbG9yLmdyZWVu
KCk7Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBmcm9tQ29sb3IuYmx1ZSgpIC0gdG9Db2xvci5ibHVl
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9y
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxl
RnJvbS5yZWRDb21wb25lbnQoKSAtIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpOworICAgICAgICBm
bG9hdCBncmVlbiA9IHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSAtIHNpbXBsZVRvLmdyZWVu
Q29tcG9uZW50KCk7CisgICAgICAgIGZsb2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJsdWVDb21wb25l
bnQoKSAtIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKTsKKwogICAgICAgICByZXR1cm4gc3RkOjpo
eXBvdChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRG
cm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgeworICAgICAgICBhdXRv
IHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAg
YXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKwogICAgICAg
ICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBv
cGFxdWUuCiAgICAgICAgIG1fdG8gPSB7Ci0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKG1fdG8ucmVkKCkgKyBtX2Zyb20ucmVkKCkpLAotICAgICAgICAgICAgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbChtX3RvLmdyZWVuKCkgKyBtX2Zyb20uZ3JlZW4oKSksCi0gICAgICAg
ICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKG1fdG8uYmx1ZSgpICsgbV9mcm9tLmJsdWUo
KSkKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29t
cG9uZW50KCkgKyBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKKyAgICAgICAgICAgIHJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZy
b20uZ3JlZW5Db21wb25lbnQoKSksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgp
KQogICAgICAgICB9OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwNCkKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjAtMDUtMjMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4
dGVuZGVkIENvbG9yIENsZWFudXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUg
dW5kZXJseWluZyBTaW1wbGVDb2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5cyBpbmNvcnJlY3Qgd2l0
aCByZXNwZWN0IHRvIGV4dGVuZGVkIGNvbG9ycykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE4NAorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4g
SmFja3Nvbi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6YW5pbWF0aW9u
VmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSk6CisgICAgICAgIFVzZSB0b1NSR0JBU2ltcGxlQ29sb3JM
b3NzeSgpIHRvIGdldCBhY2Nlc3MgdG8gY29sb3IgY29tcG9uZW50cy4KKwogMjAyMC0wNS0yMyAg
Q2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CiAKICAgICAgICAgRXJyb3Igc2Vu
ZGluZyBJUEMgbWVzc2FnZTogQnJva2VuIHBpcGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxh
eWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCShyZXZpc2lvbiAyNjIxMDQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDggKzY5Myw4IEBA
IHN0YXRpYyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnIKICAgICAgICAgcmV0dXJu
IEAoa2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6Q29sb3JLZXlUeXBlOiB7
Ci0gICAgICAgIENvbG9yIGNvbG9yID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBAWyBAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5i
bHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpIF07CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
a2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAg
ICAgICAgcmV0dXJuIEBbIEAociksIEAoZyksIEAoYiksIEAoYSkgXTsKICAgICB9CiAKICAgICBj
YXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OlBvaW50S2V5VHlw
ZTogewpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjYyMTA0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMjAtMDUtMjMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yIENsZWFudXA6IFN0b3AgYWxsb3dpbmcgZGlyZWN0
IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBTaW1wbGVDb2xvciAoaXQgaXMgYWxtb3N0IGFsd2F5
cyBpbmNvcnJlY3Qgd2l0aCByZXNwZWN0IHRvIGV4dGVuZGVkIGNvbG9ycykKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjE4NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICBVc2UgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSB0byBnZXQgYWNjZXNzIHRvIGNv
bG9yIGNvbXBvbmVudHMuCisKIDIwMjAtMDUtMjIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIGRvd25sb2FkIHJlc3VtZSB3b3JrYXJv
dW5kIGZvcmdpdmluZyBvZiBjaGFuZ2VzIGluIENGTmV0d29yawpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYy
MTA0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsMjYgKzE4MiwyOSBAQCBURVNUKENvbG9yLCBWYWxpZGl0
eSkKICAgICB2YWxpZENvbG9yID0gQ29sb3IoMSwgMiwgMywgNCk7CiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0
ZW5kZWQoKSk7Ci0gICAgRVhQRUNUX0VRKHZhbGlkQ29sb3IucmVkKCksIDEpOwotICAgIEVYUEVD
VF9FUSh2YWxpZENvbG9yLmdyZWVuKCksIDIpOwotICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yLmJs
dWUoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHZhbGlkQ29sb3IuYWxwaGEoKSwgNCk7CisgICAgYXV0
byBzaW1wbGVWYWxpZENvbG9yID0gdmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
OworICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKKyAg
ICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKKyAgICBF
WFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOworICAgIEVYUEVD
VF9FUShzaW1wbGVWYWxpZENvbG9yLmFscGhhQ29tcG9uZW50KCksIDQpOwogCiAgICAgQ29sb3Ig
eWV0QW5vdGhlclZhbGlkQ29sb3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7CiAgICAgRVhQRUNUX1RS
VUUoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoeWV0
QW5vdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEoeWV0QW5vdGhl
clZhbGlkQ29sb3IucmVkKCksIDEpOwotICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xv
ci5ncmVlbigpLCAyKTsKLSAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3IuYmx1ZSgp
LCAzKTsKLSAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGEoKSwgNCk7Cisg
ICAgYXV0byBzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvciA9IHlldEFub3RoZXJWYWxpZENvbG9y
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3Ro
ZXJWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKKyAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0
QW5vdGhlclZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7CisgICAgRVhQRUNUX0VRKHNp
bXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmJsdWVDb21wb25lbnQoKSwgMyk7CisgICAgRVhQRUNU
X0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmFscGhhQ29tcG9uZW50KCksIDQpOwogCiAg
ICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRDb2xvcik7CiAgICAg
RVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIEVYUEVDVF9FUShvdGhlclZhbGlk
Q29sb3IucmVkKCksIDEpOwotICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3IuZ3JlZW4oKSwg
Mik7Ci0gICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvci5ibHVlKCksIDMpOwotICAgIEVYUEVD
VF9FUShvdGhlclZhbGlkQ29sb3IuYWxwaGEoKSwgNCk7CisgICAgYXV0byBzaW1wbGVPdGhlclZh
bGlkQ29sb3IgPSBvdGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAg
ICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKKyAg
ICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50KCksIDIpOwor
ICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAzKTsK
KyAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmFscGhhQ29tcG9uZW50KCksIDQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>