<?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>157336</bug_id>
          
          <creation_ts>2016-05-03 22:01:13 -0700</creation_ts>
          <short_desc>Start on dictionary support for IDL, getting enough to work for one dictionary</short_desc>
          <delta_ts>2016-05-04 20:09:03 -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>Bindings</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1189977</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-03 22:01:13 -0700</bug_when>
    <thetext>Start on dictionary support for IDL, getting enough to work for one dictionary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189983</commentid>
    <comment_count>1</comment_count>
      <attachid>278067</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-03 23:04:12 -0700</bug_when>
    <thetext>Created attachment 278067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189990</commentid>
    <comment_count>2</comment_count>
      <attachid>278067</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-04 00:05:41 -0700</bug_when>
    <thetext>Comment on attachment 278067
Patch

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

Looks mostly good, but I didn&apos;t look at all the details yet.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:401
&gt; +    return $dictionaryTypes{$type} || 0;

|| 0?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4094
&gt; -    my $function = shift;
&gt; -    my $functionString = shift;
&gt; -    my $indent = shift;
&gt; -    my $svgPropertyType = shift;
&gt; -    my $interfaceName = shift;
&gt; +    my ($function, $functionString, $indent, $svgPropertyType, $interface) = @_;

Using shift for each parameter gives us a history of when each parameter was added.  Is there an advantage to putting everything on one line, other than it looks good?  Is there a WebKit perl style consensus on this?

&gt; Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm:1573
&gt; -- (DOMbool *)strictFunction:(NSString *)str a:(float)a b:(int)b
&gt; +- (BOOL)strictFunction:(NSString *)str a:(float)a b:(int)b

There are lots of changes from DOMbool to BOOL or gboolean.  Does this change the API at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190069</commentid>
    <comment_count>3</comment_count>
      <attachid>278067</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-04 07:22:47 -0700</bug_when>
    <thetext>Comment on attachment 278067
Patch

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

&gt; Source/WebCore/ChangeLog:98
&gt; +        the type &quot;boolean&quot;, which doesn&apos;t exist in IDL.

Oops, this should have said the type &quot;bool&quot;, which doesn’t exist in IDL.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:401
&gt;&gt; +    return $dictionaryTypes{$type} || 0;
&gt; 
&gt; || 0?

Yes, that’s a perl idiom that turns things like &quot;undefined&quot; into 0.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4094
&gt;&gt; +    my ($function, $functionString, $indent, $svgPropertyType, $interface) = @_;
&gt; 
&gt; Using shift for each parameter gives us a history of when each parameter was added.  Is there an advantage to putting everything on one line, other than it looks good?  Is there a WebKit perl style consensus on this?

This style is better.

