<?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>109902</bug_id>
          
          <creation_ts>2013-02-14 23:43:37 -0800</creation_ts>
          <short_desc>[JSC] MAYBE_MISSING_PARAMETER(..., DefaultIsNullString) macro is redundant</short_desc>
          <delta_ts>2013-02-19 13:09:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (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="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>jbriance</cc>
    
    <cc>jsbell</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833744</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-14 23:43:37 -0800</bug_when>
    <thetext>c.f. corresponding V8 bug: https://bugs.webkit.org/show_bug.cgi?id=109899

Currently:

- MAYBE_MISSING_PARAMETER(exec, index, DefaultIsUndefined) returns exec-&gt;argument(index).
- MAYBE_MISSING_PARAMETER(exec, index, DefaultIsNullString) returns JSValue() if exec-&gt;argument(index) is missing (i.e. the length of the argument is less than index). It returns exec-&gt;argument(index) otherwise.

No one other than CodeGeneratorJS.pm uses MAYBE_MISSING_PARAMETER(exec, index, DefaultIsUndefined). Instead, we simply use exec-&gt;argument(index). We should remove the redundant usage in CodeGeneratorJS.pm too. The long-name macro has been making generated code less readable.

In addition, we can rename MAYBE_MISSING_PARAMETER() to MissingIsNullString().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833746</commentid>
    <comment_count>1</comment_count>
      <attachid>188494</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-14 23:45:12 -0800</bug_when>
    <thetext>Created attachment 188494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834083</commentid>
    <comment_count>2</comment_count>
      <attachid>188494</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 09:11:23 -0800</bug_when>
    <thetext>Comment on attachment 188494
Patch

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

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:62
&gt; +#define MissingIsNullString(exec, index) (((index) &gt;= (exec)-&gt;argumentCount()) ? (JSValue()) : ((exec)-&gt;argument(index)))

Same comment.  This should probably be an inline function.  If it can&apos;t be an inline function, we should keep the ALL_CAPS name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834106</commentid>
    <comment_count>3</comment_count>
      <attachid>188494</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-15 09:34:55 -0800</bug_when>
    <thetext>Comment on attachment 188494
Patch

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

&gt;&gt; Source/WebCore/bindings/js/JSDOMBinding.h:62
&gt;&gt; +#define MissingIsNullString(exec, index) (((index) &gt;= (exec)-&gt;argumentCount()) ? (JSValue()) : ((exec)-&gt;argument(index)))
&gt; 
&gt; Same comment.  This should probably be an inline function.  If it can&apos;t be an inline function, we should keep the ALL_CAPS name.

Further, both the names MAYBE_MISSING_PARAMETER and MissingIsNullString are examples of the kind of confusing names we try to avoid. A function should be named after its return value. And even though it’s used to implement DefaultIsNullString, this does not return a string, so it’s really confusing to mention string in its name.

ARGUMENT_OR_NULL (or ArgumentOrNull if it can be an inline function) would be one possible name. Not great, but better than the two we used in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836019</commentid>
    <comment_count>4</comment_count>
      <attachid>189002</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-18 23:27:22 -0800</bug_when>
    <thetext>Created attachment 189002
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836021</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-18 23:28:07 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 188494 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188494&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/js/JSDOMBinding.h:62
&gt; &gt;&gt; +#define MissingIsNullString(exec, index) (((index) &gt;= (exec)-&gt;argumentCount()) ? (JSValue()) : ((exec)-&gt;argument(index)))
&gt; &gt; 
&gt; &gt; Same comment.  This should probably be an inline function.  If it can&apos;t be an inline function, we should keep the ALL_CAPS name.
&gt; 
&gt; Further, both the names MAYBE_MISSING_PARAMETER and MissingIsNullString are examples of the kind of confusing names we try to avoid. A function should be named after its return value. And even though it’s used to implement DefaultIsNullString, this does not return a string, so it’s really confusing to mention string in its name.
&gt; 
&gt; ARGUMENT_OR_NULL (or ArgumentOrNull if it can be an inline function) would be one possible name. Not great, but better than the two we used in the past.

Thanks, changed it to an inline function and renamed it to argumentOrNull().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836062</commentid>
    <comment_count>6</comment_count>
      <attachid>189002</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 00:13:55 -0800</bug_when>
    <thetext>Comment on attachment 189002
patch for landing

Clearing flags on attachment: 189002

Committed r143304: &lt;http://trac.webkit.org/changeset/143304&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836063</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 00:13:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836070</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Brianceau">jbriance</who>
    <bug_when>2013-02-19 00:20:56 -0800</bug_when>
    <thetext>This patch breaks our SH4 build slave: http://build.webkit.org/builders/Qt%20Linux%20SH4%20Release/builds/20416</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836071</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 00:21:33 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; This patch breaks our SH4 build slave: http://build.webkit.org/builders/Qt%20Linux%20SH4%20Release/builds/20416

Sorry, looking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836078</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 00:25:50 -0800</bug_when>
    <thetext>Fixed the build error in r143306.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836103</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Brianceau">jbriance</who>
    <bug_when>2013-02-19 01:03:02 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Fixed the build error in r143306.
Thanks a lot !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836113</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-19 01:24:32 -0800</bug_when>
    <thetext>Landed another build fix in r143309.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836144</commentid>
    <comment_count>13</comment_count>
      <attachid>189002</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-19 02:07:06 -0800</bug_when>
    <thetext>Comment on attachment 189002
patch for landing

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2758
&gt; +            push(@$outputArray, &quot;    &quot; . GetNativeTypeFromSignature($parameter) . &quot; $name(&quot; . JSValueToNative($parameter, $optional eq &quot;DefaultIsNullString&quot; ? &quot;argumentOrNull(exec, $argsIndex)&quot; : &quot;exec-&gt;argument($argsIndex)&quot;) . &quot;);\n&quot;);

It caused the following warning:
Use of uninitialized value $optional in string eq at /home/oszi/WebKit/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm line 2758.

Could you check and fix it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836150</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-19 02:09:30 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 189002 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189002&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2758
&gt; &gt; +            push(@$outputArray, &quot;    &quot; . GetNativeTypeFromSignature($parameter) . &quot; $name(&quot; . JSValueToNative($parameter, $optional eq &quot;DefaultIsNullString&quot; ? &quot;argumentOrNull(exec, $argsIndex)&quot; : &quot;exec-&gt;argument($argsIndex)&quot;) . &quot;);\n&quot;);
&gt; 
&gt; It caused the following warning:
&gt; Use of uninitialized value $optional in string eq at /home/oszi/WebKit/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm line 2758.
&gt; 
&gt; Could you check and fix it, please?

See the Qt bot for details:
http://build.webkit.org/builders/Qt%20Linux%20Release/builds/57635/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836187</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-19 03:20:01 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 189002 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189002&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2758
&gt; &gt; &gt; +            push(@$outputArray, &quot;    &quot; . GetNativeTypeFromSignature($parameter) . &quot; $name(&quot; . JSValueToNative($parameter, $optional eq &quot;DefaultIsNullString&quot; ? &quot;argumentOrNull(exec, $argsIndex)&quot; : &quot;exec-&gt;argument($argsIndex)&quot;) . &quot;);\n&quot;);
&gt; &gt; 
&gt; &gt; It caused the following warning:
&gt; &gt; Use of uninitialized value $optional in string eq at /home/oszi/WebKit/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm line 2758.
&gt; &gt; 
&gt; &gt; Could you check and fix it, please?
&gt; 
&gt; See the Qt bot for details:
&gt; http://build.webkit.org/builders/Qt%20Linux%20Release/builds/57635/steps/compile-webkit/logs/stdio

Fixed by https://trac.webkit.org/changeset/143308</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836188</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-19 03:20:24 -0800</bug_when>
    <thetext>Additionally it broke the bindings tests on all bot. Could you fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836701</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-19 13:07:58 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Additionally it broke the bindings tests on all bot. Could you fix it?

ping for fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836704</commentid>
    <comment_count>18</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-19 13:09:41 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Additionally it broke the bindings tests on all bot. Could you fix it?
&gt; 
&gt; ping for fix?

Fixed in r143374. Sorry for late.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188494</attachid>
            <date>2013-02-14 23:45:12 -0800</date>
            <delta_ts>2013-02-18 23:27:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109902-20130215164138.patch</filename>
            <type>text/plain</type>
            <size>62225</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI2MzUwMTk0NmZkOGVk
OTdkODkzYzczMTc4NDM5M2FiM2NiYjFjMy4uMWMyYTFkNjVmNzVlNDUwYmNiNzVmOTNjMTdiMjYw
ZWUyMWI2YTVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0wMi0xNCAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0pTQ10gTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoLi4uLCBEZWZhdWx0SXNOdWxsU3RyaW5nKSBtYWNybyBpcyByZWR1
bmRhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
OTkwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1
cnJlbnRseToKKworICAgICAgICAtIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIGluZGV4
LCBEZWZhdWx0SXNVbmRlZmluZWQpCisgICAgICAgICAgcmV0dXJucyBleGVjLT5hcmd1bWVudChp
bmRleCkuCisgICAgICAgIC0gTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgaW5kZXgsIERl
ZmF1bHRJc051bGxTdHJpbmcpCisgICAgICAgICAgcmV0dXJucyBKU1ZhbHVlKCkgaWYgZXhlYy0+
YXJndW1lbnQoaW5kZXgpIGlzIG1pc3NpbmcKKyAgICAgICAgICAoaS5lLiB0aGUgbGVuZ3RoIG9m
IHRoZSBhcmd1bWVudCBpcyBsZXNzIHRoYW4gaW5kZXgpLgorICAgICAgICAgIEl0IHJldHVybnMg
ZXhlYy0+YXJndW1lbnQoaW5kZXgpIG90aGVyd2lzZS4KKworICAgICAgICBObyBvbmUgb3RoZXIg
dGhhbiBDb2RlR2VuZXJhdG9ySlMucG0gdXNlcworICAgICAgICBNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCBpbmRleCwgRGVmYXVsdElzVW5kZWZpbmVkKS4KKyAgICAgICAgSW5zdGVhZCwg
d2Ugc2ltcGx5IHVzZSBleGVjLT5hcmd1bWVudChpbmRleCkuIFdlIHNob3VsZCByZW1vdmUKKyAg
ICAgICAgdGhlIHJlZHVuZGFudCB1c2FnZSBpbiBDb2RlR2VuZXJhdG9ySlMucG0gdG9vLiBUaGUg
bG9uZy1uYW1lIG1hY3JvCisgICAgICAgIGhhcyBiZWVuIG1ha2luZyBnZW5lcmF0ZWQgY29kZSBs
ZXNzIHJlYWRhYmxlLgorCisgICAgICAgIEluIGFkZGl0aW9uLCB3ZSBjYW4gcmVuYW1lIE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKCkgdG8gTWlzc2luZ0lzTnVsbFN0cmluZygpLgorCisgICAgICAg
IGMuZi4gY29ycmVzcG9uZGluZyBWOCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDk4OTkKKworICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToK
KyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNG
bG9hdDY0QXJyYXlQcm90b3R5cGVGdW5jdGlvbkZvbyk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rp
b25Qb3N0TWVzc2FnZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0SlNUZXN0SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
TmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRo
QXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1l
dGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2Vy
aWFsaXplZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3B0aW9uc09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nSXNVbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q4KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTApOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QxMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b252ZXJ0MSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
dmVydDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252
ZXJ0NSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmlj
dEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VmFyaWFkaWNTdHJpbmdNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
NCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uQWNjZXB0VHJhbnNmZXJM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTXVsdGlUcmFu
c2Zlckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZUFycmF5QXJnKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdBcnJheUZ1bmN0aW9uMik6CisKIDIwMTMtMDItMTQgIEFuZHJleSBBZGFpa2luICA8YWFuZHJl
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXNlIEdMIHR5cGVkZWZzIGluIFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgK
aW5kZXggZjNiOGU1ZTRiZGNmYzE4MmZhYWRhZDJiYWI1YmY1YmViNWVmNmY5Yi4uZDUwOTI0ODdh
YmUwOTk0ZWE3NTIyNWFjOTFhZTc4NGQwMTliOWNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKQEAgLTU5LDEyICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAotZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5
IHsKLSAgICBEZWZhdWx0SXNVbmRlZmluZWQsCi0gICAgRGVmYXVsdElzTnVsbFN0cmluZwotfTsK
LQotI2RlZmluZSBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCBpbmRleCwgcG9saWN5KSAo
KChwb2xpY3kpID09IERlZmF1bHRJc051bGxTdHJpbmcgJiYgKGluZGV4KSA+PSAoZXhlYyktPmFy
Z3VtZW50Q291bnQoKSkgPyAoSlNWYWx1ZSgpKSA6ICgoZXhlYyktPmFyZ3VtZW50KGluZGV4KSkp
CisjZGVmaW5lIE1pc3NpbmdJc051bGxTdHJpbmcoZXhlYywgaW5kZXgpICgoKGluZGV4KSA+PSAo
ZXhlYyktPmFyZ3VtZW50Q291bnQoKSkgPyAoSlNWYWx1ZSgpKSA6ICgoZXhlYyktPmFyZ3VtZW50
KGluZGV4KSkpCiAKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQ7CiAgICAgY2xhc3MgRnJhbWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CmluZGV4IDcwNTYxYTZhZmU2OGU5YmJlZTA1Yzg0YWFhZTQ3NWZjMGYwZjI2ZDMuLmUwYzgyMWFi
OGE4ZjYwYzc1MjgwOGEwYzU5YThlODFiNTVlZjM4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0yNzU1LDEyICsyNzU1
LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBteSAkcGFyYW1ldGVyRGVmYXVsdFBvbGljeSA9ICJE
ZWZhdWx0SXNVbmRlZmluZWQiOwotICAgICAgICAgICAgaWYgKCRvcHRpb25hbCBhbmQgJG9wdGlv
bmFsIGVxICJEZWZhdWx0SXNOdWxsU3RyaW5nIikgewotICAgICAgICAgICAgICAgICRwYXJhbWV0
ZXJEZWZhdWx0UG9saWN5ID0gIkRlZmF1bHRJc051bGxTdHJpbmciOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgIiAuIEdldE5hdGl2ZVR5cGVG
cm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRw
YXJhbWV0ZXIsICJNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAkYXJnc0luZGV4LCAkcGFy
YW1ldGVyRGVmYXVsdFBvbGljeSkiKSAuICIpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIp
IC4gIiAkbmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICRvcHRpb25hbCBlcSAi
RGVmYXVsdElzTnVsbFN0cmluZyIgPyAiTWlzc2luZ0lzTnVsbFN0cmluZyhleGVjLCAkYXJnc0lu
ZGV4KSIgOiAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICIpO1xuIik7CiAKICAgICAg
ICAgICAgICMgSWYgYSBwYXJhbWV0ZXIgaXMgImFuIGluZGV4IiBhbmQgaXQncyBuZWdhdGl2ZSBp
dCBzaG91bGQgdGhyb3cgYW4gSU5ERVhfU0laRV9FUlIgZXhjZXB0aW9uLgogICAgICAgICAgICAg
IyBCdXQgdGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUg
dHlwZSBpcyB1bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAK
aW5kZXggNTU5MWMzMWM3YTU0ODA4Zjg3YjQ5NmUxMjMwNzRlY2IxN2IwZmU1My4uNjVkNWFjMDhh
ZGEyYzcwZTk0OTNlZWUxYjc4OTc0MDBjNTkzZGZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCkBA
IC0yNTksNyArMjU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0Zsb2F0NjRB
cnJheVByb3RvdHlwZUZ1bmN0aW9uRm9vKEV4ZWNTdGF0ZSogZXhlYykKICAgICBGbG9hdDY0QXJy
YXkqIGltcGwgPSBzdGF0aWNfY2FzdDxGbG9hdDY0QXJyYXkqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAg
ICBGbG9hdDMyQXJyYXkqIGFycmF5KHRvRmxvYXQzMkFycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBGbG9hdDMyQXJyYXkqIGFy
cmF5KHRvRmxvYXQzMkFycmF5KGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDZiNTE3M2NhN2Ji
ZjEzY2NkZjQ4NjAxMDdmNDdiZDk1YWJhNzdmNDEuLmYyODEyMzA2ZjcxZmJhM2Q4YjkxMDQzMDgz
ODc4MDMwODE2NTY4ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0x
ODcsNyArMTg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3QKICAgICBUZXN0QWN0aXZlRE9N
T2JqZWN0KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdEFjdGl2ZURPTU9iamVjdCo+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIE5vZGUqIG5leHRDaGlsZCh0b05vZGUoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIE5vZGUqIG5leHRDaGlsZCh0
b05vZGUoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC0+ZXhjaXRpbmdGdW5jdGlvbihuZXh0Q2hpbGQpOwpAQCAtMjA0LDcgKzIwNCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVu
Y3Rpb25Qb3N0TWVzc2FnZShFCiAgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCA9IHN0YXRp
Y19jYXN0PFRlc3RBY3RpdmVET01PYmplY3QqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKKyAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgp
ID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5wb3N0TWVzc2FnZShtZXNzYWdl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IGM0ZWE2NTY1MWE1
YjRmMDJjMGVkYjVjYmY4ODJhMDJhZTE3MzkzN2IuLjc1YTJjZDE0ZWQ4YzE0NTRhODUyNjBlZDZm
NDc3NzZlZTZlZTIwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApA
QCAtMTg4LDcgKzE4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jCiAgICAgVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6
IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cihleGVjLT5h
cmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwt
PmFub3RoZXJGdW5jdGlvbihzdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggMzQ3
NjljNGQ0YjI5MjVhNjVjMWMyMjU5MzE3OTA3ZjI1NmE2NTA4YS4uOGQwNjRlYWE1ZWNiMmNlZTMw
NTg5NzM1ZWE1YTZlMWU2ODgyMzRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0y
MzQsNyArMjM0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIGUKICAgICBUZXN0RXZlbnRUYXJn
ZXQqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0RXZlbnRUYXJnZXQqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBpbnQgaW5kZXgoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKS50b1VJbnQzMihleGVjKSk7CisgICAgaW50IGluZGV4KGV4ZWMtPmFyZ3VtZW50
KDApLnRvVUludDMyKGV4ZWMpKTsKICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yODcsNyArMjg3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0
Y2hFdmVudChFeGUKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRXZlbnQqIGV2dCh0b0V2ZW50
KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsK
KyAgICBFdmVudCogZXZ0KHRvRXZlbnQoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggYjQ2NjgwNzI3MWEyNThiNjdi
N2YyNmUxMDI5MDYwNzQ4N2EzMDRiNy4uMzQzNjVjNGRhZmVlZTc3MGZiYWQ3MWIzYmU0NjA0MWY5
NjIwNTRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTEwNiwxMCArMTA2LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEpTVGVzdEludGVyZmFjCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNvbnN0IFN0
cmluZyYgc3RyMShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwor
ICAgIGNvbnN0IFN0cmluZyYgc3RyMShleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyMihNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVk
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyMihl
eGVjLT5hcmd1bWVudCgxKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CkBAIC00MTAsMTAgKzQxMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0
aG9kMgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGNvbnN0IFN0cmluZyYgc3Ry
QXJnKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCku
aXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29u
c3QgU3RyaW5nJiBzdHJBcmcoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBUZXN0T2Jq
KiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5k
ZXggYjQ2NjljNDZkM2Q0ZDdiYjQyYjM2MDMwYTFhOWQ5ZDliNWJiY2FjMi4uYzk0N2ZkZjliYzBl
ZGQ2ZWQ0YmNiZDdlOTc2NGIxYzEwMzU5NTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kCiAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFJl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyOjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkpOworICAgIFJlZlB0cjxN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpj
cmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5hcmd1bWVudCgwKSkp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kKGxpc3RlbmVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCA0YTg4ZjVhMWViMTZmYzg4NDZi
Yjc5M2EzY2VjMWI2MmFhN2QwMWUzLi5iYjEzMThjYTFlMWRlOTM3ODM5OTQ5MjUxNTA1NGUzMGIy
YWE4NGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC03OCwxMyAr
NzgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlMKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgY29uc3QgU3RyaW5nJiBzdHIxKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHIxKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1w
dHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIyKE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0
eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0
SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3Ry
aW5nJiBzdHIyKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+
YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIzKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4
ZWMsIDIsIERlZmF1bHRJc051bGxTdHJpbmcpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwgRGVmYXVsdElzTnVsbFN0cmluZykudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cjMoTWlzc2luZ0lzTnVs
bFN0cmluZyhleGVjLCAyKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1pc3NpbmdJc051bGxTdHJp
bmcoZXhlYywgMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBvYmplY3QgPSBUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihjYXN0ZWRUaGlzLT5kb2N1bWVu
dCgpLCBzdHIxLCBzdHIyLCBzdHIzLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGZkZjBjM2U0YjY4N2Iz
NWE3MzU2OWI4NGQwNjRiN2FiMDUyY2RmNmMuLjlhMWEzODgyMTkzYzc3N2YxNWMxMWJmYzNkOWVl
ODRiMGE5Mzk2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xNDU5LDEzICsxNDU5LDEzIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9k
V2l0aEFyZ3MoRXhlY1N0CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAz
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvSW50MzIoZXhlYykpOworICAgIGludCBs
b25nQXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFyZ3Vt
ZW50KDEpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiog
b2JqQXJnKHRvVGVzdE9iaihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZhdWx0
SXNVbmRlZmluZWQpKSk7CisgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1
bWVudCgyKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT52b2lkTWV0aG9kV2l0
aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpOwpAQCAtMTQ5NSwxMyArMTQ5NSwxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9u
Z01ldGhvZFdpdGhBcmdzKEV4ZWNTdAogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IGxvbmdBcmcoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAg
ICBpbnQgbG9uZ0FyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6
IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVj
LT5hcmd1bWVudCgxKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRl
c3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwg
RGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooZXhl
Yy0+YXJndW1lbnQoMikpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTE1MzIsMTMgKzE1
MzIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBUZXN0T2JqKiBpbXBsID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBsb25nQXJnKE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihl
eGVjKSk7CisgICAgaW50IGxvbmdBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBz
dHJBcmcoZXhlYy0+YXJndW1lbnQoMSkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1
bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGV4ZWMsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcodG9U
ZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC0x
NTU2LDcgKzE1NTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnKEV4ZQogICAgIFRlc3RPYmoqIGlt
cGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxTY3JpcHRQcm9maWxlPiA+IHNlcXVlbmNlQXJnKCh0b1JlZlB0ck5hdGl2ZUFycmF5PFNj
cmlwdFByb2ZpbGUsIEpTU2NyaXB0UHJvZmlsZT4oZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgJnRvU2NyaXB0UHJvZmlsZSkpKTsKKyAg
ICBWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gc2VxdWVuY2VBcmcoKHRvUmVmUHRyTmF0
aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwgSlNTY3JpcHRQcm9maWxlPihleGVjLCBleGVjLT5hcmd1
bWVudCgwKSwgJnRvU2NyaXB0UHJvZmlsZSkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKHNlcXVlbmNlQXJnKTsKQEAgLTE1NzMsNyArMTU3
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShFCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyhNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvSW50MzIoZXhl
YykpOworICAgIGludCBsb25nQXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMTU5MiwxMCArMTU5MiwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJncwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb25zdCBTdHJpbmcmIHN0
ckFyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
LmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNv
bnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVGVzdE9i
aiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgxKSkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIApAQCAtMTYxNCw3ICsxNjE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUKICAg
ICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywg
MCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgMCwgMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCksIDAsIDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC0+c2VyaWFsaXplZFZhbHVlKHNlcmlhbGl6ZWRBcmcpOwpAQCAtMTYzMSwxMCArMTYzMSwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBEaWN0aW9uYXJ5IG9vKGV4ZWMsIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAg
IERpY3Rpb25hcnkgb28oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBEaWN0aW9uYXJ5IG9vbyhleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBEaWN0aW9uYXJ5IG9vbyhleGVjLCBl
eGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm9wdGlv
bnNPYmplY3Qob28sIG9vbyk7CkBAIC0xODU5LDcgKzE4NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
QXJnKEV4ZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KIAotICAgIGludCBvcHQoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgb3B0KGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5t
ZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0KTsKQEAgLTE4NzYsNyArMTg3Niw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbm9uT3B0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7CisgICAgaW50IG5v
bk9wdChleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKQEAgLTE4ODYsNyArMTg4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAg
aW50IG9wdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpLnRvSW50MzIoZXhlYykpOworICAgIGludCBvcHQoZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbk9wdCwgb3B0KTsKQEAgLTE5MDMsNyArMTkwMyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbm9uT3B0KE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7
CisgICAgaW50IG5vbk9wdChleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKQEAgLTE5MTMsNyArMTkxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCi0gICAgaW50IG9wdDEoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVm
YXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgb3B0MShleGVjLT5hcmd1
bWVudCgxKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGFy
Z3NDb3VudCA8PSAyKSB7CkBAIC0xOTIxLDcgKzE5MjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIAotICAgIGludCBvcHQyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1
bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7CisgICAgaW50IG9wdDIoZXhlYy0+YXJndW1l
bnQoMikudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEsIG9w
dDIpOwpAQCAtMTk0Myw3ICsxOTQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZygKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBj
b25zdCBTdHJpbmcmIHN0cihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0
SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nKHN0cik7CkBAIC0xOTU4LDcgKzE5NTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSQog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0
aGlzVmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZK
U1Rlc3RPYmo6OnNfaW5mbyk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBz
dHIoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChzdHIpOwpAQCAt
MTk3Myw3ICsxOTczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0kKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2lu
Zm8pOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0cihNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAwLCBEZWZhdWx0SXNOdWxsU3RyaW5nKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc051bGxTdHJpbmcpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHIoTWlzc2luZ0lz
TnVsbFN0cmluZyhleGVjLCAwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1pc3NpbmdJc051bGxT
dHJpbmcoZXhlYywgMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5n
KHN0cik7CkBAIC0yMDA3LDcgKzIwMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQQogICAg
IFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0g
ICAgaW50IG5vbkNhbGxiYWNrKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7CisgICAgaW50IG5vbkNhbGxiYWNrKGV4ZWMt
PmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDEgfHwgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzRnVu
Y3Rpb24oKSkKQEAgLTIwOTEsMTAgKzIwOTEsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMSgK
ICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
ZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rl
c3RPYmooZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29u
c3QgU3RyaW5nJiBzdHJBcmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVs
dElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVjLT5hcmd1bWVudCgxKS5pc0VtcHR5
KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm92ZXJsb2FkZWRNZXRob2Qo
b2JqQXJnLCBzdHJBcmcpOwpAQCAtMjExMSw3ICsyMTExLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMigKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFRlc3RPYmoqIG9iakFy
Zyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
QEAgLTIxMjEsNyArMjEyMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIoCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgaW50IGxv
bmdBcmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVk
KS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgbG9uZ0FyZyhleGVjLT5hcmd1bWVudCgxKS50b0lu
dDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+b3ZlcmxvYWRlZE1l
dGhvZChvYmpBcmcsIGxvbmdBcmcpOwpAQCAtMjEzOCw3ICsyMTM4LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMygKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoZXhl
Yy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLT5vdmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q0KAogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0
T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IGxvbmdBcmcoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBp
bnQgbG9uZ0FyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC0+b3ZlcmxvYWRlZE1ldGhvZChsb25nQXJnKTsKQEAgLTIxODks
NyArMjE4OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoCiAgICAgVGVzdE9iaiogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gbGlzdEFyZyh0b0RPTVN0cmluZ0xpc3QoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBsaXN0QXJnKHRvRE9NU3RyaW5nTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5vdmVybG9hZGVkTWV0aG9kKGxpc3RB
cmcpOwpAQCAtMjIwNiw3ICsyMjA2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNygKICAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnKHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
VmVjdG9yPFN0cmluZz4gYXJyYXlBcmcodG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm92ZXJsb2Fk
ZWRNZXRob2QoYXJyYXlBcmcpOwpAQCAtMjIyMyw3ICsyMjIzLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kOCgKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFRlc3RPYmoqIG9i
akFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcpOwpAQCAtMjI0MCw3ICsyMjQwLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOSgKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJn
KHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmco
dG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm92ZXJsb2FkZWRNZXRob2QoYXJyYXlBcmcpOwpAQCAt
MjI1Nyw3ICsyMjU3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTAKICAgICBUZXN0T2JqKiBp
bXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3Rvcjx1
bnNpZ25lZD4gYXJyYXlBcmcodG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhlYywgTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gYXJyYXlBcmcodG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+b3ZlcmxvYWRl
ZE1ldGhvZChhcnJheUFyZyk7CkBAIC0yMjc0LDcgKzIyNzQsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMQogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVjLT5h
cmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwt
Pm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKQEAgLTIzMjksNyArMjMyOSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0
aG9kV2l0aE9wdGlvbmFsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
ICAgICB9CiAKLSAgICBpbnQgYXJnKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7CisgICAgaW50IGFyZyhleGVjLT5hcmd1
bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTIzNDks
NyArMjM0OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kCiB7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBhcmcoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMp
KTsKKyAgICBpbnQgYXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShhcmcpOwpAQCAt
MjM2Myw3ICsyMzYzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QKIHsKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5n
JiB0eXBlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAg
Y29uc3QgU3RyaW5nJiB0eXBlKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEodHlwZSk7CkBA
IC0yNDI1LDcgKzI0MjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcQogICAgIFRlc3RPYmoq
IGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9y
PHVuc2lnbmVkPiB1bnNpZ25lZExvbmdTZXF1ZW5jZSh0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihl
eGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiB1bnNpZ25lZExvbmdTZXF1ZW5jZSh0b05hdGl2ZUFy
cmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLT5tZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UodW5zaWduZWRM
b25nU2VxdWVuY2UpOwpAQCAtMjQ0Myw3ICsyNDQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oRXhl
Y1MKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzKHRvTmF0
aXZlQXJyYXk8U3RyaW5nPihleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzKHRvTmF0aXZl
QXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIApAQCAtMjQ2Myw3ICsyNDYzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbihFeGUKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlcyh0b0RP
TVN0cmluZ0xpc3QoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVs
dElzVW5kZWZpbmVkKSkpOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiB2YWx1ZXModG9ET01T
dHJpbmdMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCkBAIC0yNDk5LDcgKzI0OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDEoRXhlY1N0YXRlKiBleGVjKQogICAgIFRl
c3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAg
YSogdmFsdWUodG9hKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkpKTsKKyAgICBhKiB2YWx1ZSh0b2EoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+Y29udmVydDEodmFsdWUpOwpAQCAtMjUxNiw3ICsy
NTE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQyKEV4ZWNTdGF0ZSogZXhlYykKICAgICBUZXN0T2JqKiBpbXBsID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGIqIHZhbHVlKHRvYihNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
YiogdmFsdWUodG9iKGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwtPmNvbnZlcnQyKHZhbHVlKTsKQEAgLTI1MzMsNyArMjUzMyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBkKiB2YWx1ZSh0b2QoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIGQqIHZhbHVlKHRvZChleGVj
LT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5jb252ZXJ0
NCh2YWx1ZSk7CkBAIC0yNTUwLDcgKzI1NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDUoRXhlY1N0YXRlKiBleGVjKQog
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
Ci0gICAgZSogdmFsdWUodG9lKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBlKiB2YWx1ZSh0b2UoZXhlYy0+YXJndW1lbnQoMCkpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+Y29udmVydDUodmFsdWUpOwpAQCAtMjYw
NiwxMyArMjYwNiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU3RyaWN0RnVuY3Rpb24oRXhlY1N0YXRlKgogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBjb25zdCBTdHJpbmcmIHN0cihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyKGV4ZWMtPmFyZ3VtZW50KDAp
LmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZmxvYXQgYShNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvRmxvYXQoZXhl
YykpOworICAgIGZsb2F0IGEoZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIGludCBiKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMs
IDIsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7CisgICAgaW50IGIoZXhlYy0+
YXJndW1lbnQoMikudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC0y
NjMxLDcgKzI2MzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QoRXhlYwogICAgIFRlc3RPYmoqIGlt
cGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgY29uc3QgU3Ry
aW5nJiBoZWFkKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVm
aW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Cisg
ICAgY29uc3QgU3RyaW5nJiBoZWFkKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFpbCA9IHRvTmF0aXZlQXJn
dW1lbnRzPFN0cmluZz4oZXhlYywgMSk7CkBAIC0yNjUxLDcgKzI2NTEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3Vi
bGVNZXRob2QoRXhlYwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7Ci0gICAgZG91YmxlIGhlYWQoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
ZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b051bWJlcihleGVjKSk7CisgICAgZG91Ymxl
IGhlYWQoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBWZWN0b3I8ZG91YmxlPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91Ymxl
PihleGVjLCAxKTsKQEAgLTI2NzEsNyArMjY3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoRXhlY1N0
CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICBOb2RlKiBoZWFkKHRvTm9kZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgTm9kZSogaGVhZCh0b05vZGUoZXhlYy0+YXJn
dW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPE5vZGUqPiB0YWls
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGEz
Njk4ZTAwMzg0ZDFiNWJkOTE2OTJkMmZkM2U4MjUxYzI0YWY3ZmUuLmQxY2QzMjM0ZGM0N2MyOTFh
ODEyM2FiYmJiNGMzMjQzNTNmOWExZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVj
dEoKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oZXhl
Yy0+Y2FsbGVlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKLSAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIodG9BcnJheUJ1ZmZlcihNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKHRvQXJyYXlCdWZmZXIoZXhlYy0+YXJndW1lbnQoMCkp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzPiBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKGFycmF5
QnVmZmVyKTsKQEAgLTY4LDcgKzY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEoKICAgICBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldyh0b0FycmF5QnVmZmVyVmlldyhN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Cisg
ICAgQXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcodG9BcnJheUJ1ZmZlclZpZXcoZXhl
Yy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUmVmUHRyPFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzPiBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6Y3JlYXRlKGFycmF5QnVmZmVyVmlldyk7CkBAIC04MCw3ICs4MCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKCiAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0gICAgQmxvYiogYmxvYih0b0Jsb2IoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIEJsb2IqIGJsb2Io
dG9CbG9iKGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJl
ZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OmNyZWF0ZShibG9iKTsKQEAgLTkyLDcgKzkyLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6
OmNvbnN0cnVjdEoKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Iq
IGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0cmluZyhNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVk
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiBvYmplY3QgPSBUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKHN0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDM2NTZlZTcyMGNl
OGI2OTUzZmIwN2IxNmU0ODNhOWJkYTNhODYzZmQuLmUxNmVmMzQyZDljZDM2OGRlNjIzNWI5NGI3
ZDRlYzE0N2Q1OTc0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC02NiwxMyArNjYsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6Y28KICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBoZWxs
byhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0
IFN0cmluZyYgaGVsbG8oZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4
ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCksIDAsIDApKTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBkYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDEpLCAwLCAwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEFycmF5
KiB0cmFuc2Zlckxpc3QodG9BcnJheShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgQXJyYXkqIHRyYW5zZmVyTGlzdCh0b0FycmF5KGV4
ZWMtPmFyZ3VtZW50KDIpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIGRhdGEsIHRyYW5zZmVyTGlzdCk7CkBA
IC0yODUsNyArMjg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGkKICAgICBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhl
YywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwg
MCwgMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIDAsIDApKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTI5NSw3ICsyOTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZUZ1bmN0aQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KIAotICAgIEFycmF5KiB0cmFuc2Zlckxpc3QodG9BcnJheShNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgQXJyYXkqIHRyYW5z
ZmVyTGlzdCh0b0FycmF5KGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwtPmFjY2VwdFRyYW5zZmVyTGlzdChkYXRhLCB0cmFuc2Zlckxpc3QpOwpAQCAt
MzE3LDcgKzMxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3RpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZmlyc3QoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhl
YywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSwg
MCwgMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGZpcnN0KFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAwLCAwKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewpAQCAtMzI1LDcg
KzMyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3RpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgQXJyYXkqIHR4KHRvQXJyYXko
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwor
ICAgIEFycmF5KiB0eCh0b0FycmF5KGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMikgewpAQCAtMzMzLDcgKzMzMyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlRnVuY3RpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
c2Vjb25kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCksIDAsIDApKTsKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZWNvbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIDAsIDApKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAzKSB7CkBAIC0zNDEsNyArMzQxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKLSAgICBBcnJheSogdHh4KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMywgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIEFycmF5KiB0eHgo
dG9BcnJheShleGVjLT5hcmd1bWVudCgzKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJzdCwgdHgsIHNlY29uZCwgdHh4KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCmluZGV4IDYwNjljNDExZjllM2IxNzFjYTIzZjFjMzMwOWZlYzE4ZGFjMDY4YTku
LmFjNTAwYjVlNzZkZGI4OTBiNmNhZDYyZGUyYmRiMTdhM2JkMDYyNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcApAQCAtNzEsNyArNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdFR5cGVkZWZzKAogICAgIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBoZWxsbyhNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHko
KSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmlu
ZyYgaGVsbG8oZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDEgfHwgIWV4ZWMtPmFyZ3Vt
ZW50KDEpLmlzRnVuY3Rpb24oKSkKQEAgLTM1NSw3ICszNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEV4ZWNTdGF0
ZSogZXhlYwogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDAgJiYgIWV4ZWMtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmluaGVy
aXRzKCZKU2xvbmdbXTo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7Ci0gICAgVmVjdG9yPGludD4geCh0b05hdGl2ZUFycmF5PGludD4oZXhlYywgTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFZl
Y3RvcjxpbnQ+IHgodG9OYXRpdmVBcnJheTxpbnQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPmZ1bmMoeCk7CkBAIC0zNzIsNyArMzcy
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3QoRXgKICAgICBUZXN0VHlwZWRlZnMqIGltcGwgPSBz
dGF0aWNfY2FzdDxUZXN0VHlwZWRlZnMqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBmaXJzdChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShl
eGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
LCAwLCAwKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZmlyc3QoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIDAsIDApKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTM4Miw3ICszODIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NdWx0aVRyYW5z
ZmVyTGlzdChFeAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KIAotICAgIEFycmF5KiB0eCh0b0FycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBBcnJheSogdHgodG9BcnJheShl
eGVjLT5hcmd1bWVudCgxKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50IDw9IDIpIHsKQEAgLTM5MCw3ICszOTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NdWx0aVRyYW5zZmVyTGlzdChFeAog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAot
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlY29uZChTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZh
dWx0SXNVbmRlZmluZWQpLCAwLCAwKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2Vjb25kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDIpLCAwLCAwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChhcmdzQ291bnQg
PD0gMykgewpAQCAtMzk4LDcgKzM5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk11bHRpVHJhbnNmZXJMaXN0KEV4CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAg
QXJyYXkqIHR4eCh0b0FycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDMsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBBcnJheSogdHh4KHRvQXJyYXkoZXhlYy0+YXJndW1lbnQo
MykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bXVsdGlUcmFuc2Zlckxpc3Qo
Zmlyc3QsIHR4LCBzZWNvbmQsIHR4eCk7CkBAIC00MTUsMTMgKzQxNSwxMyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFk
b3coRXhlY1N0YXRlKgogICAgIFRlc3RUeXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RU
eXBlZGVmcyo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGZsb2F0IHdpZHRoKE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9GbG9hdChleGVjKSk7Cisg
ICAgZmxvYXQgd2lkdGgoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGZsb2F0IGhlaWdodChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvRmxvYXQoZXhlYykpOworICAgIGZsb2F0IGhl
aWdodChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgZmxvYXQgYmx1cihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZh
dWx0SXNVbmRlZmluZWQpLnRvRmxvYXQoZXhlYykpOworICAgIGZsb2F0IGJsdXIoZXhlYy0+YXJn
dW1lbnQoMikudG9GbG9hdChleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC00MzEs
NyArNDMxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93KEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIGNv
bG9yKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDMsIERlZmF1bHRJc1VuZGVmaW5lZCku
aXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAzLCBE
ZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29u
c3QgU3RyaW5nJiBjb2xvcihleGVjLT5hcmd1bWVudCgzKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6
IGV4ZWMtPmFyZ3VtZW50KDMpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGlmIChhcmdzQ291bnQgPD0gNCkgewpAQCAtNDM5LDcgKzQzOSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblNldFNoYWRvdyhFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgZmxvYXQgYWxwaGEoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgNCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0Zsb2F0KGV4ZWMpKTsK
KyAgICBmbG9hdCBhbHBoYShleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+c2V0U2hhZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIs
IGNvbG9yLCBhbHBoYSk7CkBAIC00NTYsNyArNDU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNl
QXIKICAgICBUZXN0VHlwZWRlZnMqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0VHlwZWRlZnMqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+
IHNlcXVlbmNlQXJnKCh0b1JlZlB0ck5hdGl2ZUFycmF5PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwg
SlNTZXJpYWxpemVkU2NyaXB0VmFsdWU+KGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4
ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksICZ0b1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkpKTsK
KyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IHNlcXVlbmNlQXJnKCh0
b1JlZlB0ck5hdGl2ZUFycmF5PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgSlNTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAmdG9TZXJpYWxpemVkU2NyaXB0VmFs
dWUpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC00NzQsNyArNDc0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVBcnJheUFyZyhFeGUKICAgICBUZXN0VHlwZWRlZnMqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0VHlwZWRlZnMqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFy
Zyh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJn
KHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5udWxsYWJsZUFycmF5QXJnKGFycmF5QXJnKTsKQEAg
LTU0Miw3ICs1NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKAogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4
ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC01NjIsNyAr
NTYyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbjIKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzKHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
VmVjdG9yPFN0cmluZz4gdmFsdWVzKHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBleGVjLT5h
cmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189002</attachid>
            <date>2013-02-18 23:27:22 -0800</date>
            <delta_ts>2013-02-19 02:07:06 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-109902-20130219162344.patch</filename>
            <type>text/plain</type>
            <size>62563</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI2MzUwMTk0NmZkOGVk
OTdkODkzYzczMTc4NDM5M2FiM2NiYjFjMy4uMzU4MjJhZjc3NmI1NDQ2YTRmNzgzMDE3MzFmNjI1
YTFiZTkzZWVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0wMi0xNCAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0pTQ10gTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoLi4uLCBEZWZhdWx0SXNOdWxsU3RyaW5nKSBtYWNybyBpcyByZWR1
bmRhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
OTkwMgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgQ3VycmVu
dGx5OgorCisgICAgICAgIC0gTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgaW5kZXgsIERl
ZmF1bHRJc1VuZGVmaW5lZCkKKyAgICAgICAgICByZXR1cm5zIGV4ZWMtPmFyZ3VtZW50KGluZGV4
KS4KKyAgICAgICAgLSBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCBpbmRleCwgRGVmYXVs
dElzTnVsbFN0cmluZykKKyAgICAgICAgICByZXR1cm5zIEpTVmFsdWUoKSBpZiBleGVjLT5hcmd1
bWVudChpbmRleCkgaXMgbWlzc2luZworICAgICAgICAgIChpLmUuIHRoZSBsZW5ndGggb2YgdGhl
IGFyZ3VtZW50IGlzIGxlc3MgdGhhbiBpbmRleCkuCisgICAgICAgICAgSXQgcmV0dXJucyBleGVj
LT5hcmd1bWVudChpbmRleCkgb3RoZXJ3aXNlLgorCisgICAgICAgIE5vIG9uZSBvdGhlciB0aGFu
IENvZGVHZW5lcmF0b3JKUy5wbSB1c2VzCisgICAgICAgIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGV4ZWMsIGluZGV4LCBEZWZhdWx0SXNVbmRlZmluZWQpLgorICAgICAgICBJbnN0ZWFkLCB3ZSBz
aW1wbHkgdXNlIGV4ZWMtPmFyZ3VtZW50KGluZGV4KS4gV2Ugc2hvdWxkIHJlbW92ZQorICAgICAg
ICB0aGUgcmVkdW5kYW50IHVzYWdlIGluIENvZGVHZW5lcmF0b3JKUy5wbSB0b28uIFRoZSBsb25n
LW5hbWUgbWFjcm8KKyAgICAgICAgaGFzIGJlZW4gbWFraW5nIGdlbmVyYXRlZCBjb2RlIGxlc3Mg
cmVhZGFibGUuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHdlIGNhbiByZW5hbWUgTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoKSB0byBhcmd1bWVudE9yTnVsbCgpLgorCisgICAgICAgIGMuZi4gY29y
cmVzcG9uZGluZyBWOCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDk4OTkKKworICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAg
KEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNGbG9hdDY0QXJy
YXlQcm90b3R5cGVGdW5jdGlvbkZvbyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVz
c2FnZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbU5hbWVkR2V0dGVy
UHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0
SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhB
cmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9u
c09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNV
bmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q4KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTApOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNT
dHJpbmdNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25WYXJpYWRpY0RvdWJsZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1
Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uQWNjZXB0VHJhbnNmZXJMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3Rv
dHlwZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZUFycmF5QXJnKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1
bmN0aW9uMik6CisKIDIwMTMtMDItMTQgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVXNlIEdMIHR5cGVkZWZzIGluIFdlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKaW5kZXggZjNi
OGU1ZTRiZGNmYzE4MmZhYWRhZDJiYWI1YmY1YmViNWVmNmY5Yi4uOWU1MTVkMzRiODczZTMwMmY5
ZjhhZDkxODVlZTFjYzI2YzIzOGFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKQEAgLTU5LDEzICs1OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRE9NU3RyaW5nTGlzdDsKIAotZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKLSAgICBE
ZWZhdWx0SXNVbmRlZmluZWQsCi0gICAgRGVmYXVsdElzTnVsbFN0cmluZwotfTsKLQotI2RlZmlu
ZSBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCBpbmRleCwgcG9saWN5KSAoKChwb2xpY3kp
ID09IERlZmF1bHRJc051bGxTdHJpbmcgJiYgKGluZGV4KSA+PSAoZXhlYyktPmFyZ3VtZW50Q291
bnQoKSkgPyAoSlNWYWx1ZSgpKSA6ICgoZXhlYyktPmFyZ3VtZW50KGluZGV4KSkpCi0KICAgICBj
bGFzcyBDYWNoZWRTY3JpcHQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgS1VSTDsKQEAg
LTI2MSw2ICsyNTQsMTEgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICAgICAg
cmV0dXJuIG1lZGlhTGlzdDsKICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGFyZ3Vt
ZW50T3JOdWxsKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBpbnQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gaW5kZXggPj0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gSlNWYWx1ZSgpIDogZXhl
Yy0+YXJndW1lbnQoaW5kZXgpOworICAgIH0KKwogICAgIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBn
ZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6SlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDOjpI
YXNoVGFibGUqIHN0YXRpY1RhYmxlKTsKIAogICAgIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IDApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQppbmRleCA3MDU2MWE2YWZlNjhlOWJiZWUwNWM4NGFhYWU0NzVmYzBmMGYyNmQzLi45ZDc4YWYw
MjEzNGU1YmRmMzM4OGU2NzAxZTViMzljYzE4MzFiNzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMjc1NSwxMiArMjc1
NSw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgbXkgJHBhcmFtZXRlckRlZmF1bHRQb2xpY3kgPSAi
RGVmYXVsdElzVW5kZWZpbmVkIjsKLSAgICAgICAgICAgIGlmICgkb3B0aW9uYWwgYW5kICRvcHRp
b25hbCBlcSAiRGVmYXVsdElzTnVsbFN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICAkcGFyYW1l
dGVyRGVmYXVsdFBvbGljeSA9ICJEZWZhdWx0SXNOdWxsU3RyaW5nIjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICIgLiBHZXROYXRpdmVUeXBl
RnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgk
cGFyYW1ldGVyLCAiTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgJGFyZ3NJbmRleCwgJHBh
cmFtZXRlckRlZmF1bHRQb2xpY3kpIikgLiAiKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVy
KSAuICIgJG5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAkb3B0aW9uYWwgZXEg
IkRlZmF1bHRJc051bGxTdHJpbmciID8gImFyZ3VtZW50T3JOdWxsKGV4ZWMsICRhcmdzSW5kZXgp
IiA6ICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIpIC4gIik7XG4iKTsKIAogICAgICAgICAg
ICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNo
b3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAjIEJ1
dCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBl
IGlzIHVuc2lnbmVkIGFuZCB0aGUgZmFjdCB0aGF0IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAppbmRl
eCA1NTkxYzMxYzdhNTQ4MDhmODdiNDk2ZTEyMzA3NGVjYjE3YjBmZTUzLi42NWQ1YWMwOGFkYTJj
NzBlOTQ5M2VlZTFiNzg5NzQwMGM1OTNkZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAKQEAgLTI1
OSw3ICsyNTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzRmxvYXQ2NEFycmF5
UHJvdG90eXBlRnVuY3Rpb25Gb28oRXhlY1N0YXRlKiBleGVjKQogICAgIEZsb2F0NjRBcnJheSog
aW1wbCA9IHN0YXRpY19jYXN0PEZsb2F0NjRBcnJheSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEZs
b2F0MzJBcnJheSogYXJyYXkodG9GbG9hdDMyQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
ZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIEZsb2F0MzJBcnJheSogYXJyYXko
dG9GbG9hdDMyQXJyYXkoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggNmI1MTczY2E3YmJmMTNj
Y2RmNDg2MDEwN2Y0N2JkOTVhYmE3N2Y0MS4uZjI4MTIzMDZmNzFmYmEzZDhiOTEwNDMwODM4Nzgw
MzA4MTY1NjhmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTE4Nyw3
ICsxODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdAogICAgIFRlc3RBY3RpdmVET01PYmpl
Y3QqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0gICAgTm9kZSogbmV4dENoaWxkKHRvTm9kZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgTm9kZSogbmV4dENoaWxkKHRvTm9k
ZShleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5l
eGNpdGluZ0Z1bmN0aW9uKG5leHRDaGlsZCk7CkBAIC0yMDQsNyArMjA0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlv
blBvc3RNZXNzYWdlKEUKICAgICBUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdEFjdGl2ZURPTU9iamVjdCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwor
ICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZShleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBT
dHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPnBvc3RNZXNzYWdlKG1lc3NhZ2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKaW5kZXggYzRlYTY1NjUxYTViNGYw
MmMwZWRiNWNiZjg4MmEwMmFlMTczOTM3Yi4uNzVhMmNkMTRlZDhjMTQ1NGE4NTI2MGVkNmY0Nzc3
NmVlNmVlMjBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0x
ODgsNyArMTg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21O
YW1lZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmMKICAgICBUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0cihNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyKGV4ZWMtPmFyZ3Vt
ZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+YW5v
dGhlckZ1bmN0aW9uKHN0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCAzNDc2OWM0
ZDRiMjkyNWE2NWMxYzIyNTkzMTc5MDdmMjU2YTY1MDhhLi44ZDA2NGVhYTVlY2IyY2VlMzA1ODk3
MzVlYTVhNmUxZTY4ODIzNGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKQEAgLTIzNCw3
ICsyMzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogZQogICAgIFRlc3RFdmVudFRhcmdldCog
aW1wbCA9IHN0YXRpY19jYXN0PFRlc3RFdmVudFRhcmdldCo+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IGludCBpbmRleChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLnRvVUludDMyKGV4ZWMpKTsKKyAgICBpbnQgaW5kZXgoZXhlYy0+YXJndW1lbnQoMCku
dG9VSW50MzIoZXhlYykpOwogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTI4Nyw3ICsyODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25EaXNwYXRjaEV2
ZW50KEV4ZQogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBFdmVudCogZXZ0KHRvRXZlbnQoTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAg
IEV2ZW50KiBldnQodG9FdmVudChleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCBiNDY2ODA3MjcxYTI1OGI2N2I3ZjI2
ZTEwMjkwNjA3NDg3YTMwNGI3Li4zNDM2NWM0ZGFmZWVlNzcwZmJhZDcxYjNiZTQ2MDQxZjk2MjA1
NGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtMTA2LDEwICsxMDYsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0SlNUZXN0SW50ZXJmYWMKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgY29uc3QgU3RyaW5n
JiBzdHIxKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAg
Y29uc3QgU3RyaW5nJiBzdHIxKGV4ZWMtPmFyZ3VtZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIyKE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHIyKGV4ZWMt
PmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKQEAgLTQxMCwxMCArNDEwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2Qy
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJBcmco
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0Vt
cHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBT
dHJpbmcmIHN0ckFyZyhleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFRlc3RPYmoqIG9i
akFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMSkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBi
NDY2OWM0NmQzZDRkN2JiNDJiMzYwMzBhMWE5ZDlkOWI1YmJjYWMyLi5jOTQ3ZmRmOWJjMGVkZDZl
ZDRiY2JkN2U5NzY0YjFjMTAzNTk1M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2QKICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgUmVmUHRy
PE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OmNyZWF0ZShTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSk7CisgICAgUmVmUHRyPE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0
ZShTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmFyZ3VtZW50KDApKSkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5tZXRob2QobGlzdGVuZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDRhODhmNWExZWIxNmZjODg0NmJiNzkz
YTNjZWMxYjYyYWE3ZDAxZTMuLmJiMTMxOGNhMWUxZGU5Mzc4Mzk5NDkyNTE1MDU0ZTMwYjJhYTg0
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTc4LDEzICs3OCwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JO
YW1lZENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKUwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBj
b25zdCBTdHJpbmcmIHN0cjEoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVs
dElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cjEoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgp
ID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0cjIoTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkg
PyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcm
IHN0cjIoZXhlYy0+YXJndW1lbnQoMSkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1
bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBjb25zdCBTdHJpbmcmIHN0cjMoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywg
MiwgRGVmYXVsdElzTnVsbFN0cmluZykuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZhdWx0SXNOdWxsU3RyaW5nKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyMyhNaXNzaW5nSXNOdWxsU3Ry
aW5nKGV4ZWMsIDIpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTWlzc2luZ0lzTnVsbFN0cmluZyhl
eGVjLCAyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IG9iamVjdCA9IFRlc3ROYW1lZENv
bnN0cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGNhc3RlZFRoaXMtPmRvY3VtZW50KCks
IHN0cjEsIHN0cjIsIHN0cjMsIGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggZmRmMGMzZTRiNjg3YjM1YTcz
NTY5Yjg0ZDA2NGI3YWIwNTJjZGY2Yy4uOWExYTM4ODIxOTNjNzc3ZjE1YzExYmZjM2Q5ZWU4NGIw
YTkzOTY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTE0NTksMTMgKzE0NTksMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRo
QXJncyhFeGVjU3QKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGludCBsb25nQXJnKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4
ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7CisgICAgaW50IGxvbmdB
cmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMs
IDEsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoZXhlYy0+YXJndW1lbnQo
MSkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpB
cmcodG9UZXN0T2JqKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50
KDIpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPnZvaWRNZXRob2RXaXRoQXJn
cyhsb25nQXJnLCBzdHJBcmcsIG9iakFyZyk7CkBAIC0xNDk1LDEzICsxNDk1LDEzIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0
aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAzKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyhNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvSW50MzIoZXhlYykpOworICAgIGlu
dCBsb25nQXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFy
Z3VtZW50KDEpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9i
aiogb2JqQXJnKHRvVGVzdE9iaihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZh
dWx0SXNVbmRlZmluZWQpKSk7CisgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5h
cmd1bWVudCgyKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMTUzMiwxMyArMTUzMiwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YQogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IGxvbmdBcmcoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMp
KTsKKyAgICBpbnQgbG9uZ0FyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5l
ZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFy
ZyhleGVjLT5hcmd1bWVudCgxKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RP
YmooZXhlYy0+YXJndW1lbnQoMikpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTE1NTYs
NyArMTU1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcoRXhlCiAgICAgVGVzdE9iaiogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8UmVmUHRy
PFNjcmlwdFByb2ZpbGU+ID4gc2VxdWVuY2VBcmcoKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2NyaXB0
UHJvZmlsZSwgSlNTY3JpcHRQcm9maWxlPihleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCAmdG9TY3JpcHRQcm9maWxlKSkpOworICAgIFZl
Y3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBzZXF1ZW5jZUFyZygodG9SZWZQdHJOYXRpdmVB
cnJheTxTY3JpcHRQcm9maWxlLCBKU1NjcmlwdFByb2ZpbGU+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApLCAmdG9TY3JpcHRQcm9maWxlKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoc2VxdWVuY2VBcmcpOwpAQCAtMTU3Myw3ICsxNTczLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFJldHVybmluZ1NlcXVlbmNlKEUKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBsb25nQXJnKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9JbnQzMihleGVjKSk7
CisgICAgaW50IGxvbmdBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCkBAIC0xNTkyLDEwICsxNTkyLDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNvbnN0IFN0cmluZyYgc3RyQXJn
KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNF
bXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZh
dWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3Qg
U3RyaW5nJiBzdHJBcmcoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcodG9UZXN0T2JqKE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBUZXN0T2JqKiBv
YmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCkBAIC0xNjE0LDcgKzE2MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZQogICAgIFRl
c3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpLCAwLCAwKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZEFyZyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgMCwgMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CkBAIC0xNjMxLDEwICsxNjMxLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
cHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSoKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIERpY3Rpb25hcnkgb28oZXhlYywgTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgRGlj
dGlvbmFyeSBvbyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIERpY3Rpb25hcnkgb29vKGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMs
IDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIERpY3Rpb25hcnkgb29vKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+b3B0aW9uc09i
amVjdChvbywgb29vKTsKQEAgLTE4NTksNyArMTg1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmco
RXhlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogCi0gICAgaW50IG9wdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0
SXNVbmRlZmluZWQpLnRvSW50MzIoZXhlYykpOworICAgIGludCBvcHQoZXhlYy0+YXJndW1lbnQo
MCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm1ldGhv
ZFdpdGhPcHRpb25hbEFyZyhvcHQpOwpAQCAtMTg3Niw3ICsxODc2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0EKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGludCBub25PcHQoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgbm9uT3B0
KGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IApAQCAtMTg4Niw3ICsxODg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpbnQg
b3B0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCku
dG9JbnQzMihleGVjKSk7CisgICAgaW50IG9wdChleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwpAQCAtMTkwMyw3ICsxOTAzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBub25PcHQoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAg
ICBpbnQgbm9uT3B0KGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIApAQCAtMTkxMyw3ICsxOTEzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0EKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKLSAgICBpbnQgb3B0MShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0
SXNVbmRlZmluZWQpLnRvSW50MzIoZXhlYykpOworICAgIGludCBvcHQxKGV4ZWMtPmFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50IDw9IDIpIHsKQEAgLTE5MjEsNyArMTkyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQog
Ci0gICAgaW50IG9wdDIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwgRGVmYXVsdElz
VW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgb3B0MihleGVjLT5hcmd1bWVudCgy
KS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7
CkBAIC0xOTQzLDcgKzE5NDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKAogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGNvbnN0
IFN0cmluZyYgc3RyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
CisgICAgY29uc3QgU3RyaW5nJiBzdHIoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmco
c3RyKTsKQEAgLTE5NTgsNyArMTk1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJCiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVz
dE9iajo6c19pbmZvKTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cihl
eGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwtPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKHN0cik7CkBAIC0xOTcz
LDcgKzE5NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSQogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7
CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4
ZWMsIDAsIERlZmF1bHRJc051bGxTdHJpbmcpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzTnVsbFN0cmluZykudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cihNaXNzaW5nSXNOdWxs
U3RyaW5nKGV4ZWMsIDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTWlzc2luZ0lzTnVsbFN0cmlu
ZyhleGVjLCAwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoc3Ry
KTsKQEAgLTIwMDcsNyArMjAwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBCiAgICAgVGVz
dE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBp
bnQgbm9uQ2FsbGJhY2soTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgbm9uQ2FsbGJhY2soZXhlYy0+YXJn
dW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPD0gMSB8fCAhZXhlYy0+YXJndW1lbnQoMSkuaXNGdW5jdGlv
bigpKQpAQCAtMjA5MSwxMCArMjA5MSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKAogICAg
IFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0g
ICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9i
aihleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBT
dHJpbmcmIHN0ckFyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNV
bmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
ZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpB
cmcsIHN0ckFyZyk7CkBAIC0yMTExLDcgKzIxMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qy
KAogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVGVzdE9iaiogb2JqQXJnKHRv
VGVzdE9iaihleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAt
MjEyMSw3ICsyMTIxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMigKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpbnQgbG9uZ0Fy
ZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRv
SW50MzIoZXhlYykpOworICAgIGludCBsb25nQXJnKGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIo
ZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5vdmVybG9hZGVkTWV0aG9k
KG9iakFyZywgbG9uZ0FyZyk7CkBAIC0yMTM4LDcgKzIxMzgsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QzKAogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJBcmcoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhleGVjLT5h
cmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwt
Pm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDQoCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvSW50MzIoZXhlYykpOworICAgIGludCBs
b25nQXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLT5vdmVybG9hZGVkTWV0aG9kKGxvbmdBcmcpOwpAQCAtMjE4OSw3ICsy
MTg5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNigKICAgICBUZXN0T2JqKiBpbXBsID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiBsaXN0QXJnKHRvRE9NU3RyaW5nTGlzdChleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IGxpc3RBcmcodG9ET01TdHJpbmdMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPm92ZXJsb2FkZWRNZXRob2QobGlzdEFyZyk7
CkBAIC0yMjA2LDcgKzIyMDYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3KAogICAgIFRlc3RP
YmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVj
dG9yPFN0cmluZz4gYXJyYXlBcmcodG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWZWN0
b3I8U3RyaW5nPiBhcnJheUFyZyh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+b3ZlcmxvYWRlZE1l
dGhvZChhcnJheUFyZyk7CkBAIC0yMjIzLDcgKzIyMjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q4KAogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVGVzdE9iaiogb2JqQXJn
KHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZyk7CkBAIC0yMjQwLDcgKzIyNDAsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q5KAogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcodG9O
YXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFyZyh0b05h
dGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC0+b3ZlcmxvYWRlZE1ldGhvZChhcnJheUFyZyk7CkBAIC0yMjU3
LDcgKzIyNTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMAogICAgIFRlc3RPYmoqIGltcGwg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPHVuc2ln
bmVkPiBhcnJheUFyZyh0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVmVjdG9yPHVu
c2lnbmVkPiBhcnJheUFyZyh0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1
bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5vdmVybG9hZGVkTWV0
aG9kKGFycmF5QXJnKTsKQEAgLTIyNzQsNyArMjI3NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDExCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnKGV4ZWMtPmFyZ3Vt
ZW50KDApLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+b3Zl
cmxvYWRlZE1ldGhvZChzdHJBcmcpOwpAQCAtMjMyOSw3ICsyMzI5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoT3B0aW9uYWwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KIAotICAgIGludCBhcmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVs
dElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgYXJnKGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMjM0OSw3ICsy
MzQ5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QKIHsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IGFyZyhNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvSW50MzIoZXhlYykpOwor
ICAgIGludCBhcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKGFyZyk7CkBAIC0yMzYz
LDcgKzIzNjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZAogewogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIHR5
cGUoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5p
c0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25z
dCBTdHJpbmcmIHR5cGUoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMSh0eXBlKTsKQEAgLTI0
MjUsNyArMjQyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxCiAgICAgVGVzdE9iaiogaW1w
bCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8dW5z
aWduZWQ+IHVuc2lnbmVkTG9uZ1NlcXVlbmNlKHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KGV4ZWMs
IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IHVuc2lnbmVkTG9uZ1NlcXVlbmNlKHRvTmF0aXZlQXJyYXk8
dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwtPm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSh1bnNpZ25lZExvbmdT
ZXF1ZW5jZSk7CkBAIC0yNDQzLDcgKzI0NDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihFeGVjUwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVB
cnJheTxTdHJpbmc+KGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJh
eTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCkBAIC0yNDYzLDcgKzI0NjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uKEV4ZQogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdmFsdWVzKHRvRE9NU3Ry
aW5nTGlzdChleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNV
bmRlZmluZWQpKSk7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlcyh0b0RPTVN0cmlu
Z0xpc3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
QEAgLTI0OTksNyArMjQ5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVGVzdE9i
aiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBhKiB2
YWx1ZSh0b2EoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZp
bmVkKSkpOworICAgIGEqIHZhbHVlKHRvYShleGVjLT5hcmd1bWVudCgwKSkpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLT5jb252ZXJ0MSh2YWx1ZSk7CkBAIC0yNTE2LDcgKzI1MTYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDIoRXhlY1N0YXRlKiBleGVjKQogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgYiogdmFsdWUodG9iKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBiKiB2
YWx1ZSh0b2IoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC0+Y29udmVydDIodmFsdWUpOwpAQCAtMjUzMyw3ICsyNTMzLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0KEV4ZWNT
dGF0ZSogZXhlYykKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGQqIHZhbHVlKHRvZChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgZCogdmFsdWUodG9kKGV4ZWMtPmFy
Z3VtZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwtPmNvbnZlcnQ0KHZh
bHVlKTsKQEAgLTI1NTAsNyArMjU1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
VGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAg
ICBlKiB2YWx1ZSh0b2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKSkpOworICAgIGUqIHZhbHVlKHRvZShleGVjLT5hcmd1bWVudCgwKSkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5jb252ZXJ0NSh2YWx1ZSk7CkBAIC0yNjA2LDEz
ICsyNjA2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbihFeGVjU3RhdGUqCiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGNvbnN0IFN0cmluZyYgc3RyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHIoZXhlYy0+YXJndW1lbnQoMCkuaXNF
bXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBmbG9hdCBhKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9GbG9hdChleGVjKSk7
CisgICAgZmxvYXQgYShleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgaW50IGIoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwg
RGVmYXVsdElzVW5kZWZpbmVkKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnQgYihleGVjLT5hcmd1
bWVudCgyKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTI2MzEs
NyArMjYzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChFeGVjCiAgICAgVGVzdE9iaiogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcm
IGhlYWQoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVk
KS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBj
b25zdCBTdHJpbmcmIGhlYWQoZXhlYy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVu
dHM8U3RyaW5nPihleGVjLCAxKTsKQEAgLTI2NTEsNyArMjY1MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1l
dGhvZChFeGVjCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICBkb3VibGUgaGVhZChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBkb3VibGUgaGVh
ZChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIFZlY3Rvcjxkb3VibGU+IHRhaWwgPSB0b05hdGl2ZUFyZ3VtZW50czxkb3VibGU+KGV4
ZWMsIDEpOwpAQCAtMjY3MSw3ICsyNjcxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChFeGVjU3QKICAg
ICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIE5vZGUqIGhlYWQodG9Ob2RlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBOb2RlKiBoZWFkKHRvTm9kZShleGVjLT5hcmd1bWVu
dCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Tm9kZSo+IHRhaWw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKaW5kZXggYTM2OThl
MDAzODRkMWI1YmQ5MTY5MmQyZmQzZTgyNTFjMjRhZjdmZS4uZDFjZDMyMzRkYzQ3YzI5MWE4MTIz
YWJiYmI0YzMyNDM1M2Y5YTFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcApAQCAtNTYsNyArNTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0Sgog
ICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcih0b0FycmF5QnVmZmVyKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBBcnJh
eUJ1ZmZlciogYXJyYXlCdWZmZXIodG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgwKSkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZm
ZXIpOwpAQCAtNjgsNyArNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SgogICAgIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IEFycmF5QnVmZmVyVmlldyogYXJyYXlCdWZmZXJWaWV3KHRvQXJyYXlCdWZmZXJWaWV3KE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBB
cnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldyh0b0FycmF5QnVmZmVyVmlldyhleGVjLT5h
cmd1bWVudCgwKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpj
cmVhdGUoYXJyYXlCdWZmZXJWaWV3KTsKQEAgLTgwLDcgKzgwLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEoKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLSAgICBCbG9iKiBibG9iKHRvQmxvYihNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgQmxvYiogYmxvYih0b0Js
b2IoZXhlYy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUmVmUHRy
PFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczo6Y3JlYXRlKGJsb2IpOwpAQCAtOTIsNyArOTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SgogICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Iq
PihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBS
ZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpjcmVhdGUoc3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggMzY1NmVlNzIwY2U4YjY5
NTNmYjA3YjE2ZTQ4M2E5YmRhM2E4NjNmZC4uZTE2ZWYzNDJkOWNkMzY4ZGU2MjM1Yjk0YjdkNGVj
MTQ3ZDU5NzQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTY2LDEzICs2NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yOjpjbwogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIGhlbGxvKE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0
eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0
SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3Ry
aW5nJiBoZWxsbyhleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywg
MSwgRGVmYXVsdElzVW5kZWZpbmVkKSwgMCwgMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGRhdGEoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMSksIDAsIDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgQXJyYXkqIHRy
YW5zZmVyTGlzdCh0b0FycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBBcnJheSogdHJhbnNmZXJMaXN0KHRvQXJyYXkoZXhlYy0+
YXJndW1lbnQoMikpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUmVmUHRyPFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IG9iamVjdCA9IFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZShoZWxsbywgZGF0YSwgdHJhbnNmZXJMaXN0KTsKQEAgLTI4
NSw3ICsyODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aQogICAgIFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCAwLCAw
KSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCkpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIApAQCAtMjk1LDcgKzI5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3RpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogCi0gICAgQXJyYXkqIHRyYW5zZmVyTGlzdCh0b0FycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBBcnJheSogdHJhbnNmZXJM
aXN0KHRvQXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC0+YWNjZXB0VHJhbnNmZXJMaXN0KGRhdGEsIHRyYW5zZmVyTGlzdCk7CkBAIC0zMTcs
NyArMzE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBmaXJzdChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLCAwLCAw
KSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZmlyc3QoU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIDAsIDApKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7CkBAIC0zMjUsNyArMzI1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBBcnJheSogdHgodG9BcnJheShNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
QXJyYXkqIHR4KHRvQXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAyKSB7CkBAIC0zMzMsNyArMzMzLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZWNv
bmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSwgMCwgMCkpOworICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlY29uZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgMCwgMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpZiAoYXJnc0NvdW50IDw9IDMpIHsKQEAgLTM0MSw3ICszNDEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0KIAotICAgIEFycmF5KiB0eHgodG9BcnJheShNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCAzLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgQXJyYXkqIHR4eCh0b0Fy
cmF5KGV4ZWMtPmFyZ3VtZW50KDMpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwt
Pm11bHRpVHJhbnNmZXJMaXN0KGZpcnN0LCB0eCwgc2Vjb25kLCB0eHgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKaW5kZXggNjA2OWM0MTFmOWUzYjE3MWNhMjNmMWMzMzA5ZmVjMThkYWMwNjhhOS4uYWM1
MDBiNWU3NmRkYjg5MGI2Y2FkNjJkZTJiZGIxN2EzYmQwNjI3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCkBAIC03MSw3ICs3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0VHlwZWRlZnMoCiAgICAgSlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIGhlbGxvKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBo
ZWxsbyhleGVjLT5hcmd1bWVudCgwKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMSB8fCAhZXhlYy0+YXJndW1lbnQo
MSkuaXNGdW5jdGlvbigpKQpAQCAtMzU1LDcgKzM1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmMoRXhlY1N0YXRlKiBl
eGVjCiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMo
JkpTbG9uZ1tdOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKLSAgICBWZWN0b3I8aW50PiB4KHRvTmF0aXZlQXJyYXk8aW50PihleGVjLCBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVmVjdG9y
PGludD4geCh0b05hdGl2ZUFycmF5PGludD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+ZnVuYyh4KTsKQEAgLTM3Miw3ICszNzIsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25NdWx0aVRyYW5zZmVyTGlzdChFeAogICAgIFRlc3RUeXBlZGVmcyogaW1wbCA9IHN0YXRp
Y19jYXN0PFRlc3RUeXBlZGVmcyo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGZpcnN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCksIDAs
IDApKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBmaXJzdChTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMzgyLDcgKzM4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk11bHRpVHJhbnNmZXJM
aXN0KEV4CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCi0gICAgQXJyYXkqIHR4KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIEFycmF5KiB0eCh0b0FycmF5KGV4ZWMt
PmFyZ3VtZW50KDEpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChhcmdzQ291bnQg
PD0gMikgewpAQCAtMzkwLDcgKzM5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk11bHRpVHJhbnNmZXJMaXN0KEV4CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vjb25kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1bHRJ
c1VuZGVmaW5lZCksIDAsIDApKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZWNvbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MiksIDAsIDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAz
KSB7CkBAIC0zOTgsNyArMzk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3QoRXgKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBBcnJh
eSogdHh4KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMywgRGVmYXVsdElz
VW5kZWZpbmVkKSkpOworICAgIEFycmF5KiB0eHgodG9BcnJheShleGVjLT5hcmd1bWVudCgzKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJz
dCwgdHgsIHNlY29uZCwgdHh4KTsKQEAgLTQxNSwxMyArNDE1LDEzIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvdyhF
eGVjU3RhdGUqCiAgICAgVGVzdFR5cGVkZWZzKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdFR5cGVk
ZWZzKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMykKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgZmxvYXQgd2lkdGgoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICBm
bG9hdCB3aWR0aChleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgZmxvYXQgaGVpZ2h0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMs
IDEsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9GbG9hdChleGVjKSk7CisgICAgZmxvYXQgaGVpZ2h0
KGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBmbG9hdCBibHVyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1bHRJ
c1VuZGVmaW5lZCkudG9GbG9hdChleGVjKSk7CisgICAgZmxvYXQgYmx1cihleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTQzMSw3ICs0
MzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25TZXRTaGFkb3coRXhlY1N0YXRlKgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGNvbnN0IFN0cmluZyYgY29sb3Io
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMywgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0Vt
cHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDMsIERlZmF1
bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBjb25zdCBT
dHJpbmcmIGNvbG9yKGV4ZWMtPmFyZ3VtZW50KDMpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogZXhl
Yy0+YXJndW1lbnQoMykudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSA0KSB7CkBAIC00MzksNyArNDM5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uU2V0U2hhZG93KEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBmbG9hdCBhbHBoYShNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihleGVjLCA0LCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvRmxvYXQoZXhlYykpOworICAg
IGZsb2F0IGFscGhhKGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLT5zZXRTaGFkb3cod2lkdGgsIGhlaWdodCwgYmx1ciwgY29s
b3IsIGFscGhhKTsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcgog
ICAgIFRlc3RUeXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RUeXBlZGVmcyo+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2Vx
dWVuY2VBcmcoKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4oZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywg
MCwgRGVmYXVsdElzVW5kZWZpbmVkKSwgJnRvU2VyaWFsaXplZFNjcmlwdFZhbHVlKSkpOworICAg
IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2VxdWVuY2VBcmcoKHRvUmVm
UHRyTmF0aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZ0b1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTQ3NCw3ICs0NzQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJs
ZUFycmF5QXJnKEV4ZQogICAgIFRlc3RUeXBlZGVmcyogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RU
eXBlZGVmcyo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnKHRv
TmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcodG9O
YXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwtPm51bGxhYmxlQXJyYXlBcmcoYXJyYXlBcmcpOwpAQCAtNTQy
LDcgKzU0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oCiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlcyh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywg
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlcyh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTU2Miw3ICs1NjIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uMgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBW
ZWN0b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWZWN0
b3I8U3RyaW5nPiB2YWx1ZXModG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>