I don’t agreel that separate change history for each &quot;shift&quot; line is valuable. If something thought that was valuable, then that person might ask us to format C++ code like this:

    int f(
          const char* a,
          long b,
          RefPtr&lt;X&gt; c
    ) {

I say, no.

&gt;&gt; Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm:1573
&gt;&gt; +- (BOOL)strictFunction:(NSString *)str a:(float)a b:(int)b
&gt; 
&gt; There are lots of changes from DOMbool to BOOL or gboolean.  Does this change the API at all?

No, these changes are only because I fixed broken test cases that were trying to use &quot;bool&quot; instead of &quot;boolean&quot;. The generated code in that case would not have compiled. So no, it won’t be changing behavior of actual WebKit code. We could only get away with this mistake in the tests where the code output is not compiled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190312</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-04 20:09:03 -0700</bug_when>
    <thetext>Committed r200448: &lt;http://trac.webkit.org/changeset/200448&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278067</attachid>
            <date>2016-05-03 23:04:12 -0700</date>
            <delta_ts>2016-05-04 12:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157336-20160503230451.patch</filename>
            <type>text/plain</type>
            <size>224689</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjhkYWJhM2JjNGE0MWZi
YjY4OGNhMjBlNjVmN2M4YzcwNzU2M2QxMC4uMDlmOTNmMzM3OTI4MTY5ZGQxYzU2MzhkZGZjNDVm
NThiZDk4YWJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNi0wNS0wMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RhcnQgb24gZGljdGlvbmFy
eSBzdXBwb3J0IGZvciBJREwsIGdldHRpbmcgZW5vdWdoIHRvIHdvcmsgZm9yIG9uZSBkaWN0aW9u
YXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcz
MzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOiBSZXR1cm4gUmVmUHRyIGluc3RlYWQgb2YgUGFzc1Jl
ZlB0ciBmb3IgdGhlIHJldHVybgorICAgICAgICB2YWx1ZSBvZiB0b0FycmF5QnVmZmVyVmlldy4g
Tm90IG9ubHkgaXMgdGhpcyB0aGUgY29ycmVjdCBtb2Rlcm4gaWRpb20sIGl0IGFsc28KKyAgICAg
ICAgd29ya3MgcHJvcGVybHkgd2l0aCBhdXRvLCBhbmQgUGFzc1JlZlB0ciBkb2VzIG5vdC4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQnVpbGQuaDogQWRkZWQuIFRoaXMgaGFzIHRoZSBi
dWlsZCBmdW5jdGlvbiB0ZW1wbGF0ZSBpbiBpdC4KKyAgICAgICAgSXQncyB1c2VkIHRvIGJ1aWxk
IHZhbHVlcyBsaWtlIGRpY3Rpb25hcmllcy4gV2Ugc3BlY2lhbGl6ZSBhbmQgY2FsbCB0aGUgdGVt
cGF0ZQorICAgICAgICBpbiBnZW5lcmF0ZWQgY29kZS4gVGhpcyBpcyBvbmx5IHRoZSBpbml0aWFs
IHNpbXBsaXN0aWMgdmVyc2lvbjsgd2lsbCBiZSByZWZpbmluZworICAgICAgICBmb3IgZXhjZXB0
aW9uIGhhbmRsaW5nLCBvcHRpb25hbCBoYW5kbGluZywgZGVmYXVsdCB2YWx1ZSBoYW5kbGluZywg
YW5kIGxvdHMgb2YKKyAgICAgICAgb3RoZXIgdGhpbmdzIG5vdCB5ZXQgbmVlZGVkIGZvciB0aGlz
IGZpcnN0IGRpY3Rpb25hcnkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG06CisgICAgICAgIChQcm9jZXNzRG9jdW1lbnQpOiBIYW5kbGUgZGljdGlvbmFyaWVz
IG11Y2ggbGlrZSBob3cgd2UgaGFuZGxlIGVudW1lcmF0aW9ucy4KKyAgICAgICAgKFNraXBJbmNs
dWRlSGVhZGVyKTogTW92ZWQgc21hbGwgbGlzdCBvZiBzcGVjaWFsIHR5cGVzIGhlcmUgZnJvbSBD
b2RlR2VuZXJhdG9ySlMuCisgICAgICAgIChJc0RpY3Rpb25hcnlUeXBlKTogQWRkZWQuCisgICAg
ICAgIChJc1JlZlB0clR5cGUpOiBNYWtlIHRoaXMgcmV0dXJuIDAgZm9yIGRpY3Rpb25hcnkgdHlw
ZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSW50ZXJmYWNlKTogQWRkZWQgaGFuZGxpbmcgZm9yIGRpY3Rpb25hcmll
cy4KKyAgICAgICAgKFNraXBJbmNsdWRlSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEFkZElu
Y2x1ZGVzRm9yVHlwZSk6IENhbGwgdGhlIHRoZSBTa2lwSW5jbHVkZUhlYWRlciBmcm9tIENvZGVH
ZW5lcmF0b3IucG0gZGlyZWN0bHkuCisgICAgICAgIChHZXROZXN0ZWRDbGFzc05hbWUpOiBGYWN0
b3JlZCBvdXQgdGhlIHdvcmsgdGhhdCB3YXMgcHJldmlvdXNseSBpbgorICAgICAgICBHZXRFbnVt
ZXJhdGlvbkNsYXNzTmFtZSBzbyB3ZSBjb3VsZCByZXVzZSBpdCBmb3IgZGljdGlvbmFyaWVzIHRv
by4KKyAgICAgICAgKEdldEVudW1lcmF0aW9uQ2xhc3NOYW1lKTogQ2hhbmdlZCB0byBjYWxsIEdl
dE5lc3RlZENsYXNzTmFtZS4KKyAgICAgICAgKEdldEVudW1lcmF0aW9uQ2xhc3NJZGVudGlmaWVy
KTogRGVsZXRlZC4gSW5zdGVhZCBvZiB1c2luZyB0aGlzLCB3ZSBub3cgdXNlIHRlbXBsYXRlcwor
ICAgICAgICBzbyB3ZSBjYW4gdXNlIHRoZSBhY3R1YWwgY2xhc3MgbmFtZS4KKyAgICAgICAgKEdl
bmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQpOiBDaGFuZ2VkIHBhcnNlIGFu
ZCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzCisgICAgICAgIHRvIHVzZSBmdW5jdGlvbiB0ZW1w
bGF0ZSBzcGVjaWFsaXphdGlvbiBpbnN0ZWFkIG9mIGZ1bmN0aW9ucy4gVGhpcyBjbGVhbnMgdXAg
dGhlIGNvZGUKKyAgICAgICAgYSBiaXQgYW5kIG1ha2VzIGl0IGVhaXNlciB0byB1c2UgZnJvbSBv
dGhlciB0ZW1wbGF0ZXMuIExhdGVyIHdlIG1heSB3YW50IHRvIG1lcmdlIHRoZQorICAgICAgICBw
YXJzZSBmdW5jdGlvbiB0ZW1wbGF0ZSBidWlsZCBmdW5jdGlvbiB0ZW1wbGF0ZSBmcm9tIEpTRE9N
QnVpbGQuaC4gQWRkZWQgc3BlY2lhbGl6YXRpb24KKyAgICAgICAgb2YgdGhlIGJ1aWxkIGZ1bmN0
aW9uIHRlbXBsYXRlLgorICAgICAgICAoR2V0RGljdGlvbmFyeUNsYXNzTmFtZSk6IEFkZGVkLiBD
YWxscyBHZXROZXN0ZWRDbGFzc05hbWUuCisgICAgICAgIChHZW5lcmF0ZURpY3Rpb25hcnlJbXBs
ZW1lbnRhdGlvbkNvbnRlbnQpOiBBZGRlZC4gR2VuZXJhdGVzIHRoZSBidWlsZCBmdW5jdGlvbiBm
b3IgZWFjaAorICAgICAgICBkaWN0aW9uYXJ5IHR5cGUuIEluaXRpYWwgc2ltcGxpc3RpYyB2ZXJz
aW9uIHRvIGJlIHJlZmluZWQuCisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKTogQWRk
ZWQgZGljdGlvbmFyaWVzIGFyZ3VtZW50IGFuZCBjYWxsZWQgdGhlCisgICAgICAgIEdlbmVyYXRl
RGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudCBmdW5jdGlvbi4gQWxzbyBjaGFuZ2VkIG1h
bnkgZnVuY3Rpb25zIHRvIHRha2UKKyAgICAgICAgaW50ZXJmYWNlIGFyZ3VtZW50cyBhbmQgYWxz
byByZW1vdmVkIHJlZHVuZGFudCBpbnRlcmZhY2VOYW1lIGFyZ3VtZW50cyBmcm9tIGZ1bmN0aW9u
cworICAgICAgICB0aGF0IGZvcm1lcmx5IHRvb2sgYm90aC4KKyAgICAgICAgKEdlbmVyYXRlUGFy
YW1ldGVyc0NoZWNrKTogVXBkYXRlZCBmb3IgY2hhbmdlcyBhYm92ZS4gVGhhdCBpbmNsdWRlcyBj
YWxsaW5nIHRoZSBuZXcKKyAgICAgICAgcGFyc2UgZnVuY3Rpb24gdGVtcGxhdGUuIEFsc28gY2hh
bmdlZCB0byB1c2UgYXV0byBhbmQgV1RGTW92ZSwgd2hpY2ggbWFrZXMgdGhlIGNvZGUKKyAgICAg
ICAgYm90aCBtb3JlIGdlbmVyaWMgYW5kIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGFuZCBv
YnZpYXRlcyB0aGUgbmVlZCBmb3IgYSBzcGVjaWFsCisgICAgICAgIGNhc2UgZm9yIGRpY3Rpb25h
cnkgdHlwZXMuCisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyKTogVXBkYXRlZCBmb3Ig
Y2hhbmdlcyBhYm92ZS4KKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6
IERpdHRvLgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCk6IERp
dHRvLgorICAgICAgICAoR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUpOiBEaXR0by4KKyAgICAg
ICAgKEdldE5hdGl2ZVR5cGUpOiBDaGFuZ2VkIHRoaXMgZnVuY3Rpb24gdG8gdGFrZSB0aGUgaW50
ZXJmYWNlIGJlY2F1c2UgdGhhdCdzIG5lZWRlZCB0bworICAgICAgICBnZXQgdGhlIHR5cGUgbmFt
ZSByaWdodCBmb3IgZW51bWVyYXRpb24gdHlwZXMgcmF0aGVyIHRoYW4gcmV0dXJuaW5nICJhdXRv
Ii4gTWFkZSB0aGF0CisgICAgICAgIGNoYW5nZSBhcyB3ZWxsLiBNb3ZlZCBvbmUgdHlwZSwgRE9N
U3RyaW5nTGlzdCwgaW50byB0aGUgbmF0aXZlVHlwZSBoYXNoIGluc3RlYWQgb2YKKyAgICAgICAg
aGF2aW5nIGV4cGxpY2l0IGNvZGUgaGVyZSBmb3IgaXQuIERpZG4ndCBhZGQgYSBkaWN0aW9uYXJ5
IHR5cGUgY2FzZSBoZXJlIHlldCwgYnV0CisgICAgICAgIHByb2JhYmx5IHdpbGwgbmVlZCB0byBk
byB0aGF0IGluIHRoZSBuZXh0IHBhdGNoLgorICAgICAgICAoU2hvdWxkUGFzc1dyYXBwZXJCeVJl
ZmVyZW5jZSk6IFBhc3MgaW50ZXJmYWNlIGluIHRvIEdldE5hdGl2ZVR5cGUuCisgICAgICAgIChH
ZXROYXRpdmVWZWN0b3JJbm5lclR5cGUpOiBSZW1vdmVkIHVubmVlZGVkIHNwZWNpYWwgY2FzZSBm
b3IgRE9NU3RyaW5nLgorICAgICAgICAoR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcyk6IENoYW5n
ZWQgdG8gdGFrZSB0aGUgaW50ZXJmYWNlLgorICAgICAgICAoR2V0TmF0aXZlVHlwZUZvck1lbW9p
emF0aW9uKTogRGl0dG8uCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBDaGFuZ2VkIGV4cHJl
c3Npb24gZm9yIERpY3Rpb25hcnkgKHRoZSB0aGluZyBJIGFtIHdvcmtpbmcgdG8gbWFrZQorICAg
ICAgICBvYnNvbGV0ZSkgdG8gbmFtZSB0aGUgdHlwZSBzbyBpdCB3aWxsIHdvcmsgd2l0aCBhdXRv
LiBBZGRlZCBhIGNhc2UgZm9yIGRpY3Rpb25hcnkKKyAgICAgICAgdHlwZXMgYW5kIHVwZGF0ZWQg
dGhlIGNhc2UgZm9yIGVudW1lcmF0aW9uIHR5cGVzLgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVl
KTogVXBkYXRlZCB0byB0YWtlIGFuIGludGVyZmFjZSByYXRoZXIgdGhhbiBhbiBpbnRlcmZhY2Ug
bmFtZSwgYW5kIHRvCisgICAgICAgIHBhc3MgdGhhdCBhbG9uZyBhcyBuZWVkZWQuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgKFBhcnNlKTogQWRk
IGRpY3Rpb25hcmllcyB0byBhIGxpc3QuCisgICAgICAgIChwYXJzZURpY3Rpb25hcnkpOiBQdXQg
bmFtZSwgZXh0ZW5kZWQgYXR0cmlidXRlcywgYW5kIG1lbWJlcnMgaW50byB0aGUgZGljdGlvbmFy
eS4KKyAgICAgICAgKHBhcnNlRGljdGlvbmFyeU1lbWJlcnMpOiBCdWlsZCB1cCBhIG1lbWJlcnMg
YXJyYXkuCisgICAgICAgIChwYXJzZURpY3Rpb25hcnlNZW1iZXIpOiBQdXQgaXNPcHRpb25hbCwg
dHlwZSwgbmFtZSwgYW5kIGRlZmF1bHQgdmFsdWUgaW50byB0aGUKKyAgICAgICAgZGljdGlvbmFy
eSBtZW1iZXIuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgUmVnZW5lcmF0ZWQuCisKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIHNvbWUgdGVzdCBjYXNlcyB0aGF0
IEkgd2FzIHVzaW5nIHRvCisgICAgICAgIGdldCB0aGUgYmluZGluZ3Mgc2NyaXB0IHRvIHdvcmsu
IFJpZ2h0IG5vdyB0aGlzIGlzIGJhc2ljYWxseSBpZGVudGljYWwgdG8gdGhlCisgICAgICAgIGFj
dHVhbCB1c2Ugb2YgdGhpcyBpbiBFbGVtZW50LmlkbCwgYnV0IG92ZXIgdGltZSBJIHdpbGwgbW9k
aWZ5IGl0IHRvIGNvdmVyIG1vcmUKKyAgICAgICAgZmVhdHVyZXMgb2YgZGljdGlvbmFyaWVzLiBB
bHNvIGZpeGVkIHNvbWUgaW5jb3JyZWN0IHRlc3QgY2FzaW5nIHRyeWluZyB0byB1c2UKKyAgICAg
ICAgdGhlIHR5cGUgImJvb2xlYW4iLCB3aGljaCBkb2Vzbid0IGV4aXN0IGluIElETC4KKworICAg
ICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNhbkhh
dmVVc2VyQWdlbnRTaGFkb3dSb290KTogQWRkZWQuIFRoZSBleGlzdGluZyBjb2RlIHVzZWQgYQor
ICAgICAgICBjb21iaW5hdGlvbiBvZiBhIHZpcnR1YWwgZnVuY3Rpb24gb24gSFRNTEVsZW1lbnQg
YW5kIHR5cGUgY2hlY2tpbmcuIEl0J3MgYmV0dGVyCisgICAgICAgIHRvIGp1c3QgdXNlIGEgdmly
dHVhbCBmdW5jdGlvbiBvbiBFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0
YWNoU2hhZG93KTogVXBkYXRlZCB0byB0YWtlIGEgU2hhZG93Um9vdEluaXQgc3RydWN0IGluc3Rl
YWQKKyAgICAgICAgb2YgYSBEaWN0aW9uYXJ5LiBBbHNvIHR3ZWFrZWQgdGhlIGNvZGUgaW4gYSBj
b3VwbGUgb3RoZXIgbWlub3Igd2F5cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IEFkZGVk
IHRoZSBTaGFkb3dSb290TW9kZSBlbnVtIGNsYXNzIGFuZCB0aGUgU2hhZG93Um9vdEluaXQgc3Ry
dWN0LAorICAgICAgICBhbmQgY2hhbmdlZCBhdHRhY2hTaGFkb3cgdG8gdGFrZSBTaGFkb3dSb290
SW5pdCBpbnN0ZWFkIG9mIERpY3Rpb25hcnkuIEFsc28gYWRkZWQKKyAgICAgICAgdGhlIHByaXZh
dGUgY2FuSGF2ZVVzZXJBZ2VudFNoYWRvd1Jvb3QgdmlydHVhbCBmdW5jdGlvbi4KKworICAgICAg
ICAqIGRvbS9FbGVtZW50LmlkbDogQWRkZWQgU2hhZG93Um9vdE1vZGUsIFNoYWRvd1Jvb3RJbml0
LCBhbmQgdXNlZCB0aGVtIGluIGFzIHRoZQorICAgICAgICBhcmd1ZW1udCB0eXBlIGZvciBhdHRh
Y2hTaGFkb3cuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50Lmg6IE1hZGUgY2FuSGF2ZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QgYSBwcml2YXRlIG92ZXJyaWRlIGluc3RlYWQKKyAgICAgICAgb2Yg
YSBwdWJsaWMgdmlydHVhbCBmdW5jdGlvbi4KKwogMjAxNi0wNS0wMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE9wdGltaXplIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IG9uIElETCBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCmluZGV4IDU3ZTY5NDEzZTBhNWM3ODIwNjJkNmZiZmY5OTczYWY5Zjk4NjRlZTYuLmU5OGZm
MzQzMWNkOTZlYmI1YzA3MGFkOGY4NzYxNmZiYmViMzg0ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCkBAIC01NTEsOSArNTUxLDkgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUxLCB0eXBlbmFtZSBWYWx1ZTI+IGlubGluZSBKU0M6OkpTVmFsdWUganNQYWly
KEpTQzo6RXhlY1MKIAogV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4p
OwogCi1pbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9BcnJheUJ1ZmZl
clZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQoraW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVy
Vmlldz4gdG9BcnJheUJ1ZmZlclZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXcqIHdyYXBwZXIgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0Fy
cmF5QnVmZmVyVmlldyo+KHZhbHVlKTsKKyAgICBhdXRvKiB3cmFwcGVyID0gSlNDOjpqc0R5bmFt
aWNDYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1ZSk7CiAgICAgaWYgKCF3cmFwcGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gd3JhcHBlci0+aW1wbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsZC5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4YjNmNWU4
ZTVjM2RlZWNiYTdkZGNkYzVhMDliMmFhN2VkMjJjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWxkLmgKQEAgLTAsMCArMSwzOSBAQAorLyoK
KworQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwor
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgYnVpbGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IFQgYnVpbGQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIGNvbnN0IGNoYXIgKCZwcm9wZXJ0eU5hbWUpW2NoYXJh
Y3RlckNvdW50XSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50PiBpbmxpbmUgVCBidWlsZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgY29uc3QgY2hhciAoJnByb3BlcnR5TmFtZSlbY2hhcmFjdGVyQ291bnRdKQoreworICAg
IHJldHVybiBidWlsZDxUPihzdGF0ZSwgdmFsdWUuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgcHJvcGVydHlOYW1lKSkpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KaW5kZXggMDBlM2Zm
MmNlNDZmMzYzZWVhZmJlMzUyYWM3NmMzNmQ3MDVmYjFhOS4uZGViMTgwODgyOWEwNjc4MmE5Njdl
NGFkMGU4ZTFkMGMzNzE3OTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvci5wbQpAQCAtNzAsNiArNzAsNyBAQCBteSAld2ViQ29yZVR5cGVI
YXNoID0gKAogKTsKIAogbXkgJWVudW1UeXBlSGFzaCA9ICgpOworbXkgJWRpY3Rpb25hcnlUeXBl
cyA9ICgpOwogCiBteSAldHlwZWRBcnJheVR5cGVzID0gKAogICAgICJBcnJheUJ1ZmZlciIgPT4g
MSwKQEAgLTE2Miw2ICsxNjMsNyBAQCBzdWIgUHJvY2Vzc0RvY3VtZW50CiAgICAgcmVxdWlyZSAk
aWZhY2VOYW1lIC4gIi5wbSI7CiAKICAgICAlZW51bVR5cGVIYXNoID0gbWFwIHsgJF8tPm5hbWUg
PT4gJF8tPnZhbHVlcyB9IEB7JHVzZURvY3VtZW50LT5lbnVtZXJhdGlvbnN9OworICAgICVkaWN0
aW9uYXJ5VHlwZXMgPSBtYXAgeyAkXy0+bmFtZSA9PiAxIH0gQHskdXNlRG9jdW1lbnQtPmRpY3Rp
b25hcmllc307CiAKICAgICAjIER5bmFtaWNhbGx5IGxvYWQgZXh0ZXJuYWwgY29kZSBnZW5lcmF0
aW9uIHBlcmwgbW9kdWxlCiAgICAgJGNvZGVHZW5lcmF0b3IgPSAkaWZhY2VOYW1lLT5uZXcoJG9i
amVjdCwgJHdyaXRlRGVwZW5kZW5jaWVzLCAkdmVyYm9zZSwgJHRhcmdldElkbEZpbGVQYXRoKTsK
QEAgLTE3Niw5ICsxNzgsOSBAQCBzdWIgUHJvY2Vzc0RvY3VtZW50CiAgICAgbXkgJGludGVyZmFj
ZXMgPSAkdXNlRG9jdW1lbnQtPmludGVyZmFjZXM7CiAgICAgZm9yZWFjaCBteSAkaW50ZXJmYWNl
IChAJGludGVyZmFjZXMpIHsKICAgICAgICAgcHJpbnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVyYXRv
ciBiaW5kaW5ncyBjb2RlIGZvciBJREwgaW50ZXJmYWNlIFwiIiAuICRpbnRlcmZhY2UtPm5hbWUg
LiAiXCIuLi5cbiIgaWYgJHZlcmJvc2U7Ci0gICAgICAgICMgRklYTUU6IFJlcGVhdGluZyBlYWNo
IGVudW1lcmF0aW9uIGZvciBldmVyeSBpbnRlcmZhY2Ugd291bGQgbm90IHdvcmsgaWYgd2UgYWN0
dWFsbHkgd2VyZSB1c2luZworICAgICAgICAjIEZJWE1FOiBSZXBlYXRpbmcgZWFjaCBlbnVtZXJh
dGlvbiBhbmQgZGljdGlvbmFyaWVzIGZvciBldmVyeSBpbnRlcmZhY2Ugd291bGQgbm90IHdvcmsg
aWYgd2UgYWN0dWFsbHkgd2VyZSB1c2luZwogICAgICAgICAjIG11bHRpcGxlIGludGVyZmFjZXMg
cGVyIGZpbGUsIGJ1dCB3ZSBhcmVuJ3QsIHNvIHRoaXMgaXMgZmluZSBmb3Igbm93LgotICAgICAg
ICAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVJbnRlcmZhY2UoJGludGVyZmFjZSwgJGRlZmluZXMs
ICR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zKTsKKyAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdl
bmVyYXRlSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRkZWZpbmVzLCAkdXNlRG9jdW1lbnQtPmVudW1l
cmF0aW9ucywgJHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXMpOwogICAgICAgICAkY29kZUdlbmVy
YXRvci0+V3JpdGVEYXRhKCRpbnRlcmZhY2UsICR1c2VPdXRwdXREaXIsICR1c2VPdXRwdXRIZWFk
ZXJzRGlyKTsKICAgICB9CiB9CkBAIC0zMjQsMTQgKzMyNiwxNiBAQCBzdWIgU2tpcEluY2x1ZGVI
ZWFkZXIKICAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKIAot
ICAgIHJldHVybiAxIGlmICRvYmplY3QtPklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CisgICAgIyBG
SVhNRTogVGhpcyBpcyBhIGxvdCBsaWtlICFJc1JlZlB0clR5cGUuIE1heWJlIHRoZXkgY291bGQg
c2hhcmUgY29kZT8KIAotICAgICMgU3BlY2lhbCBjYXNlOiBTVkdOdW1iZXIuaCBkb2VzIG5vdCBl
eGlzdC4KLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKLSAgICAKLSAgICAj
IFR5cGVkIGFycmF5cyBhbHJlYWR5IGluY2x1ZGVkIGJ5IEpTRE9NQmluZGluZy5oLgorICAgIHJl
dHVybiAxIGlmICRvYmplY3QtPklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDEg
aWYgJG9iamVjdC0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSk7Ci0gICAgCisgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIkFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRE9NU3RyaW5n
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiYW55
IjsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zOTAsNiArMzk0LDEzIEBAIHN1YiBWYWxpZEVu
dW1WYWx1ZXMKICAgICByZXR1cm4gQHskZW51bVR5cGVIYXNoeyR0eXBlfX07CiB9CiAKK3N1YiBJ
c0RpY3Rpb25hcnlUeXBlCit7CisgICAgbXkgKCRvYmplY3QsICR0eXBlKSA9IEBfOworCisgICAg
cmV0dXJuICRkaWN0aW9uYXJ5VHlwZXN7JHR5cGV9IHx8IDA7Cit9CisKIHN1YiBJc05vblBvaW50
ZXJUeXBlCiB7CiAgICAgbXkgJG9iamVjdCA9IHNoaWZ0OwpAQCAtNDMyLDggKzQ0Myw5IEBAIHN1
YiBJc1JlZlB0clR5cGUKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIDAgaWYg
JG9iamVjdC0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKLSAgICByZXR1cm4gMCBpZiAkb2JqZWN0
LT5HZXRBcnJheU9yU2VxdWVuY2VUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMCBpZiAkb2JqZWN0
LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0Vu
dW1UeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5HZXRBcnJheU9yU2VxdWVu
Y2VUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKICAg
ICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiYW55IjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBlNTE1N2I5OTVjMmU4YjZj
ZmMxM2U0YWIxMWRmOGE0Y2JjZjZiZjYzLi4wM2NiMDAxMmM5OGMwMjE3MzA0YWQzNWZjOWI2MDA2
N2Q0OGMzZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTIwLDIwICsxMjAsMTUgQEAgc3ViIG5ldwogCiBzdWIgR2Vu
ZXJhdGVJbnRlcmZhY2UKIHsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVy
ZmFjZSA9IHNoaWZ0OwotICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7Ci0gICAgbXkgJGVudW1lcmF0
aW9ucyA9IHNoaWZ0OworICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZGVmaW5lcywgJGVu
dW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcykgPSBAXzsKIAogICAgICRjb2RlR2VuZXJhdG9yLT5M
aW5rT3ZlcmxvYWRlZEZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKLQotICAgICMgU3RhcnQgYWN0dWFs
IGdlbmVyYXRpb24KICAgICBpZiAoJGludGVyZmFjZS0+aXNDYWxsYmFjaykgewogICAgICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSGVhZGVyKCRpbnRlcmZhY2UpOwotICAgICAgICAkb2Jq
ZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24oJGludGVyZmFjZSwgJGVudW1lcmF0
aW9ucyk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbigk
aW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50ZXJmYWNlKTsKLSAgICAgICAgJG9i
amVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKTsK
KyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51
bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKICAgICB9CiB9CiAKQEAgLTIwOCwyMSArMjAzLDYg
QEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZUluSGVhZGVyCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBl
KCR0eXBlLCAkaXNDYWxsYmFjaywgXCVoZWFkZXJJbmNsdWRlcyk7CiB9CiAKLW15ICV0eXBlc1dp
dGhvdXRIZWFkZXIgPSAoCi0gICAgIkFycmF5IiA9PiAxLAotICAgICJET01TdHJpbmciID0+IDEs
Ci0gICAgIkRPTVRpbWVTdGFtcCIgPT4gMSwKLSAgICAiYW55IiA9PiAxCi0pOwotCi1zdWIgU2tp
cEluY2x1ZGVIZWFkZXIKLXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuIDEg
aWYgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICByZXR1cm4g
JHR5cGVzV2l0aG91dEhlYWRlcnskdHlwZX07Ci19Ci0KIHN1YiBHZXRFeHBvcnRNYWNyb0ZvckpT
Q2xhc3MKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CkBAIC0yMzcsNyArMjE3LDcgQEAg
c3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAgIG15ICRpc0NhbGxiYWNrID0gc2hpZnQ7CiAgICAg
bXkgJGluY2x1ZGVzUmVmID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gaWYgU2tpcEluY2x1ZGVIZWFk
ZXIoJHR5cGUpOworICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFk
ZXIoJHR5cGUpOwogICAgIAogICAgICMgV2hlbiB3ZSdyZSBmaW5pc2hlZCB3aXRoIHRoZSBvbmUt
ZmlsZS1wZXItY2xhc3MgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lh
bCBjYXNlcy4KICAgICBpZiAoJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKQEAgLTgyMCwz
NSArODAwLDMzIEBAIHN1YiBJc1ByZWZpeFJlbW92YWJsZQogICAgICAgICAgICAgfHwgSXNDbGFz
c05hbWVXb3JkQm91bmRhcnkoJGNsYXNzLCAtJGkpICYmIHN1YnN0cigkY2xhc3MsIC0kaSkgZXEg
c3Vic3RyKCRuYW1lLCAwLCAkaSkpOwogfQogCi1zdWIgR2V0RW51bWVyYXRpb25DbGFzc05hbWUK
K3N1YiBHZXROZXN0ZWRDbGFzc05hbWUKIHsKICAgICBteSAoJGludGVyZmFjZSwgJG5hbWUpID0g
QF87CiAKICAgICBteSAkY2xhc3MgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2UtPm5hbWUp
OwotICAgIG15ICRlbnVtID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpOworICAg
IG15ICRtZW1iZXIgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkbmFtZSk7CiAKICAgICAj
IFNpbmNlIHRoZSBlbnVtZXJhdGlvbiBuYW1lIHdpbGwgYmUgbmVzdGVkIGluIHRoZSBjbGFzcyBu
YW1lJ3MgbmFtZXNwYWNlLCByZW1vdmUgYW55IHdvcmRzCiAgICAgIyB0aGF0IGhhcHBlbiB0byBt
YXRjaCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBjbGFzcyBuYW1lLiBJZiBhbiBlbnVtZXJhdGlv
biBpcyBuYW1lZCBUcmFja1R5cGUgb3IKICAgICAjIFRleHRUcmFja1R5cGUsIGFuZCB0aGUgY2xh
c3MgaXMgbmFtZWQgVGV4dFRyYWNrLCB0aGVuIHdlIHdpbGwgZ2V0IGEgbmFtZSBsaWtlIFRleHRU
cmFjazo6VHlwZS4KLSAgICBteSAkZW51bUxlbmd0aCA9IGxlbmd0aCgkZW51bSk7CisgICAgbXkg
JG1lbWJlckxlbmd0aCA9IGxlbmd0aCgkbWVtYmVyKTsKICAgICBteSAkbG9uZ2VzdFByZWZpeExl
bmd0aCA9IDA7Ci0gICAgaWYgKCRlbnVtID1+IC9eW0EtWl0uLykgewotICAgICAgICBmb3IgKG15
ICRpID0gMjsgJGkgPCAkZW51bUxlbmd0aCAtIDE7ICRpKyspIHsKLSAgICAgICAgICAgICRsb25n
ZXN0UHJlZml4TGVuZ3RoID0gJGkgaWYgSXNQcmVmaXhSZW1vdmFibGUoJGNsYXNzLCAkZW51bSwg
JGkpOworICAgIGlmICgkbWVtYmVyID1+IC9eW0EtWl0uLykgeworICAgICAgICBmb3IgKG15ICRp
ID0gMjsgJGkgPCAkbWVtYmVyTGVuZ3RoIC0gMTsgJGkrKykgeworICAgICAgICAgICAgJGxvbmdl
c3RQcmVmaXhMZW5ndGggPSAkaSBpZiBJc1ByZWZpeFJlbW92YWJsZSgkY2xhc3MsICRtZW1iZXIs
ICRpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAkZW51bSA9IHN1YnN0cigkZW51bSwgJGxvbmdl
c3RQcmVmaXhMZW5ndGgpOworICAgICRtZW1iZXIgPSBzdWJzdHIoJG1lbWJlciwgJGxvbmdlc3RQ
cmVmaXhMZW5ndGgpOwogCi0gICAgcmV0dXJuICIke2NsYXNzfTo6JGVudW0iOworICAgIHJldHVy
biAiJHtjbGFzc306OiRtZW1iZXIiOwogfQogCi1zdWIgR2V0RW51bWVyYXRpb25DbGFzc0lkZW50
aWZpZXIKK3N1YiBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZQogewogICAgIG15ICgkaW50ZXJmYWNl
LCAkbmFtZSkgPSBAXzsKIAotICAgIG15ICRpZGVudGlmaWVyID0gR2V0RW51bWVyYXRpb25DbGFz
c05hbWUoJGludGVyZmFjZSwgJG5hbWUpOwotICAgICRpZGVudGlmaWVyID1+IHMvOjovLzsKLSAg
ICByZXR1cm4gJGlkZW50aWZpZXI7CisgICAgcmV0dXJuIEdldE5lc3RlZENsYXNzTmFtZSgkaW50
ZXJmYWNlLCAkbmFtZSk7CiB9CiAKIHN1YiBHZXRFbnVtZXJhdGlvblZhbHVlTmFtZQpAQCAtODY1
LDE1ICs4NDMsMjAgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRl
bnQKIHsKICAgICBteSAoJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucykgPSBAXzsKIAorICAgIHJl
dHVybiAiIiB1bmxlc3MgQCRlbnVtZXJhdGlvbnM7CisKICAgICAjIEZJWE1FOiBDb3VsZCBvcHRp
bWl6ZSB0aGlzIHRvIG9ubHkgZ2VuZXJhdGUgdGhlIHBhcnRzIG9mIGVhY2ggZW51bWVyYXRpb24g
dGhhdCBhcmUgYWN0dWFsbHkKICAgICAjIHVzZWQsIHdoaWNoIHdvdWxkIHJlcXVpcmUgaXRlcmF0
aW5nIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgaW50ZXJmYWNlLgogCiAgICAgbXkgJHJlc3VsdCA9
ICIiOworCisgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4g
cGFyc2UoRXhlY1N0YXRlJiwgSlNWYWx1ZSk7XG4iOworICAgICRyZXN1bHQgLj0gInRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTtcblxu
IjsKKwogICAgIGZvcmVhY2ggbXkgJGVudW1lcmF0aW9uIChAJGVudW1lcmF0aW9ucykgewogICAg
ICAgICBteSAkbmFtZSA9ICRlbnVtZXJhdGlvbi0+bmFtZTsKIAogICAgICAgICBteSAkY2xhc3NO
YW1lID0gR2V0RW51bWVyYXRpb25DbGFzc05hbWUoJGludGVyZmFjZSwgJG5hbWUpOwotICAgICAg
ICBteSAkY2xhc3NJZGVudGlmaWVyID0gR2V0RW51bWVyYXRpb25DbGFzc0lkZW50aWZpZXIoJGlu
dGVyZmFjZSwgJG5hbWUpOwogCiAgICAgICAgICMgRklYTUU6IEEgbGl0dGxlIHVnbHkgdG8gaGF2
ZSB0aGlzIGJlIGEgc2lkZSBlZmZlY3QgaW5zdGVhZCBvZiBhIHJldHVybiB2YWx1ZS4KICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+Iik7CkBAIC04ODEsMTEg
Kzg2NCw5IEBAIHN1YiBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250ZW50CiAg
ICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNv
bmRpdGlvbmFsU3RyaW5nKCRlbnVtZXJhdGlvbik7CiAgICAgICAgICRyZXN1bHQgLj0gIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAotICAgICAg
ICAjIERlY2xhcmUgdGhlc2UgaW5zdGVhZCBvZiB1c2luZyAic3RhdGljIiBiZWNhdXNlIHRoZXNl
IG1heSBiZSB1bnVzZWQgYW5kIHdlIGRvbid0Ci0gICAgICAgICMgd2FudCB0byBnZXQgd2Fybmlu
Z3MgYWJvdXQgdGhlbS4KKyAgICAgICAgIyBEZWNsYXJlIHRoaXMgaW5zdGVhZCBvZiB1c2luZyAi
c3RhdGljIiBiZWNhdXNlIGl0IG1heSBiZSB1bnVzZWQgYW5kIHdlIGRvbid0CisgICAgICAgICMg
d2FudCB0byBnZXQgd2FybmluZ3MgYWJvdXQgaXQuCiAgICAgICAgICRyZXN1bHQgLj0gIkpTU3Ry
aW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCAkY2xhc3NOYW1lKTtcbiI7Ci0gICAg
ICAgICRyZXN1bHQgLj0gIk9wdGlvbmFsPCRjbGFzc05hbWU+IHBhcnNlJGNsYXNzSWRlbnRpZmll
cihFeGVjU3RhdGUmLCBKU1ZhbHVlKTtcbiI7Ci0gICAgICAgICRyZXN1bHQgLj0gImV4dGVybiBj
b25zdCBjaGFyIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMke2NsYXNzSWRlbnRpZmllcn1bXTtc
blxuIjsKIAogICAgICAgICAjIFRha2UgYW4gRXhlY1N0YXRlKiBpbnN0ZWFkIG9mIGFuIEV4ZWNT
dGF0ZSYgdG8gbWF0Y2ggdGhlIGpzU3RyaW5nV2l0aENhY2hlIGZyb20gSlNTdHJpbmcuaC4KICAg
ICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2UgVk0mIGluc3RlYWQgb2YgRXhlY1N0YXRlKi4K
QEAgLTkxOSw3ICs5MDAsNyBAQCBzdWIgR2VuZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9u
Q29udGVudAogICAgICAgICAjIEZJWE1FOiBDaGFuZ2UgdG8gdGFrZSBWTSYgaW5zdGVhZCBvZiBF
eGVjU3RhdGUmLgogICAgICAgICAjIEZJWE1FOiBDb25zaWRlciB1c2luZyB0b1N0cmluZ09yTnVs
bCB0byBtYWtlIGV4Y2VwdGlvbiBjaGVja2luZyBmYXN0ZXIuCiAgICAgICAgICMgRklYTUU6IENv
bnNpZGVyIGZpbmRpbmcgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gbWF0Y2ggYWdhaW5zdCBhbGwg
dGhlIHN0cmluZ3MgcXVpY2tseS4KLSAgICAgICAgJHJlc3VsdCAuPSAiT3B0aW9uYWw8JGNsYXNz
TmFtZT4gcGFyc2UkY2xhc3NJZGVudGlmaWVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpXG4iOworICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IE9wdGlvbmFsPCRjbGFzc05h
bWU+IHBhcnNlPCRjbGFzc05hbWU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpXG4i
OwogICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7XG4iOwogICAgICAgICBm
b3JlYWNoIG15ICR2YWx1ZSAoQHskZW51bWVyYXRpb24tPnZhbHVlc30pIHsKQEAgLTkzNCw3ICs5
MTUsNjIgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiBOdWxsb3B0O1xuIjsKICAgICAgICAgJHJlc3Vs
dCAuPSAifVxuXG4iOwogCi0gICAgICAgICRyZXN1bHQgLj0gImNvbnN0IGNoYXIgZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlcyR7Y2xhc3NJZGVudGlmaWVyfVtdID0gXCJcXFwiIiAuIGpvaW4gKCJc
XFwiLCBcXFwiIiwgQHskZW51bWVyYXRpb24tPnZhbHVlc30pIC4gIlxcXCJcIjtcblxuIjsKKyAg
ICAgICAgIyBGSVhNRTogQSBsaXR0bGUgdWdseSB0byBoYXZlIHRoaXMgYmUgYSBzaWRlIGVmZmVj
dCBpbnN0ZWFkIG9mIGEgcmV0dXJuIHZhbHVlLgorICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNET01CdWlsZC5oIik7CisKKyAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiAkY2xhc3NO
YW1lIGJ1aWxkPCRjbGFzc05hbWU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpXG4i
OworICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOworICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0
byByZXN1bHQgPSBwYXJzZTwkY2xhc3NOYW1lPihzdGF0ZSwgdmFsdWUpO1xuIjsKKyAgICAgICAg
JHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkge1xuIjsKKyAgICAgICAgJHJl
c3VsdCAuPSAiICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUpO1xuIjsKKyAgICAgICAgJHJl
c3VsdCAuPSAiICAgICAgICByZXR1cm4geyB9O1xuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAiICAg
IH1cbiI7CisgICAgICAgICRyZXN1bHQgLj0gIiAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7XG4i
OworICAgICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7CisKKyAgICAgICAgJHJlc3VsdCAuPSAidGVt
cGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczwkY2xh
c3NOYW1lPigpXG4iOworICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOworICAgICAgICAkcmVzdWx0
IC49ICIgICAgcmV0dXJuIFwiXFxcIiIgLiBqb2luICgiXFxcIiwgXFxcIiIsIEB7JGVudW1lcmF0
aW9uLT52YWx1ZXN9KSAuICJcXFwiXCI7XG4iOworICAgICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7
CisKKyAgICAgICAgJHJlc3VsdCAuPSAiI2VuZGlmXG5cbiIgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OworICAgIH0KKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIEdldERpY3Rpb25hcnlDbGFz
c05hbWUKK3sKKyAgICBteSAoJGludGVyZmFjZSwgJG5hbWUpID0gQF87CisKKyAgICByZXR1cm4g
R2V0TmVzdGVkQ2xhc3NOYW1lKCRpbnRlcmZhY2UsICRuYW1lKTsKK30KKworc3ViIEdlbmVyYXRl
RGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAoreworICAgIG15ICgkaW50ZXJmYWNlLCAk
ZGljdGlvbmFyaWVzKSA9IEBfOworCisgICAgbXkgJHJlc3VsdCA9ICIiOworICAgIGZvcmVhY2gg
bXkgJGRpY3Rpb25hcnkgKEAkZGljdGlvbmFyaWVzKSB7CisgICAgICAgIG15ICRuYW1lID0gJGRp
Y3Rpb25hcnktPm5hbWU7CisKKyAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVH
ZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRpY3Rpb25hcnkpOworICAgICAg
ICAkcmVzdWx0IC49ICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIiBpZiAkY29uZGl0aW9u
YWxTdHJpbmc7CisKKyAgICAgICAgbXkgJGNsYXNzTmFtZSA9IEdldERpY3Rpb25hcnlDbGFzc05h
bWUoJGludGVyZmFjZSwgJG5hbWUpOworCisgICAgICAgICMgRklYTUU6IEEgbGl0dGxlIHVnbHkg
dG8gaGF2ZSB0aGlzIGJlIGEgc2lkZSBlZmZlY3QgaW5zdGVhZCBvZiBhIHJldHVybiB2YWx1ZS4K
KyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQnVpbGQuaCIpOworCisgICAgICAgICRy
ZXN1bHQgLj0gInRlbXBsYXRlPD4gJGNsYXNzTmFtZSBidWlsZDwkY2xhc3NOYW1lPihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKVxuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAie1xuIjsK
KyAgICAgICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiB7IFxuIjsKKworICAgICAgICBmb3JlYWNo
IG15ICRtZW1iZXIgKEB7JGRpY3Rpb25hcnktPm1lbWJlcnN9KSB7CisgICAgICAgICAgICAkcmVz
dWx0IC49ICIgICAgICAgIGJ1aWxkPCIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkaW50
ZXJmYWNlLCAkbWVtYmVyKSAuICI+KHN0YXRlLCB2YWx1ZSwgXCIiIC4gJG1lbWJlci0+bmFtZSAu
ICJcIiksXG4iOworICAgICAgICB9CisKKyAgICAgICAgJHJlc3VsdCAuPSAiICAgIH07XG4iOwor
ICAgICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7CiAKICAgICAgICAgJHJlc3VsdCAuPSAiI2VuZGlm
XG5cbiIgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgIH0KQEAgLTE4OTksNyArMTkzNSw3IEBA
IHN1YiBHZXRJbmRleGVkR2V0dGVyRXhwcmVzc2lvbgogCiBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKSA9IEBf
OworICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFy
aWVzKSA9IEBfOwogCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwog
ICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CkBAIC0xOTMyLDYgKzE5Njgs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAi
bmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKIAogICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5l
cmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJh
dGlvbnMpKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVt
ZW50YXRpb25Db250ZW50KCRpbnRlcmZhY2UsICRkaWN0aW9uYXJpZXMpKTsKIAogICAgIG15IEBm
dW5jdGlvbnMgPSBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc307CiAgICAgcHVzaChAZnVuY3Rpb25z
LCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5mdW5jdGlvbnN9KSBpZiAkaW50ZXJmYWNlLT5pdGVy
YWJsZTsKQEAgLTI1MjgsMTQgKzI1NjUsMTQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTtcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBn
bG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7XG4iKTsKIAotICAgICAgICAgICAgICAgIG15ICRu
YXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkdHlwZSk7Ci0gICAgICAgICAgICAgICAgbXkgJG1l
bW9pemVkVHlwZSA9IEdldE5hdGl2ZVR5cGVGb3JNZW1vaXphdGlvbigkdHlwZSk7CisgICAgICAg
ICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2UsICR0eXBl
KTsKKyAgICAgICAgICAgICAgICBteSAkbWVtb2l6ZWRUeXBlID0gR2V0TmF0aXZlVHlwZUZvck1l
bW9pemF0aW9uKCRpbnRlcmZhY2UsICR0eXBlKTsKICAgICAgICAgICAgICAgICBteSAkZXhjZXB0
aW9uQ29kZSA9ICRnZXR0ZXJFeGNlcHRpb25zV2l0aE1lc3NhZ2UgPyAiZWMuY29kZSIgOiAoJGdl
dHRlckV4Y2VwdGlvbnMgPyAiZWMiIDogIjAiKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBi
aW5kaW5nTmFtZShcIiRpbnRlcmZhY2VOYW1lLiRuYW1lXCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7XG4iKTsKICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigi
LCAiLCBAYXJndW1lbnRzKSAuICIpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVt
b2l6ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAk
ZXhjZXB0aW9uQ29kZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICJtZW1vaXplZFJlc3VsdCIsICJjYXN0ZWRU
aGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJjYXN0ZWRUaGlzIikgLiAi
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlvbnM7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IH1cbiIpOwpAQCAtMjU0NSw3ICsyNTgyLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01S
ZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFz
ZT4oKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBp
ZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3Vs
dCkpIHtcbiIpOwogICAgICAgICAgICAgICAgICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBz
aG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFuIGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNv
bnZlcnRlZC4KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2VOYW1lLCAibWVtb2l6ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4g
IjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgImNhc3RlZFRoaXMiKSAuICI7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7XG4iKSBpZiAkZ2V0dGVy
RXhjZXB0aW9uczsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB9XG4iKTsKQEAgLTI1NTgsNyArMjU5NSw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9k
ZSJ9KSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9
IDE7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05v
ZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5h
bWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6
IGpzTnVsbCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGlt
cGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJjYXN0ZWRUaGlzIikgLiAiIDoganNOdWxsKCkpO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVyIikgewogICAgICAg
ICAgICAgICAgIG15ICRnZXR0ZXIgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJXaW5kb3dFdmVudEhhbmRsZXIifSA/ICJ3aW5kb3dFdmVudEhhbmRsZXJBdHRy
aWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgIDogJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiRG9jdW1lbnRFdmVudEhhbmRsZXIifSA/ICJkb2N1bWVudEV2ZW50
SGFuZGxlckF0dHJpYnV0ZSIKQEAgLTI1OTEsMTMgKzI2MjgsMTMgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBteSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVD
YWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxs
V2l0aCJ9LCBcQGltcGxDb250ZW50LCAiSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIik7
CiAKICAgICAgICAgICAgICAgICBpZiAoJHN2Z0xpc3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgIiAu
IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2VOYW1l
LCAiY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9p
biAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQg
PSAgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZh
Y2UsICJjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChq
b2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwog
ICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSkg
ewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUmIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHJvcGVy
dHlSZWZlcmVuY2UoKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5
T3JMaXN0UHJvcGVydHlUeXBlIGVxICJmbG9hdCIpIHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpTU1ZH
TnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAwLCAkaW50ZXJmYWNlTmFtZSwgImltcGwiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1
bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVy
ZmFjZSwgImltcGwiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIg
LiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFs
dWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAs
ICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAi
LCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKIAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI2MTQsNyArMjY1
MSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEBjYWxsV2l0aEFyZ3Mp
OwotICAgICAgICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICIke2Z1bmN0aW9uTmFtZX0oIiAu
IGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIik7CisgICAgICAgICAg
ICAgICAgICAgIG15ICRqc1R5cGUgPSBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLCAwLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIikg
aWYgISRhdHRyaWJ1dGUtPmlzU3RhdGljOwogICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR0eXBlPiBvYmogPSAkanNUeXBl
O1xuIik7CkBAIC0yNjMyLDEwICsyNjY5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAKICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0
eU9yTGlzdFByb3BlcnR5VHlwZSBpbXBsKCpjYXN0ZWRUaGlzLT53cmFwcGVkKCkpO1xuIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0
ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZh
Y2VOYW1lLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJn
dW1lbnRzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0
ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAwLCAkaW50ZXJmYWNlTmFtZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
IiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVz
dWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRl
cmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpO1xuIik7CkBAIC0yODU4LDcgKzI4OTUsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRtYXlUaHJvd0V4
Y2VwdGlvbikgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLCAidmFsdWUiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDb25kaXRpb25hbCJ9KTsKICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklz
V3JhcHBlclR5cGUoJHR5cGUpICYmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlN0cmljdFR5cGVDaGVja2luZyJ9ICYmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
aXNOdWxsYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGlt
ZS9FcnJvci5oPiJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSkgLiAiIG5hdGl2ZVZhbHVlID0gbnVsbHB0cjtcbiIpOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJGlu
dGVyZmFjZSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKSAuICIgbmF0aXZlVmFsdWUgPSBudWxscHRy
O1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBuYXRpdmVWYWx1ZSA9ICRuYXRpdmVWYWx1ZTtcbiIp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7CkBAIC0yODcx
LDcgKzI5MDgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXRO
YXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWduYXR1cmUpIC4gIiBuYXRpdmVW
YWx1ZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvIG5hdGl2ZVZhbHVlID0gJG5hdGl2ZVZhbHVlO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CkBAIC0yOTM0LDcgKzI5NzEsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgk
Y29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkdHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlLnZhbHVlKCkiKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50
cywgJHNob3VsZFBhc3NCeVJlZmVyZW5jZSA/ICIqbmF0aXZlVmFsdWUiIDogIm5hdGl2ZVZhbHVl
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICRzaG91bGRQYXNz
QnlSZWZlcmVuY2UgPyAiKm5hdGl2ZVZhbHVlIiA6ICJXVEZNb3ZlKG5hdGl2ZVZhbHVlKSIpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5ID0gJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9OwpAQCAtMzA4Myw3
ICszMTIwLDcgQEAgRU5ECiAKICAgICAgICAgICAgICAgICAgICAgbXkgJG51bVBhcmFtZXRlcnMg
PSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CiAgICAgICAgICAgICAgICAgICAgIG15ICgkZnVu
Y3Rpb25TdHJpbmcsICRkdW1teSkgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayhcQGltcGxDb250
ZW50LCAkZnVuY3Rpb24sICRpbnRlcmZhY2UsICRudW1QYXJhbWV0ZXJzLCAkZnVuY3Rpb25JbXBs
ZW1lbnRhdGlvbk5hbWUsICRzdmdQcm9wZXJ0eVR5cGUsICRzdmdQcm9wZXJ0eU9yTGlzdFByb3Bl
cnR5VHlwZSwgJHN2Z0xpc3RQcm9wZXJ0eVR5cGUpOwotICAgICAgICAgICAgICAgICAgICBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3RyaW5n
LCAiICAgICIsICRzdmdQcm9wZXJ0eVR5cGUsICRpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRm
dW5jdGlvblN0cmluZywgIiAgICAiLCAkc3ZnUHJvcGVydHlUeXBlLCAkaW50ZXJmYWNlKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEdl
bmVyYXRlRnVuY3Rpb25DYXN0ZWRUaGlzKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRmdW5jdGlv
bik7CkBAIC0zMTM3LDcgKzMxNzQsNyBAQCBFTkQKIAogICAgICAgICAgICAgICAgICAgICAgICAg
bXkgJG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CiAgICAgICAgICAg
ICAgICAgICAgICAgICBteSAoJGZ1bmN0aW9uU3RyaW5nLCAkZHVtbXkpID0gR2VuZXJhdGVQYXJh
bWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVudCwgJGZ1bmN0aW9uLCAkaW50ZXJmYWNlLCAkbnVtUGFy
YW1ldGVycywgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAkc3ZnUHJvcGVydHlUeXBlLCAk
c3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwo
JGZ1bmN0aW9uLCAkZnVuY3Rpb25TdHJpbmcsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGlu
dGVyZmFjZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgIiAgICAiLCAkc3Zn
UHJvcGVydHlUeXBlLCAkaW50ZXJmYWNlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM2MjksNyArMzY2Niw3IEBAIHN1YiBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgaWYgKCRhcmdUeXBlIGVxICJET01TdHJp
bmciKSB7CiAgICAgICAgICAgICAgICAgJG5hdGl2ZUVsZW1lbnRUeXBlID0gIlN0cmluZyI7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRuYXRpdmVFbGVtZW50VHlwZSA9
IEdldE5hdGl2ZVR5cGUoJGFyZ1R5cGUpOworICAgICAgICAgICAgICAgICRuYXRpdmVFbGVtZW50
VHlwZSA9IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGFyZ1R5cGUpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoIUlzTmF0aXZlVHlwZSgkYXJnVHlwZSkpIHsKQEAgLTM2NDcs
NyArMzY4NCw2IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkYXJnVHlwZSkpIHsK
ICAgICAgICAgICAgIG15ICRjbGFzc05hbWUgPSBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZSgkaW50
ZXJmYWNlLCAkYXJnVHlwZSk7Ci0gICAgICAgICAgICBteSAkY2xhc3NJZGVudGlmaWVyID0gR2V0
RW51bWVyYXRpb25DbGFzc0lkZW50aWZpZXIoJGludGVyZmFjZSwgJGFyZ1R5cGUpOwogCiAgICAg
ICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKIApAQCAtMzY3
NSwxMSArMzcxMSwxMSBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAg
ICAgICAkaW5kZW50ID0gIiAgICAiOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICRkZWZpbmVPcHRpb25hbFZhbHVlID0gcGFyc2Uk
Y2xhc3NJZGVudGlmaWVyKCpzdGF0ZSwgJHtuYW1lfVZhbHVlKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAkZGVmaW5lT3B0aW9uYWxWYWx1ZSA9IHBh
cnNlPCRjbGFzc05hbWU+KCpzdGF0ZSwgJHtuYW1lfVZhbHVlKTtcbiIpOwogICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVu
dCAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkoISRv
cHRpb25hbFZhbHVlKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGlu
ZGVudCAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCAk
YXJnc0luZGV4LCBcIiRuYW1lXCIsIFwiJGludGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9u
TmFtZSwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcyRjbGFzc0lkZW50aWZpZXIpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsICRhcmdzSW5kZXgsIFwiJG5hbWVcIiwg
XCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lLCBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPCRjbGFzc05hbWU+KCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIkaW5kZW50ICAgICRuYW1lID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpO1xuIikgaWYg
JG9wdGlvbmFsVmFsdWUgbmUgJG5hbWU7CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICB9XG4iKSBpZiAkaW5kZW50IG5lICIiOwpAQCAtMzcwOSw3ICszNzQ1LDcgQEAgc3Vi
IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIG15ICRvdXRlcjsKICAgICAgICAgICAgICAgICBteSAkaW5uZXI7Ci0gICAgICAgICAg
ICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1l
dGVyKTsKKyAgICAgICAgICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVGcm9t
U2lnbmF0dXJlKCRpbnRlcmZhY2UsICRwYXJhbWV0ZXIpOwogCiAgICAgICAgICAgICAgICAgaWYg
KCRvcHRpb25hbCAmJiBkZWZpbmVkKCRwYXJhbWV0ZXItPmRlZmF1bHQpICYmICFXaWxsQ29udmVy
dFVuZGVmaW5lZFRvRGVmYXVsdFBhcmFtZXRlclZhbHVlKCRwYXJhbWV0ZXItPnR5cGUsICRwYXJh
bWV0ZXItPmRlZmF1bHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICRkZWZhdWx0VmFsdWUg
PSAkcGFyYW1ldGVyLT5kZWZhdWx0OwpAQCAtMzczNiwxNiArMzc3MiwxNSBAQCBzdWIgR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICB9IGVsc2lmICgkb3B0aW9uYWwgJiYg
IWRlZmluZWQoJHBhcmFtZXRlci0+ZGVmYXVsdCkpIHsKICAgICAgICAgICAgICAgICAgICAgIyBV
c2UgV1RGOjpPcHRpb25hbDw+KCkgZm9yIG9wdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBhcmUgbWlz
c2luZyBvciB1bmRlZmluZWQgYW5kIHRoYXQgZG8gbm90IGhhdmUKICAgICAgICAgICAgICAgICAg
ICAgIyBhIGRlZmF1bHQgdmFsdWUgaW4gdGhlIElETC4KLSAgICAgICAgICAgICAgICAgICAgbXkg
JGRlZmF1bHRWYWx1ZSA9ICJPcHRpb25hbDwkbmF0aXZlVHlwZT4oKSI7Ci0gICAgICAgICAgICAg
ICAgICAgICRuYXRpdmVUeXBlID0gIk9wdGlvbmFsPCRuYXRpdmVUeXBlPiI7Ci0gICAgICAgICAg
ICAgICAgICAgICRvdXRlciA9ICJzdGF0ZS0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNVbmRlZmlu
ZWQoKSA/ICRkZWZhdWx0VmFsdWUgOiAiOworICAgICAgICAgICAgICAgICAgICAkb3V0ZXIgPSAi
c3RhdGUtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDwkbmF0
aXZlVHlwZT4oKSA6ICI7CiAgICAgICAgICAgICAgICAgICAgICRpbm5lciA9ICJzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkiOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICRvdXRlciA9ICIiOwogICAgICAgICAgICAgICAgICAgICAkaW5u
ZXIgPSAic3RhdGUtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgbXkgKCRuYXRpdmVWYWx1ZSwgJG1heVRocm93RXhjZXB0aW9uKSA9IEpT
VmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkcGFyYW1ldGVyLCAkaW5uZXIsICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSk7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICRuYXRpdmVUeXBlICRuYW1lID0gJHtv
dXRlcn0ke25hdGl2ZVZhbHVlfTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2ZVZhbHVlfTtcbiIpOworICAg
ICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CiAgICAgICAgICAgICAgICAg
aWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CkBAIC0zODQ0LDkgKzM4NzksOSBA
QCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlv
biAoQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KSB7CiAgICAgICAgICAgICBteSBAYXJndW1lbnRz
ID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSkgewotICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgR2V0TmF0aXZl
VHlwZUZvckNhbGxiYWNrcygkcGFyYW1ldGVyLT50eXBlKSAuICIgIiAuICRwYXJhbWV0ZXItPm5h
bWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgR2V0TmF0aXZlVHlwZUZvckNh
bGxiYWNrcygkaW50ZXJmYWNlLCAkcGFyYW1ldGVyLT50eXBlKSAuICIgIiAuICRwYXJhbWV0ZXIt
Pm5hbWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiIC4g
am9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZpcnR1YWwgIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGlu
dGVyZmFjZSwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAiIC4gJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWUgLiAiKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzk3OCwyMCArNDAxMywyMCBAQCBzdWIgR2VuZXJhdGVD
YWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4vLyBG
dW5jdGlvbnNcbiIpOwogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJmYWNl
LT5mdW5jdGlvbnN9KSB7CiAgICAgICAgICAgICBteSBAcGFyYW1zID0gQHskZnVuY3Rpb24tPnBh
cmFtZXRlcnN9OwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwgR2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+dHlwZSkgbmUgImJvb2wiKSB7CisgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fCBHZXROYXRpdmVUeXBlKCRp
bnRlcmZhY2UsICRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSBuZSAiYm9vbCIpIHsKICAgICAg
ICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBZGRJbmNsdWRl
c0ZvclR5cGVJbkltcGwoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOwogICAgICAgICAgICAg
bXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05hbWV9Ojoke2Z1bmN0aW9uTmFt
ZX0oIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5
cGVGb3JDYWxsYmFja3MoJGludGVyZmFjZSwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4g
IiAke2NsYXNzTmFtZX06OiR7ZnVuY3Rpb25OYW1lfSgiKTsKIAogICAgICAgICAgICAgbXkgQGFy
Z3MgPSAoKTsKICAgICAgICAgICAgIG15IEBhcmdzQ2hlY2sgPSAoKTsKICAgICAgICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFt
ZSA9ICRwYXJhbS0+bmFtZTsKICAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGVJbklt
cGwoJHBhcmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW1OYW1lKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRpbnRl
cmZhY2UsICRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW1OYW1lKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwpAQCAtNDAwNyw3ICs0MDQyLDcgQEAg
c3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICBmb3JlYWNo
IG15ICRwYXJhbSAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAk
cGFyYW0tPm5hbWU7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXJn
cy5hcHBlbmQoIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkcGFyYW0sIDEsICRpbnRlcmZhY2VOYW1lLCAk
cGFyYW1OYW1lLCAibV9kYXRhIikgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGFyZ3MuYXBwZW5kKCIgLiBOYXRpdmVUb0pTVmFsdWUoJHBhcmFtLCAx
LCAkaW50ZXJmYWNlLCAkcGFyYW1OYW1lLCAibV9kYXRhIikgLiAiKTtcbiIpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIE5ha2VkUHRyPEV4
Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247XG4iKTsKQEAgLTQwNTYsMTEgKzQwOTEsNyBAQCBz
dWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAKIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uRnVuY3Rpb25DYWxsKCkKIHsKLSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgICBt
eSAkZnVuY3Rpb25TdHJpbmcgPSBzaGlmdDsKLSAgICBteSAkaW5kZW50ID0gc2hpZnQ7Ci0gICAg
bXkgJHN2Z1Byb3BlcnR5VHlwZSA9IHNoaWZ0OwotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hp
ZnQ7CisgICAgbXkgKCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3RyaW5nLCAkaW5kZW50LCAkc3ZnUHJv
cGVydHlUeXBlLCAkaW50ZXJmYWNlKSA9IEBfOwogCiAgICAgbXkgJG5vbmRldGVybWluaXN0aWMg
PSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vbmRldGVybWlu
aXN0aWMifTsKICAgICBteSAkcmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJhaXNlc0V4Y2VwdGlvbldpdGhNZXNz
YWdlIn07CkBAIC00MTA0LDkgKzQxMzUsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uQ2FsbCgpCiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJlcGxheS9JbnB1
dEN1cnNvci5oPiIsICJXRUJfUkVQTEFZIik7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiIsICJXRUJfUkVQTEFZIik7CiAKLSAgICAgICAgICAg
IG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUpOwotICAgICAgICAgICAgbXkgJG1lbW9pemVkVHlwZSA9IEdldE5hdGl2ZVR5cGVG
b3JNZW1vaXphdGlvbigkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICAgICBt
eSAkYmluZGluZ05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICIuIiAuICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOworICAgICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJv
bVNpZ25hdHVyZSgkaW50ZXJmYWNlLCAkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CisgICAgICAgICAg
ICBteSAkbWVtb2l6ZWRUeXBlID0gR2V0TmF0aXZlVHlwZUZvck1lbW9pemF0aW9uKCRpbnRlcmZh
Y2UsICRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAgICAgIG15ICRiaW5kaW5n
TmFtZSA9ICRpbnRlcmZhY2UtPm5hbWUgLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFt
ZTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIkpTVmFsdWUgcmVz
dWx0O1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiBFTkFCTEUoV0VC
X1JFUExBWSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAi
SW5wdXRDdXJzb3ImIGN1cnNvciA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmlucHV0
Q3Vyc29yKCk7XG4iKTsKQEAgLTQxMTUsMjQgKzQxNDYsMjQgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAiICAgICRuYXRpdmVUeXBlIG1lbW9pemVkUmVzdWx0ID0gJGZ1bmN0aW9uU3RyaW5n
O1xuIik7CiAgICAgICAgICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRyYWlzZXNFeGNlcHRpb25X
aXRoTWVzc2FnZSA/ICJlYy5jb2RlIiA6ICgkcmFpc2VzRXhjZXB0aW9uID8gImVjIiA6ICIwIik7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgY3Vyc29yLmFw
cGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PCRtZW1vaXplZFR5cGU+PihiaW5kaW5nTmFtZS5n
ZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsICRleGNlcHRpb25Db2RlKTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2VOYW1lLCAi
bWVtb2l6ZWRSZXN1bHQiLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1
ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0Iiwg
JHRoaXNPYmplY3QpIC4gIjtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAifSBlbHNlIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkge1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgTWVtb2l6ZWRET01SZXN1bHRC
YXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgICRtZW1v
aXplZFR5cGUgbWVtb2l6ZWRSZXN1bHQ7XG4iKTsKICAgICAgICAgICAgICMgRklYTUU6IHRoZSBn
ZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFuIGlucHV0IGNhbm5vdCBi
ZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAk
aW5kZW50IC4gIiAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBl
PihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAiICAgICAgICByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlTmFtZSwgIm1lbW9pemVkUmVzdWx0IiwgJHRoaXNP
YmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAiICAgICAgICByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLCAxLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAkdGhpc09iamVjdCkgLiAiO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgICAgIGVj
LmNvZGUgPSBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpO1xuIikgaWYgJHJhaXNlc0V4Y2VwdGlvbldp
dGhNZXNzYWdlOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAg
ICAgICBlYyA9IGlucHV0LT5leGNlcHRpb25Db2RlKCk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9u
ICYmICEkcmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2U7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgJGluZGVudCAuICIgICAgfSBlbHNlXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAkaW5kZW50IC4gIiAgICAgICAgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1
ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZU5hbWUsICRmdW5jdGlvblN0cmlu
ZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRpbmRlbnQgLiAiICAgICAgICByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0
KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIn0g
ZWxzZVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAg
cmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGlu
dGVyZmFjZU5hbWUsICRmdW5jdGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbnRlcmZhY2UsICRmdW5j
dGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjZWxzZVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJyZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJl
LCAxLCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJyZXN1bHQgPSAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAk
ZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiI2VuZGlmXG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIkpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGludGVyZmFjZU5hbWUsICRmdW5j
dGlvblN0cmluZywgJHRoaXNPYmplY3QpIC4gIjtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRpbmRlbnQgLiAiSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICR0
aGlzT2JqZWN0KSAuICI7XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuIiAuICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAk
cmFpc2VzRXhjZXB0aW9uOwogCkBAIC00MjAwLDE0ICs0MjMxLDE0IEBAIEVORAogCiBzdWIgR2V0
TmF0aXZlVHlwZUZyb21TaWduYXR1cmUKIHsKLSAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7Ci0g
ICAgbXkgJHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOworICAgIG15ICgkaW50ZXJmYWNlLCAkc2ln
bmF0dXJlKSA9IEBfOwogCi0gICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUpOworICAgIHJl
dHVybiBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2UsICRzaWduYXR1cmUtPnR5cGUpOwogfQogCiBt
eSAlbmF0aXZlVHlwZSA9ICgKICAgICAiRE9NU3RyaW5nIiA9PiAiU3RyaW5nIiwKKyAgICAiRE9N
U3RyaW5nTGlzdCIgPT4gIlJlZlB0cjxET01TdHJpbmdMaXN0PiIsCiAgICAgIkRPTVRpbWVTdGFt
cCIgPT4gIkRPTVRpbWVTdGFtcCIsCiAgICAgIkRhdGUiID0+ICJkb3VibGUiLAogICAgICJEaWN0
aW9uYXJ5IiA9PiAiRGljdGlvbmFyeSIsCkBAIC00MjMxLDIyICs0MjYyLDIwIEBAIG15ICVuYXRp
dmVUeXBlID0gKAogCiBzdWIgR2V0TmF0aXZlVHlwZQogewotICAgIG15ICR0eXBlID0gc2hpZnQ7
CisgICAgbXkgKCRpbnRlcmZhY2UsICR0eXBlKSA9IEBfOwogCi0gICAgIyBGSVhNRTogTWF5YmUg
d2UgY2FuIHN0YXJ0IHVzaW5nICJhdXRvIiBmb3IgbW9zdCBvZiB0aGVzZT8KLQotICAgIG15ICRz
dmdOYXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigk
dHlwZSk7Ci0gICAgcmV0dXJuICIke3N2Z05hdGl2ZVR5cGV9KiIgaWYgJHN2Z05hdGl2ZVR5cGU7
Ci0gICAgcmV0dXJuICJSZWZQdHI8RE9NU3RyaW5nTGlzdD4iIGlmICR0eXBlIGVxICJET01TdHJp
bmdMaXN0IjsKLSAgICByZXR1cm4gIlJlZlB0cjwke3R5cGV9PiIgaWYgJGNvZGVHZW5lcmF0b3It
PklzVHlwZWRBcnJheVR5cGUoJHR5cGUpIGFuZCBub3QgJHR5cGUgZXEgIkFycmF5QnVmZmVyIjsK
ICAgICByZXR1cm4gJG5hdGl2ZVR5cGV7JHR5cGV9IGlmIGV4aXN0cyAkbmF0aXZlVHlwZXskdHlw
ZX07CiAKLSAgICBteSAkYXJyYXlPclNlcXVlbmNlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRB
cnJheU9yU2VxdWVuY2VUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gR2V0RW51bWVyYXRpb25DbGFz
c05hbWUoJGludGVyZmFjZSwgJHR5cGUpIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0
eXBlKTsKKworICAgIG15ICR0ZWFyT2ZmVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBl
TmVlZGluZ1RlYXJPZmYoJHR5cGUpOworICAgIHJldHVybiAiJHt0ZWFyT2ZmVHlwZX0qIiBpZiAk
dGVhck9mZlR5cGU7CisKKyAgICByZXR1cm4gIlJlZlB0cjwke3R5cGV9PiIgaWYgJGNvZGVHZW5l
cmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpIGFuZCAkdHlwZSBuZSAiQXJyYXlCdWZmZXIi
OwogCisgICAgbXkgJGFycmF5T3JTZXF1ZW5jZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJy
YXlPclNlcXVlbmNlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJWZWN0b3I8IiAuIEdldE5hdGl2
ZVZlY3RvcklubmVyVHlwZSgkYXJyYXlPclNlcXVlbmNlVHlwZSkgLiAiPiIgaWYgJGFycmF5T3JT
ZXF1ZW5jZVR5cGU7Ci0gICAgcmV0dXJuICJhdXRvIiBpZiAkY29kZUdlbmVyYXRvci0+SXNFbnVt
VHlwZSgkdHlwZSk7CiAKLSAgICAjIEZvciBhbGwgb3RoZXIgdHlwZXMsIHRoZSBuYXRpdmUgdHlw
ZSBpcyBhIHBvaW50ZXIgd2l0aCBzYW1lIHR5cGUgbmFtZSBhcyB0aGUgSURMIHR5cGUuCiAgICAg
cmV0dXJuICIke3R5cGV9KiI7CiB9CiAKQEAgLTQyNTUsOCArNDI4NCw3IEBAIHN1YiBTaG91bGRQ
YXNzV3JhcHBlckJ5UmVmZXJlbmNlCiAgICAgbXkgJHBhcmFtZXRlciA9IHNoaWZ0OwogICAgIG15
ICRpbnRlcmZhY2UgPSBzaGlmdDsKIAotICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlw
ZSgkcGFyYW1ldGVyLT50eXBlKTsKLQorICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlw
ZSgkaW50ZXJmYWNlLCAkcGFyYW1ldGVyLT50eXBlKTsKICAgICByZXR1cm4gJGNvZGVHZW5lcmF0
b3ItPlNob3VsZFBhc3NXcmFwcGVyQnlSZWZlcmVuY2UoJHBhcmFtZXRlciwgJGludGVyZmFjZSkg
JiYgKHN1YnN0cigkbmF0aXZlVHlwZSwgLTEpIGVxICcqJyB8fCAkbmF0aXZlVHlwZSA9fiAvXlJl
ZlB0ci8pOwogfQogCkBAIC00MjY0LDI3ICs0MjkyLDI1IEBAIHN1YiBHZXROYXRpdmVWZWN0b3JJ
bm5lclR5cGUKIHsKICAgICBteSAkYXJyYXlPclNlcXVlbmNlVHlwZSA9IHNoaWZ0OwogCi0gICAg
cmV0dXJuICJTdHJpbmciIGlmICRhcnJheU9yU2VxdWVuY2VUeXBlIGVxICJET01TdHJpbmciOwog
ICAgIHJldHVybiAkbmF0aXZlVHlwZXskYXJyYXlPclNlcXVlbmNlVHlwZX0gaWYgZXhpc3RzICRu
YXRpdmVUeXBleyRhcnJheU9yU2VxdWVuY2VUeXBlfTsKICAgICByZXR1cm4gIlJlZlB0cjwke2Fy
cmF5T3JTZXF1ZW5jZVR5cGV9PiI7CiB9CiAKIHN1YiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tz
CiB7Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAoJGludGVyZmFjZSwgJHR5cGUpID0g
QF87CisKICAgICByZXR1cm4gIlBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiIgaWYg
JHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7CiAgICAgcmV0dXJuICJQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nTGlzdCI7CiAgICAgcmV0dXJu
ICJjb25zdCBTdHJpbmcmIiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKLQotICAgIHJldHVybiBH
ZXROYXRpdmVUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gR2V0TmF0aXZlVHlwZSgkaW50ZXJmYWNl
LCAkdHlwZSk7CiB9CiAKIHN1YiBHZXROYXRpdmVUeXBlRm9yTWVtb2l6YXRpb24KIHsKLSAgICBt
eSAkdHlwZSA9IHNoaWZ0OwotICAgIHJldHVybiAiU3RyaW5nIiBpZiAkdHlwZSBlcSAiRE9NU3Ry
aW5nIjsKKyAgICBteSAoJGludGVyZmFjZSwgJHR5cGUpID0gQF87CiAKLSAgICByZXR1cm4gR2V0
TmF0aXZlVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwg
JHR5cGUpOwogfQogCiBzdWIgR2V0U1ZHUHJvcGVydHlUeXBlcwpAQCAtNDM3Myw3ICs0Mzk5LDcg
QEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogCiAgICAgaWYgKCR0eXBlIGVxICJEaWN0aW9uYXJ5Iikg
ewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRGljdGlvbmFyeS5oIiwgJGNvbmRpdGlvbmFs
KTsKLSAgICAgICAgcmV0dXJuICgieyBzdGF0ZSwgJHZhbHVlIH0iLCAwKTsKKyAgICAgICAgcmV0
dXJuICgiRGljdGlvbmFyeShzdGF0ZSwgJHZhbHVlKSIsIDApOwogICAgIH0KIAogICAgIG15ICRh
cnJheU9yU2VxdWVuY2VUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5T3JTZXF1ZW5jZVR5
cGUoJHR5cGUpOwpAQCAtNDM5Myw3ICs0NDE5LDggQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAg
IHJldHVybiAoInZhbHVlVG9EYXRlKHN0YXRlLCAkdmFsdWUpIiwgMSkgaWYgJHR5cGUgZXEgIkRh
dGUiOwogCiAgICAgcmV0dXJuICgidG8kdHlwZSgkdmFsdWUpIiwgMSkgaWYgJGNvZGVHZW5lcmF0
b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwotICAgIHJldHVybiAoInBhcnNlIiAuIEdldEVu
dW1lcmF0aW9uQ2xhc3NJZGVudGlmaWVyKCRpbnRlcmZhY2UsICR0eXBlKSAuICIoKnN0YXRlLCAk
dmFsdWUpIiwgMSkgaWYgJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpOworICAgIHJl
dHVybiAoInBhcnNlPCIgLiBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZSgkaW50ZXJmYWNlLCAkdHlw
ZSkgLiAiPigqc3RhdGUsICR2YWx1ZSkiLCAxKSBpZiAkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlw
ZSgkdHlwZSk7CisgICAgcmV0dXJuICgiYnVpbGQ8IiAuIEdldERpY3Rpb25hcnlDbGFzc05hbWUo
JGludGVyZmFjZSwgJHR5cGUpIC4gIj4oKnN0YXRlLCAkdmFsdWUpIiwgMSkgaWYgJGNvZGVHZW5l
cmF0b3ItPklzRGljdGlvbmFyeVR5cGUoJHR5cGUpOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IkpTJHR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAKQEAgLTQ0MDUsMTEgKzQ0MzIsNyBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAKIHN1YiBOYXRpdmVUb0pTVmFsdWUKIHsKLSAgICBteSAkc2lnbmF0
dXJlID0gc2hpZnQ7Ci0gICAgbXkgJGluRnVuY3Rpb25DYWxsID0gc2hpZnQ7Ci0gICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSBzaGlmdDsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICBteSAkdGhp
c1ZhbHVlID0gc2hpZnQ7CisgICAgbXkgKCRzaWduYXR1cmUsICRpbkZ1bmN0aW9uQ2FsbCwgJGlu
dGVyZmFjZSwgJHZhbHVlLCAkdGhpc1ZhbHVlKSA9IEBfOwogCiAgICAgbXkgJGNvbmRpdGlvbmFs
ID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07CiAgICAg
bXkgJHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOwpAQCAtNDQ4MSwyOCArNDUwNCwyOSBAQCBzdWIg
TmF0aXZlVG9KU1ZhbHVlCiAKICAgICByZXR1cm4gJHZhbHVlIGlmICRjb2RlR2VuZXJhdG9yLT5J
c1NWR0FuaW1hdGVkVHlwZSgkdHlwZSk7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZH
QW5pbWF0ZWRUeXBlKCRpbnRlcmZhY2VOYW1lKSBvciAoJGludGVyZmFjZU5hbWUgZXEgIlNWR1Zp
ZXdTcGVjIiBhbmQgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybUxpc3QiKSkgeworICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZS0+bmFtZSkgb3IgKCRpbnRl
cmZhY2UtPm5hbWUgZXEgIlNWR1ZpZXdTcGVjIiBhbmQgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybUxp
c3QiKSkgewogICAgICAgICAjIENvbnZlcnQgZnJvbSBhYnN0cmFjdCBSZWZQdHI8TGlzdFByb3Bl
cnR5PiB0byByZWFsIHR5cGUsIHNvIHRoZSByaWdodCB0b0pTKCkgbWV0aG9kIGNhbiBiZSBpbnZv
a2VkLgotICAgICAgICAkdmFsdWUgPSAic3RhdGljX2Nhc3Q8IiAuIEdldE5hdGl2ZVR5cGUoJHR5
cGUpIC4gIj4oJHZhbHVlLmdldCgpKSI7Ci0gICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEg
IlNWR1ZpZXdTcGVjIikgeworICAgICAgICAkdmFsdWUgPSAic3RhdGljX2Nhc3Q8IiAuIEdldE5h
dGl2ZVR5cGUoJGludGVyZmFjZSwgJHR5cGUpIC4gIj4oJHZhbHVlLmdldCgpKSI7CisgICAgfSBl
bHNpZiAoJGludGVyZmFjZS0+bmFtZSBlcSAiU1ZHVmlld1NwZWMiKSB7CiAgICAgICAgICMgQ29u
dmVydCBmcm9tIGFic3RyYWN0IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwgc28gdGhlIHJpZ2h0
IHRvSlMoKSBtZXRob2QgY2FuIGJlIGludm9rZWQuCi0gICAgICAgICR2YWx1ZSA9ICJzdGF0aWNf
Y2FzdDwiIC4gR2V0TmF0aXZlVHlwZSgkdHlwZSkgLiAiPigkdmFsdWUpIjsKLSAgICB9IGVsc2lm
ICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUpIGFuZCBub3Qg
JGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykgeworICAgICAgICAkdmFsdWUgPSAic3RhdGljX2Nh
c3Q8IiAuIEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJHR5cGUpIC4gIj4oJHZhbHVlKSI7Cisg
ICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCR0eXBl
KSBhbmQgbm90ICRpbnRlcmZhY2UtPm5hbWUgPX4gL0xpc3QkLykgewogICAgICAgICBteSAkdGVh
ck9mZlR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCR0eXBl
KTsKICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVXaXRoV3JpdGFibGVQcm9w
ZXJ0aWVzTmVlZGluZ1RlYXJPZmYoJHR5cGUpIGFuZCAhJGluRnVuY3Rpb25DYWxsIGFuZCBub3Qg
ZGVmaW5lZCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1tdXRhYmxlIn0pIHsK
ICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAkdmFsdWU7CiAgICAgICAgICAgICAkZ2V0dGVyID1+
IHMvaW1wbFwuLy87CiAgICAgICAgICAgICAkZ2V0dGVyID1+IHMvaW1wbC0+Ly87CiAgICAgICAg
ICAgICAkZ2V0dGVyID1+IHMvXChcKS8vOwotICAgICAgICAgICAgbXkgJHVwZGF0ZU1ldGhvZCA9
ICImJHtpbnRlcmZhY2VOYW1lfTo6dXBkYXRlIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0
KCRnZXR0ZXIpOworICAgICAgICAgICAgbXkgJHVwZGF0ZU1ldGhvZCA9ICImIiAuICRpbnRlcmZh
Y2UtPm5hbWUgLiAiOjp1cGRhdGUiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGdldHRl
cik7CiAKLSAgICAgICAgICAgIG15ICRzZWxmSXNUZWFyT2ZmVHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICBt
eSAkc2VsZklzVGVhck9mZlR5cGUgPSAkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1Rl
YXJPZmYoJGludGVyZmFjZS0+bmFtZSk7CiAgICAgICAgICAgICBpZiAoJHNlbGZJc1RlYXJPZmZU
eXBlKSB7CiAgICAgICAgICAgICAgICAgIyBGSVhNRTogV2h5IFNWR01hdHJpeCBzcGVjaWZpY2Fs
bHk/CiAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR01hdHJpeFRlYXJPZmYu
aCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgICAgICAgICAgJHZhbHVlID0gIlNWR01hdHJpeFRl
YXJPZmY6OmNyZWF0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksICR2YWx1ZSkiOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU1ZHU3RhdGlj
UHJvcGVydHlUZWFyT2ZmLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgICAgIG15ICRp
bnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKICAgICAgICAgICAgICAgICAkdGVhck9m
ZlR5cGUgPX4gcy9TVkdQcm9wZXJ0eVRlYXJPZmY8L1NWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjwk
aW50ZXJmYWNlTmFtZSwgLzsKICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiJHt0ZWFyT2ZmVHlw
ZX06OmNyZWF0ZShpbXBsLCAkdmFsdWUsICR1cGRhdGVNZXRob2QpIjsKICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggYjZl
Njg4ODY1NDg0M2JjNzZkNWFjZTk3MTZlNDBkNzc2NjU5YmYwMC4uNTU3MGZmYzAyZmJiZWVhMTMz
Nzk5ZDA4NjJiNTYzNmYyYjBiMWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExQYXJzZXIucG0KQEAgLTM1LDkgKzM1LDEwIEBAIHVzZSBjb25zdGFudCBFbXB0eVRv
a2VuID0+IDU7CiAKICMgVXNlZCB0byByZXByZXNlbnQgYSBwYXJzZWQgSURMIGRvY3VtZW50CiBz
dHJ1Y3QoIGlkbERvY3VtZW50ID0+IHsKLSAgICBpbnRlcmZhY2VzID0+ICdAJywgIyBBbGwgcGFy
c2VkIGludGVyZmFjZXMKLSAgICBlbnVtZXJhdGlvbnMgPT4gJ0AnLCAjIEFsbCBwYXJzZWQgZW51
bWVyYXRpb25zCi0gICAgZmlsZU5hbWUgPT4gJyQnLCAjIGZpbGUgbmFtZQorICAgIGludGVyZmFj
ZXMgPT4gJ0AnLCAjIExpc3Qgb2YgJ2RvbUludGVyZmFjZScKKyAgICBlbnVtZXJhdGlvbnMgPT4g
J0AnLCAjIExpc3Qgb2YgJ2RvbUVudW0nCisgICAgZGljdGlvbmFyaWVzID0+ICdAJywgIyBMaXN0
IG9mICdkb21EaWN0aW9uYXJ5JworICAgIGZpbGVOYW1lID0+ICckJywKIH0pOwogCiAjIFVzZWQg
dG8gcmVwcmVzZW50ICdpbnRlcmZhY2UnIGJsb2NrcwpAQCAtMTEwLDYgKzExMSwxMiBAQCBzdHJ1
Y3QoIGRvbUVudW0gPT4gewogICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCiB9KTsKIAor
c3RydWN0KCBkb21EaWN0aW9uYXJ5ID0+IHsKKyAgICBuYW1lID0+ICckJywKKyAgICBtZW1iZXJz
ID0+ICdAJywgIyBMaXN0IG9mICdkb21TaWduYXR1cmUnCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVz
ID0+ICckJywKK30pOworCiBzdHJ1Y3QoIFRva2VuID0+IHsKICAgICB0eXBlID0+ICckJywgIyB0
eXBlIG9mIHRva2VuCiAgICAgdmFsdWUgPT4gJyQnICMgdmFsdWUgb2YgdG9rZW4KQEAgLTIxNyw2
ICsyMjQsOCBAQCBzdWIgUGFyc2UKICAgICAgICAgICAgIHB1c2goQHskZG9jdW1lbnQtPmludGVy
ZmFjZXN9LCAkZGVmaW5pdGlvbik7CiAgICAgICAgIH0gZWxzaWYgKHJlZigkZGVmaW5pdGlvbikg
ZXEgImRvbUVudW0iKSB7CiAgICAgICAgICAgICBwdXNoKEB7JGRvY3VtZW50LT5lbnVtZXJhdGlv
bnN9LCAkZGVmaW5pdGlvbik7CisgICAgICAgIH0gZWxzaWYgKHJlZigkZGVmaW5pdGlvbikgZXEg
ImRvbURpY3Rpb25hcnkiKSB7CisgICAgICAgICAgICBwdXNoKEB7JGRvY3VtZW50LT5kaWN0aW9u
YXJpZXN9LCAkZGVmaW5pdGlvbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkaWUg
IlVucmVjb2duaXplZCBJREwgZGVmaW5pdGlvbiBraW5kOiBcIiIgLiByZWYoJGRlZmluaXRpb24p
IC4gIlwiIjsKICAgICAgICAgfQpAQCAtNjIzLDE0ICs2MzIsMTggQEAgc3ViIHBhcnNlRGljdGlv
bmFyeQogCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0
LT52YWx1ZSgpIGVxICJkaWN0aW9uYXJ5IikgeworICAgICAgICBteSAkZGljdGlvbmFyeSA9IGRv
bURpY3Rpb25hcnktPm5ldygpOworICAgICAgICAkZGljdGlvbmFyeS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImRpY3Rpb25hcnkiLCBfX0xJTkVfXyk7Ci0gICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tl
bik7CisgICAgICAgIG15ICRuYW1lVG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKyAgICAgICAg
JHNlbGYtPmFzc2VydFRva2VuVHlwZSgkbmFtZVRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAg
ICAgICAkZGljdGlvbmFyeS0+bmFtZSgkbmFtZVRva2VuLT52YWx1ZSgpKTsKICAgICAgICAgJHNl
bGYtPnBhcnNlSW5oZXJpdGFuY2UoKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUo
JHNlbGYtPmdldFRva2VuKCksICJ7IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VE
aWN0aW9uYXJ5TWVtYmVycygpOworICAgICAgICAkZGljdGlvbmFyeS0+bWVtYmVycygkc2VsZi0+
cGFyc2VEaWN0aW9uYXJ5TWVtYmVycygpKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFs
dWUoJHNlbGYtPmdldFRva2VuKCksICJ9IiwgX19MSU5FX18pOwogICAgICAgICAkc2VsZi0+YXNz
ZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuICRkaWN0aW9uYXJ5OwogICAgIH0KICAgICAkc2VsZi0+
YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CkBAIC02
MzksMTUgKzY1MiwxOSBAQCBzdWIgcGFyc2VEaWN0aW9uYXJ5TWVtYmVycwogewogICAgIG15ICRz
ZWxmID0gc2hpZnQ7CiAKKyAgICBteSBAbWVtYmVycyA9ICgpOworCiAgICAgd2hpbGUgKDEpIHsK
ICAgICAgICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9ICRzZWxmLT5wYXJzZUV4dGVuZGVk
QXR0cmlidXRlTGlzdEFsbG93RW1wdHkoKTsKICAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CiAgICAgICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8
fCAkbmV4dC0+dmFsdWUoKSA9fiAvJG5leHRFeGNlcHRpb25GaWVsZF8xLykgewotICAgICAgICAg
ICAgJHNlbGYtPnBhcnNlRGljdGlvbmFyeU1lbWJlcigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
KyAgICAgICAgICAgIHB1c2goQG1lbWJlcnMsICRzZWxmLT5wYXJzZURpY3Rpb25hcnlNZW1iZXIo
JGV4dGVuZGVkQXR0cmlidXRlTGlzdCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
bGFzdDsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiBcQG1lbWJlcnM7CiB9CiAKIHN1
YiBwYXJzZURpY3Rpb25hcnlNZW1iZXIKQEAgLTY1NywxMSArNjc0LDIwIEBAIHN1YiBwYXJzZURp
Y3Rpb25hcnlNZW1iZXIKIAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAg
IGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSA9
fiAvJG5leHRFeGNlcHRpb25GaWVsZF8xLykgewotICAgICAgICAkc2VsZi0+cGFyc2VUeXBlKCk7
Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50
aWZpZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJzZURlZmF1bHQoKTsKKyAgICAgICAgbXkg
JG1lbWJlciA9IGRvbVNpZ25hdHVyZS0+bmV3KCk7CisgICAgICAgIGlmICgkbmV4dC0+dmFsdWUg
bmUgInJlcXVpcmVkIikgeworICAgICAgICAgICAgJG1lbWJlci0+aXNPcHRpb25hbCgxKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxm
LT5nZXRUb2tlbigpLCAicmVxdWlyZWQiLCBfX0xJTkVfXyk7CisgICAgICAgICAgICAkbWVtYmVy
LT5pc09wdGlvbmFsKDApOworICAgICAgICB9CisgICAgICAgICRtZW1iZXItPnR5cGUoJHNlbGYt
PnBhcnNlVHlwZSgpKTsKKyAgICAgICAgbXkgJG5hbWVUb2tlbiA9ICRzZWxmLT5nZXRUb2tlbigp
OworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRuYW1lVG9rZW4sIElkZW50aWZpZXJU
b2tlbik7CisgICAgICAgICRtZW1iZXItPm5hbWUoJG5hbWVUb2tlbi0+dmFsdWUpOworICAgICAg
ICAkbWVtYmVyLT5kZWZhdWx0KCRzZWxmLT5wYXJzZURlZmF1bHQoKSk7CiAgICAgICAgICRzZWxm
LT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9fKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gJG1lbWJlcjsKICAgICB9CiAgICAgJHNlbGYt
PmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCBiZmIyYWY2MjBlODgzOGJiYmE1NDZl
YzU3ZGIxYWM2MmM4MGEyOTRmLi5kNjA5MWRlYWJlMjg1NjM3MmJjZDY0ZDkwZGE0ODNmMDIxZWYz
NWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMzQsMTAgKzM0LDEw
IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NU2hhZG93Um9vdEluaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RE9NVGVzdEVudW1UeXBlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTVRlc3ROb2RlUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTVRlc3RPYmpQcml2YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NYm9vbFByaXZhdGUuaCIKICNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhT
dHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpAQCAtMTkyNSw0MCArMTkyNSw0MCBAQCB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfb3Jhbmdl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiAgICAgaXRlbS0+YmFuYW5hKCk7CiB9CiAKLVdlYktp
dERPTWJvb2wqIHdlYmtpdF9kb21fdGVzdF9vYmpfc3RyaWN0X2Z1bmN0aW9uKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIsIGdmbG9hdCBhLCBnbG9uZyBiLCBHRXJyb3Iq
KiBlcnJvcikKK2dib29sZWFuIHdlYmtpdF9kb21fdGVzdF9vYmpfc3RyaWN0X2Z1bmN0aW9uKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIsIGdmbG9hdCBhLCBnbG9uZyBi
LCBHRXJyb3IqKiBlcnJvcikKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHN0ciwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yLCBGQUxTRSk7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoc3RyKTsKICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6Ym9vbD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PnN0cmljdEZ1bmN0aW9uKGNvbnZlcnRlZFN0ciwgYSwgYiwgZWMpKTsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5zdHJpY3RGdW5jdGlvbihjb252ZXJ0ZWRTdHIsIGEsIGIsIGVjKTsKICAg
ICBpZiAoZWMpIHsKICAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CiAgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKICAgICB9
Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLVdlYktpdERPTWJvb2wqIHdlYmtpdF9kb21fdGVzdF9vYmpfc3RyaWN0
X2Z1bmN0aW9uX3dpdGhfYXJyYXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVz
dE9iaiogb2JqQXJnLCBnbG9uZyBhcnJheSwgR0Vycm9yKiogZXJyb3IpCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3N0cmljdF9mdW5jdGlvbl93aXRoX2FycmF5KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgZ2xvbmcgYXJyYXksIEdFcnJvcioq
IGVycm9yKQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iakFyZyks
IDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTE9OR1tdKGFycmF5
KSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIEZB
TFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9i
akFyZyksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xP
TkdbXShhcnJheSksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvciwgRkFMU0UpOwogICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0
Ojpjb3JlKG9iakFyZyk7CiAgICAgV2ViQ29yZTo6bG9uZ1tdKiBjb252ZXJ0ZWRBcnJheSA9IFdl
YktpdDo6Y29yZShhcnJheSk7CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OmJvb2w+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5zdHJpY3RGdW5jdGlvbldpdGhBcnJheSgqY29udmVydGVkT2JqQXJnLCBhcnJheSwgZWMpKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zdHJpY3RGdW5jdGlvbldpdGhBcnJheSgqY29u
dmVydGVkT2JqQXJnLCBhcnJheSwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKICAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOwogICAgIH0KLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX3N0cmluZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIGhlYWQsIGNvbnN0IGdjaGFyKiB0YWlsKQpAQCAtMjAwMSw2ICsyMDAx
LDE2IEBAIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9hbnkoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2Zsb2F0IGEsIGdsb25nIGIpCiAgICAgaXRlbS0+YW55KGEsIGIpOwogfQogCit2b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfYXR0YWNoX3NoYWRvd19yb290KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVNoYWRvd1Jvb3RJbml0KiBpbml0KQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19T
SEFET1dfUk9PVF9JTklUKGluaXQpKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OlNoYWRvd1Jvb3RJbml0KiBjb252ZXJ0ZWRJ
bml0ID0gV2ViS2l0Ojpjb3JlKGluaXQpOworICAgIGl0ZW0tPmF0dGFjaFNoYWRvd1Jvb3QoY29u
dmVydGVkSW5pdCk7Cit9CisKIGdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25s
eV9sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKICAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKaW5k
ZXggMTBiYTQ0MWFhNGI3OTEzMGFlNDBmODI3YTY1YjIxYThkMjM1NGFkMi4uYzc1MmNhYjYzMTU3
Zjk5MDMyNDA2ZGY0NTkzZjEwNzM4YWEyZDEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RP
YmouaApAQCAtODQ3LDExICs4NDcsMTEgQEAgd2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2UoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7CiAgKiBAYjogQSAjZ2xvbmcKICAqIEBlcnJvcjogI0dFcnJv
cgogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NYm9vbAorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KICAqCiAgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCiAqKi8KLVdF
QktJVF9BUEkgV2ViS2l0RE9NYm9vbCoKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF9kb21f
dGVzdF9vYmpfc3RyaWN0X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzdHIsIGdmbG9hdCBhLCBnbG9uZyBiLCBHRXJyb3IqKiBlcnJvcik7CiAKIC8qKgpAQCAt
ODYxLDExICs4NjEsMTEgQEAgd2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0ciwgZ2YKICAqIEBhcnJheTogQSAj
Z2xvbmcKICAqIEBlcnJvcjogI0dFcnJvcgogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NYm9vbAorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KICAqCiAgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCiAqKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NYm9vbCoKK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9vYmpfc3RyaWN0X2Z1bmN0aW9uX3dpdGhfYXJy
YXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJnLCBnbG9u
ZyBhcnJheSwgR0Vycm9yKiogZXJyb3IpOwogCiAvKioKQEAgLTkxMyw2ICs5MTMsMTYgQEAgV0VC
S0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2FueShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnZmxvYXQgYSwgZ2xvbmcgYik7CiAKIC8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9h
dHRhY2hfc2hhZG93X3Jvb3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICogQGlu
aXQ6IEEgI1dlYktpdERPTVNoYWRvd1Jvb3RJbml0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfYXR0YWNoX3NoYWRv
d19yb290KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNoYWRvd1Jvb3RJbml0KiBp
bml0KTsKKworLyoqCiAgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfbG9uZ19h
dHRyOgogICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKICAqCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3Rp
dmVET01PYmplY3QuY3BwCmluZGV4IDkyOTk0ZGU1YzBhMzBjMjNlYWYyZTMyZTFjOGRjNWY0ZDcw
NWYyMTUuLjZkYjcyYTk0MmYyNDZmZWVkZGM2NzZhMzgzZjhjNTA3ZTkxZTRmZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlv
bkV4Y2l0aW5nRnVuY3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgTm9kZSogbmV4dENoaWxkID0gSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFy
Z3VtZW50KDApKTsKKyAgICBhdXRvIG5leHRDaGlsZCA9IEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRl
LT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKCFuZXh0Q2hpbGQpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgaW1wbC5leGNpdGluZ0Z1bmN0aW9u
KCpuZXh0Q2hpbGQpOwpAQCAtMjIwLDEwICsyMjAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdl
KEUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAg
U3RyaW5nIG1lc3NhZ2UgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwor
ICAgIGF1dG8gbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5wb3N0TWVzc2FnZSht
ZXNzYWdlKTsKKyAgICBpbXBsLnBvc3RNZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDRjMTEzY2ZlYzhlMTMzNDJhNTZlMTY4NDFhNjZj
NmI0NDRlYmEyNTUuLjUwYTZhZTg3Nzk0MzlmY2U5NjdjNmQ4YjczODA4MTNlYTRjNDYwZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtMTkzLDEwICsxOTMsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclBy
b3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cGwuYW5vdGhlckZ1bmN0aW9uKHN0cik7CisgICAgaW1wbC5hbm90aGVyRnVuY3Rpb24oV1RGTW92
ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBiNGY3ZTIyNzEwZjk3ZjJjZGJkNjBiMjBk
YmQ5MThmNDUzMzkxNWU0Li43NjQ2ZDU3OWEyYTc1NmE5YzgzYmQ0YmRkNzNkZGMxMDU1ZGZmYzE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKQEAgLTIwNSwxMCArMjA1LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlv
bkl0ZW0oRXhlY1N0YXRlKiBzCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gdG9VSW50MzIoc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBpbmRleCA9IHRvVUludDMy
KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaXRlbShpbmRleCkp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihpbXBsLml0ZW0oV1RGTW92ZShpbmRleCkpKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3Qu
Y3BwCmluZGV4IGEwZTA1ZTg4OTBlZjUwMDNjNDcwYjEyOWYzZWI5OWZjN2VmMzc5MmYuLjhhNDZl
NmI3ZWRhNzE2MTQ3YzY0MWEwNTEzOGZlODQyNjg2Nzg1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxP
YmplY3QuY3BwCkBAIC0yMTQsMTAgKzIxNCwxMCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwog
ICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEdsb2JhbE9i
amVjdCIsICJyZWd1bGFyQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhz
dGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldFJlZ3VsYXJBdHRyaWJ1dGUobmF0aXZlVmFsdWUp
OworICAgIGltcGwuc2V0UmVndWxhckF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzMiwxMCArMjMyLDEwIEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0R2xvYmFsT2JqZWN0IiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJpbmcgbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0RW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjU2LDEwICsyNTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbigKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIHRlc3RQ
YXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byB0
ZXN0UGFyYW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwucmVndWxhck9wZXJhdGlvbih0ZXN0
UGFyYW0pOworICAgIGltcGwucmVndWxhck9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTI3NCwx
MCArMjc0LDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyB0ZXN0UGFyYW0gPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gdGVzdFBhcmFtID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24odGVzdFBh
cmFtKTsKKyAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFy
YW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBA
IC0yOTQsMTAgKzI5NCwxMCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lTwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBpbnQgdGVzdFBhcmFtID0g
dG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIHRlc3RQYXJhbSA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1w
bC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKHRlc3RQYXJhbSk7CisgICAgaW1wbC5lbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRl
eCBlYjRjNmIxYTYwNTkxNWUxZmE3MjMzZjMzZWM4M2RjNzNiODBlYmVlLi43MmQ3ZDJmOTQ4M2Mx
NDlmZjEwM2Y3NDJkMTQ3ZmY0ZWE0MGZiY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAt
MjI2LDEwICsyMjYsMTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXgKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyBzdHIxID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IFN0cmluZyBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxp
dGVyYWwoImRlZmF1bHRTdHJpbmciKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dU
RlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImRlZmF1bHRTdHJpbmciKSA6IHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRo
aXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTYzMCwxMCArNjMwLDEwIEBAIGJvb2wg
SlNUZXN0SW50ZXJmYWNlOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsCiBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1w
bGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVGVzdEludGVyZmFjZTo6c2V0SW1wbGVt
ZW50c1N0YXRpY0F0dHIobmF0aXZlVmFsdWUpOworICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxl
bWVudHNTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNjQ5LDEwICs2NDksMTAgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUKICAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAi
aW1wbGVtZW50c1N0cjIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGltcGwuc2V0SW1wbGVtZW50c1N0cjIobmF0aXZlVmFsdWUpOworICAgIGltcGwu
c2V0SW1wbGVtZW50c1N0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC02ODMsNyArNjgzLDcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUKICAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAi
aW1wbGVtZW50c05vZGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBOb2RlKiBuYXRpdmVWYWx1ZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVl
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNOb2RlOjp0b1dyYXBwZWQodmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTgsMTAgKzY5OCwxMCBAQCBib29s
IHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZQogYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1
cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1l
bnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGljQXR0cihuYXRpdmVWYWx1ZSk7CisgICAgV2ViQ29y
ZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGljQXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcxNywxMCArNzE3LDEwIEBA
IGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIiKTsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJpbmcgbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0cjIoaW1wbCwgbmF0aXZlVmFsdWUpOworICAg
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0cjIoaW1wbCwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03NTEsNyArNzUx
LDcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIE5vZGUq
IG5hdGl2ZVZhbHVlID0gSlNOb2RlOjp0b1dyYXBwZWQodmFsdWUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBKU05vZGU6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRp
dmVWYWx1ZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTc5NywxMyArNzk3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMihF
CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3Rh
dGUpOworICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpB
cmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMSkpOworICAgIGF1dG8g
b2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLmltcGxlbWVudHNNZXRob2QyKCpjb250ZXh0LCBz
dHJBcmcsICpvYmpBcmcsIGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVtZW50c01l
dGhvZDIoKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZywgZWMpKSk7CiAKICAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CkBAIC04NjMsMTMgKzg2MywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMgogICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29u
dGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
KyAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFvYmpBcmcpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFs
TWV0aG9kMihpbXBsLCAqY29udGV4dCwgc3RyQXJnLCAqb2JqQXJnLCBlYykpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGlt
cGwsICpjb250ZXh0LCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcsIGVjKSkpOwogCiAgICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IGMzYjBhMWE4Y2Jh
MWIwNWFmODQwMTI5MmVlNTJkYzBiMTM5MTMyNGUuLmQ0OTQ3YTczMmViZDA2ZTY1OTEyNWE0ZTA2
MWRiZjRhM2NlOGFiMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAg
LTg2LDEzICs4NiwxMyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHN0cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
U3RyaW5nIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0
ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RG
U3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyMyA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5l
ZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMikudG9XVEZTdHJpbmco
c3RhdGUpOworICAgIGF1dG8gc3RyMyA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgp
ID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMikudG9XVEZTdHJpbmcoc3Rh
dGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpT
Q29uc3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3VtZW50KCksIHN0cjEsIHN0cjIsIHN0cjMsIGVj
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcAppbmRleCBhZTEyYmUyOTFiZGFiMGNmYWJjNzg2NGRhMDEyMzJjMTBjNzcx
OTlmLi4zNWZmYzc5MGQ1MzBjZTAzNGJhOTE4OTQzY2EzNWE0ODA4ZDJkODYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUu
Y3BwCkBAIC0xNjUsMTAgKzE2NSwxMCBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdQogICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vZGUiLCAibmFtZSIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0
cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5z
ZXROYW1lKG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5jcHAKaW5kZXggMzQ4ZTNjYTVhZTMwMWE4OTM1YTY2ZTZkMjZmYTY2ZTE0NGY5MTc3NC4uMTVi
MjM0NDQ4OGYyM2FhMDViNzMzMDU1NTZhY2NiZmZmYzI1YTBmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcApAQCAtMzUyLDEwICszNTIsMTAgQEAgYm9vbCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW4KICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5n
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldE5v
bmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldE5v
bmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzY5LDEwICszNjksMTAgQEAgYm9vbCBzZXRKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW4KICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RO
b25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyIik7CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldE5vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyKG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldE5vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzg2LDEwICszODYsMTAgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBz
dGEKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25k
ZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIik7CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5n
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldE5v
bmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBs
LnNldE5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDA0LDEwICs0MDQsMTAgQEAgYm9vbCBz
ZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIobmF0aXZlVmFsdWUsIGVjKTsKKyAgICBpbXBsLnNldE5v
bmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpLCBl
Yyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCmluZGV4IGViNzE5NDdjY2Y3MzUxMTQ2YjRiMTAwNTk2MTI5ZWE5MzJmMDEwZWYu
LmZkMzNjOWM5NzE3MzBjODdmYzJmYjNkOWVjM2NlZTAyODExMDBlNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJ1aWxkLmgiCiAj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgog
I2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUg
IkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNpbmNsdWRlICJKU1Rlc3RT
dWJPYmouaCIKLSNpbmNsdWRlICJKU2Jvb2wuaCIKICNpbmNsdWRlICJMaWZlY3ljbGVDYWxsYmFj
a1F1ZXVlLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNWR0RvY3VtZW50LmgiCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiVGVzdE9iai5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNs
dWRlICJib29sLmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgpAQCAtODcsMTAgKzg2LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNT
dGF0ZSosIFRlc3RPYmo6OkVudW1UeXBlKTsKLU9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBw
YXJzZVRlc3RPYmpFbnVtVHlwZShFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKLWV4dGVybiBjb25zdCBj
aGFyIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXNUZXN0T2JqRW51bVR5cGVbXTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygp
OwogCitKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6RW51
bVR5cGUpOwogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRl
c3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0xMTEsNyArMTEwLDcgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtVHlwZT4gewogICAgIHN0
YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdE9iajo6RW51bVR5cGUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCB2YWx1ZSk7IH0KIH07CiAKLU9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBw
YXJzZVRlc3RPYmpFbnVtVHlwZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVt
cGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4gcGFyc2U8VGVzdE9iajo6RW51bVR5
cGU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byBzdHJpbmdW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgaWYgKHN0cmluZ1ZhbHVlLmlz
RW1wdHkoKSkKQEAgLTEyNSwxMiArMTI0LDIyIEBAIE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBl
PiBwYXJzZVRlc3RPYmpFbnVtVHlwZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlCiAg
ICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKLWNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlc1Rlc3RPYmpFbnVtVHlwZVtdID0gIlwiXCIsIFwiRW51bVZhbHVlMVwiLCBcIkVudW1WYWx1
ZTJcIiwgXCJFbnVtVmFsdWUzXCIiOwordGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtVHlwZSBidWls
ZDxUZXN0T2JqOjpFbnVtVHlwZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgdmFsdWUp
OworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnZh
bHVlKCk7Cit9CiAKLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0
T2JqOjpPcHRpb25hbCk7Ci1PcHRpb25hbDxUZXN0T2JqOjpPcHRpb25hbD4gcGFyc2VUZXN0T2Jq
T3B0aW9uYWwoRXhlY1N0YXRlJiwgSlNWYWx1ZSk7Ci1leHRlcm4gY29uc3QgY2hhciBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzVGVzdE9iak9wdGlvbmFsW107Cit0ZW1wbGF0ZTw+IGlubGluZSBj
b25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigp
Cit7CisgICAgcmV0dXJuICJcIlwiLCBcIkVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwi
RW51bVZhbHVlM1wiIjsKK30KIAorSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0
ZSosIFRlc3RPYmo6Ok9wdGlvbmFsKTsKIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVj
U3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpPcHRpb25hbCBlbnVtZXJhdGlvblZhbHVlKQogewogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMTUx
LDcgKzE2MCw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6T3B0
aW9uYWw+IHsKICAgICBzdGF0aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6Ok9wdGlvbmFsIHZhbHVlKSB7IHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9CiB9OwogCi1PcHRpb25hbDxUZXN0
T2JqOjpPcHRpb25hbD4gcGFyc2VUZXN0T2JqT3B0aW9uYWwoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6T3B0aW9uYWw+IHBhcnNl
PFRlc3RPYmo6Ok9wdGlvbmFsPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIGlm
IChzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpCkBAIC0xNjUsMTQgKzE3NCwyNCBAQCBPcHRpb25hbDxU
ZXN0T2JqOjpPcHRpb25hbD4gcGFyc2VUZXN0T2JqT3B0aW9uYWwoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZQogICAgIHJldHVybiBOdWxsb3B0OwogfQogCi1jb25zdCBjaGFyIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXNUZXN0T2JqT3B0aW9uYWxbXSA9ICJcIlwiLCBcIk9wdGlvbmFs
VmFsdWUxXCIsIFwiT3B0aW9uYWxWYWx1ZTJcIiwgXCJPcHRpb25hbFZhbHVlM1wiIjsKK3RlbXBs
YXRlPD4gVGVzdE9iajo6T3B0aW9uYWwgYnVpbGQ8VGVzdE9iajo6T3B0aW9uYWw+KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0
T2JqOjpPcHRpb25hbD4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkp
IHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGlu
ZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFs
PigpCit7CisgICAgcmV0dXJuICJcIlwiLCBcIk9wdGlvbmFsVmFsdWUxXCIsIFwiT3B0aW9uYWxW
YWx1ZTJcIiwgXCJPcHRpb25hbFZhbHVlM1wiIjsKK30KIAogI2lmIEVOQUJMRShDb25kaXRpb24x
KQogCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6RW51
bUEpOwotT3B0aW9uYWw8VGVzdE9iajo6RW51bUE+IHBhcnNlVGVzdE9iakVudW1BKEV4ZWNTdGF0
ZSYsIEpTVmFsdWUpOwotZXh0ZXJuIGNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
c1Rlc3RPYmpFbnVtQVtdOwotCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRl
KiBzdGF0ZSwgVGVzdE9iajo6RW51bUEgZW51bWVyYXRpb25WYWx1ZSkKIHsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKQEAgLTE4Nyw3ICsyMDYs
NyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1BPiB7CiAg
ICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIHZhbHVlKTsgfQogfTsKIAotT3B0aW9uYWw8VGVzdE9iajo6RW51bUE+IHBh
cnNlVGVzdE9iakVudW1BKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0
ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1BPiBwYXJzZTxUZXN0T2JqOjpFbnVtQT4oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkEiKQpAQCAt
MTk1LDE2ICsyMTQsMjYgQEAgT3B0aW9uYWw8VGVzdE9iajo6RW51bUE+IHBhcnNlVGVzdE9iakVu
dW1BKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIE51bGxvcHQ7
CiB9CiAKLWNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlc1Rlc3RPYmpFbnVtQVtd
ID0gIlwiQVwiIjsKK3RlbXBsYXRlPD4gVGVzdE9iajo6RW51bUEgYnVpbGQ8VGVzdE9iajo6RW51
bUE+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQg
PSBwYXJzZTxUZXN0T2JqOjpFbnVtQT4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFko
IXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0
ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6
OkVudW1BPigpCit7CisgICAgcmV0dXJuICJcIkFcIiI7Cit9CiAKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogCiBKU1N0cmluZyoganNTdHJp
bmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUIpOwotT3B0aW9uYWw8VGVzdE9i
ajo6RW51bUI+IHBhcnNlVGVzdE9iakVudW1CKEV4ZWNTdGF0ZSYsIEpTVmFsdWUpOwotZXh0ZXJu
IGNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlc1Rlc3RPYmpFbnVtQltdOwotCiBK
U1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51
bUIgZW51bWVyYXRpb25WYWx1ZSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB2YWx1ZXNbXSA9IHsKQEAgLTIxOSw3ICsyNDgsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1CPiB7CiAgICAgc3RhdGljIEpTU3RyaW5nKiBh
cnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2Jq
OjpFbnVtQiB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsg
fQogfTsKIAotT3B0aW9uYWw8VGVzdE9iajo6RW51bUI+IHBhcnNlVGVzdE9iakVudW1CKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6
OkVudW1CPiBwYXJzZTxUZXN0T2JqOjpFbnVtQj4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkIiKQpAQCAtMjI3LDE2ICsyNTYsMjYgQEAgT3B0
aW9uYWw8VGVzdE9iajo6RW51bUI+IHBhcnNlVGVzdE9iakVudW1CKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKLWNvbnN0IGNoYXIgZXhw
ZWN0ZWRFbnVtZXJhdGlvblZhbHVlc1Rlc3RPYmpFbnVtQltdID0gIlwiQlwiIjsKK3RlbXBsYXRl
PD4gVGVzdE9iajo6RW51bUIgYnVpbGQ8VGVzdE9iajo6RW51bUI+KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVt
Qj4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1CPigpCit7CisgICAgcmV0
dXJuICJcIkJcIiI7Cit9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQogCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRl
KiwgVGVzdE9iajo6RW51bUMpOwotT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+IHBhcnNlVGVzdE9i
akVudW1DKEV4ZWNTdGF0ZSYsIEpTVmFsdWUpOwotZXh0ZXJuIGNvbnN0IGNoYXIgZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlc1Rlc3RPYmpFbnVtQ1tdOwotCiBKU1N0cmluZyoganNTdHJpbmdXaXRo
Q2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bUMgZW51bWVyYXRpb25WYWx1ZSkK
IHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsK
QEAgLTI1MSw3ICsyOTAsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RP
Ymo6OkVudW1DPiB7CiAgICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQyB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQogfTsKIAotT3B0aW9uYWw8VGVz
dE9iajo6RW51bUM+IHBhcnNlVGVzdE9iakVudW1DKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1DPiBwYXJzZTxUZXN0T2Jq
OjpFbnVtQz4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHN0
cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKICAgICBpZiAoc3RyaW5nVmFs
dWUgPT0gIkMiKQpAQCAtMjU5LDE0ICsyOTgsMjQgQEAgT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+
IHBhcnNlVGVzdE9iakVudW1DKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAg
cmV0dXJuIE51bGxvcHQ7CiB9CiAKLWNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
c1Rlc3RPYmpFbnVtQ1tdID0gIlwiQ1wiIjsKK3RlbXBsYXRlPD4gVGVzdE9iajo6RW51bUMgYnVp
bGQ8VGVzdE9iajo6RW51bUM+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtQz4oc3RhdGUsIHZhbHVlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgp
OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OkVudW1DPigpCit7CisgICAgcmV0dXJuICJcIkNcIiI7Cit9CiAKICNl
bmRpZgogCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6
S2luZCk7Ci1PcHRpb25hbDxUZXN0T2JqOjpLaW5kPiBwYXJzZVRlc3RPYmpLaW5kKEV4ZWNTdGF0
ZSYsIEpTVmFsdWUpOwotZXh0ZXJuIGNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
c1Rlc3RPYmpLaW5kW107Ci0KIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUq
IHN0YXRlLCBUZXN0T2JqOjpLaW5kIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0yODMsNyArMzMyLDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpLaW5kPiB7CiAgICAg
c3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0T2JqOjpLaW5kIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgdmFsdWUpOyB9CiB9OwogCi1PcHRpb25hbDxUZXN0T2JqOjpLaW5kPiBwYXJzZVRl
c3RPYmpLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OktpbmQ+IHBhcnNlPFRlc3RPYmo6OktpbmQ+KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJxdWljayIpCkBAIC0yOTMs
MTIgKzM0MiwyMiBAQCBPcHRpb25hbDxUZXN0T2JqOjpLaW5kPiBwYXJzZVRlc3RPYmpLaW5kKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAK
LWNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlc1Rlc3RPYmpLaW5kW10gPSAiXCJx
dWlja1wiLCBcImRlYWRcIiI7Cit0ZW1wbGF0ZTw+IFRlc3RPYmo6OktpbmQgYnVpbGQ8VGVzdE9i
ajo6S2luZD4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IHBhcnNlPFRlc3RPYmo6OktpbmQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElL
RUxZKCFyZXN1bHQpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KIAotSlNT
dHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6OlNpemUpOwotT3B0
aW9uYWw8VGVzdE9iajo6U2l6ZT4gcGFyc2VUZXN0T2JqU2l6ZShFeGVjU3RhdGUmLCBKU1ZhbHVl
KTsKLWV4dGVybiBjb25zdCBjaGFyIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXNUZXN0T2JqU2l6
ZVtdOwordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlczxUZXN0T2JqOjpLaW5kPigpCit7CisgICAgcmV0dXJuICJcInF1aWNrXCIsIFwiZGVhZFwi
IjsKK30KIAorSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6
OlNpemUpOwogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRl
c3RPYmo6OlNpemUgZW51bWVyYXRpb25WYWx1ZSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKQEAgLTMxNSw3ICszNzQsNyBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OlNpemU+IHsKICAgICBzdGF0aWMgSlNT
dHJpbmcqIGFycmF5SlNWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RPYmo6OlNpemUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2
YWx1ZSk7IH0KIH07CiAKLU9wdGlvbmFsPFRlc3RPYmo6OlNpemU+IHBhcnNlVGVzdE9ialNpemUo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVz
dE9iajo6U2l6ZT4gcGFyc2U8VGVzdE9iajo6U2l6ZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gInNtYWxsIikKQEAgLTMyNSwxMiArMzg0LDIy
IEBAIE9wdGlvbmFsPFRlc3RPYmo6OlNpemU+IHBhcnNlVGVzdE9ialNpemUoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gTnVsbG9wdDsKIH0KIAotY29uc3QgY2hh
ciBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzVGVzdE9ialNpemVbXSA9ICJcInNtYWxsXCIsIFwi
bXVjaC1tdWNoLWxhcmdlclwiIjsKK3RlbXBsYXRlPD4gVGVzdE9iajo6U2l6ZSBidWlsZDxUZXN0
T2JqOjpTaXplPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8g
cmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6U2l6ZT4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQogCi1K
U1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6Q29uZmlkZW5j
ZSk7Ci1PcHRpb25hbDxUZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZVRlc3RPYmpDb25maWRlbmNl
KEV4ZWNTdGF0ZSYsIEpTVmFsdWUpOwotZXh0ZXJuIGNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJh
dGlvblZhbHVlc1Rlc3RPYmpDb25maWRlbmNlW107Cit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OlNpemU+KCkKK3sKKyAgICBy
ZXR1cm4gIlwic21hbGxcIiwgXCJtdWNoLW11Y2gtbGFyZ2VyXCIiOworfQogCitKU1N0cmluZyog
anNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6Q29uZmlkZW5jZSk7CiBKU1N0
cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6Q29uZmlk
ZW5jZSBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMzQ3LDcgKzQxNiw3IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6Q29uZmlkZW5jZT4gewogICAgIHN0YXRpYyBKU1N0
cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
VGVzdE9iajo6Q29uZmlkZW5jZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIHZhbHVlKTsgfQogfTsKIAotT3B0aW9uYWw8VGVzdE9iajo6Q29uZmlkZW5jZT4gcGFyc2VU
ZXN0T2JqQ29uZmlkZW5jZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxh
dGU8PiBPcHRpb25hbDxUZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZTxUZXN0T2JqOjpDb25maWRl
bmNlPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8gc3RyaW5n
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIGlmIChzdHJpbmdWYWx1ZSA9
PSAiaGlnaCIpCkBAIC0zNTcsNyArNDI2LDY5IEBAIE9wdGlvbmFsPFRlc3RPYmo6OkNvbmZpZGVu
Y2U+IHBhcnNlVGVzdE9iakNvbmZpZGVuY2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2CiAg
ICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKLWNvbnN0IGNoYXIgZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlc1Rlc3RPYmpDb25maWRlbmNlW10gPSAiXCJoaWdoXCIsIFwia2luZGEtbG93XCIiOwordGVt
cGxhdGU8PiBUZXN0T2JqOjpDb25maWRlbmNlIGJ1aWxkPFRlc3RPYmo6OkNvbmZpZGVuY2U+KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSBwYXJz
ZTxUZXN0T2JqOjpDb25maWRlbmNlPihzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWSgh
cmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
Q29uZmlkZW5jZT4oKQoreworICAgIHJldHVybiAiXCJoaWdoXCIsIFwia2luZGEtbG93XCIiOwor
fQorCitKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6U2hh
ZG93Um9vdE1vZGUpOworSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3Rh
dGUsIFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2RlIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAgIEFT
Q0lJTGl0ZXJhbCgib3BlbiIpLAorICAgICAgICBBU0NJSUxpdGVyYWwoImNsb3NlZCIpLAorICAg
IH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OlNoYWRv
d1Jvb3RNb2RlOjpPcGVuKSA9PSAwLCAiVGVzdE9iajo6U2hhZG93Um9vdE1vZGU6Ok9wZW4gaXMg
bm90IDAgYXMgZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVf
dD4oVGVzdE9iajo6U2hhZG93Um9vdE1vZGU6OkNsb3NlZCkgPT0gMSwgIlRlc3RPYmo6OlNoYWRv
d1Jvb3RNb2RlOjpDbG9zZWQgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFs
dWVzKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOworfQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2RlPiB7CisgICAgc3RhdGljIEpT
U3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0T2JqOjpTaGFkb3dSb290TW9kZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpT
aGFkb3dSb290TW9kZT4gcGFyc2U8VGVzdE9iajo6U2hhZG93Um9vdE1vZGU+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJvcGVuIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2RlOjpPcGVuOworICAgIGlmIChzdHJpbmdW
YWx1ZSA9PSAiY2xvc2VkIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2Rl
OjpDbG9zZWQ7CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gVGVzdE9iajo6
U2hhZG93Um9vdE1vZGUgYnVpbGQ8VGVzdE9iajo6U2hhZG93Um9vdE1vZGU+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2Jq
OjpTaGFkb3dSb290TW9kZT4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3Vs
dCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlu
bGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OlNoYWRv
d1Jvb3RNb2RlPigpCit7CisgICAgcmV0dXJuICJcIm9wZW5cIiwgXCJjbG9zZWRcIiI7Cit9CisK
K3RlbXBsYXRlPD4gVGVzdE9iajo6U2hhZG93Um9vdEluaXQgYnVpbGQ8VGVzdE9iajo6U2hhZG93
Um9vdEluaXQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IHsgCisgICAgICAgIGJ1aWxkPFRlc3RPYmo6OlNoYWRvd1Jvb3RNb2RlPihzdGF0ZSwgdmFsdWUs
ICJtb2RlIiksCisgICAgfTsKK30KIAogLy8gRnVuY3Rpb25zCiAKQEAgLTQ4NSw2ICs2MTYsNyBA
QCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9u
KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTmVlZHNMaWZlY3ljbGVQcm9j
ZXNzaW5nU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoSlNDOjpF
eGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblN5bWJvbEl0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbnRy
aWVzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRlKik7CkBAIC0xMDU3
LDYgKzExODksNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAidGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25h
bEludEFyZ3VtZW50IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQ
cm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudCksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIsIEpTQzo6RnVuY3Rpb24s
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiksIChp
bnRwdHJfdCkgKDEpIH0gfSwKICAgICB7ICJtZXRob2RXaXRoTmVlZHNMaWZlY3ljbGVQcm9jZXNz
aW5nU3RhY2siLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5lZWRzTGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKSwgKGludHB0cl90KSAoMCkgfSB9LAorICAg
IHsgImF0dGFjaFNoYWRvd1Jvb3QiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQXR0YWNoU2hhZG93Um9vdCksIChpbnRwdHJfdCkgKDEpIH0gfSwKICAgICB7ICJlbnRyaWVz
IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMpLCAoaW50cHRy
X3QpICgwKSB9IH0sCiAgICAgeyAia2V5cyIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25LZXlzKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgInZhbHVlcyIsIEpTQzo6
RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9
IH0sCkBAIC0yNDY0LDEwICsyNTk3LDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkCiBib29s
IHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0g
ICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBU
ZXN0T2JqOjpzZXRTdGF0aWNTdHJpbmdBdHRyKG5hdGl2ZVZhbHVlKTsKKyAgICBUZXN0T2JqOjpz
ZXRTdGF0aWNTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMjQ5NCw3ICsyNjI3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1YKICAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW51
bUF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2VUZXN0T2JqRW51bVR5cGUoKnN0YXRlLCB2YWx1
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3Rh
dGUsIHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKQpAQCAt
MjUxMywxMCArMjY0NiwxMCBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVgogICAgICAgICByZXR1
cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJieXRlQXR0ciIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGludDhf
dCBuYXRpdmVWYWx1ZSA9IHRvSW50OChzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDgoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0Qnl0ZUF0dHIobmF0aXZlVmFsdWUpOworICAgIGlt
cGwuc2V0Qnl0ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0yNTMwLDEwICsyNjYzLDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTCiAgICAg
ICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9jdGV0
QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgPSB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvVUludDgoc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0T2N0ZXRBdHRyKG5hdGl2ZVZh
bHVlKTsKKyAgICBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1NDcsMTAgKzI2ODAsMTAgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlMKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAic2hvcnRBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgaW50MTZfdCBuYXRpdmVWYWx1ZSA9IHRvSW50MTYoc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQxNihz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXRTaG9y
dEF0dHIobmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0U2hvcnRBdHRyKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU2NCwxMCArMjY5NywxMCBAQCBi
b29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW50MTZfdCBuYXRpdmVWYWx1
ZSA9IHRvSW50MTYoc3RhdGUsIHZhbHVlLCBDbGFtcCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHRvSW50MTYoc3RhdGUsIHZhbHVlLCBDbGFtcCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldENsYW1w
ZWRTaG9ydEF0dHIobmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0Q2xhbXBlZFNob3J0QXR0cihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1ODEsMTAg
KzI3MTQsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHUKICAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW5mb3JjZVJhbmdlU2hvcnRBdHRy
Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
aW50MTZfdCBuYXRpdmVWYWx1ZSA9IHRvSW50MTYoc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2Up
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDE2KHN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJh
bmdlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0RW5mb3JjZVJhbmdlU2hvcnRBdHRyKG5hdGl2ZVZh
bHVlKTsKKyAgICBpbXBsLnNldEVuZm9yY2VSYW5nZVNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1OTgsMTAgKzI3MzEsMTAgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICB1aW50MTZfdCBuYXRpdmVWYWx1
ZSA9IHRvVUludDE2KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHRvVUludDE2KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKG5hdGl2ZVZhbHVlKTsKKyAgICBp
bXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjYxNSwxMCArMjc0OCwxMCBAQCBib29sIHNldEpTVGVzdE9iakxv
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJsb25nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXRMb25nQXR0cihuYXRp
dmVWYWx1ZSk7CisgICAgaW1wbC5zZXRMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI2MzIsMTAgKzI3NjUsMTAgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgbG9uZyBsb25nIG5hdGl2ZVZhbHVlID0gdG9JbnQ2NChz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0
b0ludDY0KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBs
LnNldExvbmdMb25nQXR0cihuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRMb25nTG9uZ0F0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjQ5LDEw
ICsyNzgyLDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiAgICAgICAgIHJldHVybiB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRy
Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
dW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZVZhbHVlID0gdG9VSW50NjQoc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9VSW50NjQoc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0VW5zaWduZWRM
b25nTG9uZ0F0dHIobmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjY2
LDEwICsyNzk5LDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKCiAgICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJpbmcg
bmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0U3Ry
aW5nQXR0cihuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY4Myw3ICsyODE2LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWQKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNU
ZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUp
KSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0yNzAyLDggKzI4MzUsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9i
akF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0TnVs
bGFibGVPYmpBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2
YWx1ZSk7Ci0gICAgaW1wbC5zZXRUZXN0TnVsbGFibGVPYmpBdHRyKG5hdGl2ZVZhbHVlKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOworICAgIGlt
cGwuc2V0VGVzdE51bGxhYmxlT2JqQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTI3MTcsNyArMjg1MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTGVu
aWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0
b1dyYXBwZWQodmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKICAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI3MzYs
MTAgKzI4NjksMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKICAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmciKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgdmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhu
YXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3
NTMsNyArMjg4Niw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKCiAgICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIlhNTE9iakF0dHIiKTsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBUZXN0T2Jq
KiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WSghbmF0aXZlVmFsdWUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzcyLDEwICsyOTA1LDEwIEBAIGJvb2wgc2V0SlNUZXN0
T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNyZWF0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGJvb2wgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUp
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaW1wbC5zZXRDcmVhdGUobmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0Q3JlYXRlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjc4OSwxMCAr
MjkyMiwxMCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3Ry
aW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRzdHJpbmdhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmlu
Z2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTI4MDYsMTAgKzI5MzksMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHUKICAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVk
SW50ZWdyYWxBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgbmF0aXZl
VmFsdWUpOworICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTI4MjMsMTAgKzI5NTYsMTAgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHVuc2lnbmVkIG5hdGl2ZVZhbHVl
ID0gdG9VSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdG9VSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwor
ICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yODQwLDEwICsyOTczLDEwIEBAIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYm9vbCBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvQm9vbGVhbihzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9v
bGVhbihzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKKyAg
ICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRi
b29sZWFuYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjg1NywxMCArMjk5MCwxMCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVS
TEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogICAg
ICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZs
ZWN0ZWRVUkxBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOworICAgIGltcGwu
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVybGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTI4NzQsMTAgKzMwMDcsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwK
ICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
cmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBuYXRpdmVWYWx1
ZSk7CisgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI4OTEsMTAgKzMwMjQsMTAgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW50IG5hdGl2
ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBs
LnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudElu
dGVncmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjkwOCwxMCArMzA0MSwxMCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAg
ICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZs
ZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGJvb2wgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4o
c3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW1wbC5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFu
QXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjkyNSwxMCArMzA1OCwxMCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVS
TEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRD
dXN0b21VUkxBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKKyAgICBp
bXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk0MywxMCArMzA3NiwxMCBAQCBib29sIHNldEpTVGVzdE9i
akVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpcwogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGUobmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI5NjEs
NyArMzA5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvCiAgICAgICAgIHJldHVybiB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInR5cGVkQXJyYXlBdHRyIik7CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgUmVmUHRy
PEZsb2F0MzJBcnJheT4gbmF0aXZlVmFsdWUgPSB0b0Zsb2F0MzJBcnJheSh2YWx1ZSk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CkBAIC0yOTgyLDEwICszMTE1LDEwIEBAIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVl
ID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKKyAg
ICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk5OSwxMCArMzEzMiwxMCBAQCBib29sIHNldEpT
VGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlIik7CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW50IG5hdGl2
ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2Uo
bmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVz
c2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMw
MTcsMTAgKzMxNTAsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24obmF0aXZlVmFsdWUsIGVjKTsKKyAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMDM2LDEwICszMTY5LDEwIEBAIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwotICAgIGludCBuYXRp
dmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdl
KG5hdGl2ZVZhbHVlLCBlYyk7CisgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldp
dGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMDU0LDEwICszMTg3LDEwIEBA
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJp
bmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0zMDcyLDEwICszMjA1LDEwIEBAIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24obmF0aXZlVmFsdWUsIGVjKTsKKyAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0
aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMDk4LDcgKzMyMzEsNyBA
QCBib29sIHNldEpTVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfQotICAgIGltcGwuc2V0U3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlKG5h
dGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMxNTEsMTAgKzMy
ODQsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKICAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
aW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgq
c3RhdGUsIG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZSgqc3RhdGUsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMzE2OCwxMCArMzMwMSwxMCBAQCBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZQogICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9J
bnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5z
ZXRXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUsIGFjdGl2ZURP
TVdpbmRvdyhzdGF0ZSksIGZpcnN0RE9NV2luZG93KHN0YXRlKSwgbmF0aXZlVmFsdWUpOworICAg
IGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlLCBh
Y3RpdmVET01XaW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzE4NSw3ICszMzE4LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjA3LDcgKzMzNDAsNyBAQCBib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBUZXN0T2JqKiBu
YXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
bmF0aXZlVmFsdWUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zMjI2LDcgKzMzNTksNyBAQCBib29sIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuYwogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFRlc3RPYmoqIG5h
dGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFu
YXRpdmVWYWx1ZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTMyNDgsNyArMzM4MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0CiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBUZXN0
T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghbmF0aXZlVmFsdWUpKSB7CiAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjcwLDcgKzM0MDMsNyBAQCBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoRXhlY1N0YQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI5Miw3ICszNDI1LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZShFeGUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0
b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CiAgICAg
ICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
MzE0LDcgKzM0NDcsNyBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRD
YWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jbwogICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6
OnRvV3JhcHBlZCh2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9X
cmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewogICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzMz
NCwxMCArMzQ2NywxMCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIx
Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
aW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEobmF0aXZlVmFs
dWUpOworICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMzNTMsMTAgKzM0ODYsMTAgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIo
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1w
bC5zZXRDb25kaXRpb25hbEF0dHIyKG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldENvbmRpdGlv
bmFsQXR0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0zMzcyLDEwICszNTA1LDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuCiAgICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFs
QXR0cjMiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMyhuYXRp
dmVWYWx1ZSk7CisgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzQzNSw4ICszNTY4LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiYW55QXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNDOjpKU1ZhbHVlIG5hdGl2ZVZhbHVlID0g
dmFsdWU7Ci0gICAgaW1wbC5zZXRBbnlBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSB2YWx1ZTsKKyAgICBpbXBsLnNldEFueUF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM0NTAsOCArMzU4Myw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFNWR1Byb3BlcnR5VGVhck9mZjxT
VkdQb2ludD4qIG5hdGl2ZVZhbHVlID0gSlNTVkdQb2ludDo6dG9XcmFwcGVkKHZhbHVlKTsKLSAg
ICBpbXBsLnNldE11dGFibGVQb2ludChuYXRpdmVWYWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IEpTU1ZHUG9pbnQ6OnRvV3JhcHBlZCh2YWx1ZSk7CisgICAgaW1wbC5zZXRNdXRhYmxlUG9p
bnQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNDY1
LDggKzM1OTgsOCBAQCBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jbwogICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpbW11dGFibGVQb2ludCIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFNWR1By
b3BlcnR5VGVhck9mZjxTVkdQb2ludD4qIG5hdGl2ZVZhbHVlID0gSlNTVkdQb2ludDo6dG9XcmFw
cGVkKHZhbHVlKTsKLSAgICBpbXBsLnNldEltbXV0YWJsZVBvaW50KG5hdGl2ZVZhbHVlKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNTVkdQb2ludDo6dG9XcmFwcGVkKHZhbHVlKTsKKyAgICBp
bXBsLnNldEltbXV0YWJsZVBvaW50KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMzQ4MCwxMCArMzYxMywxMCBAQCBib29sIHNldEpTVGVzdE9ialN0cmF3
YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJzdHJhd2JlcnJ5Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNldEJsdWViZXJyeShuYXRp
dmVWYWx1ZSk7CisgICAgaW1wbC5zZXRCbHVlYmVycnkoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNDk3LDEwICszNjMwLDEwIEBAIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgInN0cmljdEZsb2F0Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgZmxvYXQgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Zsb2F0
KHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9GbG9hdChzdGF0ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpbXBsLnNldFN0cmljdEZsb2F0KG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNl
dFN0cmljdEZsb2F0KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMzUxNCwxMCArMzY0NywxMCBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZQogICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpZCIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGludCBu
YXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXRJZChuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRJ
ZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM1NDQs
MTAgKzM2NzcsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTM1NjEsMTAgKzM2OTQsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHUKICAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFi
bGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgdmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRl
KG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTc4
LDEwICszNzExLDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nVmFs
dWUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0TnVsbGFibGVTdHJpbmdWYWx1ZShuYXRp
dmVWYWx1ZSk7CisgICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1ZhbHVlKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzU5NSw3ICszNzI4LDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBwYXJzZVRlc3RPYmpPcHRpb25hbCgqc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KCpzdGF0ZSwgdmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpCkBAIC0zNjE1LDEwICszNzQ4
LDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiAgICAgfQogICAgIFJlZjxUZXN0Tm9kZT4g
Zm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5wdXRGb3J3YXJkc0F0dHJpYnV0
ZSgpOwogICAgIGF1dG8mIGltcGwgPSBmb3J3YXJkZWRJbXBsLmdldCgpOwotICAgIFN0cmluZyBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXROYW1l
KG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNjM1LDEwICszNzY4LDEwIEBAIGJvb2wgc2V0SlNU
ZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0CiAgICAgaWYgKCFmb3J3YXJkZWRJbXBsKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgYXV0byYgaW1wbCA9ICpmb3J3YXJkZWRJbXBsOwotICAgIFN0cmluZyBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW1wbC5zZXROYW1lKG5hdGl2
ZVZhbHVlKTsKKyAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0zNjY4LDEwICszODAxLDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwot
ICAgIFN0cmluZyB0ZXN0UGFyYW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3Rh
dGUpOworICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLmVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24odGVzdFBhcmFtKTsKKyAgICBpbXBsLmVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zNjg4LDEwICszODIxLDEwIEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRS
dW50aW1lT3BlcmF0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGludCB0ZXN0UGFyYW0gPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gdGVzdFBhcmFtID0gdG9JbnQzMihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24o
dGVzdFBhcmFtKTsKKyAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0
ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC0zNzM3LDE2ICszODcwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGludCBsb25n
QXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwor
ICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBK
U1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOworICAgIGF1dG8gb2JqQXJn
ID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5M
SUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsK
LSAgICBpbXBsLnZvaWRNZXRob2RXaXRoQXJncyhsb25nQXJnLCBzdHJBcmcsICpvYmpBcmcpOwor
ICAgIGltcGwudm9pZE1ldGhvZFdpdGhBcmdzKFdURk1vdmUobG9uZ0FyZyksIFdURk1vdmUoc3Ry
QXJnKSwgKm9iakFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtMzc3MiwxNiArMzkwNSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdzKEV4ZWNTdAog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBpbnQ4
X3QgYnl0ZUFyZyA9IHRvSW50OChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBhdXRvIGJ5dGVBcmcgPSB0b0ludDgoc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0
ZSk7CisgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3Rh
dGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CisgICAgYXV0byBv
YmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwogICAgIGlm
IChVTkxJS0VMWSghb2JqQXJnKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlTWV0aG9kV2l0aEFy
Z3MoYnl0ZUFyZywgc3RyQXJnLCAqb2JqQXJnKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGJ5dGVBcmcpLCBXVEZNb3ZlKHN0
ckFyZyksICpvYmpBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKQEAgLTM4MDcsMTYgKzM5NDAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1MKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgdWludDhfdCBv
Y3RldEFyZyA9IHRvVUludDgoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7CisgICAgYXV0byBvY3RldEFyZyA9IHRvVUludDgoc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0
ZSk7CisgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3Rh
dGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CisgICAgYXV0byBv
YmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwogICAgIGlm
IChVTkxJS0VMWSghb2JqQXJnKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5vY3RldE1ldGhvZFdpdGhB
cmdzKG9jdGV0QXJnLCBzdHJBcmcsICpvYmpBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwub2N0ZXRNZXRob2RXaXRoQXJncyhXVEZNb3ZlKG9jdGV0QXJnKSwgV1RGTW92
ZShzdHJBcmcpLCAqb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCkBAIC0zODQyLDE2ICszOTc1LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGludCBs
b25nQXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUp
OworICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOworICAgIGF1dG8gb2Jq
QXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAo
VU5MSUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ01ldGhvZFdpdGhBcmdz
KGxvbmdBcmcsIHN0ckFyZywgKm9iakFyZykpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5sb25nTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShzdHJB
cmcpLCAqb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CkBAIC0zODc3LDE2ICs0MDEwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhFeGVjU3RhCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGludCBsb25nQXJn
ID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0
cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOworICAg
IGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOworICAgIGF1dG8gb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtF
TFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBXVEY6OmdldFB0cihpbXBsLm9iak1ldGhvZFdpdGhBcmdzKGxvbmdBcmcsIHN0ckFyZywgKm9i
akFyZykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm9iak1ldGhvZFdpdGhBcmdzKFdURk1vdmUo
bG9uZ0FyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTM5MTIsMTAgKzQwNDUsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhB
cmdUcmVhdGluZ051bGwKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgU3RyaW5nIGFyZyA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJnID0gdmFsdWVU
b1N0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRo
QXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhhcmcpOworICAgIGltcGwubWV0aG9kV2l0aEFy
Z1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShhcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zOTQ3LDEwICs0MDgwLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25O
dWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRoCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gdG9VSW50MzIoc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBpbmRleCA9IHRv
VUludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKGluZGV4KSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJs
ZVN0cmluZ1NwZWNpYWxNZXRob2QoV1RGTW92ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTM5NjQsMTAgKzQwOTcsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZyhFeGUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxTY3JpcHRQcm9maWxlPj4gc2VxdWVuY2VBcmcgPSAo
dG9SZWZQdHJOYXRpdmVBcnJheTxTY3JpcHRQcm9maWxlLCBKU1NjcmlwdFByb2ZpbGU+KHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksICZKU1NjcmlwdFByb2ZpbGU6OnRvV3JhcHBlZCkpOworICAg
IGF1dG8gc2VxdWVuY2VBcmcgPSAodG9SZWZQdHJOYXRpdmVBcnJheTxTY3JpcHRQcm9maWxlLCBK
U1NjcmlwdFByb2ZpbGU+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksICZKU1NjcmlwdFByb2Zp
bGU6OnRvV3JhcHBlZCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cGwubWV0aG9kV2l0aFNlcXVlbmNlQXJnKHNlcXVlbmNlQXJnKTsKKyAgICBpbXBsLm1ldGhvZFdp
dGhTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMzk4MSwxMCArNDExNCwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
UmV0dXJuaW5nU2VxdWVuY2UoRQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKLSAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBsb25nQXJnID0gdG9JbnQzMihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFJldHVybmluZ1NlcXVlbmNl
KGxvbmdBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKFdURk1vdmUo
bG9uZ0FyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAg
LTQwMDAsMTEgKzQxMzMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKEV4ZWNTdGEKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBU
ZXN0T2JqOjpFbnVtVHlwZSBlbnVtQXJnOwotICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNl
VGVzdE9iakVudW1UeXBlKCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKKyAgICBhdXRvIG9wdGlvbmFs
VmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCBlbnVtQXJnVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9u
YWxWYWx1ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpz
dGF0ZSwgMCwgImVudW1BcmciLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXNUZXN0T2JqRW51bVR5cGUpOworICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmoi
LCAibWV0aG9kV2l0aEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6
OkVudW1UeXBlPigpKTsKICAgICBlbnVtQXJnID0gb3B0aW9uYWxWYWx1ZS52YWx1ZSgpOwogICAg
IGltcGwubWV0aG9kV2l0aEVudW1BcmcoZW51bUFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQwMjMsMTEgKzQxNTYsMTEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEVudW1BcmcKICAgICBpZiAoZW51bUFyZ1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAg
ICAgZW51bUFyZyA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlVGVzdE9iakVudW1UeXBlKCpzdGF0
ZSwgZW51bUFyZ1ZhbHVlKTsKKyAgICAgICAgYXV0byBvcHRpb25hbFZhbHVlID0gcGFyc2U8VGVz
dE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0
YXRlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdB
bmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzVGVzdE9iakVudW1UeXBl
KTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0
ZSwgMCwgImVudW1BcmciLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5k
RGVmYXVsdFZhbHVlIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlw
ZT4oKSk7CiAgICAgICAgIGVudW1BcmcgPSBvcHRpb25hbFZhbHVlLnZhbHVlKCk7CiAgICAgfQog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZShlbnVtQXJn
KTsKQEAgLTQwNDUsMTMgKzQxNzgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyQXJnID0gc3RhdGUt
PmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0
ZS0+YXJndW1lbnQoMSkpOworICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
c3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCAqb2JqQXJnLCBlYykpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEY6OmdldFB0cihpbXBsLm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Mo
V1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnLCBlYykpKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTQwNjcs
MTAgKzQyMDAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIDAsIDApOworICAgIGF1dG8gc2VyaWFsaXplZEFyZyA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCks
IDAsIDApOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwuc2VyaWFs
aXplZFZhbHVlKHNlcmlhbGl6ZWRBcmcpOworICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKFdURk1v
dmUoc2VyaWFsaXplZEFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTQwODQsOSArNDIxNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSoK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgRGlj
dGlvbmFyeSBvbyA9IHsgc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSB9OwotICAgIERpY3Rpb25h
cnkgb29vID0geyBzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpIH07Ci0gICAgaW1wbC5vcHRpb25z
T2JqZWN0KG9vLCBvb28pOworICAgIGF1dG8gb28gPSBEaWN0aW9uYXJ5KHN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCkpOworICAgIGF1dG8gb29vID0gRGljdGlvbmFyeShzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDEpKTsKKyAgICBpbXBsLm9wdGlvbnNPYmplY3QoV1RGTW92ZShvbyksIFdURk1vdmUo
b29vKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNDE0OCwxMCArNDI4MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZChFeGVjU3RhdGUqCiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyBhcmd1bWVu
dCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBhcmd1
bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKGFyZ3VtZW50KSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdURk1v
dmUoYXJndW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CkBAIC00MzQ3LDEwICs0NDgwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoRXhlCiAgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRo
T3B0aW9uYWxBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIE9wdGlvbmFsPGludD4gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJn
KG9wdCk7CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmcoV1RGTW92ZShvcHQpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00MzYyLDEw
ICs0NDk1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmRECiAgICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxBcmdB
bmREZWZhdWx0VmFsdWUiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGludCBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/
IDY2NiA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSA/IDY2NiA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
aW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUob3B0KTsKKyAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKG9wdCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTQzNzksMTMg
KzQ1MTIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgaW50IG5vbk9wdCA9IHRvSW50MzIoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25P
cHQgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIE9wdGlvbmFsPGludD4gb3B0
ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0
b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBP
cHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MSksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBv
cHQpOworICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoV1RG
TW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTQzOTksMTYgKzQ1MzIsMTYgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0EKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7Ci0gICAgaW50IG5vbk9wdCA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25PcHQgPSB0b0ludDMyKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIE9wdGlvbmFsPGludD4gb3B0MSA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG9wdDEgPSBz
dGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50
MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgT3B0aW9uYWw8aW50PiBvcHQy
ID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0
b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25P
cHQsIG9wdDEsIG9wdDIpOworICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzKFdURk1vdmUobm9uT3B0KSwgV1RGTW92ZShvcHQxKSwgV1RGTW92ZShvcHQy
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
NDQyMCwxMCArNDU1MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKAogICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBT
dHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
CisgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmlu
ZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZyhzdHIpOworICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKFdURk1vdmUo
c3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNDQzNSwxMCArNDU2OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljUwogICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBudWxsQXRvbSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhz
dGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1
bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNT
dHJpbmcoc3RyKTsKKyAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZyhXVEZN
b3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTQ0NTAsMTAgKzQ1ODMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0EKICAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJmb28iKSA6IHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBzdHIgPSBzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZm9vIikgOiBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVm
YXVsdFZhbHVlKHN0cik7CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZh
dWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCkBAIC00NDY1LDEwICs0NTk4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBz
dHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEF0b21pY1N0cmluZygiZm9v
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7CisgICAg
YXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEF0b21pY1N0cmlu
ZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUoc3RyKTsKKyAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKHN0cikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTQ0ODAsMTAg
KzQ2MTMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0kKICAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0lzTnVsbCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3Ry
aW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwor
ICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmco
KSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdJc051bGwoc3RyKTsKKyAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVs
bChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTQ0OTUsMTAgKzQ2MjgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0kK
ICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1l
dGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkIik7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChzdHIpOworICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoV1RGTW92ZShzdHIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00NTEw
LDEwICs0NjQzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTCiAgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmdJc051bGwiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSA/IG51bGxBdG9tIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0
YXRlKS0+dG9BdG9taWNTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0
cmluZ0lzTnVsbChzdHIpOworICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5n
SXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIApAQCAtNDUyNSwxMCArNDY1OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nSQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyIpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBzdHIgPSBzdGF0
ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0
cmluZyhzdHIpOworICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmlu
ZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTQ1NDAsMTAgKzQ2NzMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1MK
ICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1l
dGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1wdHlTdHJpbmciKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBzdHIgPSBzdGF0
ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5QXRvbSA6IHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKKyAg
ICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlBdG9t
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNT
dHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhzdHIpOworICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0
cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTQ1NTUsMTAgKzQ2ODgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUkKICAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRp
b25hbERvdWJsZUlzTmFOIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBkb3VibGUgbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvTnVtYmVy
KHN0YXRlKTsKKyAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b051bWJlcihz
dGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RX
aXRoT3B0aW9uYWxEb3VibGVJc05hTihudW1iZXIpOworICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsRG91YmxlSXNOYU4oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00NTcwLDEwICs0NzAzLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxGbG9hdElzCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBmbG9hdCBudW1iZXIgPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9GbG9hdChzdGF0ZSk7CisgICAgYXV0byBudW1iZXIgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9GbG9hdChzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKG51bWJlcik7Cisg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKFdURk1vdmUobnVtYmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDU4NSwx
MCArNDcxOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuYwogICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsU2Vx
dWVuY2UiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIFZlY3RvcjxTdHJpbmc+IHNlcXVlbmNlID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gc2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5
PFN0cmluZz4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZShzZXF1ZW5j
ZSk7CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZShXVEZNb3ZlKHNlcXVlbmNl
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
NDYwMCwxMCArNDczMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbgogICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIE9wdGlvbmFsPGxvbmcgbG9uZz4gbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxsb25nIGxvbmc+KCkgOiB0b0ludDY0KHN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8g
bnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxsb25n
IGxvbmc+KCkgOiB0b0ludDY0KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcobnVtYmVyKTsKKyAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDYxNSwxMCArNDc0OCwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsTG9uZ0xvbgogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8iKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGxvbmcgbG9u
ZyBudW1iZXIgPSB0b0ludDY0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGF1dG8gbnVtYmVyID0gdG9JbnQ2NChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvKG51bWJlcik7CisgICAg
aW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTQ2MzAs
MTAgKzQ3NjMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmUKICAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFVu
c2lnbmVkTG9uZ0xvbmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIE9wdGlvbmFsPHVuc2lnbmVkIGxvbmcgbG9uZz4gbnVtYmVyID0gc3RhdGUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDx1bnNpZ25lZCBsb25nIGxvbmc+
KCkgOiB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8dW5zaWduZWQgbG9uZyBsb25nPigpIDogdG9VSW50NjQoc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNp
Z25lZExvbmdMb25nKG51bWJlcik7CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25l
ZExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDY0NSwxMCArNDc3OCwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsVW5zaWduZQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyIpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgdW5zaWduZWQg
bG9uZyBsb25nIG51bWJlciA9IHRvVUludDY0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbnVtYmVyID0gdG9VSW50NjQoc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNa
ZXJvKG51bWJlcik7CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25n
SXNaZXJvKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtNDY2MCwxMCArNDc5MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
QXJyYXkoRQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJyYXkiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBhcnJh
eSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8VmVjdG9yPFN0
cmluZz4+KCkgOiB0b05hdGl2ZUFycmF5PFN0cmluZz4oc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgYXV0byBhcnJheSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KCkgOiB0b05hdGl2ZUFycmF5PFN0cmlu
Zz4oc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcnJheShhcnJheSk7
CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcnJheShXVEZNb3ZlKGFycmF5KSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDY3NSwxMCAr
NDgwOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJyYXlJcwogICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJyYXlJ
c0VtcHR5Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBhcnJheSA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5ID0gdG9OYXRpdmVBcnJheTxTdHJp
bmc+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJyYXlJc0VtcHR5KGFycmF5KTsK
KyAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFycmF5SXNFbXB0eShXVEZNb3ZlKGFycmF5KSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDY5
MCwxMCArNDgyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbgogICAgICAgICByZXR1cm4g
dGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFs
Qm9vbGVhbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgT3B0aW9uYWw8Ym9vbD4gYiA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Ym9vbD4oKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0Jvb2xl
YW4oc3RhdGUpOworICAgIGF1dG8gYiA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Ym9vbD4oKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0Jvb2xl
YW4oc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwubWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihiKTsKKyAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEJv
b2xlYW4oV1RGTW92ZShiKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNDcwNSwxMCArNDgzOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVh
bgogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
bWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGJvb2wgYiA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b0Jvb2xlYW4oc3RhdGUpOworICAgIGF1dG8gYiA9IHN0YXRlLT5hcmd1bWVudCgwKS50b0Jv
b2xlYW4oc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UoYik7CisgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuSXNGYWxzZShXVEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00NzIwLDggKzQ4NTMsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsQW55KEV4ZQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU0M6OkpTVmFsdWUgYSA9IHN0YXRl
LT5hcmd1bWVudCgwKTsKLSAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFueShhKTsKKyAgICBh
dXRvIGEgPSBzdGF0ZS0+YXJndW1lbnQoMCk7CisgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxB
bnkoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNDczMyw4ICs0ODY2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmwKICAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhv
ZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlciIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgVGVzdE9iaiogb2JqID0gSlNUZXN0T2JqOjp0b1dy
YXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbE51
bGxhYmxlV3JhcHBlcihvYmopOworICAgIGF1dG8gb2JqID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
c3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxl
V3JhcHBlcihXVEZNb3ZlKG9iaikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTQ3NDYsOCArNDg3OSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxs
YWJsCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwiKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFRlc3RPYmoqIG9iaiA9IEpT
VGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaW1wbC5tZXRob2RX
aXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwob2JqKTsKKyAgICBhdXRvIG9iaiA9IEpT
VGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaW1wbC5tZXRob2RX
aXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwoV1RGTW92ZShvYmopKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00Nzc4LDEzICs0OTEx
LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGludCBub25DYWxsYmFjayA9IHRvSW50MzIoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25D
YWxsYmFjayA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2Jq
IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7CiAgICAgUmVmUHRy
PFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0
KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KTsKLSAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNh
bGxiYWNrLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTQ4MzMsMTMgKzQ5NjYsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0EKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgaW50IG5vbkNhbGxiYWNr
ID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIG5vbkNhbGxiYWNrID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc0Z1bmN0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAxLCAiY2Fs
bGJhY2siLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1
bmN0aW9uQXJnIik7CiAgICAgUmVmUHRyPFRlc3RDYWxsYmFja0Z1bmN0aW9uPiBjYWxsYmFjayA9
IEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgaW1wbC5tZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKG5vbkNhbGxiYWNrLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRD
YWxsYmFja0Z1bmN0aW9uQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
NDkzOSwxMSArNTA3MiwxMSBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIFN0cmluZyBz
dHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8g
b2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKG9i
akFyZywgc3RyQXJnKTsKKyAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcp
LCBXVEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTQ5NTcsMTEgKzUwOTAsMTEgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKEV4ZWNT
dGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAg
VGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBPcHRpb25hbDxpbnQ+IGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBvYmpBcmcgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gbG9uZ0FyZyA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9J
bnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm92ZXJsb2FkZWRN
ZXRob2Qob2JqQXJnLCBsb25nQXJnKTsKKyAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92
ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00OTc1LDEwICs1MTA4LDEwIEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMyhFeGVjU3RhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
c3RhdGUpOworICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2Qoc3RyQXJnKTsKKyAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShz
dHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC00OTkyLDEwICs1MTI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChFeGVjU3RhCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGludCBsb25nQXJn
ID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChsb25nQXJnKTsKKyAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2Qo
V1RGTW92ZShsb25nQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNTAyNiwxMCArNTE1OSwxMCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoRXhlY1N0
YQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gbGlzdEFyZyA9IHRvRE9NU3RyaW5nTGlzdChzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGxpc3RBcmcgPSB0b0RPTVN0cmluZ0xpc3Qoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGxpc3RBcmcpOworICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZChXVEZNb3ZlKGxpc3RBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC01MDQzLDEwICs1MTc2LDEwIEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
NyhFeGVjU3RhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFy
cmF5PFN0cmluZz4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGFycmF5QXJnKTsKKyAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUwNjAsNyArNTE5Myw3IEBA
IHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kOChFeGVjU3RhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFw
cGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRv
V3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogICAgIGltcGwub3Zlcmxv
YWRlZE1ldGhvZCgqb2JqQXJnKTsKQEAgLTUwNzcsMTAgKzUyMTAsMTAgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q5KEV4ZWNTdGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4o
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZl
QXJyYXk8U3RyaW5nPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoYXJyYXlBcmcpOwor
ICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTA5NCwxMCArNTIyNywx
MCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKEV4ZWNTdAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnID0gdG9O
YXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0
byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwub3Zlcmxv
YWRlZE1ldGhvZChhcnJheUFyZyk7CisgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUo
YXJyYXlBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC01MTExLDEwICs1MjQ0LDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyBz
dHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8g
c3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJn
KTsKKyAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01MTUxLDcgKzUyODQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZChFeGVjU3RhdAogICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChzdGF0ZSk7CiAgICAgaWYgKChhcmdzQ291
bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCBhcmcwLmlzT2JqZWN0KCkpKSkKICAgICAgICAg
cmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUoc3RhdGUp
OwotICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNP
YmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNET01TdHJpbmdMaXN0OjppbmZv
KCkpKSkpKQorICAgIGlmIChhcmdzQ291bnQgPT0gMSkKICAgICAgICAgcmV0dXJuIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoc3RhdGUpOwogICAgIGlmICgoYXJn
c0NvdW50ID09IDEgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAmJiBpc0pT
QXJyYXkoYXJnMCkpKSkpCiAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q3KHN0YXRlKTsKQEAgLTUxODAsOSArNTMxMyw5IEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aE9wdGlvCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIFRlc3RPYmoqIG9iakFyZzEgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0
ZS0+YXJndW1lbnQoMCkpOwotICAgIFRlc3RPYmoqIG9iakFyZzIgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZChzdGF0ZS0+YXJndW1lbnQoMSkpOwotICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhP
cHRpb25hbFBhcmFtZXRlcihvYmpBcmcxLCBvYmpBcmcyKTsKKyAgICBhdXRvIG9iakFyZzEgPSBK
U1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gb2JqQXJn
MiA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CisgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUob2JqQXJnMSksIFdU
Rk1vdmUob2JqQXJnMikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTUxOTYsMTEgKzUzMjksMTEgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW8K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgVGVz
dE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsK
LSAgICBPcHRpb25hbDxpbnQ+IGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmlu
ZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RP
Ymo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gbG9uZ0FyZyA9IHN0
YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQz
MihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIob2JqQXJnLCBsb25nQXJnKTsKKyAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3Zl
KGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC01MjI2LDEwICs1MzU5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEV4ZWNTdGF0ZSoKIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xh
c3NNZXRob2RXaXRoT3B0aW9uYWwoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBPcHRpb25hbDxp
bnQ+IGFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50
PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIGFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNzTWV0aG9k
V2l0aE9wdGlvbmFsKGFyZykpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9i
ajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoV1RGTW92ZShhcmcpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC01MjQ1LDEwICs1Mzc4LDEwIEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxMShFeGVjCiB7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBpbnQgYXJnID0gdG9JbnQzMihzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGFyZyA9
IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZDEoYXJnKTsKKyAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShXVEZNb3ZlKGFyZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUy
NTksMTAgKzUzOTIsMTAgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWMKIHsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IFN0cmluZyB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAg
ICBhdXRvIHR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRo
b2QxKHR5cGUpOworICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUodHlwZSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUy
OTcsMTMgKzU0MzAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKEV4ZWMKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgdWludDE2X3Qgb2JqQXJnc1No
b3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgQ2xhbXApOworICAgIGF1
dG8gb2JqQXJnc1Nob3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgQ2xh
bXApOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHVuc2lnbmVkIG9iakFy
Z3NMb25nID0gdG9VSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgQ2xhbXApOworICAg
IGF1dG8gb2JqQXJnc0xvbmcgPSB0b1VJbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBD
bGFtcCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5jbGFzc01l
dGhvZFdpdGhDbGFtcChvYmpBcmdzU2hvcnQsIG9iakFyZ3NMb25nKTsKKyAgICBpbXBsLmNsYXNz
TWV0aG9kV2l0aENsYW1wKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9u
ZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTUzMTcsMTMgKzU0NTAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW4KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgdWludDE2X3Qgb2JqQXJn
c1Nob3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJhbmdl
KTsKKyAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IHRvVUludDE2KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIEVuZm9yY2VSYW5nZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgdW5zaWduZWQgb2JqQXJnc0xvbmcgPSB0b1VJbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDEpLCBFbmZvcmNlUmFuZ2UpOworICAgIGF1dG8gb2JqQXJnc0xvbmcgPSB0b1VJbnQzMihzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGltcGwuY2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKG9iakFy
Z3NTaG9ydCwgb2JqQXJnc0xvbmcpOworICAgIGltcGwuY2xhc3NNZXRob2RXaXRoRW5mb3JjZVJh
bmdlKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9uZykpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUzMzcsMTAgKzU0
NzAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiB1bnNpZ25lZExv
bmdTZXF1ZW5jZSA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGF1dG8gdW5zaWduZWRMb25nU2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5PHVu
c2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBpbXBsLm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSh1bnNp
Z25lZExvbmdTZXF1ZW5jZSk7CisgICAgaW1wbC5tZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVu
Y2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUzNTUsMTAgKzU0ODgsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0Fy
cmF5RnVuY3Rpb24oRXhlY1MKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFZlY3RvcjxTdHJpbmc+IHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5n
PihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24odmFsdWVzLCBlYykpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKICAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CkBAIC01Mzc1LDcgKzU1MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uKEV4ZQog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IHZhbHVlcyA9IHRvRE9NU3RyaW5nTGlzdChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsK
KyAgICBhdXRvIHZhbHVlcyA9IHRvRE9NU3RyaW5nTGlzdChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFko
IXZhbHVlcykpCkBAIC01Mzk2LDEzICs1NTI5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxh
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1
bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBudWxsYWJsZUFycmF5QXJnID0gdG9O
YXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSk7CisgICAgYXV0
byBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1w
bC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoYXJyYXlBcmcsIG51bGxhYmxl
QXJyYXlBcmcpOworICAgIGltcGwubWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNl
KFdURk1vdmUoYXJyYXlBcmcpLCBXVEZNb3ZlKG51bGxhYmxlQXJyYXlBcmcpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NDE2LDEzICs1NTQ5
LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gYXJyYXlBcmcgPSB0
b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVmVjdG9yPHVu
c2lnbmVkPiBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSk7CisgICAgYXV0byBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRp
dmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxh
YmxlU2VxdWVuY2UyKGFycmF5QXJnLCBudWxsYWJsZUFycmF5QXJnKTsKKyAgICBpbXBsLm1ldGhv
ZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZTIoV1RGTW92ZShhcnJheUFyZyksIFdURk1v
dmUobnVsbGFibGVBcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTU0NTMsNyArNTU4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MShFeGVjU3RhdGUqIHN0
YXRlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQo
MCkpOworICAgIGF1dG8gdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3Vt
ZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUpOwogICAgIGltcGwuY29udmVydDEoKnZhbHVlKTsKQEAgLTU0NzAs
OCArNTYwMyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db252ZXJ0MihFeGVjU3RhdGUqIHN0YXRlCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVz
dE5vZGU6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGltcGwuY29udmVydDIo
dmFsdWUpOworICAgIGF1dG8gdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFy
Z3VtZW50KDApKTsKKyAgICBpbXBsLmNvbnZlcnQyKFdURk1vdmUodmFsdWUpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NDg1LDEwICs1NjE4
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0MyhFeGVjU3RhdGUqIHN0YXRlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgaW1wbC5jb252ZXJ0Myh2YWx1ZSk7CisgICAgaW1wbC5jb252ZXJ0MyhXVEZNb3ZlKHZh
bHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNTUwMiwxMCArNTYzNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBzdGF0ZQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBTdHJpbmcgdmFsdWUg
PSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCkpOworICAgIGF1dG8gdmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGltcGwuY29udmVydDQodmFsdWUpOworICAgIGltcGwuY29udmVy
dDQoV1RGTW92ZSh2YWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTU1NTYsMTYgKzU2ODksMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKEV4ZWNTdGF0
ZSoKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyBzdHIgPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gc3RyID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBmbG9hdCBhID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvRmxvYXQoc3Rh
dGUpOworICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b0Zsb2F0KHN0YXRlKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbnQgYiA9IHRvSW50MzIoc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgyKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBiID0gdG9J
bnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnN0cmljdEZ1
bmN0aW9uKHN0ciwgYSwgYiwgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4o
aW1wbC5zdHJpY3RGdW5jdGlvbihXVEZNb3ZlKHN0ciksIFdURk1vdmUoYSksIFdURk1vdmUoYiks
IGVjKSk7CiAKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01NTg0LDEzICs1NzE3LDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlv
bldpdGhTZXF1ZW5jCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKFVOTElLRUxZ
KCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhc3RhdGUtPmFyZ3Vt
ZW50KDApLmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqIiwgInN0cmlj
dEZ1bmN0aW9uV2l0aFNlcXVlbmNlIiwgIlRlc3RPYmoiKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gb2Jq
QXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAo
VU5MSUtFTFkoIW9iakFyZykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
KTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGEgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIGEgPSB0b05hdGl2ZUFycmF5PHVuc2ln
bmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnN0cmljdEZ1bmN0aW9uV2l0aFNlcXVlbmNl
KCpvYmpBcmcsIGEsIGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwu
c3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2UoKm9iakFyZywgV1RGTW92ZShhKSwgZWMpKTsKIAog
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKQEAgLTU2MDksMTMgKzU3NDIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uV2l0aEFycmF5
KEUKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFzdGF0ZS0+YXJndW1lbnQoMCkuaW5o
ZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoKnN0YXRlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmoiLCAic3RyaWN0RnVuY3Rpb25X
aXRoQXJyYXkiLCAiVGVzdE9iaiIpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RP
Ymo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghb2Jq
QXJnKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwotICAgIFZlY3Rv
cjxpbnQ+IGFycmF5ID0gdG9OYXRpdmVBcnJheTxpbnQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MSkpOworICAgIGF1dG8gYXJyYXkgPSB0b05hdGl2ZUFycmF5PGludD4oc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoaW1wbC5zdHJpY3RGdW5jdGlvbldpdGhBcnJheSgqb2JqQXJnLCBhcnJheSwgZWMpKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5zdHJpY3RGdW5jdGlvbldpdGhB
cnJheSgqb2JqQXJnLCBXVEZNb3ZlKGFycmF5KSwgZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTU2
MzEsMTMgKzU3NjQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kKEV4ZWMKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIGhlYWQgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gaGVhZCA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPFN0
cmluZz4oc3RhdGUsIDEpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cGwudmFyaWFkaWNTdHJpbmdNZXRob2QoaGVhZCwgdGFpbCk7CisgICAgaW1wbC52YXJpYWRpY1N0
cmluZ01ldGhvZChXVEZNb3ZlKGhlYWQpLCB0YWlsKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NjUxLDEzICs1Nzg0LDEzIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0Rv
dWJsZU1ldGhvZChFeGVjCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGRvdWJsZSBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKHN0
YXRlKTsKKyAgICBhdXRvIGhlYWQgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3RhdGUp
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxkb3VibGU+IHRh
aWwgPSB0b05hdGl2ZUFyZ3VtZW50czxkb3VibGU+KHN0YXRlLCAxKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKGhlYWQsIHRh
aWwpOworICAgIGltcGwudmFyaWFkaWNEb3VibGVNZXRob2QoV1RGTW92ZShoZWFkKSwgdGFpbCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTY3
MSw3ICs1ODA0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChFeGVjU3QKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgTm9kZSogaGVhZCA9IEpTTm9kZTo6
dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBoZWFkID0gSlNOb2RlOjp0
b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgVmVjdG9yPE5vZGUq
PiB0YWlsOwpAQCAtNTY5NCwxMyArNTgyNywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGZsb2F0IGEg
PSBzdGF0ZS0+YXJndW1lbnQoMCkudG9GbG9hdChzdGF0ZSk7CisgICAgYXV0byBhID0gc3RhdGUt
PmFyZ3VtZW50KDApLnRvRmxvYXQoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGludCBiID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3Jt
YWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGIgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIGltcGwuYW55KGEsIGIpOworICAgIGltcGwuYW55KFdURk1vdmUoYSksIFdURk1vdmUo
YikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTU3MzgsMTIgKzU4NzEsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmwKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgZmxvYXQgYSA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b0Zsb2F0KHN0YXRlKTsKKyAgICBhdXRvIGEgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9GbG9hdChzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKGEpKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUpOwotICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9h
dEFyZ3VtZW50KGEsIERlZmVycmVkV3JhcHBlcihzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOworICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldp
dGhGbG9hdEFyZ3VtZW50KFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcihzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTU3ODEsMTAgKzU5MTQsMTAgQEAg
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoT3AKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRB
cmd1bWVudCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgT3B0aW9uYWw8aW50PiBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9u
YWxJbnRBcmd1bWVudChhLCBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKKyAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChXVEZNb3ZlKGEpLCBEZWZlcnJlZFdyYXBwZXIoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01ODA0LDEyICs1
OTM3LDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGZsb2F0IGEgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9GbG9hdChzdGF0ZSk7CisgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvRmxv
YXQoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJ
S0VMWSghc3RkOjppc2Zpbml0ZShhKSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KHN0YXRlKTsKLSAgICBpbXBsLnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKGEsIERlZmVy
cmVkV3JhcHBlcihzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZl
cnJlZCkpOworICAgIGltcGwudGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oV1RGTW92ZShh
KSwgRGVmZXJyZWRXcmFwcGVyKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJv
bWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNTgyOSw3ICs1OTYyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmMKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgRmV0Y2hS
ZXF1ZXN0KiByZXF1ZXN0ID0gSlNGZXRjaFJlcXVlc3Q6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGF1dG8gcmVxdWVzdCA9IEpTRmV0Y2hSZXF1ZXN0Ojp0b1dyYXBwZWQoc3Rh
dGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoIXJlcXVlc3QpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZU92ZXJs
b2FkZWRGdW5jdGlvbigqcmVxdWVzdCwgRGVmZXJyZWRXcmFwcGVyKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CkBAIC01ODkwLDYgKzYwMjMsMjMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOZWVkc0xpZmVjeWNsZVAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdChFeGVjU3RhdGUqIHN0YXRlKQorewor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKKyAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0YWNoU2hhZG93Um9vdCIpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOworICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBhdXRvIGluaXQgPSBi
dWlsZDxUZXN0T2JqOjpTaGFkb3dSb290SW5pdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwuYXR0YWNoU2hhZG93
Um9vdChXVEZNb3ZlKGluaXQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworfQorCiB1c2luZyBUZXN0T2JqSXRlcmF0b3IgPSBKU0tleVZhbHVlSXRlcmF0b3I8
SlNUZXN0T2JqPjsKIHVzaW5nIFRlc3RPYmpJdGVyYXRvclByb3RvdHlwZSA9IEpTS2V5VmFsdWVJ
dGVyYXRvclByb3RvdHlwZTxKU1Rlc3RPYmo+OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHAKaW5kZXggODdhMmQxY2U3YjZhODBlYzc3NDc5Njc5Y2ZmOWY3
YTE4YjhjZTA0Ni4uODYyODE1ODhhMTAxMjcyZTQwNGM5Njk1ZDNjMDNjY2E1OGFjMjdkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAtNzAsNyAr
NzAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMxKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNh
bGxlZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9IHRvQXJyYXlC
dWZmZXIoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5QnVmZmVyID0gdG9BcnJh
eUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXIpKQpAQCAtODQsNyArODQsNyBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMyKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldyA9IHRv
QXJyYXlCdWZmZXJWaWV3KHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBhcnJheUJ1ZmZl
clZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXJWaWV3
KSkKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1
Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhFeGVjU3RhdGUqIHMKICAgICBhdXRvKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rv
cio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBCbG9iKiBibG9iID0gSlNCbG9iOjp0
b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGJsb2IgPSBKU0Jsb2I6OnRv
V3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghYmxvYikpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKICAgICBSZWZQdHI8VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpjcmVhdGUoKmJsb2IpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoRXhlY1N0YXRl
KiBzCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5n
IHN0cmluZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0
byBzdHJpbmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShzdHJp
bmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCmluZGV4IGQxMzYxZjM0MGYz
NTRjOTEyMGVhM2RmMWFkYzMxNzM2ZjVlM2YwM2MuLjI0N2Q4MTU2NWJkMjI5MTI3NmE3YzdjZTZl
NjM4NWY1NjY5ZThmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKQEAg
LTIwMCwxMCArMjAwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3Zl
cnJpZGVCdWlsdGluc1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtKEV4CiAgICAgICAgIHJldHVy
biB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE92ZXJyaWRlQnVpbHRpbnMiLCAibmFt
ZWRJdGVtIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgidGVzdCIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKKyAgICBhdXRvIG5hbWUgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgidGVzdCIpIDogc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm5hbWVkSXRlbShuYW1lKSkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFtZSkpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDNkNmQ0NmZkZmRiNzZlYmFi
OWUyMTg2MWM3ZDJhNmViYjhmODgwNTAuLmVhYmNiMTA1NTA1ODdmZGFhZjViM2M3ZWFiNzAwMDFj
ZjZjNTM1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNDMsMTAgKzI0MywxMCBAQCBib29sIHNldEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbAogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOwogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
c3RhdGUsIHZhbHVlLCAwLCAwKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwu
c2V0VmFsdWUobmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0VmFsdWUoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjAsMTAgKzI2MCwxMCBAQCBib29s
IHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRWYWx1
ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUobmF0aXZlVmFsdWUpOworICAgIGltcGwu
c2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAppbmRleCBkOTAxMjdkYzg5NDU4MmE3Y2Y4NDU2YTA1NjQw
N2M0MzFmOTNkNDlmLi4yODdkNTY2MjM1YjU1NzY2ZTRmYmM1YThkYjA1NGUyZmJjYjJkZmVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VHlwZWRlZnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB0ZW1wbGF0ZTw+IEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0KEV4ZQogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBTdHJpbmcgaGVsbG8gPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOworICAgIGF1dG8gaGVsbG8gPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2Jq
ZWN0KCkpKQpAQCAtMzUzLDEwICszNTMsMTAgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2ln
bmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIs
ICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVWYWx1ZSA9IHRv
VUludDY0KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHRvVUludDY0KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBs
LnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzcwLDEwICszNzAsMTAgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlMKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBl
ZGVmcyIsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0
YXRlLCB2YWx1ZSwgMCwgMCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbXBsLnNl
dEltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5z
ZXRJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zODcsMTAgKzM4NywxMCBAQCBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdAogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0g
dG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKKyAgICBp
bXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDA1LDEwICs0MDUsMTAgQEAgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMy
KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlt
cGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUsIGVjKTsKKyAgICBpbXBs
LnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00
MjMsMTAgKzQyMywxMCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2
ZVZhbHVlKTsKKyAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQxLDEwICs0NDEs
MTAgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJp
bmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0
U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUsIGVjKTsKKyAgICBpbXBs
LnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBl
Yyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC00NjMsMTAgKzQ2MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEV4ZWNTdGF0ZSogc3RhdAogICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJmdW5jIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVm
czo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IFZlY3RvcjxpbnQ+IHggPSB0b05hdGl2ZUFycmF5PGludD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSk7CisgICAgYXV0byB4ID0gdG9OYXRpdmVBcnJheTxpbnQ+KHN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwuZnVu
Yyh4KTsKKyAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDgwLDIyICs0ODAsMjIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hh
ZG93KEV4ZWNTdGF0ZSoKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgZmxvYXQgd2lkdGggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9GbG9hdChzdGF0
ZSk7CisgICAgYXV0byB3aWR0aCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b0Zsb2F0KHN0YXRlKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBzdGF0
ZS0+YXJndW1lbnQoMSkudG9GbG9hdChzdGF0ZSk7CisgICAgYXV0byBoZWlnaHQgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9GbG9hdChzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgZmxvYXQgYmx1ciA9IHN0YXRlLT5hcmd1bWVudCgyKS50b0Zsb2F0KHN0YXRlKTsK
KyAgICBhdXRvIGJsdXIgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9GbG9hdChzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3RyaW5nIGNvbG9yID0gc3RhdGUtPmFy
Z3VtZW50KDMpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgzKS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0byBjb2xvciA9IHN0YXRlLT5hcmd1
bWVudCgzKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMykudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIE9wdGlvbmFsPGZsb2F0PiBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8ZmxvYXQ+KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoNCku
dG9GbG9hdChzdGF0ZSk7CisgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1Vu
ZGVmaW5lZCgpID8gT3B0aW9uYWw8ZmxvYXQ+KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
NCkudG9GbG9hdChzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
aW1wbC5zZXRTaGFkb3cod2lkdGgsIGhlaWdodCwgYmx1ciwgY29sb3IsIGFscGhhKTsKKyAgICBp
bXBsLnNldFNoYWRvdyhXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpLCBXVEZNb3ZlKGJs
dXIpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92ZShhbHBoYSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUwOSwxMCArNTA5LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhTZXF1ZW5jZUFyCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwotICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2Vx
dWVuY2VBcmcgPSAodG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpT
U2VyaWFsaXplZFNjcmlwdFZhbHVlPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAmSlNTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OnRvV3JhcHBlZCkpOworICAgIGF1dG8gc2VxdWVuY2VBcmcgPSAo
dG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFsaXplZFNj
cmlwdFZhbHVlPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAmSlNTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OnRvV3JhcHBlZCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoc2Vx
dWVuY2VBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubWV0aG9kV2l0
aFNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC01MjYsMTAgKzUyNiwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZUFy
cmF5QXJnKEV4ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKLSAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVB
cnJheTxTdHJpbmc+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwubnVsbGFibGVBcnJheUFyZyhhcnJheUFyZyk7Cisg
ICAgaW1wbC5udWxsYWJsZUFycmF5QXJnKFdURk1vdmUoYXJyYXlBcmcpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NDMsMTMgKzU0MywxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25GdW5jV2l0aENsYW1wKEV4ZWNTdAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXJnMSA9IHRvVUludDY0
KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKKyAgICBhdXRvIGFyZzEgPSB0b1VJ
bnQ2NChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQgbG9uZyBsb25nPiBhcmcyID0g
c3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDx1bnNpZ25lZCBsb25n
IGxvbmc+KCkgOiB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBD
bGFtcCk7CisgICAgYXV0byBhcmcyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkg
PyBPcHRpb25hbDx1bnNpZ25lZCBsb25nIGxvbmc+KCkgOiB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBDbGFtcCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgaW1wbC5mdW5jV2l0aENsYW1wKGFyZzEsIGFyZzIpOworICAgIGltcGwuZnVu
Y1dpdGhDbGFtcChXVEZNb3ZlKGFyZzEpLCBXVEZNb3ZlKGFyZzIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NzYsMTAgKzU3NiwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25TdHJpbmdBcnJheUZ1bmN0aW9uKAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxT
dHJpbmc+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbih2YWx1ZXMsIGVjKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSwgZWMpKTsK
IAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKQEAgLTU5NiwxMCArNTk2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rp
b24yCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBWZWN0b3I8U3RyaW5n
PiB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CisgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uMih2YWx1ZXMsIGVjKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJp
bmdBcnJheUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKICAgICBzZXRET01FeGNl
cHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBA
IC02MTUsMTAgKzYxNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdAogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRl
c3RFdmVudFRhcmdldD4+IHNlcXVlbmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2
ZW50VGFyZ2V0LCBKU1Rlc3RFdmVudFRhcmdldD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
JkpTVGVzdEV2ZW50VGFyZ2V0Ojp0b1dyYXBwZWQpKTsKKyAgICBhdXRvIHNlcXVlbmNlQXJnID0g
KHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2ZW50VGFyZ2V0LCBKU1Rlc3RFdmVudFRhcmdldD4o
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgJkpTVGVzdEV2ZW50VGFyZ2V0Ojp0b1dyYXBwZWQp
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQm9vbGVhbihpbXBsLmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKHNlcXVl
bmNlQXJnKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5jYWxsV2l0aFNl
cXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShXVEZNb3ZlKHNlcXVlbmNlQXJnKSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCmluZGV4IGIzOGIz
ZDkwOTlhYTVlOTRkNGU3YjFhMDE3MWZkNjJiYWE2MWI5N2IuLjhhNGI4MDEyNjIyMzk0MWY4OGIz
ZmViMTA5OWJmZmYwZmMwYmU3NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTMxLDYgKzMxLDcgQEAKIEBj
bGFzcyBET01Ob2RlOwogQGNsYXNzIERPTVNWR0RvY3VtZW50OwogQGNsYXNzIERPTVNWR1BvaW50
OworQGNsYXNzIERPTVNoYWRvd1Jvb3RJbml0OwogQGNsYXNzIERPTVRlc3RFbnVtVHlwZTsKIEBj
bGFzcyBET01UZXN0Tm9kZTsKIEBjbGFzcyBET01UZXN0T2JqOwpAQCAtMzksNyArNDAsNiBAQAog
QGNsYXNzIERPTVRlc3RPYmplY3RDQ29uc3RydWN0b3I7CiBAY2xhc3MgRE9NVGVzdFN1Yk9iakNv
bnN0cnVjdG9yOwogQGNsYXNzIERPTWFueTsKLUBjbGFzcyBET01ib29sOwogQGNsYXNzIE5TU3Ry
aW5nOwogQHByb3RvY29sIERPTUV2ZW50TGlzdGVuZXI7CiAKQEAgLTIwOSw5ICsyMDksMTAgQEAg
V0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0T2JqIDogRE9NT2JqZWN0CiAtIChET01T
VkdQb2ludCAqKW11dGFibGVQb2ludEZ1bmN0aW9uOwogLSAoRE9NU1ZHUG9pbnQgKilpbW11dGFi
bGVQb2ludEZ1bmN0aW9uOwogLSAodm9pZClvcmFuZ2U7Ci0tIChET01ib29sICopc3RyaWN0RnVu
Y3Rpb246KE5TU3RyaW5nICopc3RyIGE6KGZsb2F0KWEgYjooaW50KWI7CistIChCT09MKXN0cmlj
dEZ1bmN0aW9uOihOU1N0cmluZyAqKXN0ciBhOihmbG9hdClhIGI6KGludCliOwogLSAodm9pZCl2
YXJpYWRpY1N0cmluZ01ldGhvZDooTlNTdHJpbmcgKiloZWFkIHRhaWw6KE5TU3RyaW5nICopdGFp
bDsKIC0gKHZvaWQpdmFyaWFkaWNEb3VibGVNZXRob2Q6KGRvdWJsZSloZWFkIHRhaWw6KGRvdWJs
ZSl0YWlsOwogLSAodm9pZCl2YXJpYWRpY05vZGVNZXRob2Q6KERPTU5vZGUgKiloZWFkIHRhaWw6
KERPTU5vZGUgKil0YWlsOwogLSAodm9pZClhbnk6KGZsb2F0KWEgYjooaW50KWI7CistICh2b2lk
KWF0dGFjaFNoYWRvd1Jvb3Q6KERPTVNoYWRvd1Jvb3RJbml0ICopaW5pdDsKIEBlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RP
YmoubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLm1tCmluZGV4IDc0MzI3Y2ZhZWNjZmYyMzhjZWQ3NWQ2NDcyMGY2ZWYxNmViMTgxYTEuLjBl
MzVlYjYzYWEyZTNmMDg4NTk0MmFkYzkzMDIxNTViY2JkN2E4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpA
QCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJE
T01TVkdEb2N1bWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01TVkdQb2ludEludGVybmFsLmgi
CisjaW1wb3J0ICJET01TaGFkb3dSb290SW5pdEludGVybmFsLmgiCiAjaW1wb3J0ICJET01UZXN0
RW51bVR5cGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE5vZGVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiRE9NVGVzdE9iakludGVybmFsLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW1wb3J0ICJE
T01UZXN0T2JqZWN0Q0NvbnN0cnVjdG9ySW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVRlc3RTdWJP
YmpDb25zdHJ1Y3RvckludGVybmFsLmgiCiAjaW1wb3J0ICJET01hbnlJbnRlcm5hbC5oIgotI2lt
cG9ydCAiRE9NYm9vbEludGVybmFsLmgiCiAjaW1wb3J0ICJEaWN0aW9uYXJ5LmgiCiAjaW1wb3J0
ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgpAQCAtNTQsNiArNTQsNyBA
QAogI2ltcG9ydCAiU1ZHRG9jdW1lbnQuaCIKICNpbXBvcnQgIlNWR1BvaW50LmgiCiAjaW1wb3J0
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbXBvcnQgIlNoYWRvd1Jvb3RJbml0LmgiCiAj
aW1wb3J0ICJUZXN0RW51bVR5cGUuaCIKICNpbXBvcnQgIlRlc3ROb2RlLmgiCiAjaW1wb3J0ICJU
ZXN0T2JqLmgiCkBAIC02NSw4ICs2Niw2IEBACiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIldl
YkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCi0j
aW1wb3J0ICJhbnkuaCIKLSNpbXBvcnQgImJvb2wuaCIKICNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4K
IAogI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaio+KF9pbnRl
cm5hbCkKQEAgLTE1NzEsMTEgKzE1NzAsMTEgQEAgLSAodm9pZClvcmFuZ2UKICAgICBJTVBMLT5i
YW5hbmEoKTsKIH0KIAotLSAoRE9NYm9vbCAqKXN0cmljdEZ1bmN0aW9uOihOU1N0cmluZyAqKXN0
ciBhOihmbG9hdClhIGI6KGludCliCistIChCT09MKXN0cmljdEZ1bmN0aW9uOihOU1N0cmluZyAq
KXN0ciBhOihmbG9hdClhIGI6KGludCliCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERP
TWJvb2wgKnJlc3VsdCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zdHJpY3RGdW5jdGlvbihzdHIs
IGEsIGIsIGVjKSkpOworICAgIEJPT0wgcmVzdWx0ID0gSU1QTC0+c3RyaWN0RnVuY3Rpb24oc3Ry
LCBhLCBiLCBlYyk7CiAgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtMTYwNiw2ICsxNjA1LDEyIEBAIC0gKHZvaWQpYW55OihmbG9hdClh
IGI6KGludCliCiAgICAgSU1QTC0+YW55KGEsIGIpOwogfQogCistICh2b2lkKWF0dGFjaFNoYWRv
d1Jvb3Q6KERPTVNoYWRvd1Jvb3RJbml0ICopaW5pdAoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5hdHRhY2hTaGFkb3dSb290KGNvcmUoaW5p
dCkpOworfQorCiBAZW5kCiAKIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmUoRE9NVGVzdE9iaiAqd3Jh
cHBlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbAppbmRleCBiZTRkOTJiNTY4Mzk0YjdhNzdlOWJiZWJhNjg0Y2RjY2ZjNGUyYjdkLi4xODRm
YjE3ZmYxNzA5ZjhjNTU1ZmQzN2ZiMTFmOWFmMDhmMjZjMTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0zMDcsMTAgKzMwNywx
MCBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogICAgIFtJ
bXBsZW1lbnRlZEFzPWJsdWViZXJyeV0gYXR0cmlidXRlIGxvbmcgc3RyYXdiZXJyeTsKIAogICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZmxvYXQgc3RyaWN0
RmxvYXQ7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBib29sIHN0
cmljdEZ1bmN0aW9uKERPTVN0cmluZyBzdHIsIHVucmVzdHJpY3RlZCBmbG9hdCBhLCBsb25nIGIp
OworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBzdHJp
Y3RGdW5jdGlvbihET01TdHJpbmcgc3RyLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSwgbG9uZyBiKTsK
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbCBzdHJpY3RG
dW5jdGlvbldpdGhTZXF1ZW5jZShUZXN0T2JqIG9iakFyZywgc2VxdWVuY2U8dW5zaWduZWQgbG9u
Zz4gYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBib29sIHN0
cmljdEZ1bmN0aW9uV2l0aEFycmF5KFRlc3RPYmogb2JqQXJnLCBsb25nW10gYXJyYXkpOworICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBzdHJpY3RGdW5j
dGlvbldpdGhTZXF1ZW5jZShUZXN0T2JqIG9iakFyZywgc2VxdWVuY2U8dW5zaWduZWQgbG9uZz4g
YSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIHN0
cmljdEZ1bmN0aW9uV2l0aEFycmF5KFRlc3RPYmogb2JqQXJnLCBsb25nW10gYXJyYXkpOwogCiAg
ICAgLy8gT2JqZWN0aXZlQyByZXNlcnZlZCB3b3Jkcy4KICAgICByZWFkb25seSBhdHRyaWJ1dGUg
bG9uZyAgICAgIGRlc2NyaXB0aW9uOwpAQCAtMzcwLDggKzM3MCwxNCBAQCBlbnVtIFRlc3RDb25m
aWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogI2lmIGRlZmluZWQoVEVTVElOR19KUykK
ICAgICBbSW52b2tlc0N1c3RvbUVsZW1lbnRMaWZlY3ljbGVDYWxsYmFja3NdIHZvaWQgbWV0aG9k
V2l0aE5lZWRzTGlmZWN5Y2xlUHJvY2Vzc2luZ1N0YWNrKCk7CiAjZW5kaWYKKworICAgIHZvaWQg
YXR0YWNoU2hhZG93Um9vdChTaGFkb3dSb290SW5pdCBpbml0KTsKIH07CiAKIC8vIFRoZSBmb2xs
b3dpbmcgY29tbWVudCBzaG91bGQgbm90IGdlbmVyYXRlIGFueSBjb2RlLgogLy8gVGVzdE9iaiBp
bXBsZW1lbnRzIFRlc3RJbXBsZW1lbnRzOwogCitlbnVtIFNoYWRvd1Jvb3RNb2RlIHsgIm9wZW4i
LCAiY2xvc2VkIiB9OworZGljdGlvbmFyeSBTaGFkb3dSb290SW5pdCB7CisgICAgcmVxdWlyZWQg
U2hhZG93Um9vdE1vZGUgbW9kZTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMjQ5OTFm
NTViZmY5ODQ3NzE4M2NmYzdmMzZkYzI0Mjk4YzBjYzUxNi4uYzA0OWQ2NDQ4NWY2ZGY3OWM3YmNm
MzEyMzY1NjBiOTcwZmVmMjI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTY3NCwyMSAr
MTY3NCwxNCBAQCBSZWZQdHI8U2hhZG93Um9vdD4gRWxlbWVudDo6Y3JlYXRlU2hhZG93Um9vdChF
eGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPFNoYWRv
d1Jvb3Q+IEVsZW1lbnQ6OmF0dGFjaFNoYWRvdyhjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5
LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgRWxlbWVudDo6Y2FuSGF2ZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKSBjb25zdAogewotICAgIFN0cmluZyBtb2RlOwotICAgIGRpY3Rpb25hcnkuZ2V0KCJt
b2RlIiwgbW9kZSk7Ci0KLSAgICBhdXRvIHR5cGUgPSBTaGFkb3dSb290OjpUeXBlOjpDbG9zZWQ7
Ci0gICAgaWYgKG1vZGUgPT0gIm9wZW4iKQotICAgICAgICB0eXBlID0gU2hhZG93Um9vdDo6VHlw
ZTo6T3BlbjsKLSAgICBlbHNlIGlmIChtb2RlICE9ICJjbG9zZWQiKSB7Ci0gICAgICAgIGVjID0g
VHlwZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQogCi0gICAgLy8gRklYTUU6IFRoZSBjdXJyZW50IHNwZWMgYWxsb3dzIGF0dGFjaFNo
YWRvdyBvbiBub24tSFRNTCBlbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pih0aGlz
KSB8fCBkb3duY2FzdDxIVE1MRWxlbWVudD4odGhpcyktPmNhbkhhdmVVc2VyQWdlbnRTaGFkb3dS
b290KCkpIHsKK1JlZlB0cjxTaGFkb3dSb290PiBFbGVtZW50OjphdHRhY2hTaGFkb3coY29uc3Qg
U2hhZG93Um9vdEluaXQmIGluaXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChjYW5I
YXZlVXNlckFnZW50U2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9F
UlI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTE2OTgsOSArMTY5MSw5IEBA
IFJlZlB0cjxTaGFkb3dSb290PiBFbGVtZW50OjphdHRhY2hTaGFkb3coY29uc3QgRGljdGlvbmFy
eSYgZGljdGlvbmFyeSwgRXhjZXB0aW9uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAotICAgIGFkZFNoYWRvd1Jvb3QoU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIHR5cGUp
KTsKLQotICAgIHJldHVybiBzaGFkb3dSb290KCk7CisgICAgYXV0byBzaGFkb3cgPSBTaGFkb3dS
b290OjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5pdC5tb2RlID09IFNoYWRvd1Jvb3RNb2RlOjpPcGVu
ID8gU2hhZG93Um9vdDo6VHlwZTo6T3BlbiA6IFNoYWRvd1Jvb3Q6OlR5cGU6OkNsb3NlZCk7Cisg
ICAgYWRkU2hhZG93Um9vdChzaGFkb3cuY29weVJlZigpKTsKKyAgICByZXR1cm4gV1RGTW92ZShz
aGFkb3cpOwogfQogCiBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290Rm9yQmluZGluZ3Mo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggMTIyNmE0
ODI3MmQ1NjAwNmM3NWM4NmQyZWZhNzdkZTYzYjc3Yzg2ZS4uYjg4NDE0YjczMTcwNTI5YTUwYTM5
ZjBlZjIxNzRmNzQwZjI3OGQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yNDksOCArMjQ5LDEz
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBTaGFkb3dSb290KiBzaGFkb3dSb290KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFNoYWRvd1Jvb3Q+IGNyZWF0ZVNoYWRv
d1Jvb3QoRXhjZXB0aW9uQ29kZSYpOwogCisgICAgZW51bSBjbGFzcyBTaGFkb3dSb290TW9kZSB7
IE9wZW4sIENsb3NlZCB9OworICAgIHN0cnVjdCBTaGFkb3dSb290SW5pdCB7CisgICAgICAgIFNo
YWRvd1Jvb3RNb2RlIG1vZGU7CisgICAgfTsKKwogICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RG
b3JCaW5kaW5ncyhKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OwotICAgIFJlZlB0cjxTaGFkb3dSb290
PiBhdHRhY2hTaGFkb3coY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBS
ZWZQdHI8U2hhZG93Um9vdD4gYXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgU2hhZG93Um9vdCogdXNlckFnZW50U2hhZG93Um9vdCgpIGNv
bnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFNoYWRvd1Jvb3QmIGVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKQEAgLTU4NSwxMSArNTkwLDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNhbmNl
bEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwogCi0gICAgLy8gY2xvbmVOb2RlIGlzIHByaXZhdGUg
c28gdGhhdCBub24tdmlydHVhbCBjbG9uZUVsZW1lbnRXaXRoQ2hpbGRyZW4gYW5kIGNsb25lRWxl
bWVudFdpdGhvdXRDaGlsZHJlbgotICAgIC8vIGFyZSB1c2VkIGluc3RlYWQuCisgICAgLy8gVGhl
IGNsb25lTm9kZSBmdW5jdGlvbiBpcyBwcml2YXRlIHNvIHRoYXQgbm9uLXZpcnR1YWwgY2xvbmVF
bGVtZW50V2l0aC9XaXRob3V0Q2hpbGRyZW4gYXJlIHVzZWQgaW5zdGVhZC4KICAgICBSZWY8Tm9k
ZT4gY2xvbmVOb2RlSW50ZXJuYWwoRG9jdW1lbnQmLCBDbG9uaW5nT3BlcmF0aW9uKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIFJlZjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRl
c0FuZENoaWxkcmVuKERvY3VtZW50Jik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3QoKTsKIAog
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBleGlzdGluZ0NvbXB1dGVkU3R5bGUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmlkbAppbmRleCBlMmVlM2M1ZjUzZmUxODkyY2I0ODM0NWI4MGFmNWE1M2U2ZjIxNjRh
Li5jNGQzNmJhOGM0ZjczZmRhZDlmYjg0M2Q4MjE5OWIxNmM4NTA3OThlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaWRsCkBAIC0xODUsNyArMTg1LDcgQEAKIAogICAgIC8vIFNoYWRvdyBET00gQVBJCiAj
aWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0g
ICAgW0NvbmRpdGlvbmFsPVNIQURPV19ET00sIEVuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBS
YWlzZXNFeGNlcHRpb25dIFNoYWRvd1Jvb3QgYXR0YWNoU2hhZG93KERpY3Rpb25hcnkgb3B0aW9u
cyk7CisgICAgW0NvbmRpdGlvbmFsPVNIQURPV19ET00sIEVuYWJsZWRBdFJ1bnRpbWU9U2hhZG93
RE9NLCBSYWlzZXNFeGNlcHRpb25dIFNoYWRvd1Jvb3QgYXR0YWNoU2hhZG93KFNoYWRvd1Jvb3RJ
bml0IGluaXQpOwogICAgIFtDb25kaXRpb25hbD1TSEFET1dfRE9NLCBFbmFibGVkQXRSdW50aW1l
PVNoYWRvd0RPTSwgSW1wbGVtZW50ZWRBcz1zaGFkb3dSb290Rm9yQmluZGluZ3MsIENhbGxXaXRo
PVNjcmlwdFN0YXRlXSByZWFkb25seSBhdHRyaWJ1dGUgU2hhZG93Um9vdCBzaGFkb3dSb290Owog
ICAgIFtDb25kaXRpb25hbD1TSEFET1dfRE9NLCBFbmFibGVkQXRSdW50aW1lPVNoYWRvd0RPTSwg
UmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBzbG90OwogI2VuZGlmCkBAIC0yMzMsNiArMjMz
LDEyIEBACiAgICAgW05vdEVudW1lcmFibGUsIENvbmRpdGlvbmFsPVdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVF0gYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbndlYmtpdHBsYXliYWNrdGFyZ2V0YXZh
aWxhYmlsaXR5Y2hhbmdlZDsKIH07CiAKK2VudW0gU2hhZG93Um9vdE1vZGUgeyAib3BlbiIsICJj
bG9zZWQiIH07CisKK2RpY3Rpb25hcnkgU2hhZG93Um9vdEluaXQgeworICAgIHJlcXVpcmVkIFNo
YWRvd1Jvb3RNb2RlIG1vZGU7Cit9OworCiBFbGVtZW50IGltcGxlbWVudHMgQ2hpbGROb2RlOwog
RWxlbWVudCBpbXBsZW1lbnRzIFBhcmVudE5vZGU7CiBFbGVtZW50IGltcGxlbWVudHMgTm9uRG9j
dW1lbnRUeXBlQ2hpbGROb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCmluZGV4IDcyMWY0
YjU0MjNlMDYzMGMzNmMxODgzYjFkNzIyMjg5NzI1M2U0M2YuLmI0YWJhODgwZDc0NDFkZTNiNDcy
ODZkYWY2ODgwZGZjNjE1ZWMzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKQEAgLTg5
LDcgKzg5LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzSFRNTFVua25vd25FbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBjYW5IYXZlVXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKICAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKSBvdmVycmlkZTsK
ICAgICBib29sIHdpbGxSZXNwb25kVG9Nb3VzZVdoZWVsRXZlbnRzKCkgb3ZlcnJpZGU7Cg==
</data>
<flag name="review"
          id="302200"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>