<?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>157875</bug_id>
          
          <creation_ts>2016-05-18 17:43:48 -0700</creation_ts>
          <short_desc>Modernize CSS code</short_desc>
          <delta_ts>2016-05-24 13:46:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1194543</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-18 17:43:48 -0700</bug_when>
    <thetext>Modernize CSS code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194544</commentid>
    <comment_count>1</comment_count>
      <attachid>279326</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-18 17:45:28 -0700</bug_when>
    <thetext>Created attachment 279326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194646</commentid>
    <comment_count>2</comment_count>
      <attachid>279326</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-05-18 22:37:48 -0700</bug_when>
    <thetext>Comment on attachment 279326
Patch

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

The changes to CodeGeneratorJS.pm will break various bindings tests (we should teach the EWS to run the bindings tests to catch regressions). We need updated expected results. You can run the bindings tests by running Tools/Scripts/run-bindings-tests.

&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:56
&gt; -    return m_startValue-&gt;equals(*other.m_startValue.get()) &amp;&amp; m_endValue-&gt;equals(*other.m_endValue.get());
&gt; +    if (!m_startValue-&gt;equals(other.m_startValue.get()))
&gt; +        return false;
&gt; +    if (!m_endValue &amp;&amp; !other.m_endValue)
&gt; +        return true;
&gt; +    if (!m_endValue || !other.m_endValue)
&gt; +        return false;
&gt; +    return m_endValue-&gt;equals(*other.m_endValue.get());

:( I need to go to bed and have not reasoned about the correctness of this change. I take it that the original code was incorrect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194654</commentid>
    <comment_count>3</comment_count>
      <attachid>279326</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-18 22:56:33 -0700</bug_when>
    <thetext>Comment on attachment 279326
Patch

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

The rebased bindings tests are included in this patch.

&gt;&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:56
&gt;&gt; +    return m_endValue-&gt;equals(*other.m_endValue.get());
&gt; 
&gt; :( I need to go to bed and have not reasoned about the correctness of this change. I take it that the original code was incorrect?

The original code assumed that every CSSAnimationTriggerScrollValue had a non-null m_endValue, which is not guaranteed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194692</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 00:55:21 -0700</bug_when>
    <thetext>I just wrote a crashing test that this patch fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194693</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 00:55:56 -0700</bug_when>
    <thetext>&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
    div { -webkit-animation-trigger : container-scroll(20px); }
&lt;/style&gt;
&lt;script&gt;
if (window.testRunner)
    testRunner.dumpAsText();
function run() {
    document.getElementById(&quot;test&quot;).focus();
	document.execCommand(&apos;insertHTML&apos;, false, &apos;&lt;div id=&quot;insertedDiv&quot; style=&quot;-webkit-animation-trigger : container-scroll(20px); &quot;&gt;&lt;/div&gt;&apos;);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;run()&quot;&gt;
&lt;p&gt;This test verifies that comparing two CSSAnimationTriggerScrollValues without end values does not crash.&lt;/p&gt;
&lt;div id=&quot;test&quot; contenteditable&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194695</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 00:57:32 -0700</bug_when>
    <thetext>Safari 9.1.1 is not vulnerable to this, but STP4 is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194698</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 01:05:10 -0700</bug_when>
    <thetext>bug introduced in https://bugs.webkit.org/show_bug.cgi?id=142687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194790</commentid>
    <comment_count>8</comment_count>
      <attachid>279326</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-05-19 09:49:21 -0700</bug_when>
    <thetext>Comment on attachment 279326
Patch

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

&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:55
&gt; +    if (!m_startValue-&gt;equals(other.m_startValue.get()))
&gt; +        return false;
&gt; +    if (!m_endValue &amp;&amp; !other.m_endValue)
&gt; +        return true;
&gt; +    if (!m_endValue || !other.m_endValue)
&gt; +        return false;

Can this use arePointingToEqualData()?

&gt;&gt;&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:56
&gt;&gt;&gt; +    return m_endValue-&gt;equals(*other.m_endValue.get());
&gt;&gt; 
&gt;&gt; :( I need to go to bed and have not reasoned about the correctness of this change. I take it that the original code was incorrect?
&gt; 
&gt; The original code assumed that every CSSAnimationTriggerScrollValue had a non-null m_endValue, which is not guaranteed.

If this is fixing a null deref, why is it a security bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194824</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 10:38:15 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 279326 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279326&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:55
&gt; &gt; +    if (!m_startValue-&gt;equals(other.m_startValue.get()))
&gt; &gt; +        return false;
&gt; &gt; +    if (!m_endValue &amp;&amp; !other.m_endValue)
&gt; &gt; +        return true;
&gt; &gt; +    if (!m_endValue || !other.m_endValue)
&gt; &gt; +        return false;
&gt; 
&gt; Can this use arePointingToEqualData()?
There&apos;s no operator==.  That would look nicer, though, and it would save a deep comparison if they are pointing to the exact same CSSValue.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:56
&gt; &gt;&gt;&gt; +    return m_endValue-&gt;equals(*other.m_endValue.get());
&gt; &gt;&gt; 
&gt; &gt;&gt; :( I need to go to bed and have not reasoned about the correctness of this change. I take it that the original code was incorrect?
&gt; &gt; 
&gt; &gt; The original code assumed that every CSSAnimationTriggerScrollValue had a non-null m_endValue, which is not guaranteed.
&gt; 
&gt; If this is fixing a null deref, why is it a security bug?
If it can crash the browser, isn&apos;t it a security bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194829</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-05-19 10:40:44 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Comment on attachment 279326 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=279326&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:55
&gt; &gt; &gt; +    if (!m_startValue-&gt;equals(other.m_startValue.get()))
&gt; &gt; &gt; +        return false;
&gt; &gt; &gt; +    if (!m_endValue &amp;&amp; !other.m_endValue)
&gt; &gt; &gt; +        return true;
&gt; &gt; &gt; +    if (!m_endValue || !other.m_endValue)
&gt; &gt; &gt; +        return false;
&gt; &gt; 
&gt; &gt; Can this use arePointingToEqualData()?
&gt; There&apos;s no operator==.  That would look nicer, though, and it would save a
&gt; deep comparison if they are pointing to the exact same CSSValue.

Can you add an operator ==?

&gt; &gt; &gt;&gt;&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:56
&gt; &gt; &gt;&gt;&gt; +    return m_endValue-&gt;equals(*other.m_endValue.get());
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; :( I need to go to bed and have not reasoned about the correctness of this change. I take it that the original code was incorrect?
&gt; &gt; &gt; 
&gt; &gt; &gt; The original code assumed that every CSSAnimationTriggerScrollValue had a non-null m_endValue, which is not guaranteed.
&gt; &gt; 
&gt; &gt; If this is fixing a null deref, why is it a security bug?
&gt; If it can crash the browser, isn&apos;t it a security bug?

No. Null derefs are not exploitable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194835</commentid>
    <comment_count>11</comment_count>
      <attachid>279326</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-05-19 11:01:44 -0700</bug_when>
    <thetext>Comment on attachment 279326
Patch

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

&gt;&gt;&gt; Source/WebCore/css/CSSAnimationTriggerScrollValue.cpp:55
&gt;&gt;&gt; +        return false;
&gt;&gt; 
&gt;&gt; Can this use arePointingToEqualData()?
&gt; 
&gt; There&apos;s no operator==.  That would look nicer, though, and it would save a deep comparison if they are pointing to the exact same CSSValue.

I would suggest writing the last two if-stamenets like this:

if (!m_endValue || !other.m_endValue)
    return !m_endValue == !other.m_endValue;

This statement says: if one endValue is nil, we can&apos;t do comparison expect checking the nullability for both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194909</commentid>
    <comment_count>12</comment_count>
      <attachid>279421</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 13:24:38 -0700</bug_when>
    <thetext>Created attachment 279421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194995</commentid>
    <comment_count>13</comment_count>
      <attachid>279439</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-19 15:09:42 -0700</bug_when>
    <thetext>Created attachment 279439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195657</commentid>
    <comment_count>14</comment_count>
      <attachid>279609</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-23 17:15:23 -0700</bug_when>
    <thetext>Created attachment 279609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195677</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-23 18:40:11 -0700</bug_when>
    <thetext>Does not build on Windows and EFL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195717</commentid>
    <comment_count>16</comment_count>
      <attachid>279621</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-23 21:15:54 -0700</bug_when>
    <thetext>Created attachment 279621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195724</commentid>
    <comment_count>17</comment_count>
      <attachid>279621</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-23 22:02:59 -0700</bug_when>
    <thetext>Comment on attachment 279621
Patch

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

r=me

&gt; Source/WebCore/css/CSSCalculationValue.cpp:608
&gt; +        if (!value || !is&lt;CSSPrimitiveValue&gt;(value.get()))

The null check is already included in is&lt;CSSPrimitiveValue&gt;() when passing a pointer, so your extra check is redundant.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:611
&gt;          CSSPrimitiveValue&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(*value);

The local variable does not bring much value.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:612
&gt; +        result-&gt;value = CSSCalcPrimitiveValue::create(Ref&lt;CSSPrimitiveValue&gt;(primitiveValue), parserValue-&gt;isInt);

I am assuming we need this because of the operator T() on CSSPrimitiveValue? We really need to fix that thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195730</commentid>
    <comment_count>18</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-23 22:34:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/201318

(In reply to comment #17)
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:612
&gt; &gt; +        result-&gt;value = CSSCalcPrimitiveValue::create(Ref&lt;CSSPrimitiveValue&gt;(primitiveValue), parserValue-&gt;isInt);
&gt; 
&gt; I am assuming we need this because of the operator T() on CSSPrimitiveValue?
&gt; We really need to fix that thing.
Yep, this isn&apos;t the first time I&apos;ve run into this.  I didn&apos;t change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196006</commentid>
    <comment_count>19</comment_count>
      <attachid>279621</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-24 13:46:44 -0700</bug_when>
    <thetext>Comment on attachment 279621
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2921
&gt; -                            push(@implContent, &quot;    RefPtr&lt;${type}&gt; forwardedImpl = castedThis-&gt;wrapped().${implGetterFunctionName}();\n&quot;);
&gt; +                            push(@implContent, &quot;    auto forwardedImpl = castedThis-&gt;wrapped().${implGetterFunctionName}();\n&quot;);

This was bad.  See https://bugs.webkit.org/show_bug.cgi?id=158037</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279326</attachid>
            <date>2016-05-18 17:45:28 -0700</date>
            <delta_ts>2016-05-19 13:24:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157875-20160518174627.patch</filename>
            <type>text/plain</type>
            <size>32051</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTExOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE2LTA1LTE4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IENTUyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAg
ICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICBVc2UgYXV0byBtb3JlIGJl
Y2F1c2Ugc29tZSBjcmVhdGUgZnVuY3Rpb25zIHJldHVybiBhIFJlZiBpbnN0ZWFkIG9mIGEgUmVm
UHRyLCBhbmQgd2Ugd2FudCB0byB1c2UgdGhhdCBpZiBwb3NzaWJsZS4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tG
dW5jdGlvbkFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhD
YWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q1KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBjc3MvQ1NTQW5pbWF0aW9uVHJpZ2dlclNj
cm9sbFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvblRyaWdnZXJTY3Jv
bGxWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKiBjc3MvQ1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9s
bFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFs
dWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xs
VmFsdWU6OnN0YXJ0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dl
clNjcm9sbFZhbHVlOjplbmRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25U
cmlnZ2VyU2Nyb2xsVmFsdWU6Omhhc0VuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Fu
aW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVl
KToKKyAgICAgICAgKiBjc3MvQ1NTQmFzaWNTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2VyaWFsaXplUG9zaXRpb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRTZXJpYWxp
emFibGVQb3NpdGlvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlQ2ly
Y2xlOjpjc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Jhc2ljU2hhcGVFbGxpcHNlOjpj
c3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTQmFzaWNTaGFwZXMuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVDYXRl
Z29yeSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpjcmVhdGVNZWRpYVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUpOgorICAgICAg
ICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvblRyaWdnZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSdWxlR3JvdXA6OndyYXBwZXJSZW1vdmVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZU1lZGlhOjpTdHlsZVJ1bGVNZWRpYSk6CisgICAgICAgICogY3NzL1N0eWxlUnVs
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVyZWYpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6U3R5bGVSdWxlQmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZU1l
ZGlhOjptZWRpYVF1ZXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlTWVkaWE6OmNv
cHkpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJJbnNlcnRS
dWxlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmg6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OmNvcHkpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2xlYXJJbnRlcnZhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAg
ICAgICogcGFnZS9ET01XaW5kb3cuaDoKKwogMjAxNi0wNS0xOCAgRXJpYyBDYXJsc29uICA8ZXJp
Yy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGdWxsc2NyZWVuIHZpZGVvIHBs
YXliYWNrIGJyb2tlbiBpbiBXSzEgYXBwcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIwMTExMykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzI3LDcgKzI3MjcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9p
bigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3RlZFRoaXMiKTsKICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkdHlwZT4g
b2JqID0gJGpzVHlwZTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byBvYmogPSAkanNUeXBlO1xuIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmouZ2V0KCkpO1xuIik7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICRqc1R5cGU7XG4iKTsKQEAgLTI5NDAsNyArMjk0
MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIGlm
ICgkcHV0Rm9yd2FyZHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0dGVy
RnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9IHx8ICRuYW1lKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmlzTnVs
bGFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBSZWZQdHI8JHt0eXBlfT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KS4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIGZvcndhcmRlZEltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCkuJHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgpO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFmb3J3
YXJkZWRJbXBsKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1w
bDtcbiIpOwpAQCAtMzY5OSw5ICszNjk5LDkgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAkYXJndW1lbnRJbmRleCwgXCIk
bmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUpO1xuIik7CiAg
ICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKICAgICAgICAgICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkNhbGxiYWNrRnVuY3Rpb24uaCIpOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCR0eXBlPiAkbmFtZSA9
IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPCR7Y2FsbGJhY2tDbGFzc05hbWV9PihzdGF0ZSwg
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSks
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gY3JlYXRl
RnVuY3Rpb25Pbmx5Q2FsbGJhY2s8JHtjYWxsYmFja0NsYXNzTmFtZX0+KHN0YXRlLCBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KSk7XG4iKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
UmVmUHRyPCR0eXBlPiAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVhdGUoYXNPYmpl
Y3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYXV0byAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVhdGUoYXNP
YmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KSksIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyMDExMTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwg
Imxpc3RlbmVyIiwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgIm1ldGhvZCIpOwotICAg
IFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGxpc3RlbmVyID0gSlNNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIGltcGwubWV0aG9kKFdU
Rk1vdmUobGlzdGVuZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDE5LDEwICsxMDE5LDEwIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1
bWVudCgwKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgInRlc3RDYWxsYmFjayIsICJUZXN0T2JqIiwgbnVsbHB0
cik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgYXV0byB0ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RDYWxs
YmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVu
dCgxKS5pc0Z1bmN0aW9uKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IoKnN0YXRlLCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAiVGVzdE9iaiIs
IG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gdGVzdENhbGxiYWNr
RnVuY3Rpb24gPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAg
IGF1dG8gdGVzdENhbGxiYWNrRnVuY3Rpb24gPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVh
dGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE9iajo6Y3JlYXRlKCp0ZXN0Q2Fs
bGJhY2ssICp0ZXN0Q2FsbGJhY2tGdW5jdGlvbik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92
ZShvYmplY3QpKSkpOwogfQpAQCAtMzg1OCw3ICszODU4LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpQ
dXRGb3J3YXJkc051bGxhYmxlQXR0cgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
cHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBSZWZQdHI8VGVzdE5v
ZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZSgpOworICAgIGF1dG8gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKS5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCk7CiAgICAgaWYgKCFmb3J3YXJk
ZWRJbXBsKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgaW1wbCA9ICpmb3J3YXJk
ZWRJbXBsOwpAQCAtNTA0NSw3ICs1MDQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUt
PmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJtZXRo
b2RXaXRoQ2FsbGJhY2tBcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9
IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBK
U1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhDYWxs
YmFja0FyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KQEAgLTUwNjUsNyArNTA2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc09i
amVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9y
KCpzdGF0ZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQW5kQ2FsbGJhY2tBcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9
IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBK
U1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
QEAgLTUxMDAsNyArNTEwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVu
dCgwKS5pc0Z1bmN0aW9uKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJtZXRob2RXaXRo
Q2FsbGJhY2tGdW5jdGlvbkFyZyIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5jdGlvbj4g
Y2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAg
IGF1dG8gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01
MTIwLDcgKzUxMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMSwgImNhbGxiYWNr
IiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlv
bkFyZyIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gY2FsbGJhY2sgPSBKU1Rl
c3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8gY2FsbGJhY2sg
PSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIGltcGwubWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhXVEZNb3ZlKG5vbkNh
bGxiYWNrKSwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CkBAIC01MTYxLDcgKzUxNjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJjYWxsYmFjayIsICJUZXN0
T2JqIiwgInN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZyIpOwotICAgIFJlZlB0cjxUZXN0Q2Fs
bGJhY2s+IGNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNUZXN0Q2FsbGJh
Y2s+KHN0YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGNhbGxi
YWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNUZXN0Q2FsbGJhY2s+KHN0YXRlLCBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RX
aXRoQ2FsbGJhY2tBcmcoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01MjkzLDcgKzUyOTMsNyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVy
biB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJjYWxsYmFjayIs
ICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNr
PiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8g
Y2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm92
ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJldmlz
aW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB0ZW1w
bGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJn
dW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdFR5cGVkZWZzIiwg
bnVsbHB0cik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gdGVzdENhbGxiYWNrID0gSlNUZXN0
Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgYXV0byB0ZXN0Q2FsbGJhY2sgPSBKU1Rl
c3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RUeXBl
ZGVmczo6Y3JlYXRlKGhlbGxvLCAqdGVzdENhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBX
VEZNb3ZlKG9iamVjdCkpKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQW5pbWF0
aW9uVHJpZ2dlclNjcm9sbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlLmNwcAkocmV2aXNpb24gMjAxMTEzKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDEzIEBAIFN0cmluZyBDU1NBbmltYXRpb25Ucmln
Z2VyU2Nyb2xsVmFsdWU6OmMKIAogYm9vbCBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6
OmVxdWFscyhjb25zdCBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUmIG90aGVyKSBjb25z
dAogewotICAgIHJldHVybiBtX3N0YXJ0VmFsdWUtPmVxdWFscygqb3RoZXIubV9zdGFydFZhbHVl
LmdldCgpKSAmJiBtX2VuZFZhbHVlLT5lcXVhbHMoKm90aGVyLm1fZW5kVmFsdWUuZ2V0KCkpOwor
ICAgIGlmICghbV9zdGFydFZhbHVlLT5lcXVhbHMob3RoZXIubV9zdGFydFZhbHVlLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9lbmRWYWx1ZSAmJiAhb3RoZXIubV9l
bmRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX2VuZFZhbHVlIHx8ICFv
dGhlci5tX2VuZFZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZW5k
VmFsdWUtPmVxdWFscygqb3RoZXIubV9lbmRWYWx1ZS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbmltYXRpb25UcmlnZ2Vy
U2Nyb2xsVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQW5pbWF0
aW9uVHJpZ2dlclNjcm9sbFZhbHVlLmgJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENT
U0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZShXVEZNb3ZlKHN0YXJ0VmFsdWUpLCBXVEZNb3Zl
KGVuZFZhbHVlKSkpOwogICAgIH0KIAotICAgIGNvbnN0IENTU1ZhbHVlKiBzdGFydFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydFZhbHVlLmdldCgpOyB9CisgICAgY29uc3QgQ1NTVmFsdWUm
IHN0YXJ0VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VmFsdWUuZ2V0KCk7IH0KICAgICBj
b25zdCBDU1NWYWx1ZSogZW5kVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2VuZFZhbHVlLmdldCgp
OyB9CiAgICAgYm9vbCBoYXNFbmRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kVmFsdWU7IH0K
IApAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8
Q1NTVmFsdWU+IG1fc3RhcnRWYWx1ZTsKKyAgICBSZWY8Q1NTVmFsdWU+IG1fc3RhcnRWYWx1ZTsK
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IG1fZW5kVmFsdWU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcg
QEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQb3NpdGlvbk9mZnNldChjbwogICAgIHJldHVybiBv
ZmZzZXQuY3NzVGV4dCgpOwogfQogCi1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBidWls
ZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG9mZnNldCwgQ1NTVmFsdWVJRCBkZWZhdWx0U2lkZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZl
VmFsdWU+IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQoQ1NTUHJpbWl0aXZlVmFsdWUq
IG9mZnNldCwgQ1NTVmFsdWVJRCBkZWZhdWx0U2lkZSkKIHsKICAgICBDU1NWYWx1ZUlEIHNpZGUg
PSBkZWZhdWx0U2lkZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudDsKQEAg
LTExMCw4ICsxMTAsOCBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkQ2lyY2xlU3RyaW5nKGNvbnN0IFN0
CiAKIFN0cmluZyBDU1NCYXNpY1NoYXBlQ2lyY2xlOjpjc3NUZXh0KCkgY29uc3QKIHsKLSAgICBS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWCA9IGJ1aWxkU2VyaWFsaXphYmxlUG9z
aXRpb25PZmZzZXQobV9jZW50ZXJYLCBDU1NWYWx1ZUxlZnQpOwotICAgIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gbm9ybWFsaXplZENZID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldCht
X2NlbnRlclksIENTU1ZhbHVlVG9wKTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1h
bGl6ZWRDWCA9IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJYLmdldCgp
LCBDU1NWYWx1ZUxlZnQpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENZ
ID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclkuZ2V0KCksIENTU1Zh
bHVlVG9wKTsKIAogICAgIFN0cmluZyByYWRpdXM7CiAgICAgaWYgKG1fcmFkaXVzICYmIG1fcmFk
aXVzLT5nZXRWYWx1ZUlEKCkgIT0gQ1NTVmFsdWVDbG9zZXN0U2lkZSkKQEAgLTE2Nyw4ICsxNjcs
OCBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkRWxsaXBzZVN0cmluZyhjb25zdCBTCiAKIFN0cmluZyBD
U1NCYXNpY1NoYXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiBub3JtYWxpemVkQ1ggPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0
KG1fY2VudGVyWCwgQ1NTVmFsdWVMZWZ0KTsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5v
cm1hbGl6ZWRDWSA9IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJZLCBD
U1NWYWx1ZVRvcCk7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1ggPSBi
dWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVyWC5nZXQoKSwgQ1NTVmFsdWVM
ZWZ0KTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWSA9IGJ1aWxkU2Vy
aWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJZLmdldCgpLCBDU1NWYWx1ZVRvcCk7CiAK
ICAgICBTdHJpbmcgcmFkaXVzWDsKICAgICBTdHJpbmcgcmFkaXVzWTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NCYXNpY1NoYXBlcy5oCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQmFzaWNTaGFwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDEwICsxNjAsMTAg
QEAgcHVibGljOgogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByYWRpdXNYKCkgY29uc3QgeyByZXR1
cm4gbV9yYWRpdXNYLmdldCgpOyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1c1koKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1kuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0Q2VudGVyWChQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYKSB7IG1fY2VudGVyWCA9IGNlbnRl
clg7IH0KLSAgICB2b2lkIHNldENlbnRlclkoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y2VudGVyWSkgeyBtX2NlbnRlclkgPSBjZW50ZXJZOyB9Ci0gICAgdm9pZCBzZXRSYWRpdXNYKFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gcmFkaXVz
WDsgfQotICAgIHZvaWQgc2V0UmFkaXVzWShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBy
YWRpdXNZKSB7IG1fcmFkaXVzWSA9IHJhZGl1c1k7IH0KKyAgICB2b2lkIHNldENlbnRlclgoUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIGNlbnRlclgpIHsgbV9jZW50ZXJYID0gV1RGTW92ZShj
ZW50ZXJYKTsgfQorICAgIHZvaWQgc2V0Q2VudGVyWShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
JiYgY2VudGVyWSkgeyBtX2NlbnRlclkgPSBXVEZNb3ZlKGNlbnRlclkpOyB9CisgICAgdm9pZCBz
ZXRSYWRpdXNYKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiByYWRpdXNYKSB7IG1fcmFkaXVz
WCA9IFdURk1vdmUocmFkaXVzWCk7IH0KKyAgICB2b2lkIHNldFJhZGl1c1koUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYmIHJhZGl1c1kpIHsgbV9yYWRpdXNZID0gV1RGTW92ZShyYWRpdXNZKTsg
fQogCiBwcml2YXRlOgogICAgIENTU0Jhc2ljU2hhcGVFbGxpcHNlKCkgeyB9CkBAIC0xODIsMTAg
KzE4MiwxMCBAQCBjbGFzcyBDU1NCYXNpY1NoYXBlUG9seWdvbiBmaW5hbCA6IHB1YmxpCiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxDU1NCYXNpY1NoYXBlUG9seWdvbj4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDU1NCYXNpY1NoYXBlUG9seWdvbik7IH0KIAotICAgIHZvaWQgYXBw
ZW5kUG9pbnQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4geSkKKyAgICB2b2lkIGFwcGVuZFBvaW50KFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mJiB4LCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgeSkKICAgICB7Ci0gICAg
ICAgIG1fdmFsdWVzLmFwcGVuZCh4KTsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHkpOworICAg
ICAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGTW92ZSh4KSk7CisgICAgICAgIG1fdmFsdWVzLmFwcGVu
ZChXVEZNb3ZlKHkpKTsKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGdl
dFhBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5hdChpICogMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJldmlzaW9u
IDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAwLDkgKzIwMCw5IEBAIGRvdWJsZSBDU1NDYWxjVmFsdWU6OmNv
bXB1dGVMZW5ndGhQeChjb24KIGNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZSBmaW5hbCA6IHB1
YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUo
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQorICAg
IHN0YXRpYyBSZWY8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHZhbHVlLCBib29sIGlzSW50ZWdlcikKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgaXNJbnRlZ2VyKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZShXVEZN
b3ZlKHZhbHVlKSwgaXNJbnRlZ2VyKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMgdHlwZSwgYm9vbCBpc0ludGVnZXIpCkBAIC0yOTMsOSArMjkzLDkgQEAgcHJp
dmF0ZToKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlLCBib29sIGlzSW50ZWdlcikK
KyAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYmIHZhbHVlLCBib29sIGlzSW50ZWdlcikKICAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUodW5pdENhdGVnb3J5KChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT5w
cmltaXRpdmVUeXBlKCkpLCBpc0ludGVnZXIpCi0gICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAg
ICAgICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY5NSw5ICs2Njk1LDkgQEAg
UmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYQogICAgICAgICBpZiAoYXJn
cy5jdXJyZW50SW5kZXgoKSA8IDIgJiYgYXJndW1lbnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKICAg
ICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hh
cGVSYWRpdXMoKmFyZ3VtZW50KSkgewogICAgICAgICAgICAgICAgIGlmICghc2hhcGUtPnJhZGl1
c1goKSkKLSAgICAgICAgICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1c1gocmFkaXVzKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1c1goV1RGTW92ZShyYWRpdXMpKTsKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXNZ
KHJhZGl1cyk7CisgICAgICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXNZKFdURk1vdmUo
cmFkaXVzKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAg
LTY3MTMsOCArNjcxMyw4IEBAIFJlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNl
QmEKICAgICAgICAgaWYgKCFjZW50ZXJYIHx8ICFjZW50ZXJZIHx8IGFyZ3MuY3VycmVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgc2hhcGUtPnNldENlbnRlclgo
Y2VudGVyWCk7Ci0gICAgICAgIHNoYXBlLT5zZXRDZW50ZXJZKGNlbnRlclkpOworICAgICAgICBz
aGFwZS0+c2V0Q2VudGVyWChXVEZNb3ZlKGNlbnRlclgpKTsKKyAgICAgICAgc2hhcGUtPnNldENl
bnRlclkoV1RGTW92ZShjZW50ZXJZKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNoYXBlOwpAQCAt
MTI4OTEsNyArMTI4OTEsNyBAQCBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmVh
dGVNCiAgICAgICAgIC8vIGV2ZW4gd2hlbiBpdCBpcyBzeW50YWN0aWNhbGx5IGluY29ycmVjdC4K
ICAgICAgICAgcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUoTWVkaWFRdWVyeVNldDo6Y3Jl
YXRlKCksIGVtcHR5UnVsZXMpOwogICAgIH0gZWxzZQotICAgICAgICBydWxlID0gU3R5bGVSdWxl
TWVkaWE6OmNyZWF0ZShtZWRpYSwgcnVsZXMgPyAqcnVsZXMgOiBlbXB0eVJ1bGVzKTsKKyAgICAg
ICAgcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEucmVsZWFzZU5vbk51bGwoKSwg
cnVsZXMgPyAqcnVsZXMgOiBlbXB0eVJ1bGVzKTsKICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRv
U291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHJ1bGU7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDks
NyBAQCB1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAKICAgICBSdWxl
TXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMsIFJ1bGVJbnNlcnRpb24sIGlzPFN0eWxl
UnVsZUtleWZyYW1lcz4oKnJ1bGUpID8gZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxl
LmdldCgpKSA6IG51bGxwdHIpOwogCi0gICAgYm9vbCBzdWNjZXNzID0gbV9jb250ZW50cy5nZXQo
KS53cmFwcGVySW5zZXJ0UnVsZShydWxlLCBpbmRleCk7CisgICAgYm9vbCBzdWNjZXNzID0gbV9j
b250ZW50cy5nZXQoKS53cmFwcGVySW5zZXJ0UnVsZShydWxlLnJlbGVhc2VOb25OdWxsKCksIGlu
ZGV4KTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Rv
U3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzEsOCArNTMxLDggQEAgdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25UcmlnZ2VyKAogICAgIGlmICh2YWx1ZS5pc0FuaW1hdGlvblRy
aWdnZXJTY3JvbGxWYWx1ZSgpKSB7CiAgICAgICAgIGF1dG8mIHNjcm9sbFRyaWdnZXIgPSBkb3du
Y2FzdDxDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU+KHZhbHVlKTsKIAotICAgICAgICBj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSogc3RhcnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPihzY3JvbGxUcmlnZ2VyLnN0YXJ0VmFsdWUoKSk7Ci0gICAgICAgIExlbmd0aCBzdGFy
dExlbmd0aCA9IHN0YXJ0VmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihtX3Jlc29sdmVyLT5z
dGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgIGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlJiBzdGFydFZhbHVlID0gKmRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigm
c2Nyb2xsVHJpZ2dlci5zdGFydFZhbHVlKCkpOworICAgICAgICBMZW5ndGggc3RhcnRMZW5ndGgg
PSBzdGFydFZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAKICAgICAgICAgTGVuZ3RoIGVuZExlbmd0aDsK
ICAgICAgICAgaWYgKHNjcm9sbFRyaWdnZXIuaGFzRW5kVmFsdWUoKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUnVsZS5jcHAJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNCArNDUsMTQgQEAgc3RydWN0
IFNhbWVTaXplQXNTdHlsZVJ1bGVCYXNlIDogcHVibGljIAogCiBDT01QSUxFX0FTU0VSVChzaXpl
b2YoU3R5bGVSdWxlQmFzZSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNTdHlsZVJ1bGVCYXNlKSwgU3R5
bGVSdWxlQmFzZV9zaG91bGRfc3RheV9zbWFsbCk7CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZT4gU3R5
bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0
KSBjb25zdAorUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBl
cihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRl
Q1NTT01XcmFwcGVyKHBhcmVudFNoZWV0LCAwKTsKKyAgICByZXR1cm4gY3JlYXRlQ1NTT01XcmFw
cGVyKHBhcmVudFNoZWV0LCBudWxscHRyKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHls
ZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTUnVsZSogcGFyZW50UnVsZSkgY29uc3QK
K1JlZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTUnVs
ZSogcGFyZW50UnVsZSkgY29uc3QKIHsgCi0gICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBlcigw
LCBwYXJlbnRSdWxlKTsKKyAgICByZXR1cm4gY3JlYXRlQ1NTT01XcmFwcGVyKG51bGxwdHIsIHBh
cmVudFJ1bGUpOwogfQogCiB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQpAQCAtMzI5LDkg
KzMyOSw5IEBAIHZvaWQgU3R5bGVSdWxlR3JvdXA6OndyYXBwZXJSZW1vdmVSdWxlKHUKIH0KIAog
Ci1TdHlsZVJ1bGVNZWRpYTo6U3R5bGVSdWxlTWVkaWEoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0
PiBtZWRpYSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMpCitTdHls
ZVJ1bGVNZWRpYTo6U3R5bGVSdWxlTWVkaWEoUmVmPE1lZGlhUXVlcnlTZXQ+IG1lZGlhLCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgYWRvcHRSdWxlcykKICAgICA6IFN0eWxlUnVsZUdy
b3VwKE1lZGlhLCBhZG9wdFJ1bGVzKQotICAgICwgbV9tZWRpYVF1ZXJpZXMobWVkaWEpCisgICAg
LCBtX21lZGlhUXVlcmllcyhXVEZNb3ZlKG1lZGlhKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGUuaAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxkbid0IGJlIGFueSBuZWVkIGZvciB0aGUgbnVsbCBw
YXJlbnQgdmVyc2lvbi4KLSAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNTU09NV3JhcHBl
cihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IDApIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
Q1NTUnVsZT4gY3JlYXRlQ1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0Owor
ICAgIFJlZlB0cjxDU1NSdWxlPiBjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQgPSAwKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ1NTT01XcmFw
cGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgU3R5bGVS
dWxlQmFzZShUeXBlIHR5cGUsIHNpZ25lZCBzb3VyY2VMaW5lID0gMCkgOiBtX3R5cGUodHlwZSks
IG1fc291cmNlTGluZShzb3VyY2VMaW5lKSB7IH0KQEAgLTE5Myw5ICsxOTMsOSBAQCBwcml2YXRl
OgogCiBjbGFzcyBTdHlsZVJ1bGVNZWRpYSA6IHB1YmxpYyBTdHlsZVJ1bGVHcm91cCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZVJ1bGVNZWRpYT4gY3JlYXRlKFBhc3NSZWZQdHI8TWVk
aWFRdWVyeVNldD4gbWVkaWEsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBhZG9wdFJ1
bGVzKQorICAgIHN0YXRpYyBSZWY8U3R5bGVSdWxlTWVkaWE+IGNyZWF0ZShSZWY8TWVkaWFRdWVy
eVNldD4mJiBtZWRpYSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVJ1bGVNZWRpYShtZWRp
YSwgYWRvcHRSdWxlcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVJ1bGVN
ZWRpYShXVEZNb3ZlKG1lZGlhKSwgYWRvcHRSdWxlcykpOwogICAgIH0KIAogICAgIE1lZGlhUXVl
cnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgp
OyB9CkBAIC0yMDMsNyArMjAzLDcgQEAgcHVibGljOgogICAgIFJlZjxTdHlsZVJ1bGVNZWRpYT4g
Y29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlTWVkaWEoKnRoaXMp
KTsgfQogCiBwcml2YXRlOgotICAgIFN0eWxlUnVsZU1lZGlhKFBhc3NSZWZQdHI8TWVkaWFRdWVy
eVNldD4sIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKTsKKyAgICBT
dHlsZVJ1bGVNZWRpYShSZWY8TWVkaWFRdWVyeVNldD4sIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4+JiBhZG9wdFJ1bGVzKTsKICAgICBTdHlsZVJ1bGVNZWRpYShjb25zdCBTdHlsZVJ1bGVN
ZWRpYSYpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHJldmlzaW9uIDIw
MTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBh
cnNlclNldEVuY29kaQogICAgIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUgPSBlbmNvZGluZzsg
CiB9CiAKLWJvb2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2lnbmVkIGluZGV4KQorYm9vbCBTdHlsZVNoZWV0
Q29udGVudHM6OndyYXBwZXJJbnNlcnRSdWxlKFJlZjxTdHlsZVJ1bGVCYXNlPiYmIHJ1bGUsIHVu
c2lnbmVkIGluZGV4KQogewogICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7CiAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPD0gcnVsZUNvdW50KCkpOwpAQCAtMjI2LDI0
ICsyMjYsMjQgQEAgYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJJbnNlcnRSdQogICAg
IAogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkgfHwgKGNo
aWxkVmVjdG9ySW5kZXggPT0gbV9pbXBvcnRSdWxlcy5zaXplKCkgJiYgcnVsZS0+aXNJbXBvcnRS
dWxlKCkpKSB7CiAgICAgICAgIC8vIEluc2VydGluZyBub24taW1wb3J0IHJ1bGUgYmVmb3JlIEBp
bXBvcnQgaXMgbm90IGFsbG93ZWQuCi0gICAgICAgIGlmICghaXM8U3R5bGVSdWxlSW1wb3J0Pigq
cnVsZSkpCisgICAgICAgIGlmICghaXM8U3R5bGVSdWxlSW1wb3J0PihydWxlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9pbXBvcnRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0
b3JJbmRleCwgZG93bmNhc3Q8U3R5bGVSdWxlSW1wb3J0PihydWxlLmdldCgpKSk7CisgICAgICAg
IG1faW1wb3J0UnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsICZkb3duY2FzdDxTdHlsZVJ1
bGVJbXBvcnQ+KHJ1bGUuZ2V0KCkpKTsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3Rv
ckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlzKTsKICAgICAgICAgbV9pbXBvcnRSdWxl
c1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxlU2hlZXQoKTsKICAgICAgICAgLy8gRklY
TUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgbWVhbmluZ2Z1bGx5IGJlZm9y
ZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBy
dWxlIGlzIG5vdCBhbGxvd2VkLgotICAgIGlmIChpczxTdHlsZVJ1bGVJbXBvcnQ+KCpydWxlKSkK
KyAgICBpZiAoaXM8U3R5bGVSdWxlSW1wb3J0PihydWxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAKICAgICAv
LyBJZiB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyB3b3VsZCBvdmVyZmxvdyBSdWxlRGF0YSwgd2Ug
ZHJvcCB0aGUgb3BlcmF0aW9uLgotICAgIGlmIChpczxTdHlsZVJ1bGU+KCpydWxlKSAmJiBkb3du
Y2FzdDxTdHlsZVJ1bGU+KCpydWxlKS5zZWxlY3Rvckxpc3QoKS5jb21wb25lbnRDb3VudCgpID4g
UnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KQorICAgIGlmIChpczxTdHls
ZVJ1bGU+KHJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkuc2VsZWN0b3JM
aXN0KCkuY29tcG9uZW50Q291bnQoKSA+IFJ1bGVEYXRhOjptYXhpbXVtU2VsZWN0b3JDb21wb25l
bnRDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jaGlsZFJ1bGVzLmluc2Vy
dChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKKyAgICBtX2NoaWxkUnVsZXMuaW5zZXJ0KGNoaWxk
VmVjdG9ySW5kZXgsIFdURk1vdmUocnVsZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCShyZXZpc2lvbiAyMDExMTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBlc3RpbWF0ZWRT
aXplSW5CeXRlcygpIGNvbnN0OwogICAgIAotICAgIGJvb2wgd3JhcHBlckluc2VydFJ1bGUoUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQgaW5kZXgpOworICAgIGJvb2wgd3JhcHBl
ckluc2VydFJ1bGUoUmVmPFN0eWxlUnVsZUJhc2U+JiYsIHVuc2lnbmVkIGluZGV4KTsKICAgICB2
b2lkIHdyYXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KTsKIAogICAgIFJlZjxTdHlsZVNo
ZWV0Q29udGVudHM+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlU2hl
ZXRDb250ZW50cygqdGhpcykpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShy
ZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2NzUsMTkgKzE2NzUsMTkgQEAgdm9pZCBET01XaW5kb3c6OmNsZWFy
SW50ZXJ2YWwoaW50IHRpbWVvdQogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQotaW50IERPTVdpbmRvdzo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQdHI8UmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IGNhbGxiYWNrKQoraW50IERPTVdpbmRvdzo6cmVx
dWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBjYWxsYmFjay0+bV91c2VMZWdhY3lUaW1lQmFzZSA9IGZhbHNlOwog
ICAgIGlmIChEb2N1bWVudCogZCA9IGRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkLT5yZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spOworICAgICAgICByZXR1cm4gZC0+cmVxdWVzdEFu
aW1hdGlvbkZyYW1lKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gMDsKIH0KIAotaW50
IERPTVdpbmRvdzo6d2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQdHI8UmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IGNhbGxiYWNrKQoraW50IERPTVdpbmRvdzo6d2Via2l0
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICAgICBjYWxsYmFjay0+bV91c2VMZWdhY3lUaW1lQmFzZSA9IHRydWU7
CiAgICAgaWYgKERvY3VtZW50KiBkID0gZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGQtPnJl
cXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7CisgICAgICAgIHJldHVybiBkLT5yZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiAwOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw4ICsyNzIsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gV2ViS2l0IGFuaW1hdGlvbiBleHRl
bnNpb25zCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgICAgICBpbnQg
cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2Fs
bGJhY2s+KTsKLSAgICAgICAgaW50IHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShQYXNzUmVm
UHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPik7CisgICAgICAgIGludCByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKKyAg
ICAgICAgaW50IHdlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlv
bkZyYW1lQ2FsbGJhY2s+JiYpOwogICAgICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlu
dCBpZCk7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279421</attachid>
            <date>2016-05-19 13:24:38 -0700</date>
            <delta_ts>2016-05-19 15:09:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157875-20160519132542.patch</filename>
            <type>text/plain</type>
            <size>34207</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTExOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE2LTA1LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IENTUyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IgZXhjZXB0IGZpeGluZyBhIG51bGwgZGVyZWZlcmVuY2lu
Zy4KKyAgICAgICAgVGVzdGVkIGJ5IGZhc3QvY3NzL2NvbXBhcmUtYW5pbWF0aW9uLXRyaWdnZXIu
aHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06Cisg
ICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrKToKKyAgICAgICAgVXNlIGF1dG8gbW9yZSBiZWNhdXNlIHNvbWUgY3JlYXRlIGZ1
bmN0aW9ucyByZXR1cm4gYSBSZWYgaW5zdGVhZCBvZiBhIFJlZlB0ciwgYW5kIHdlIHdhbnQgdG8g
dXNlIHRoYXQgaWYgcG9zc2libGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6
CisgICAgICAgICogY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmVxdWFscyk6Cisg
ICAgICAgICogY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlOjpzdGFydFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZTo6ZW5kVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlOjpo
YXNFbmRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xs
VmFsdWU6OkNTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZSk6CisgICAgICAgICogY3NzL0NT
U0Jhc2ljU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVBvc2l0aW9uT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQmFzaWNTaGFwZUNpcmNsZTo6Y3NzVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlRWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgICog
Y3NzL0NTU0Jhc2ljU2hhcGVzLmg6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhc2lj
U2hhcGVFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFS
dWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1h
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Ucmln
Z2VyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVCYXNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUdyb3VwOjp3
cmFwcGVyUmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVNZWRpYTo6U3R5
bGVSdWxlTWVkaWEpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUnVsZUJhc2U6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJh
c2U6OlN0eWxlUnVsZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlTWVkaWE6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVNZWRpYTo6bWVkaWFRdWVyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZU1lZGlhOjpjb3B5KToKKyAgICAgICAgKiBjc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250
ZW50czo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgICogY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRl
bnRzOjpjb3B5KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OmNsZWFySW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93
Lmg6CisKIDIwMTYtMDUtMTggIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW2lPU10gRnVsbHNjcmVlbiB2aWRlbyBwbGF5YmFjayBicm9rZW4gaW4gV0sx
IGFwcHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjcyNyw3
ICsyNzI3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAg
ICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAs
ICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykg
LiAiKSIsICJjYXN0ZWRUaGlzIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKSBpZiAhJGF0
dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb2Jq
ID0gJGpzVHlwZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAkanNUeXBlO1xuIik7CkBAIC0yOTQwLDcgKzI5NDAsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBpZiAoJHB1dEZvcndhcmRzKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2Rl
R2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSB8fCAkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR7dHlwZX0+
IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJHtpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lfSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byBmb3J3YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiR7
aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0oKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZm9yd2FyZGVkSW1wbClcbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7XG4iKTsKQEAgLTM2OTksOSAr
MzY5OSw5IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKCpzdGF0ZSwgJGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNl
TmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lKTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgk
ZnVuY3Rpb24tPmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJDYWxsYmFja0Z1bmN0aW9uLmgiKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlD
YWxsYmFjazwke2NhbGxiYWNrQ2xhc3NOYW1lfT4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoJGFyZ3VtZW50SW5kZXgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgYXV0byAkbmFtZSA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNr
PCR7Y2FsbGJhY2tDbGFzc05hbWV9PihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgk
YXJndW1lbnRJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUg
PSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgkYXJndW1lbnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5h
bWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7
XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFs
dWUgPSAiV1RGTW92ZSgkbmFtZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RNZWRpYQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
c3RhdGUtPmFyZ3VtZW50KDApLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4gbGlzdGVuZXIgPSBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgYXV0byBsaXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6
Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZChXVEZNb3ZlKGxpc3RlbmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOSwxMCArMTAxOSwx
MCBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUs
IDAsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdE9iaiIsIG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0
Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVj
dChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmoiLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHRlc3RDYWxsYmFja0Z1
bmN0aW9uID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBh
dXRvIG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZSgqdGVzdENhbGxiYWNrLCAqdGVzdENhbGxiYWNr
RnVuY3Rpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpKTsKIH0KQEAg
LTM4NTgsNyArMzg1OCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0
dHIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzTnVsbGFibGVB
dHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgUmVmUHRyPFRlc3ROb2RlPiBmb3J3YXJkZWRJbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKTsKKyAg
ICBhdXRvIGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZSgpOwogICAgIGlmICghZm9yd2FyZGVkSW1wbCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDsKQEAgLTUwNDUsNyAr
NTA0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgwKS5pc09iamVj
dCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpz
dGF0ZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7
Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBA
IC01MDY1LDcgKzUwNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFj
ayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7
Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01MTAwLDcgKzUxMDAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25Bcmci
KTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNU
ZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhDYWxsYmFja0Z1bmN0aW9uQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNTEyMCw3ICs1MTIwLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFy
Z3VtZW50KDEpLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhv
ZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKLSAgICBSZWZQdHI8
VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoV1RGTW92ZShub25DYWxsYmFjayksIFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtNTE2MSw3ICs1MTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDbwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50
KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJzdGF0aWNNZXRob2RX
aXRoQ2FsbGJhY2tBcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IGNy
ZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9u
T25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpAQCAtNTI5Myw3ICs1MjkzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFy
Z3VtZW50KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJvdmVybG9h
ZGVkTWV0aG9kIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkp
KQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRl
LCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwotICAgIFJlZlB0
cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNP
YmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCkpOworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0VHlwZWRlZnM6OmNyZWF0ZShoZWxsbywg
KnRlc3RDYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSkpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0FuaW1hdGlvblRyaWdn
ZXJTY3JvbGxWYWx1ZS5jcHAJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIFN0cmluZyBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmMKIAog
Ym9vbCBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmVxdWFscyhjb25zdCBDU1NBbmlt
YXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUmIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBtX3N0
YXJ0VmFsdWUtPmVxdWFscygqb3RoZXIubV9zdGFydFZhbHVlLmdldCgpKSAmJiBtX2VuZFZhbHVl
LT5lcXVhbHMoKm90aGVyLm1fZW5kVmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBtX3N0YXJ0VmFs
dWUtPmVxdWFscyhvdGhlci5tX3N0YXJ0VmFsdWUuZ2V0KCkpICYmIGFyZVBvaW50aW5nVG9FcXVh
bERhdGEobV9lbmRWYWx1ZSwgb3RoZXIubV9lbmRWYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbmltYXRpb25UcmlnZ2VyU2Ny
b2xsVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQW5pbWF0aW9u
VHJpZ2dlclNjcm9sbFZhbHVlLmgJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMTMgKzM4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
QW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlKFdURk1vdmUoc3RhcnRWYWx1ZSksIFdURk1vdmUo
ZW5kVmFsdWUpKSk7CiAgICAgfQogCi0gICAgY29uc3QgQ1NTVmFsdWUqIHN0YXJ0VmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0VmFsdWUuZ2V0KCk7IH0KKyAgICBjb25zdCBDU1NWYWx1ZSYg
c3RhcnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRWYWx1ZS5nZXQoKTsgfQogICAgIGNv
bnN0IENTU1ZhbHVlKiBlbmRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kVmFsdWUuZ2V0KCk7
IH0KICAgICBib29sIGhhc0VuZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9lbmRWYWx1ZTsgfQog
CiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAogICAgIGJvb2wgZXF1YWxzKGNv
bnN0IENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZSYpIGNvbnN0OworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUmIG90aGVyKSBjb25z
dCB7IHJldHVybiBlcXVhbHMob3RoZXIpOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTQW5pbWF0aW9u
VHJpZ2dlclNjcm9sbFZhbHVlKFJlZjxDU1NWYWx1ZT4mJiBzdGFydFZhbHVlLCBSZWZQdHI8Q1NT
VmFsdWU+JiYgZW5kVmFsdWUpCkBAIC01NCw3ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgewogICAg
IH0KIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9zdGFydFZhbHVlOworICAgIFJlZjxDU1NWYWx1
ZT4gbV9zdGFydFZhbHVlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9lbmRWYWx1ZTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAkocmV2aXNpb24gMjAxMTEz
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVBvc2l0aW9uT2Zmc2V0
KGNvCiAgICAgcmV0dXJuIG9mZnNldC5jc3NUZXh0KCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQoUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0LCBDU1NWYWx1ZUlEIGRlZmF1bHRTaWRlKQorc3RhdGlj
IFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChD
U1NQcmltaXRpdmVWYWx1ZSogb2Zmc2V0LCBDU1NWYWx1ZUlEIGRlZmF1bHRTaWRlKQogewogICAg
IENTU1ZhbHVlSUQgc2lkZSA9IGRlZmF1bHRTaWRlOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gYW1vdW50OwpAQCAtMTEwLDggKzExMCw4IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRDaXJj
bGVTdHJpbmcoY29uc3QgU3QKIAogU3RyaW5nIENTU0Jhc2ljU2hhcGVDaXJjbGU6OmNzc1RleHQo
KSBjb25zdAogewotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENYID0gYnVp
bGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclgsIENTU1ZhbHVlTGVmdCk7Ci0g
ICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6YWJs
ZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVyWSwgQ1NTVmFsdWVUb3ApOworICAgIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbm9ybWFsaXplZENYID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNl
dChtX2NlbnRlclguZ2V0KCksIENTU1ZhbHVlTGVmdCk7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2Vu
dGVyWS5nZXQoKSwgQ1NTVmFsdWVUb3ApOwogCiAgICAgU3RyaW5nIHJhZGl1czsKICAgICBpZiAo
bV9yYWRpdXMgJiYgbV9yYWRpdXMtPmdldFZhbHVlSUQoKSAhPSBDU1NWYWx1ZUNsb3Nlc3RTaWRl
KQpAQCAtMTY3LDggKzE2Nyw4IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRFbGxpcHNlU3RyaW5nKGNv
bnN0IFMKIAogU3RyaW5nIENTU0Jhc2ljU2hhcGVFbGxpcHNlOjpjc3NUZXh0KCkgY29uc3QKIHsK
LSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWCA9IGJ1aWxkU2VyaWFsaXph
YmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJYLCBDU1NWYWx1ZUxlZnQpOwotICAgIFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENZID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9m
ZnNldChtX2NlbnRlclksIENTU1ZhbHVlVG9wKTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IG5vcm1hbGl6ZWRDWCA9IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJY
LmdldCgpLCBDU1NWYWx1ZUxlZnQpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFs
aXplZENZID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclkuZ2V0KCks
IENTU1ZhbHVlVG9wKTsKIAogICAgIFN0cmluZyByYWRpdXNYOwogICAgIFN0cmluZyByYWRpdXNZ
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmgJKHJldmlzaW9uIDIwMTExMykK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsMTAgKzE2MCwxMCBAQCBwdWJsaWM6CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1
c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1guZ2V0KCk7IH0KICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS5nZXQoKTsgfQogCi0gICAg
dm9pZCBzZXRDZW50ZXJYKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclgpIHsg
bV9jZW50ZXJYID0gY2VudGVyWDsgfQotICAgIHZvaWQgc2V0Q2VudGVyWShQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZKSB7IG1fY2VudGVyWSA9IGNlbnRlclk7IH0KLSAgICB2
b2lkIHNldFJhZGl1c1goUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzWCkgeyBt
X3JhZGl1c1ggPSByYWRpdXNYOyB9Ci0gICAgdm9pZCBzZXRSYWRpdXNZKFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHJhZGl1c1kpIHsgbV9yYWRpdXNZID0gcmFkaXVzWTsgfQorICAgIHZv
aWQgc2V0Q2VudGVyWChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgY2VudGVyWCkgeyBtX2Nl
bnRlclggPSBXVEZNb3ZlKGNlbnRlclgpOyB9CisgICAgdm9pZCBzZXRDZW50ZXJZKFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mJiBjZW50ZXJZKSB7IG1fY2VudGVyWSA9IFdURk1vdmUoY2VudGVy
WSk7IH0KKyAgICB2b2lkIHNldFJhZGl1c1goUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHJh
ZGl1c1gpIHsgbV9yYWRpdXNYID0gV1RGTW92ZShyYWRpdXNYKTsgfQorICAgIHZvaWQgc2V0UmFk
aXVzWShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcmFkaXVzWSkgeyBtX3JhZGl1c1kgPSBX
VEZNb3ZlKHJhZGl1c1kpOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTQmFzaWNTaGFwZUVsbGlwc2Uo
KSB7IH0KQEAgLTE4MiwxMCArMTgyLDEwIEBAIGNsYXNzIENTU0Jhc2ljU2hhcGVQb2x5Z29uIGZp
bmFsIDogcHVibGkKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENTU0Jhc2ljU2hhcGVQb2x5Z29u
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0Jhc2ljU2hhcGVQb2x5Z29uKTsg
fQogCi0gICAgdm9pZCBhcHBlbmRQb2ludChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4
LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5KQorICAgIHZvaWQgYXBwZW5kUG9pbnQo
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHgsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
JiB5KQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHgpOwotICAgICAgICBtX3ZhbHVl
cy5hcHBlbmQoeSk7CisgICAgICAgIG1fdmFsdWVzLmFwcGVuZChXVEZNb3ZlKHgpKTsKKyAgICAg
ICAgbV92YWx1ZXMuYXBwZW5kKFdURk1vdmUoeSkpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gZ2V0WEF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmF0KGkgKiAyKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1
bGF0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOSArMjAwLDkgQEAgZG91Ymxl
IENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbgogY2xhc3MgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjUHJpbWl0
aXZlVmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZSwgYm9v
bCBpc0ludGVnZXIpCisgICAgc3RhdGljIFJlZjxDU1NDYWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0
ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKHZh
bHVlLCBpc0ludGVnZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlKFdURk1vdmUodmFsdWUpLCBpc0ludGVnZXIpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGRvdWJsZSB2YWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGlzSW50ZWdlcikKQEAgLTI5
Myw5ICsyOTMsOSBAQCBwcml2YXRlOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBD
U1NDYWxjUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUs
IGJvb2wgaXNJbnRlZ2VyKQorICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1ZShSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQogICAgICAgICA6
IENTU0NhbGNFeHByZXNzaW9uTm9kZSh1bml0Q2F0ZWdvcnkoKENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSksIGlzSW50ZWdlcikKLSAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCiAgICAgewog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIwMTExMykK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Njk1LDkgKzY2OTUsOSBAQCBSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJh
CiAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRJbmRleCgpIDwgMiAmJiBhcmd1bWVudC0+aWQgIT0g
Q1NTVmFsdWVBdCkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cygqYXJndW1lbnQpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKCFzaGFwZS0+cmFkaXVzWCgpKQotICAgICAgICAgICAgICAgICAgICBzaGFwZS0+c2V0UmFk
aXVzWChyYWRpdXMpOworICAgICAgICAgICAgICAgICAgICBzaGFwZS0+c2V0UmFkaXVzWChXVEZN
b3ZlKHJhZGl1cykpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
c2hhcGUtPnNldFJhZGl1c1kocmFkaXVzKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhcGUtPnNl
dFJhZGl1c1koV1RGTW92ZShyYWRpdXMpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KIApAQCAtNjcxMyw4ICs2NzEzLDggQEAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+
IENTU1BhcnNlcjo6cGFyc2VCYQogICAgICAgICBpZiAoIWNlbnRlclggfHwgIWNlbnRlclkgfHwg
YXJncy5jdXJyZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBz
aGFwZS0+c2V0Q2VudGVyWChjZW50ZXJYKTsKLSAgICAgICAgc2hhcGUtPnNldENlbnRlclkoY2Vu
dGVyWSk7CisgICAgICAgIHNoYXBlLT5zZXRDZW50ZXJYKFdURk1vdmUoY2VudGVyWCkpOworICAg
ICAgICBzaGFwZS0+c2V0Q2VudGVyWShXVEZNb3ZlKGNlbnRlclkpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gc2hhcGU7CkBAIC0xMjg5MSw3ICsxMjg5MSw3IEBAIFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiBDU1NQYXJzZXI6OmNyZWF0ZU0KICAgICAgICAgLy8gZXZlbiB3aGVuIGl0IGlzIHN5bnRhY3Rp
Y2FsbHkgaW5jb3JyZWN0LgogICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShN
ZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKSwgZW1wdHlSdWxlcyk7CiAgICAgfSBlbHNlCi0gICAgICAg
IHJ1bGUgPSBTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCBydWxlcyA/ICpydWxlcyA6IGVt
cHR5UnVsZXMpOworICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShtZWRpYS5y
ZWxlYXNlTm9uTnVsbCgpLCBydWxlcyA/ICpydWxlcyA6IGVtcHR5UnVsZXMpOwogICAgIHByb2Nl
c3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKICAgICByZXR1cm4gcnVsZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDIwMTEx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUo
Y29uc3QKIAogICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcywgUnVsZUlu
c2VydGlvbiwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgPyBkb3duY2FzdDxTdHlsZVJ1
bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpIDogbnVsbHB0cik7CiAKLSAgICBib29sIHN1Y2Nlc3Mg
PSBtX2NvbnRlbnRzLmdldCgpLndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRzLmdldCgpLndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUucmVs
ZWFzZU5vbk51bGwoKSwgaW5kZXgpOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICBlYyA9
IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw4ICs1MzEs
OCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRyaWdnZXIoCiAgICAgaWYgKHZh
bHVlLmlzQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlKCkpIHsKICAgICAgICAgYXV0byYgc2Ny
b2xsVHJpZ2dlciA9IGRvd25jYXN0PENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZT4odmFs
dWUpOwogCi0gICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBzdGFydFZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHNjcm9sbFRyaWdnZXIuc3RhcnRWYWx1ZSgpKTsKLSAg
ICAgICAgTGVuZ3RoIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAg
ICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHN0YXJ0VmFsdWUgPSAqZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCZzY3JvbGxUcmlnZ2VyLnN0YXJ0VmFsdWUoKSk7CisgICAgICAgIExl
bmd0aCBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KG1fcmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKIAogICAgICAgICBM
ZW5ndGggZW5kTGVuZ3RoOwogICAgICAgICBpZiAoc2Nyb2xsVHJpZ2dlci5oYXNFbmRWYWx1ZSgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE0
ICs0NSwxNCBAQCBzdHJ1Y3QgU2FtZVNpemVBc1N0eWxlUnVsZUJhc2UgOiBwdWJsaWMgCiAKIENP
TVBJTEVfQVNTRVJUKHNpemVvZihTdHlsZVJ1bGVCYXNlKSA9PSBzaXplb2YoU2FtZVNpemVBc1N0
eWxlUnVsZUJhc2UpLCBTdHlsZVJ1bGVCYXNlX3Nob3VsZF9zdGF5X3NtYWxsKTsKIAotUGFzc1Jl
ZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVT
aGVldCogcGFyZW50U2hlZXQpIGNvbnN0CitSZWZQdHI8Q1NTUnVsZT4gU3R5bGVSdWxlQmFzZTo6
Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0KSBjb25zdAogewot
ICAgIHJldHVybiBjcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50U2hlZXQsIDApOworICAgIHJldHVy
biBjcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50U2hlZXQsIG51bGxwdHIpOwogfQogCi1QYXNzUmVm
UHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcihDU1NSdWxlKiBw
YXJlbnRSdWxlKSBjb25zdAorUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNT
U09NV3JhcHBlcihDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25zdAogeyAKLSAgICByZXR1cm4gY3Jl
YXRlQ1NTT01XcmFwcGVyKDAsIHBhcmVudFJ1bGUpOworICAgIHJldHVybiBjcmVhdGVDU1NPTVdy
YXBwZXIobnVsbHB0ciwgcGFyZW50UnVsZSk7CiB9CiAKIHZvaWQgU3R5bGVSdWxlQmFzZTo6ZGVz
dHJveSgpCkBAIC0zMjksOSArMzI5LDkgQEAgdm9pZCBTdHlsZVJ1bGVHcm91cDo6d3JhcHBlclJl
bW92ZVJ1bGUodQogfQogCiAKLVN0eWxlUnVsZU1lZGlhOjpTdHlsZVJ1bGVNZWRpYShQYXNzUmVm
UHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYg
YWRvcHRSdWxlcykKK1N0eWxlUnVsZU1lZGlhOjpTdHlsZVJ1bGVNZWRpYShSZWY8TWVkaWFRdWVy
eVNldD4gbWVkaWEsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKQog
ICAgIDogU3R5bGVSdWxlR3JvdXAoTWVkaWEsIGFkb3B0UnVsZXMpCi0gICAgLCBtX21lZGlhUXVl
cmllcyhtZWRpYSkKKyAgICAsIG1fbWVkaWFRdWVyaWVzKFdURk1vdmUobWVkaWEpKQogewogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDggQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IG5l
ZWQgZm9yIHRoZSBudWxsIHBhcmVudCB2ZXJzaW9uLgotICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4g
Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gMCkgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTUnVsZSogcGFy
ZW50UnVsZSkgY29uc3Q7CisgICAgUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNTU09NV3JhcHBlcihD
U1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IDApIGNvbnN0OworICAgIFJlZlB0cjxDU1NSdWxl
PiBjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTUnVsZSogcGFyZW50UnVsZSkgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKICAgICBTdHlsZVJ1bGVCYXNlKFR5cGUgdHlwZSwgc2lnbmVkIHNvdXJjZUxpbmUgPSAw
KSA6IG1fdHlwZSh0eXBlKSwgbV9zb3VyY2VMaW5lKHNvdXJjZUxpbmUpIHsgfQpAQCAtMTkzLDkg
KzE5Myw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFN0eWxlUnVsZU1lZGlhIDogcHVibGljIFN0eWxl
UnVsZUdyb3VwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0eWxlUnVsZU1lZGlhPiBjcmVh
dGUoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4mIGFkb3B0UnVsZXMpCisgICAgc3RhdGljIFJlZjxTdHlsZVJ1bGVNZWRpYT4gY3Jl
YXRlKFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+PiYgYWRvcHRSdWxlcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0
eWxlUnVsZU1lZGlhKG1lZGlhLCBhZG9wdFJ1bGVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFN0eWxlUnVsZU1lZGlhKFdURk1vdmUobWVkaWEpLCBhZG9wdFJ1bGVzKSk7CiAgICAg
fQogCiAgICAgTWVkaWFRdWVyeVNldCogbWVkaWFRdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9t
ZWRpYVF1ZXJpZXMuZ2V0KCk7IH0KQEAgLTIwMyw3ICsyMDMsNyBAQCBwdWJsaWM6CiAgICAgUmVm
PFN0eWxlUnVsZU1lZGlhPiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHls
ZVJ1bGVNZWRpYSgqdGhpcykpOyB9CiAKIHByaXZhdGU6Ci0gICAgU3R5bGVSdWxlTWVkaWEoUGFz
c1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFk
b3B0UnVsZXMpOworICAgIFN0eWxlUnVsZU1lZGlhKFJlZjxNZWRpYVF1ZXJ5U2V0PiwgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMpOwogICAgIFN0eWxlUnVsZU1lZGlh
KGNvbnN0IFN0eWxlUnVsZU1lZGlhJik7CiAKICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbV9t
ZWRpYVF1ZXJpZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIFN0eWxl
U2hlZXRDb250ZW50czo6cGFyc2VyU2V0RW5jb2RpCiAgICAgbV9lbmNvZGluZ0Zyb21DaGFyc2V0
UnVsZSA9IGVuY29kaW5nOyAKIH0KIAotYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJJ
bnNlcnRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSwgdW5zaWduZWQgaW5kZXgp
Citib29sIFN0eWxlU2hlZXRDb250ZW50czo6d3JhcHBlckluc2VydFJ1bGUoUmVmPFN0eWxlUnVs
ZUJhc2U+JiYgcnVsZSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgQVNTRVJUKG1faXNNdXRhYmxl
KTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8PSBydWxlQ291
bnQoKSk7CkBAIC0yMjYsMjQgKzIyNiwyNCBAQCBib29sIFN0eWxlU2hlZXRDb250ZW50czo6d3Jh
cHBlckluc2VydFJ1CiAgICAgCiAgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2ltcG9ydFJ1
bGVzLnNpemUoKSB8fCAoY2hpbGRWZWN0b3JJbmRleCA9PSBtX2ltcG9ydFJ1bGVzLnNpemUoKSAm
JiBydWxlLT5pc0ltcG9ydFJ1bGUoKSkpIHsKICAgICAgICAgLy8gSW5zZXJ0aW5nIG5vbi1pbXBv
cnQgcnVsZSBiZWZvcmUgQGltcG9ydCBpcyBub3QgYWxsb3dlZC4KLSAgICAgICAgaWYgKCFpczxT
dHlsZVJ1bGVJbXBvcnQ+KCpydWxlKSkKKyAgICAgICAgaWYgKCFpczxTdHlsZVJ1bGVJbXBvcnQ+
KHJ1bGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2ltcG9ydFJ1bGVz
Lmluc2VydChjaGlsZFZlY3RvckluZGV4LCBkb3duY2FzdDxTdHlsZVJ1bGVJbXBvcnQ+KHJ1bGUu
Z2V0KCkpKTsKKyAgICAgICAgbV9pbXBvcnRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwg
JmRvd25jYXN0PFN0eWxlUnVsZUltcG9ydD4ocnVsZS5nZXQoKSkpOwogICAgICAgICBtX2ltcG9y
dFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5zZXRQYXJlbnRTdHlsZVNoZWV0KHRoaXMpOwogICAg
ICAgICBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5yZXF1ZXN0U3R5bGVTaGVldCgp
OwogICAgICAgICAvLyBGSVhNRTogU3R5bGVzaGVldCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBt
ZWFuaW5nZnVsbHkgYmVmb3JlIHRoZSBpbXBvcnRlZCBzaGVldHMgYXJlIGxvYWRlZC4KICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vIEluc2VydGluZyBAaW1wb3J0IHJ1bGUgYWZ0
ZXIgYSBub24taW1wb3J0IHJ1bGUgaXMgbm90IGFsbG93ZWQuCi0gICAgaWYgKGlzPFN0eWxlUnVs
ZUltcG9ydD4oKnJ1bGUpKQorICAgIGlmIChpczxTdHlsZVJ1bGVJbXBvcnQ+KHJ1bGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVz
LnNpemUoKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIHdvdWxkIG92ZXJm
bG93IFJ1bGVEYXRhLCB3ZSBkcm9wIHRoZSBvcGVyYXRpb24uCi0gICAgaWYgKGlzPFN0eWxlUnVs
ZT4oKnJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZT4oKnJ1bGUpLnNlbGVjdG9yTGlzdCgpLmNv
bXBvbmVudENvdW50KCkgPiBSdWxlRGF0YTo6bWF4aW11bVNlbGVjdG9yQ29tcG9uZW50Q291bnQp
CisgICAgaWYgKGlzPFN0eWxlUnVsZT4ocnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlPihydWxl
LmdldCgpKS5zZWxlY3Rvckxpc3QoKS5jb21wb25lbnRDb3VudCgpID4gUnVsZURhdGE6Om1heGlt
dW1TZWxlY3RvckNvbXBvbmVudENvdW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X2NoaWxkUnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIHJ1bGUpOworICAgIG1fY2hpbGRS
dWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwgV1RGTW92ZShydWxlKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgJ
KHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKIAogICAgIHVu
c2lnbmVkIGVzdGltYXRlZFNpemVJbkJ5dGVzKCkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCB3cmFw
cGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+LCB1bnNpZ25lZCBpbmRleCk7
CisgICAgYm9vbCB3cmFwcGVySW5zZXJ0UnVsZShSZWY8U3R5bGVSdWxlQmFzZT4mJiwgdW5zaWdu
ZWQgaW5kZXgpOwogICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwog
CiAgICAgUmVmPFN0eWxlU2hlZXRDb250ZW50cz4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3R5bGVTaGVldENvbnRlbnRzKCp0aGlzKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3NSwxOSArMTY3NSwxOSBAQCB2b2lk
IERPTVdpbmRvdzo6Y2xlYXJJbnRlcnZhbChpbnQgdGltZW91CiB9CiAKICNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCi1pbnQgRE9NV2luZG93OjpyZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoUGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gY2FsbGJhY2spCitp
bnQgRE9NV2luZG93OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVlc3RBbmltYXRpb25G
cmFtZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIGNhbGxiYWNrLT5tX3VzZUxlZ2FjeVRp
bWVCYXNlID0gZmFsc2U7CiAgICAgaWYgKERvY3VtZW50KiBkID0gZG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGQtPnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7CisgICAgICAgIHJl
dHVybiBkLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJl
dHVybiAwOwogfQogCi1pbnQgRE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
UGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gY2FsbGJhY2spCitpbnQg
RE9NV2luZG93Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUmVmPFJlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIGNhbGxiYWNrLT5tX3VzZUxlZ2Fj
eVRpbWVCYXNlID0gdHJ1ZTsKICAgICBpZiAoRG9jdW1lbnQqIGQgPSBkb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm4gZC0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsKKyAgICAgICAg
cmV0dXJuIGQtPnJlcXVlc3RBbmltYXRpb25GcmFtZShXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gMjAx
MTEzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcyLDggKzI3Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBXZWJL
aXQgYW5pbWF0aW9uIGV4dGVuc2lvbnMKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCi0gICAgICAgIGludCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUGFzc1JlZlB0cjxSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4pOwotICAgICAgICBpbnQgd2Via2l0UmVxdWVzdEFuaW1h
dGlvbkZyYW1lKFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+KTsKKyAg
ICAgICAgaW50IHJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2s+JiYpOworICAgICAgICBpbnQgd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJl
ZjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7CiAgICAgICAgIHZvaWQgY2FuY2Vs
QW5pbWF0aW9uRnJhbWUoaW50IGlkKTsKICNlbmRpZgogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDEx
NzcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxNi0wNS0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIE1vZGVybml6ZSBDU1MgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Nzcy9jb21wYXJlLWFuaW1hdGlvbi10
cmlnZ2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MvY29tcGFyZS1h
bmltYXRpb24tdHJpZ2dlci5odG1sOiBBZGRlZC4KKwogMjAxNi0wNS0xOSAgQnJpYW4gQnVyZyAg
PGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1c2UgYSBjb25zaXN0
ZW50IHByZWZpeCBmb3IgaW5qZWN0ZWQgc2NyaXB0cwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
c3MvY29tcGFyZS1hbmltYXRpb24tdHJpZ2dlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jc3MvY29tcGFyZS1hbmltYXRpb24tdHJpZ2dlci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb21wYXJlLWFuaW1hdGlv
bi10cmlnZ2VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKK1Ro
aXMgdGVzdCB2ZXJpZmllcyB0aGF0IGNvbXBhcmluZyB0d28gQ1NTQW5pbWF0aW9uVHJpZ2dlclNj
cm9sbFZhbHVlcyB3aXRob3V0IGVuZCB2YWx1ZXMgZG9lcyBub3QgY3Jhc2guCisKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jc3MvY29tcGFyZS1hbmltYXRpb24tdHJpZ2dlci5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbXBhcmUtYW5pbWF0aW9uLXRyaWdnZXIu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2NvbXBhcmUtYW5pbWF0
aW9uLXRyaWdnZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8aHRtbD4K
KzxoZWFkPgorPHN0eWxlPgorICAgIGRpdiB7IC13ZWJraXQtYW5pbWF0aW9uLXRyaWdnZXIgOiBj
b250YWluZXItc2Nyb2xsKDIwcHgpOyB9Cis8L3N0eWxlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK2Z1bmN0aW9uIHJ1bigp
IHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpLmZvY3VzKCk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgJzxkaXYgaWQ9Imluc2VydGVk
RGl2IiBzdHlsZT0iLXdlYmtpdC1hbmltYXRpb24tdHJpZ2dlciA6IGNvbnRhaW5lci1zY3JvbGwo
MjBweCk7ICI+PC9kaXY+Jyk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
cnVuKCkiPgorPHA+VGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgY29tcGFyaW5nIHR3byBDU1NBbmlt
YXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWVzIHdpdGhvdXQgZW5kIHZhbHVlcyBkb2VzIG5vdCBjcmFz
aC48L3A+Cis8ZGl2IGlkPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+PC9kaXY+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279439</attachid>
            <date>2016-05-19 15:09:42 -0700</date>
            <delta_ts>2016-05-23 17:15:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157875-20160519151047.patch</filename>
            <type>text/plain</type>
            <size>34848</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTExOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE2LTA1LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IENTUyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IgZXhjZXB0IGZpeGluZyBhIG51bGwgZGVyZWZlcmVuY2lu
Zy4KKyAgICAgICAgVGVzdGVkIGJ5IGZhc3QvY3NzL2NvbXBhcmUtYW5pbWF0aW9uLXRyaWdnZXIu
aHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06Cisg
ICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrKToKKyAgICAgICAgVXNlIGF1dG8gbW9yZSBiZWNhdXNlIHNvbWUgY3JlYXRlIGZ1
bmN0aW9ucyByZXR1cm4gYSBSZWYgaW5zdGVhZCBvZiBhIFJlZlB0ciwgYW5kIHdlIHdhbnQgdG8g
dXNlIHRoYXQgaWYgcG9zc2libGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6
CisgICAgICAgICogY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmVxdWFscyk6Cisg
ICAgICAgICogY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlOjpzdGFydFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZTo6ZW5kVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlOjpo
YXNFbmRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xs
VmFsdWU6OkNTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZSk6CisgICAgICAgICogY3NzL0NT
U0Jhc2ljU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVBvc2l0aW9uT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQmFzaWNTaGFwZUNpcmNsZTo6Y3NzVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlRWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgICog
Y3NzL0NTU0Jhc2ljU2hhcGVzLmg6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhc2lj
U2hhcGVFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFS
dWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1h
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Ucmln
Z2VyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVCYXNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUdyb3VwOjp3
cmFwcGVyUmVtb3ZlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVNZWRpYTo6U3R5
bGVSdWxlTWVkaWEpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUnVsZUJhc2U6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJh
c2U6OlN0eWxlUnVsZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlTWVkaWE6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVNZWRpYTo6bWVkaWFRdWVyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZU1lZGlhOjpjb3B5KToKKyAgICAgICAgKiBjc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250
ZW50czo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgICogY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRl
bnRzOjpjb3B5KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OmNsZWFySW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
Ojp3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93
Lmg6CisKIDIwMTYtMDUtMTggIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW2lPU10gRnVsbHNjcmVlbiB2aWRlbyBwbGF5YmFjayBicm9rZW4gaW4gV0sx
IGFwcHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjcyNyw3
ICsyNzI3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAg
ICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAs
ICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykg
LiAiKSIsICJjYXN0ZWRUaGlzIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKSBpZiAhJGF0
dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb2Jq
ID0gJGpzVHlwZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAkanNUeXBlO1xuIik7CkBAIC0yOTQwLDcgKzI5NDAsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBpZiAoJHB1dEZvcndhcmRzKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2Rl
R2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSB8fCAkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR7dHlwZX0+
IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJHtpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lfSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byBmb3J3YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiR7
aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0oKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZm9yd2FyZGVkSW1wbClcbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7XG4iKTsKQEAgLTM2OTksOSAr
MzY5OSw5IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKCpzdGF0ZSwgJGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNl
TmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lKTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgk
ZnVuY3Rpb24tPmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJDYWxsYmFja0Z1bmN0aW9uLmgiKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlD
YWxsYmFjazwke2NhbGxiYWNrQ2xhc3NOYW1lfT4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoJGFyZ3VtZW50SW5kZXgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgYXV0byAkbmFtZSA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNr
PCR7Y2FsbGJhY2tDbGFzc05hbWV9PihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgk
YXJndW1lbnRJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUg
PSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgkYXJndW1lbnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5h
bWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7
XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFs
dWUgPSAiV1RGTW92ZSgkbmFtZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RNZWRpYQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
c3RhdGUtPmFyZ3VtZW50KDApLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4gbGlzdGVuZXIgPSBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgYXV0byBsaXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6
Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZChXVEZNb3ZlKGxpc3RlbmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOSwxMCArMTAxOSwx
MCBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUs
IDAsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdE9iaiIsIG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0
Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVj
dChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmoiLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHRlc3RDYWxsYmFja0Z1
bmN0aW9uID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBh
dXRvIG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZSgqdGVzdENhbGxiYWNrLCAqdGVzdENhbGxiYWNr
RnVuY3Rpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpKTsKIH0KQEAg
LTM4NTgsNyArMzg1OCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0
dHIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzTnVsbGFibGVB
dHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgUmVmUHRyPFRlc3ROb2RlPiBmb3J3YXJkZWRJbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKTsKKyAg
ICBhdXRvIGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZSgpOwogICAgIGlmICghZm9yd2FyZGVkSW1wbCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDsKQEAgLTUwNDUsNyAr
NTA0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgwKS5pc09iamVj
dCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpz
dGF0ZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7
Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBA
IC01MDY1LDcgKzUwNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFj
ayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7
Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01MTAwLDcgKzUxMDAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25Bcmci
KTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNU
ZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhDYWxsYmFja0Z1bmN0aW9uQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNTEyMCw3ICs1MTIwLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFy
Z3VtZW50KDEpLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhv
ZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKLSAgICBSZWZQdHI8
VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoV1RGTW92ZShub25DYWxsYmFjayksIFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtNTE2MSw3ICs1MTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDbwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50
KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJzdGF0aWNNZXRob2RX
aXRoQ2FsbGJhY2tBcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IGNy
ZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9u
T25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpAQCAtNTI5Myw3ICs1MjkzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFy
Z3VtZW50KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJvdmVybG9h
ZGVkTWV0aG9kIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkp
KQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRl
LCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwotICAgIFJlZlB0
cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNP
YmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCkpOworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0VHlwZWRlZnM6OmNyZWF0ZShoZWxsbywg
KnRlc3RDYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSkpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0FuaW1hdGlvblRyaWdn
ZXJTY3JvbGxWYWx1ZS5jcHAJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NBbmltYXRp
b25UcmlnZ2VyU2Nyb2xsVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBhcmlzb24u
aD4KIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQogCkBAIC00Nyw3ICs0OCw3
IEBAIFN0cmluZyBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmMKIAogYm9vbCBDU1NB
bmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWU6OmVxdWFscyhjb25zdCBDU1NBbmltYXRpb25Ucmln
Z2VyU2Nyb2xsVmFsdWUmIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBtX3N0YXJ0VmFsdWUt
PmVxdWFscygqb3RoZXIubV9zdGFydFZhbHVlLmdldCgpKSAmJiBtX2VuZFZhbHVlLT5lcXVhbHMo
Km90aGVyLm1fZW5kVmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBtX3N0YXJ0VmFsdWUtPmVxdWFs
cyhvdGhlci5tX3N0YXJ0VmFsdWUuZ2V0KCkpICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEobV9l
bmRWYWx1ZS5nZXQoKSwgb3RoZXIubV9lbmRWYWx1ZS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbmltYXRpb25UcmlnZ2Vy
U2Nyb2xsVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQW5pbWF0
aW9uVHJpZ2dlclNjcm9sbFZhbHVlLmgJKHJldmlzaW9uIDIwMTExMykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsMTMgKzM4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q1NTQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlKFdURk1vdmUoc3RhcnRWYWx1ZSksIFdURk1v
dmUoZW5kVmFsdWUpKSk7CiAgICAgfQogCi0gICAgY29uc3QgQ1NTVmFsdWUqIHN0YXJ0VmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VmFsdWUuZ2V0KCk7IH0KKyAgICBjb25zdCBDU1NWYWx1
ZSYgc3RhcnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRWYWx1ZS5nZXQoKTsgfQogICAg
IGNvbnN0IENTU1ZhbHVlKiBlbmRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kVmFsdWUuZ2V0
KCk7IH0KICAgICBib29sIGhhc0VuZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9lbmRWYWx1ZTsg
fQogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAogICAgIGJvb2wgZXF1YWxz
KGNvbnN0IENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZSYpIGNvbnN0OworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDU1NBbmltYXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWUmIG90aGVyKSBj
b25zdCB7IHJldHVybiBlcXVhbHMob3RoZXIpOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTQW5pbWF0
aW9uVHJpZ2dlclNjcm9sbFZhbHVlKFJlZjxDU1NWYWx1ZT4mJiBzdGFydFZhbHVlLCBSZWZQdHI8
Q1NTVmFsdWU+JiYgZW5kVmFsdWUpCkBAIC01NCw3ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgIH0KIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9zdGFydFZhbHVlOworICAgIFJlZjxDU1NW
YWx1ZT4gbV9zdGFydFZhbHVlOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9lbmRWYWx1ZTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAkocmV2aXNpb24gMjAx
MTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVBvc2l0aW9uT2Zm
c2V0KGNvCiAgICAgcmV0dXJuIG9mZnNldC5jc3NUZXh0KCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQoUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0LCBDU1NWYWx1ZUlEIGRlZmF1bHRTaWRlKQorc3Rh
dGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNl
dChDU1NQcmltaXRpdmVWYWx1ZSogb2Zmc2V0LCBDU1NWYWx1ZUlEIGRlZmF1bHRTaWRlKQogewog
ICAgIENTU1ZhbHVlSUQgc2lkZSA9IGRlZmF1bHRTaWRlOwogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYW1vdW50OwpAQCAtMTEwLDggKzExMCw4IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRD
aXJjbGVTdHJpbmcoY29uc3QgU3QKIAogU3RyaW5nIENTU0Jhc2ljU2hhcGVDaXJjbGU6OmNzc1Rl
eHQoKSBjb25zdAogewotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENYID0g
YnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclgsIENTU1ZhbHVlTGVmdCk7
Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6
YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVyWSwgQ1NTVmFsdWVUb3ApOworICAgIFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENYID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9m
ZnNldChtX2NlbnRlclguZ2V0KCksIENTU1ZhbHVlTGVmdCk7CisgICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1f
Y2VudGVyWS5nZXQoKSwgQ1NTVmFsdWVUb3ApOwogCiAgICAgU3RyaW5nIHJhZGl1czsKICAgICBp
ZiAobV9yYWRpdXMgJiYgbV9yYWRpdXMtPmdldFZhbHVlSUQoKSAhPSBDU1NWYWx1ZUNsb3Nlc3RT
aWRlKQpAQCAtMTY3LDggKzE2Nyw4IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRFbGxpcHNlU3RyaW5n
KGNvbnN0IFMKIAogU3RyaW5nIENTU0Jhc2ljU2hhcGVFbGxpcHNlOjpjc3NUZXh0KCkgY29uc3QK
IHsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWCA9IGJ1aWxkU2VyaWFs
aXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJYLCBDU1NWYWx1ZUxlZnQpOwotICAgIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENZID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlv
bk9mZnNldChtX2NlbnRlclksIENTU1ZhbHVlVG9wKTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+IG5vcm1hbGl6ZWRDWCA9IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50
ZXJYLmdldCgpLCBDU1NWYWx1ZUxlZnQpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9y
bWFsaXplZENZID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclkuZ2V0
KCksIENTU1ZhbHVlVG9wKTsKIAogICAgIFN0cmluZyByYWRpdXNYOwogICAgIFN0cmluZyByYWRp
dXNZOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmgJKHJldmlzaW9uIDIwMTEx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsMTAgKzE2MCwxMCBAQCBwdWJsaWM6CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJh
ZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1guZ2V0KCk7IH0KICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRDZW50ZXJYKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclgp
IHsgbV9jZW50ZXJYID0gY2VudGVyWDsgfQotICAgIHZvaWQgc2V0Q2VudGVyWShQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZKSB7IG1fY2VudGVyWSA9IGNlbnRlclk7IH0KLSAg
ICB2b2lkIHNldFJhZGl1c1goUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzWCkg
eyBtX3JhZGl1c1ggPSByYWRpdXNYOyB9Ci0gICAgdm9pZCBzZXRSYWRpdXNZKFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1c1kpIHsgbV9yYWRpdXNZID0gcmFkaXVzWTsgfQorICAg
IHZvaWQgc2V0Q2VudGVyWChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgY2VudGVyWCkgeyBt
X2NlbnRlclggPSBXVEZNb3ZlKGNlbnRlclgpOyB9CisgICAgdm9pZCBzZXRDZW50ZXJZKFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiBjZW50ZXJZKSB7IG1fY2VudGVyWSA9IFdURk1vdmUoY2Vu
dGVyWSk7IH0KKyAgICB2b2lkIHNldFJhZGl1c1goUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYm
IHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gV1RGTW92ZShyYWRpdXNYKTsgfQorICAgIHZvaWQgc2V0
UmFkaXVzWShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcmFkaXVzWSkgeyBtX3JhZGl1c1kg
PSBXVEZNb3ZlKHJhZGl1c1kpOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTQmFzaWNTaGFwZUVsbGlw
c2UoKSB7IH0KQEAgLTE4MiwxMCArMTgyLDEwIEBAIGNsYXNzIENTU0Jhc2ljU2hhcGVQb2x5Z29u
IGZpbmFsIDogcHVibGkKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENTU0Jhc2ljU2hhcGVQb2x5
Z29uPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0Jhc2ljU2hhcGVQb2x5Z29u
KTsgfQogCi0gICAgdm9pZCBhcHBlbmRQb2ludChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB4LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5KQorICAgIHZvaWQgYXBwZW5kUG9p
bnQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHgsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mJiB5KQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHgpOwotICAgICAgICBtX3Zh
bHVlcy5hcHBlbmQoeSk7CisgICAgICAgIG1fdmFsdWVzLmFwcGVuZChXVEZNb3ZlKHgpKTsKKyAg
ICAgICAgbV92YWx1ZXMuYXBwZW5kKFdURk1vdmUoeSkpOwogICAgIH0KIAogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gZ2V0WEF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLmF0KGkgKiAyKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlv
blZhbHVlLmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nh
bGN1bGF0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOSArMjAwLDkgQEAgZG91
YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbgogY2xhc3MgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjUHJp
bWl0aXZlVmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZSwg
Ym9vbCBpc0ludGVnZXIpCisgICAgc3RhdGljIFJlZjxDU1NDYWxjUHJpbWl0aXZlVmFsdWU+IGNy
ZWF0ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
KHZhbHVlLCBpc0ludGVnZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlKFdURk1vdmUodmFsdWUpLCBpc0ludGVnZXIpKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGRvdWJsZSB2YWx1
ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGlzSW50ZWdlcikKQEAg
LTI5Myw5ICsyOTMsOSBAQCBwcml2YXRlOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFs
dWUsIGJvb2wgaXNJbnRlZ2VyKQorICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1ZShS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQogICAgICAg
ICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZSh1bml0Q2F0ZWdvcnkoKENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMpdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSksIGlzSW50ZWdlcikKLSAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCiAgICAg
ewogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIwMTEx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Njk1LDkgKzY2OTUsOSBAQCBSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJz
ZUJhCiAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRJbmRleCgpIDwgMiAmJiBhcmd1bWVudC0+aWQg
IT0gQ1NTVmFsdWVBdCkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cygqYXJndW1lbnQpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFzaGFwZS0+cmFkaXVzWCgpKQotICAgICAgICAgICAgICAgICAgICBzaGFwZS0+c2V0
UmFkaXVzWChyYWRpdXMpOworICAgICAgICAgICAgICAgICAgICBzaGFwZS0+c2V0UmFkaXVzWChX
VEZNb3ZlKHJhZGl1cykpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc2hhcGUtPnNldFJhZGl1c1kocmFkaXVzKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhcGUt
PnNldFJhZGl1c1koV1RGTW92ZShyYWRpdXMpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIApAQCAtNjcxMyw4ICs2NzEzLDggQEAgUmVmUHRyPENTU0Jhc2ljU2hh
cGU+IENTU1BhcnNlcjo6cGFyc2VCYQogICAgICAgICBpZiAoIWNlbnRlclggfHwgIWNlbnRlclkg
fHwgYXJncy5jdXJyZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAg
ICBzaGFwZS0+c2V0Q2VudGVyWChjZW50ZXJYKTsKLSAgICAgICAgc2hhcGUtPnNldENlbnRlclko
Y2VudGVyWSk7CisgICAgICAgIHNoYXBlLT5zZXRDZW50ZXJYKFdURk1vdmUoY2VudGVyWCkpOwor
ICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShXVEZNb3ZlKGNlbnRlclkpKTsKICAgICB9CiAKICAg
ICByZXR1cm4gc2hhcGU7CkBAIC0xMjg5MSw3ICsxMjg5MSw3IEBAIFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBDU1NQYXJzZXI6OmNyZWF0ZU0KICAgICAgICAgLy8gZXZlbiB3aGVuIGl0IGlzIHN5bnRh
Y3RpY2FsbHkgaW5jb3JyZWN0LgogICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0
ZShNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKSwgZW1wdHlSdWxlcyk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHJ1bGUgPSBTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCBydWxlcyA/ICpydWxlcyA6
IGVtcHR5UnVsZXMpOworICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShtZWRp
YS5yZWxlYXNlTm9uTnVsbCgpLCBydWxlcyA/ICpydWxlcyA6IGVtcHR5UnVsZXMpOwogICAgIHBy
b2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKICAgICByZXR1cm4gcnVs
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDIw
MTExMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1
bGUoY29uc3QKIAogICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcywgUnVs
ZUluc2VydGlvbiwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgPyBkb3duY2FzdDxTdHls
ZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpIDogbnVsbHB0cik7CiAKLSAgICBib29sIHN1Y2Nl
c3MgPSBtX2NvbnRlbnRzLmdldCgpLndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKKyAg
ICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRzLmdldCgpLndyYXBwZXJJbnNlcnRSdWxlKHJ1bGUu
cmVsZWFzZU5vbk51bGwoKSwgaW5kZXgpOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICBl
YyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw4ICs1
MzEsOCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRyaWdnZXIoCiAgICAgaWYg
KHZhbHVlLmlzQW5pbWF0aW9uVHJpZ2dlclNjcm9sbFZhbHVlKCkpIHsKICAgICAgICAgYXV0byYg
c2Nyb2xsVHJpZ2dlciA9IGRvd25jYXN0PENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZT4o
dmFsdWUpOwogCi0gICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBzdGFydFZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHNjcm9sbFRyaWdnZXIuc3RhcnRWYWx1ZSgpKTsK
LSAgICAgICAgTGVuZ3RoIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
KyAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHN0YXJ0VmFsdWUgPSAqZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCZzY3JvbGxUcmlnZ2VyLnN0YXJ0VmFsdWUoKSk7CisgICAgICAg
IExlbmd0aCBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KG1f
cmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKIAogICAgICAg
ICBMZW5ndGggZW5kTGVuZ3RoOwogICAgICAgICBpZiAoc2Nyb2xsVHJpZ2dlci5oYXNFbmRWYWx1
ZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAkocmV2aXNpb24gMjAxMTEzKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCB0cmF2ZXJzZVN1YnJlc291cmNlcyhjb25zdCBzdGQ6OmZ1
bmN0aW9uPGJvb2wgKGNvbnN0IENhY2hlZFJlc291cmNlJik+JiBoYW5kbGVyKSBjb25zdDsKIAog
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU1ZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENTU1ZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gZXF1YWxzKG90aGVyKTsg
fQogCiBwcm90ZWN0ZWQ6CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCShyZXZpc2lv
biAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTQgKzQ1LDE0IEBAIHN0cnVjdCBTYW1lU2l6ZUFzU3R5bGVSdWxlQmFzZSA6
IHB1YmxpYyAKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFN0eWxlUnVsZUJhc2UpID09IHNpemVv
ZihTYW1lU2l6ZUFzU3R5bGVSdWxlQmFzZSksIFN0eWxlUnVsZUJhc2Vfc2hvdWxkX3N0YXlfc21h
bGwpOwogCi1QYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3Jh
cHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCkgY29uc3QKK1JlZlB0cjxDU1NSdWxlPiBT
dHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hl
ZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBlcihwYXJlbnRTaGVldCwg
MCk7CisgICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBlcihwYXJlbnRTaGVldCwgbnVsbHB0cik7
CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZT4gU3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFw
cGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0CitSZWZQdHI8Q1NTUnVsZT4gU3R5bGVSdWxl
QmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0CiB7IAot
ICAgIHJldHVybiBjcmVhdGVDU1NPTVdyYXBwZXIoMCwgcGFyZW50UnVsZSk7CisgICAgcmV0dXJu
IGNyZWF0ZUNTU09NV3JhcHBlcihudWxscHRyLCBwYXJlbnRSdWxlKTsKIH0KIAogdm9pZCBTdHls
ZVJ1bGVCYXNlOjpkZXN0cm95KCkKQEAgLTMyOSw5ICszMjksOSBAQCB2b2lkIFN0eWxlUnVsZUdy
b3VwOjp3cmFwcGVyUmVtb3ZlUnVsZSh1CiB9CiAKIAotU3R5bGVSdWxlTWVkaWE6OlN0eWxlUnVs
ZU1lZGlhKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEsIFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKQorU3R5bGVSdWxlTWVkaWE6OlN0eWxlUnVsZU1lZGlh
KFJlZjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4m
IGFkb3B0UnVsZXMpCiAgICAgOiBTdHlsZVJ1bGVHcm91cChNZWRpYSwgYWRvcHRSdWxlcykKLSAg
ICAsIG1fbWVkaWFRdWVyaWVzKG1lZGlhKQorICAgICwgbV9tZWRpYVF1ZXJpZXMoV1RGTW92ZSht
ZWRpYSkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgJKHJldmlzaW9uIDIwMTEx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsOCArODIsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoZXJlIHNob3Vs
ZG4ndCBiZSBhbnkgbmVlZCBmb3IgdGhlIG51bGwgcGFyZW50IHZlcnNpb24uCi0gICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlPiBjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hl
ZXQgPSAwKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNTU09NV3JhcHBl
cihDU1NSdWxlKiBwYXJlbnRSdWxlKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gY3JlYXRl
Q1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gMCkgY29uc3Q7CisgICAg
UmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNTU09NV3JhcHBlcihDU1NSdWxlKiBwYXJlbnRSdWxlKSBj
b25zdDsKIAogcHJvdGVjdGVkOgogICAgIFN0eWxlUnVsZUJhc2UoVHlwZSB0eXBlLCBzaWduZWQg
c291cmNlTGluZSA9IDApIDogbV90eXBlKHR5cGUpLCBtX3NvdXJjZUxpbmUoc291cmNlTGluZSkg
eyB9CkBAIC0xOTMsOSArMTkzLDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3R5bGVSdWxlTWVkaWEg
OiBwdWJsaWMgU3R5bGVSdWxlR3JvdXAgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3R5bGVS
dWxlTWVkaWE+IGNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhLCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgYWRvcHRSdWxlcykKKyAgICBzdGF0aWMgUmVmPFN0eWxl
UnVsZU1lZGlhPiBjcmVhdGUoUmVmPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEsIFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU3R5bGVSdWxlTWVkaWEobWVkaWEsIGFkb3B0UnVsZXMpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVSdWxlTWVkaWEoV1RGTW92ZShtZWRpYSksIGFkb3B0
UnVsZXMpKTsKICAgICB9CiAKICAgICBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMoKSBjb25z
dCB7IHJldHVybiBtX21lZGlhUXVlcmllcy5nZXQoKTsgfQpAQCAtMjAzLDcgKzIwMyw3IEBAIHB1
YmxpYzoKICAgICBSZWY8U3R5bGVSdWxlTWVkaWE+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFN0eWxlUnVsZU1lZGlhKCp0aGlzKSk7IH0KIAogcHJpdmF0ZToKLSAgICBTdHls
ZVJ1bGVNZWRpYShQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+LCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUJhc2U+PiYgYWRvcHRSdWxlcyk7CisgICAgU3R5bGVSdWxlTWVkaWEoUmVmPE1lZGlhUXVl
cnlTZXQ+LCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgYWRvcHRSdWxlcyk7CiAgICAg
U3R5bGVSdWxlTWVkaWEoY29uc3QgU3R5bGVSdWxlTWVkaWEmKTsKIAogICAgIFJlZlB0cjxNZWRp
YVF1ZXJ5U2V0PiBtX21lZGlhUXVlcmllczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0Q29udGVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0Q29udGVudHMuY3BwCShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3
IEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGkKICAgICBtX2VuY29k
aW5nRnJvbUNoYXJzZXRSdWxlID0gZW5jb2Rpbmc7IAogfQogCi1ib29sIFN0eWxlU2hlZXRDb250
ZW50czo6d3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlLCB1
bnNpZ25lZCBpbmRleCkKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVs
ZShSZWY8U3R5bGVSdWxlQmFzZT4mJiBydWxlLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBBU1NF
UlQobV9pc011dGFibGUpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlu
ZGV4IDw9IHJ1bGVDb3VudCgpKTsKQEAgLTIyNiwyNCArMjI2LDI0IEBAIGJvb2wgU3R5bGVTaGVl
dENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnUKICAgICAKICAgICBpZiAoY2hpbGRWZWN0b3JJbmRl
eCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpIHx8IChjaGlsZFZlY3RvckluZGV4ID09IG1faW1wb3J0
UnVsZXMuc2l6ZSgpICYmIHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSkgewogICAgICAgICAvLyBJbnNl
cnRpbmcgbm9uLWltcG9ydCBydWxlIGJlZm9yZSBAaW1wb3J0IGlzIG5vdCBhbGxvd2VkLgotICAg
ICAgICBpZiAoIWlzPFN0eWxlUnVsZUltcG9ydD4oKnJ1bGUpKQorICAgICAgICBpZiAoIWlzPFN0
eWxlUnVsZUltcG9ydD4ocnVsZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IG1faW1wb3J0UnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIGRvd25jYXN0PFN0eWxlUnVs
ZUltcG9ydD4ocnVsZS5nZXQoKSkpOworICAgICAgICBtX2ltcG9ydFJ1bGVzLmluc2VydChjaGls
ZFZlY3RvckluZGV4LCAmZG93bmNhc3Q8U3R5bGVSdWxlSW1wb3J0PihydWxlLmdldCgpKSk7CiAg
ICAgICAgIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPnNldFBhcmVudFN0eWxlU2hl
ZXQodGhpcyk7CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPnJlcXVl
c3RTdHlsZVNoZWV0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTdHlsZXNoZWV0IGRvZXNuJ3QgYWN0
dWFsbHkgY2hhbmdlIG1lYW5pbmdmdWxseSBiZWZvcmUgdGhlIGltcG9ydGVkIHNoZWV0cyBhcmUg
bG9hZGVkLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSW5zZXJ0aW5nIEBp
bXBvcnQgcnVsZSBhZnRlciBhIG5vbi1pbXBvcnQgcnVsZSBpcyBub3QgYWxsb3dlZC4KLSAgICBp
ZiAoaXM8U3R5bGVSdWxlSW1wb3J0PigqcnVsZSkpCisgICAgaWYgKGlzPFN0eWxlUnVsZUltcG9y
dD4ocnVsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZlY3RvckluZGV4IC09
IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBzZWxlY3Rv
cnMgd291bGQgb3ZlcmZsb3cgUnVsZURhdGEsIHdlIGRyb3AgdGhlIG9wZXJhdGlvbi4KLSAgICBp
ZiAoaXM8U3R5bGVSdWxlPigqcnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkuc2Vs
ZWN0b3JMaXN0KCkuY29tcG9uZW50Q291bnQoKSA+IFJ1bGVEYXRhOjptYXhpbXVtU2VsZWN0b3JD
b21wb25lbnRDb3VudCkKKyAgICBpZiAoaXM8U3R5bGVSdWxlPihydWxlKSAmJiBkb3duY2FzdDxT
dHlsZVJ1bGU+KHJ1bGUuZ2V0KCkpLnNlbGVjdG9yTGlzdCgpLmNvbXBvbmVudENvdW50KCkgPiBS
dWxlRGF0YTo6bWF4aW11bVNlbGVjdG9yQ29tcG9uZW50Q291bnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwgcnVsZSk7
CisgICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBXVEZNb3ZlKHJ1bGUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNo
ZWV0Q29udGVudHMuaAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2hlZXRDb250ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVi
bGljOgogCiAgICAgdW5zaWduZWQgZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSBjb25zdDsKICAgICAK
LSAgICBib29sIHdyYXBwZXJJbnNlcnRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4sIHVu
c2lnbmVkIGluZGV4KTsKKyAgICBib29sIHdyYXBwZXJJbnNlcnRSdWxlKFJlZjxTdHlsZVJ1bGVC
YXNlPiYmLCB1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCB3cmFwcGVyRGVsZXRlUnVsZSh1bnNp
Z25lZCBpbmRleCk7CiAKICAgICBSZWY8U3R5bGVTaGVldENvbnRlbnRzPiBjb3B5KCkgY29uc3Qg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVNoZWV0Q29udGVudHMoKnRoaXMpKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMjAxMTEzKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc1LDE5ICsx
Njc1LDE5IEBAIHZvaWQgRE9NV2luZG93OjpjbGVhckludGVydmFsKGludCB0aW1lb3UKIH0KIAog
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLWludCBET01XaW5kb3c6OnJlcXVl
c3RBbmltYXRpb25GcmFtZShQYXNzUmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
PiBjYWxsYmFjaykKK2ludCBET01XaW5kb3c6OnJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgY2FsbGJhY2st
Pm1fdXNlTGVnYWN5VGltZUJhc2UgPSBmYWxzZTsKICAgICBpZiAoRG9jdW1lbnQqIGQgPSBkb2N1
bWVudCgpKQotICAgICAgICByZXR1cm4gZC0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNr
KTsKKyAgICAgICAgcmV0dXJuIGQtPnJlcXVlc3RBbmltYXRpb25GcmFtZShXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBET01XaW5kb3c6OndlYmtpdFJlcXVlc3RB
bmltYXRpb25GcmFtZShQYXNzUmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiBj
YWxsYmFjaykKK2ludCBET01XaW5kb3c6OndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8
UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgY2FsbGJh
Y2stPm1fdXNlTGVnYWN5VGltZUJhc2UgPSB0cnVlOwogICAgIGlmIChEb2N1bWVudCogZCA9IGRv
Y3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJh
Y2spOworICAgICAgICByZXR1cm4gZC0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
CShyZXZpc2lvbiAyMDExMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzIsOCArMjcyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIC8vIFdlYktpdCBhbmltYXRpb24gZXh0ZW5zaW9ucwogI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKLSAgICAgICAgaW50IHJlcXVlc3RBbmltYXRpb25GcmFtZShQYXNz
UmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPik7Ci0gICAgICAgIGludCB3ZWJr
aXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVD
YWxsYmFjaz4pOworICAgICAgICBpbnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlZjxSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4mJik7CisgICAgICAgIGludCB3ZWJraXRSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoUmVmPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiYmKTsKICAgICAg
ICAgdm9pZCBjYW5jZWxBbmltYXRpb25GcmFtZShpbnQgaWQpOwogI2VuZGlmCiAKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwMTE3NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA1LTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIENTUyBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4NzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY3NzL2NvbXBh
cmUtYW5pbWF0aW9uLXRyaWdnZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2Nzcy9jb21wYXJlLWFuaW1hdGlvbi10cmlnZ2VyLmh0bWw6IEFkZGVkLgorCiAyMDE2LTA1LTE5
ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHVzZSBhIGNvbnNpc3RlbnQgcHJlZml4IGZvciBpbmplY3RlZCBzY3JpcHRzCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9jb21wYXJlLWFuaW1hdGlvbi10cmlnZ2VyLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb21wYXJlLWFuaW1hdGlvbi10cmln
Z2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2Nv
bXBhcmUtYW5pbWF0aW9uLXRyaWdnZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMyBAQAorVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgY29tcGFyaW5nIHR3byBDU1NBbmlt
YXRpb25UcmlnZ2VyU2Nyb2xsVmFsdWVzIHdpdGhvdXQgZW5kIHZhbHVlcyBkb2VzIG5vdCBjcmFz
aC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb21wYXJlLWFuaW1hdGlvbi10cmln
Z2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvY29tcGFyZS1hbmlt
YXRpb24tdHJpZ2dlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
Y29tcGFyZS1hbmltYXRpb24tdHJpZ2dlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgZGl2IHsgLXdlYmtpdC1hbmltYXRp
b24tdHJpZ2dlciA6IGNvbnRhaW5lci1zY3JvbGwoMjBweCk7IH0KKzwvc3R5bGU+Cis8c2NyaXB0
PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwor
ZnVuY3Rpb24gcnVuKCkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0IikuZm9j
dXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCAnPGRp
diBpZD0iaW5zZXJ0ZWREaXYiIHN0eWxlPSItd2Via2l0LWFuaW1hdGlvbi10cmlnZ2VyIDogY29u
dGFpbmVyLXNjcm9sbCgyMHB4KTsgIj48L2Rpdj4nKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJydW4oKSI+Cis8cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBjb21wYXJp
bmcgdHdvIENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZXMgd2l0aG91dCBlbmQgdmFsdWVz
IGRvZXMgbm90IGNyYXNoLjwvcD4KKzxkaXYgaWQ9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT48L2Rp
dj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279609</attachid>
            <date>2016-05-23 17:15:23 -0700</date>
            <delta_ts>2016-05-23 21:15:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157875-20160523171629.patch</filename>
            <type>text/plain</type>
            <size>40775</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTMwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA1LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IENTUyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9u
QXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0
aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICogY3NzL0NTU0Jhc2lj
U2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVBvc2l0aW9uT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQmFzaWNTaGFwZUNpcmNsZTo6Y3NzVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NCYXNpY1NoYXBlRWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdv
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU01lZGlhUnVsZTo6bWVkaWEpOgorICAgICAgICAqIGNzcy9DU1NNZWRpYVJ1bGUuaDoK
KyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3Mv
Q1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0TWVkaWFRdWVyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojppc0xv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6bWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZTo6UnVsZU11dGF0aW9uU2Nv
cGUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVHcm91cDo6d3JhcHBlclJlbW92ZVJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSdWxlTWVkaWE6OlN0eWxlUnVsZU1lZGlhKToKKyAgICAgICAgKiBjc3MvU3R5
bGVSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpkZXJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpTdHlsZVJ1bGVCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZU1lZGlhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
dWxlTWVkaWE6Om1lZGlhUXVlcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVNZWRp
YTo6Y29weSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGVJbXBv
cnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpTdHlsZVJ1bGVJbXBvcnQpOgorICAgICAg
ICAqIGNzcy9TdHlsZVJ1bGVJbXBvcnQuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRl
bnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6aXNDYWNoZWFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJBcHBlbmRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cnVsZUF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyU2V0RW5jb2RpbmdGcm9t
Q2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjp3cmFw
cGVySW5zZXJ0UnVsZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpoYXNTeW50YWN0aWNhbGx5VmFsaWRD
U1NIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJT
ZXRVc2VzUmVtVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpw
YXJzZXJTZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlU2hlZXRDb250ZW50czo6Y29weSk6CisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRP
d25lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0
ZVNoZWV0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisK
IDIwMTYtMDUtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggdW5kZWZpbmVkIGJlaGF2aW9yIGludHJvZHVjZWQgaW4gcjIwMTI5MC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyMDEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjcyMiw3ICsyNzIyLDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgbXkgJGpzVHlwZSA9IE5h
dGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICIke2Z1
bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlz
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7
CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5
cGUoJHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb2JqID0gJGpzVHlwZTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqLmdldCgp
KTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAkanNUeXBlO1xu
Iik7CkBAIC0yOTM1LDcgKzI5MzUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgICAgICBpZiAoJHB1dEZvcndhcmRzKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2Zp
cnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVu
dGVkQXMifSB8fCAkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR7dHlwZX0+IGZvcndhcmRlZEltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCkuJHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfSgpO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBm
b3J3YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiR7aW1wbEdldHRlckZ1bmN0aW9u
TmFtZX0oKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghZm9yd2FyZGVkSW1wbClcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBp
bXBsID0gKmZvcndhcmRlZEltcGw7XG4iKTsKQEAgLTM2ODIsOSArMzY4Miw5IEBAIHN1YiBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
JGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVu
Y3Rpb25OYW1lKTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmlzU3RhdGlj
KSB7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJDYWxsYmFja0Z1bmN0
aW9uLmgiKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJl
ZlB0cjwkdHlwZT4gJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazwke2NhbGxiYWNr
Q2xhc3NOYW1lfT4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3VtZW50SW5k
ZXgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byAkbmFtZSA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPCR7Y2FsbGJhY2tDbGFzc05h
bWV9PihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NO
YW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJ
bmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5hbWUgPSAke2NhbGxiYWNrQ2xh
c3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1l
bnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgkbmFt
ZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAkocmV2aXNpb24gMjAxMjkwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNyArMTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRp
YQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDAp
LmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcigqc3RhdGUsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciIsICJtZXRob2QiKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgYXV0
byBsaXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsK
ICAgICBpbXBsLm1ldGhvZChXVEZNb3ZlKGxpc3RlbmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyMDEy
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNSwxMCArMTAxNSwxMCBAQCB0ZW1wbGF0ZTw+IEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJ0ZXN0Q2FsbGJhY2si
LCAiVGVzdE9iaiIsIG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxs
YmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8gdGVzdENh
bGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMSwgInRlc3RDYWxsYmFja0Z1
bmN0aW9uIiwgIlRlc3RPYmoiLCBudWxscHRyKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVu
Y3Rpb24+IHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RP
Ymo6OmNyZWF0ZSgqdGVzdENhbGxiYWNrLCAqdGVzdENhbGxiYWNrRnVuY3Rpb24pOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpKTsKIH0KQEAgLTM4NTIs
NyArMzg1Miw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHIKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1
dGUiKTsKICAgICB9Ci0gICAgUmVmUHRyPFRlc3ROb2RlPiBmb3J3YXJkZWRJbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKTsKKyAgICBhdXRv
IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNOdWxsYWJs
ZUF0dHJpYnV0ZSgpOwogICAgIGlmICghZm9yd2FyZGVkSW1wbCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDsKQEAgLTUwMDUsNyArNTAwNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7Ci0gICAg
UmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFz
T2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09i
amVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01MDI1
LDcgKzUwMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJU
ZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7Ci0gICAg
UmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFz
T2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09i
amVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhX
VEZNb3ZlKG5vbkNhbGxiYWNrKSwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01MDYwLDcgKzUwNjAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgImNh
bGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsKLSAg
ICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tG
dW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhDYWxs
YmFja0Z1bmN0aW9uQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNTA4MCw3ICs1MDgwLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50
KDEpLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKLSAgICBSZWZQdHI8VGVzdENh
bGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrRnVuY3Rpb25BcmcoV1RGTW92ZShub25DYWxsYmFjayksIFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNTEy
MSw3ICs1MTIxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDApLmlz
T2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJy
b3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJzdGF0aWNNZXRob2RXaXRoQ2Fs
bGJhY2tBcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IGNyZWF0ZUZ1
bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNh
bGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpA
QCAtNTI1Myw3ICs1MjUzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50
KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0
aG9kIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFj
azo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6
OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDEyOTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAg
ICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAxLCAi
dGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0
Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVj
dChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0VHlwZWRlZnM6OmNyZWF0ZShoZWxsbywgKnRlc3RD
YWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTTmV3bHlD
cmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3Qp
KSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCShyZXZpc2lv
biAyMDEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplUG9zaXRp
b25PZmZzZXQoY28KICAgICByZXR1cm4gb2Zmc2V0LmNzc1RleHQoKTsKIH0KIAotc3RhdGljIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQsIENTU1ZhbHVlSUQgZGVmYXVsdFNpZGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9u
T2Zmc2V0KENTU1ByaW1pdGl2ZVZhbHVlKiBvZmZzZXQsIENTU1ZhbHVlSUQgZGVmYXVsdFNpZGUp
CiB7CiAgICAgQ1NTVmFsdWVJRCBzaWRlID0gZGVmYXVsdFNpZGU7CiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBhbW91bnQ7CkBAIC0xMTAsOCArMTEwLDggQEAgc3RhdGljIFN0cmluZyBi
dWlsZENpcmNsZVN0cmluZyhjb25zdCBTdAogCiBTdHJpbmcgQ1NTQmFzaWNTaGFwZUNpcmNsZTo6
Y3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVk
Q1ggPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVyWCwgQ1NTVmFsdWVM
ZWZ0KTsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWSA9IGJ1aWxkU2Vy
aWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJZLCBDU1NWYWx1ZVRvcCk7CisgICAgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1ggPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0
aW9uT2Zmc2V0KG1fY2VudGVyWC5nZXQoKSwgQ1NTVmFsdWVMZWZ0KTsKKyAgICBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWSA9IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZz
ZXQobV9jZW50ZXJZLmdldCgpLCBDU1NWYWx1ZVRvcCk7CiAKICAgICBTdHJpbmcgcmFkaXVzOwog
ICAgIGlmIChtX3JhZGl1cyAmJiBtX3JhZGl1cy0+Z2V0VmFsdWVJRCgpICE9IENTU1ZhbHVlQ2xv
c2VzdFNpZGUpCkBAIC0xNjcsOCArMTY3LDggQEAgc3RhdGljIFN0cmluZyBidWlsZEVsbGlwc2VT
dHJpbmcoY29uc3QgUwogCiBTdHJpbmcgQ1NTQmFzaWNTaGFwZUVsbGlwc2U6OmNzc1RleHQoKSBj
b25zdAogewotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENYID0gYnVpbGRT
ZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclgsIENTU1ZhbHVlTGVmdCk7Ci0gICAg
UmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6YWJsZVBv
c2l0aW9uT2Zmc2V0KG1fY2VudGVyWSwgQ1NTVmFsdWVUb3ApOworICAgIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gbm9ybWFsaXplZENYID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldCht
X2NlbnRlclguZ2V0KCksIENTU1ZhbHVlTGVmdCk7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVy
WS5nZXQoKSwgQ1NTVmFsdWVUb3ApOwogCiAgICAgU3RyaW5nIHJhZGl1c1g7CiAgICAgU3RyaW5n
IHJhZGl1c1k7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwCShyZXZpc2lvbiAyMDEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw5ICsyMDAsOSBAQCBkb3VibGUgQ1NT
Q2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHgoY29uCiBjbGFzcyBDU1NDYWxjUHJpbWl0aXZlVmFs
dWUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNQcmltaXRpdmVW
YWx1ZT4gY3JlYXRlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlLCBib29sIGlz
SW50ZWdlcikKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpc0ludGVnZXIpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUodmFsdWUsIGlz
SW50ZWdlcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0aXZl
VmFsdWUoV1RGTW92ZSh2YWx1ZSksIGlzSW50ZWdlcikpOwogICAgIH0KIAogICAgIHN0YXRpYyBS
ZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUsIGJvb2wgaXNJbnRlZ2VyKQpAQCAtMjMyLDkgKzIz
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxj
RXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNv
bnZlcnNpb25EYXRhKSwgV2ViQ29yZTo6Rml4ZWQpKTsKICAgICAgICAgY2FzZSBDYWxjUGVyY2Vu
dDoKICAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDogewotICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gbV92YWx1ZS5nZXQoKTsKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihwcmltaXRpdmVW
YWx1ZQotICAgICAgICAgICAgICAgID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSkg
OiBMZW5ndGgoVW5kZWZpbmVkKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4obV92YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxv
YXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKSk7CiAgICAg
ICAgIH0KICAgICAgICAgLy8gT25seSB0eXBlcyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYSBMZW5n
dGggZXhwcmVzc2lvbiBjYW4gYmUgY29udmVydGVkCiAgICAgICAgIC8vIHRvIGEgQ2FsY0V4cHJl
c3Npb25Ob2RlLiBDYWxjUGVyY2VudE51bWJlciBtYWtlcyBubyBzZW5zZSBhcyBhIExlbmd0aC4K
QEAgLTI4Myw3ICsyODEsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAodHlwZSgpICE9IG90aGVy
LnR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gY29t
cGFyZUNTU1ZhbHVlUHRyKG1fdmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IENTU0NhbGNQcmltaXRp
dmVWYWx1ZSY+KG90aGVyKS5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1
ZShtX3ZhbHVlLCBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUmPihvdGhl
cikubV92YWx1ZSk7CiAgICAgfQogCiAgICAgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9CkBAIC0yOTMsMTMgKzI5MSwxMyBAQCBwcml2
YXRlOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFs
dWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQor
ICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
JiYgdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQogICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSh1bml0Q2F0ZWdvcnkoKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSksIGlzSW50ZWdlcikKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAg
ICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbV92YWx1ZTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG1f
dmFsdWU7CiB9OwogCiBzdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0cmFj
dFJlc3VsdFtDYWxjQW5nbGVdW0NhbGNBbmdsZV0gPSB7CkBAIC02MTEsNyArNjA5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKLSAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KCZwcmltaXRpdmVWYWx1ZSwgcGFyc2VyVmFsdWUtPmlzSW50KTsKKyAgICAgICAgcmVzdWx0LT52
YWx1ZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLCBwYXJz
ZXJWYWx1ZS0+aXNJbnQpOwogCiAgICAgICAgICsrKmluZGV4OwogICAgICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCShyZXZpc2lvbiAyMDEyOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJNZWRp
YUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKQEAgLTY1LDcgKzY2LDcgQEAgU3RyaW5nIENTU01lZGlhUnVsZTo6Y3Nz
VGV4dCgpIGNvbnN0CiBNZWRpYUxpc3QqIENTU01lZGlhUnVsZTo6bWVkaWEoKSBjb25zdAogewog
ICAgIGlmICghbWVkaWFRdWVyaWVzKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoIW1fbWVkaWFDU1NPTVdyYXBwZXIpCiAgICAgICAgIG1fbWVk
aWFDU1NPTVdyYXBwZXIgPSBNZWRpYUxpc3Q6OmNyZWF0ZShtZWRpYVF1ZXJpZXMoKSwgY29uc3Rf
Y2FzdDxDU1NNZWRpYVJ1bGUqPih0aGlzKSk7CiAgICAgcmV0dXJuIG1fbWVkaWFDU1NPTVdyYXBw
ZXIuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCShyZXZpc2lvbiAyMDEy
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDE0ICsyMCwxMyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBDU1NNZWRpYVJ1bGVfaAotI2RlZmluZSBDU1NNZWRpYVJ1bGVfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJDU1NHcm91cGluZ1J1bGUuaCIKLSNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNZWRpYUxpc3Q7CiBjbGFzcyBT
dHlsZVJ1bGVNZWRpYTsKIAogY2xhc3MgQ1NTTWVkaWFSdWxlIGZpbmFsIDogcHVibGljIENTU0dy
b3VwaW5nUnVsZSB7CkBAIC01NCw1ICs1MywzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1JVTEUoQ1NTTWVkaWFSdWxlLCBD
U1NSdWxlOjpNRURJQV9SVUxFKQotCi0jZW5kaWYgLy8gQ1NTTWVkaWFSdWxlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU09NVXRpbHMuaAkocmV2aXNpb24gMjAxMjkwKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU09NVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEwIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ1NTT01VdGlsc19oCi0jZGVmaW5lIENTU09NVXRp
bHNfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorI2luY2x1
ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogLy8gVXRpbGl0aWVzIGZvciBDU1NPTSBodHRwOi8vZGV2Lncz
Lm9yZy9jc3N3Zy9jc3NvbS8KIApAQCAtNDYsNSArNDQsMyBAQCB2b2lkIHNlcmlhbGl6ZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBpCiB2b2lkIHNlcmlhbGl6ZVN0cmluZyhjb25zdCBTdHJpbmcm
LCBTdHJpbmdCdWlsZGVyJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IENTU09NVXRpbHNfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDIw
MTI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjgwNSw3ICsxMjgwNSw3IEBAIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IENTU1BhcnNl
cjo6Y3JlYXQKICAgICAgICAgcG9wUnVsZURhdGEoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQotICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKHVybCwgbWVk
aWEpOworICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKHVybCwgbWVkaWEu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJ
Zk5lZWRlZCgpOwogICAgIHJldHVybiBXVEZNb3ZlKHJ1bGUpOwogfQpAQCAtMTI4MjAsNyArMTI4
MjAsNyBAQCBSZWY8U3R5bGVSdWxlTWVkaWE+IENTU1BhcnNlcjo6Y3JlYXRlTWVkCiAgICAgICAg
IC8vIGV2ZW4gd2hlbiBpdCBpcyBzeW50YWN0aWNhbGx5IGluY29ycmVjdC4KICAgICAgICAgcnVs
ZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUoTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCksIGVtcHR5
UnVsZXMpOwogICAgIH0gZWxzZQotICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0
ZShtZWRpYSwgcnVsZXMgPyAqcnVsZXMgOiBlbXB0eVJ1bGVzKTsKKyAgICAgICAgcnVsZSA9IFN0
eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEucmVsZWFzZU5vbk51bGwoKSwgcnVsZXMgPyAqcnVs
ZXMgOiBlbXB0eVJ1bGVzKTsKICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlm
TmVlZGVkKCk7CiAgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgJKHJldmlzaW9uIDIwMTI5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIg
KzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ1NTUmVmbGVjdFZhbHVl
X2gKLSNkZWZpbmUgQ1NTUmVmbGVjdFZhbHVlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
Q1NTUmVmbGVjdGlvbkRpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTcxLDUgKzY5LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTUmVmbGVjdFZhbHVl
LCBpc1JlZmxlY3RWYWx1ZSgpKQotCi0jZW5kaWYgLy8gQ1NTUmVmbGVjdFZhbHVlX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDIwMTI5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIy
LDkgKzIyMiw5IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQoYm9vbCBkaXMKICAg
ICBkaWRNdXRhdGUoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0OjpzZXRNZWRpYVF1ZXJpZXMo
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMpCit2b2lkIENTU1N0eWxlU2hl
ZXQ6OnNldE1lZGlhUXVlcmllcyhSZWY8TWVkaWFRdWVyeVNldD4mJiBtZWRpYVF1ZXJpZXMpCiB7
Ci0gICAgbV9tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXM7CisgICAgbV9tZWRpYVF1ZXJpZXMg
PSBXVEZNb3ZlKG1lZGlhUXVlcmllcyk7CiAgICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIgJiYg
bV9tZWRpYVF1ZXJpZXMpCiAgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1f
bWVkaWFRdWVyaWVzLmdldCgpKTsKIApAQCAtMzEwLDcgKzMxMCw3IEBAIHVuc2lnbmVkIENTU1N0
eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKIAogICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0
aW9uU2NvcGUodGhpcywgUnVsZUluc2VydGlvbiwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVs
ZSkgPyBkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpIDogbnVsbHB0cik7
CiAKLSAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRzLmdldCgpLndyYXBwZXJJbnNlcnRSdWxl
KHJ1bGUsIGluZGV4KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRzLmdldCgpLndyYXBw
ZXJJbnNlcnRSdWxlKHJ1bGUucmVsZWFzZU5vbk51bGwoKSwgaW5kZXgpOwogICAgIGlmICghc3Vj
Y2VzcykgewogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxl
KHVuc2lnbmVkIAogCiAgICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdKQotICAgICAg
ICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVl
dCgwKTsKKyAgICAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBh
cmVudFN0eWxlU2hlZXQobnVsbHB0cik7CiAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVy
cy5yZW1vdmUoaW5kZXgpOwogICAgIH0KIH0KQEAgLTM4MSw5ICszODEsOSBAQCBib29sIENTU1N0
eWxlU2hlZXQ6OmlzTG9hZGluZygpIGNvbnN0CiB9CiAKIE1lZGlhTGlzdCogQ1NTU3R5bGVTaGVl
dDo6bWVkaWEoKSBjb25zdCAKLXsgCit7CiAgICAgaWYgKCFtX21lZGlhUXVlcmllcykKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX21lZGlh
Q1NTT01XcmFwcGVyKQogICAgICAgICBtX21lZGlhQ1NTT01XcmFwcGVyID0gTWVkaWFMaXN0Ojpj
cmVhdGUobV9tZWRpYVF1ZXJpZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHRo
aXMpKTsKQEAgLTM5Miw3ICszOTIsNyBAQCBNZWRpYUxpc3QqIENTU1N0eWxlU2hlZXQ6Om1lZGlh
KCkgY29uc3QgCiAKIENTU1N0eWxlU2hlZXQqIENTU1N0eWxlU2hlZXQ6OnBhcmVudFN0eWxlU2hl
ZXQoKSBjb25zdCAKIHsgCi0gICAgcmV0dXJuIG1fb3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBh
cmVudFN0eWxlU2hlZXQoKSA6IDA7IAorICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJS
dWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiBudWxscHRyOwogfQogCiBEb2N1bWVudCogQ1NTU3R5
bGVTaGVldDo6b3duZXJEb2N1bWVudCgpIGNvbnN0CkBAIC00MDAsNyArNDAwLDcgQEAgRG9jdW1l
bnQqIENTU1N0eWxlU2hlZXQ6Om93bmVyRG9jdW1lbnQoKQogICAgIGNvbnN0IENTU1N0eWxlU2hl
ZXQqIHJvb3QgPSB0aGlzOwogICAgIHdoaWxlIChyb290LT5wYXJlbnRTdHlsZVNoZWV0KCkpCiAg
ICAgICAgIHJvb3QgPSByb290LT5wYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgcmV0dXJuIHJvb3Qt
Pm93bmVyTm9kZSgpID8gJnJvb3QtPm93bmVyTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKKyAgICBy
ZXR1cm4gcm9vdC0+b3duZXJOb2RlKCkgPyAmcm9vdC0+b3duZXJOb2RlKCktPmRvY3VtZW50KCkg
OiBudWxscHRyOwogfQogCiB2b2lkIENTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRSdWxlQ1NTT01X
cmFwcGVycygpCkBAIC00MTgsNyArNDE4LDcgQEAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9u
U2NvcGU6OlJ1bGVNdQogfQogCiBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZTo6UnVs
ZU11dGF0aW9uU2NvcGUoQ1NTUnVsZSogcnVsZSkKLSAgICA6IG1fc3R5bGVTaGVldChydWxlID8g
cnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMCkKKyAgICA6IG1fc3R5bGVTaGVldChydWxlID8g
cnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogbnVsbHB0cikKICAgICAsIG1fbXV0YXRpb25UeXBl
KE90aGVyTXV0YXRpb24pCiAgICAgLCBtX2NvbnRlbnRzV2VyZUNsb25lZEZvck11dGF0aW9uKENv
bnRlbnRzV2VyZU5vdENsb25lZEZvck11dGF0aW9uKQogICAgICwgbV9pbnNlcnRlZEtleWZyYW1l
c1J1bGUobnVsbHB0cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNp
b24gMjAxMjkwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBDU1NTdHlsZVNoZWV0X2gKIAogI2lu
Y2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKLSNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAi
U3R5bGVTaGVldC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtODUsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsg
bV9vd25lclJ1bGUgPSAwOyB9CiAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsK
ICAgICBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX21lZGlh
UXVlcmllcy5nZXQoKTsgfQotICAgIHZvaWQgc2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8TWVk
aWFRdWVyeVNldD4pOworICAgIHZvaWQgc2V0TWVkaWFRdWVyaWVzKFJlZjxNZWRpYVF1ZXJ5U2V0
PiYmKTsKICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpIHsgbV90aXRsZSA9
IHRpdGxlOyB9CiAKICAgICBib29sIGhhZFJ1bGVzTXV0YXRpb24oKSBjb25zdCB7IHJldHVybiBt
X211dGF0ZWRSdWxlczsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMTI5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuY3BwCShyZXZpc2lvbiAyMDEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxl
UnVsZS5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgogI2luY2x1ZGUgIkNTU1Vua25v
d25SdWxlLmgiCisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0
aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NT
UmVnaW9uUnVsZS5oIgpAQCAtNDUsMTQgKzQ2LDE0IEBAIHN0cnVjdCBTYW1lU2l6ZUFzU3R5bGVS
dWxlQmFzZSA6IHB1YmxpYyAKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFN0eWxlUnVsZUJhc2Up
ID09IHNpemVvZihTYW1lU2l6ZUFzU3R5bGVSdWxlQmFzZSksIFN0eWxlUnVsZUJhc2Vfc2hvdWxk
X3N0YXlfc21hbGwpOwogCi1QYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0
ZUNTU09NV3JhcHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCkgY29uc3QKK1JlZlB0cjxD
U1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCog
cGFyZW50U2hlZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBlcihwYXJl
bnRTaGVldCwgMCk7CisgICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBlcihwYXJlbnRTaGVldCwg
bnVsbHB0cik7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZT4gU3R5bGVSdWxlQmFzZTo6Y3JlYXRl
Q1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0CitSZWZQdHI8Q1NTUnVsZT4g
U3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNv
bnN0CiB7IAotICAgIHJldHVybiBjcmVhdGVDU1NPTVdyYXBwZXIoMCwgcGFyZW50UnVsZSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBlcihudWxscHRyLCBwYXJlbnRSdWxlKTsKIH0KIAog
dm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKQEAgLTMyOSw5ICszMzAsOSBAQCB2b2lkIFN0
eWxlUnVsZUdyb3VwOjp3cmFwcGVyUmVtb3ZlUnVsZSh1CiB9CiAKIAotU3R5bGVSdWxlTWVkaWE6
OlN0eWxlUnVsZU1lZGlhKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEsIFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKQorU3R5bGVSdWxlTWVkaWE6OlN0eWxl
UnVsZU1lZGlhKFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUJhc2U+PiYgYWRvcHRSdWxlcykKICAgICA6IFN0eWxlUnVsZUdyb3VwKE1lZGlhLCBhZG9w
dFJ1bGVzKQotICAgICwgbV9tZWRpYVF1ZXJpZXMobWVkaWEpCisgICAgLCBtX21lZGlhUXVlcmll
cyhXVEZNb3ZlKG1lZGlhKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAkocmV2
aXNpb24gMjAxMjkwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOSwxMSArMTksOSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBTdHlsZVJ1bGVfaAotI2RlZmluZSBTdHlsZVJ1bGVfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgpAQCAtMzMsNiArMzEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NSdWxlOwogY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3Mg
Q1NTU3R5bGVTaGVldDsKK2NsYXNzIE1lZGlhUXVlcnlTZXQ7CiBjbGFzcyBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOwogY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogCkBAIC04Miw4ICs4MSw4IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxkbid0IGJlIGFueSBuZWVk
IGZvciB0aGUgbnVsbCBwYXJlbnQgdmVyc2lvbi4KLSAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNy
ZWF0ZUNTU09NV3JhcHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IDApIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVu
dFJ1bGUpIGNvbnN0OworICAgIFJlZlB0cjxDU1NSdWxlPiBjcmVhdGVDU1NPTVdyYXBwZXIoQ1NT
U3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBudWxscHRyKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NT
UnVsZT4gY3JlYXRlQ1NTT01XcmFwcGVyKENTU1J1bGUqIHBhcmVudFJ1bGUpIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6CiAgICAgU3R5bGVSdWxlQmFzZShUeXBlIHR5cGUsIHNpZ25lZCBzb3VyY2VMaW5l
ID0gMCkgOiBtX3R5cGUodHlwZSksIG1fc291cmNlTGluZShzb3VyY2VMaW5lKSB7IH0KQEAgLTE5
Myw5ICsxOTIsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBTdHlsZVJ1bGVNZWRpYSA6IHB1YmxpYyBT
dHlsZVJ1bGVHcm91cCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZVJ1bGVNZWRpYT4g
Y3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEsIFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKQorICAgIHN0YXRpYyBSZWY8U3R5bGVSdWxlTWVkaWE+
IGNyZWF0ZShSZWY8TWVkaWFRdWVyeVNldD4mJiBtZWRpYSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4mIGFkb3B0UnVsZXMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTdHlsZVJ1bGVNZWRpYShtZWRpYSwgYWRvcHRSdWxlcykpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTdHlsZVJ1bGVNZWRpYShXVEZNb3ZlKG1lZGlhKSwgYWRvcHRSdWxlcykpOwog
ICAgIH0KIAogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJu
IG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CkBAIC0yMDMsNyArMjAyLDcgQEAgcHVibGljOgogICAg
IFJlZjxTdHlsZVJ1bGVNZWRpYT4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3R5bGVSdWxlTWVkaWEoKnRoaXMpKTsgfQogCiBwcml2YXRlOgotICAgIFN0eWxlUnVsZU1lZGlh
KFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4sIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+
JiBhZG9wdFJ1bGVzKTsKKyAgICBTdHlsZVJ1bGVNZWRpYShSZWY8TWVkaWFRdWVyeVNldD4mJiwg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMpOwogICAgIFN0eWxlUnVs
ZU1lZGlhKGNvbnN0IFN0eWxlUnVsZU1lZGlhJik7CiAKICAgICBSZWZQdHI8TWVkaWFRdWVyeVNl
dD4gbV9tZWRpYVF1ZXJpZXM7CkBAIC0yOTcsNSArMjk2LDMgQEAgU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpTdAogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpTdHlsZVJ1bGVCYXNlJiBydWxlKSB7IHJldHVybiBydWxlLmlzVmlld3BvcnRSdWxlKCk7
IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0RF
VklDRV9BREFQVEFUSU9OKQotCi0jZW5kaWYgLy8gU3R5bGVSdWxlX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCShyZXZpc2lvbiAyMDEyOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjMg
KzI4LDI0IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFN0eWxlUnVsZUltcG9ydD4gU3R5bGVS
dWxlSW1wb3J0OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVl
cnlTZXQ+IG1lZGlhKQorUmVmPFN0eWxlUnVsZUltcG9ydD4gU3R5bGVSdWxlSW1wb3J0OjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBocmVmLCBSZWY8TWVkaWFRdWVyeVNldD4mJiBtZWRpYSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVJ1bGVJbXBvcnQoaHJlZiwgbWVkaWEpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVJ1bGVJbXBvcnQoaHJlZiwgV1RGTW92ZShtZWRp
YSkpKTsKIH0KIAotU3R5bGVSdWxlSW1wb3J0OjpTdHlsZVJ1bGVJbXBvcnQoY29uc3QgU3RyaW5n
JiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhKQorU3R5bGVSdWxlSW1wb3J0
OjpTdHlsZVJ1bGVJbXBvcnQoY29uc3QgU3RyaW5nJiBocmVmLCBSZWY8TWVkaWFRdWVyeVNldD4m
JiBtZWRpYSkKICAgICA6IFN0eWxlUnVsZUJhc2UoSW1wb3J0LCAwKQogICAgICwgbV9wYXJlbnRT
dHlsZVNoZWV0KDApCiAgICAgLCBtX3N0eWxlU2hlZXRDbGllbnQodGhpcykKICAgICAsIG1fc3Ry
SHJlZihocmVmKQotICAgICwgbV9tZWRpYVF1ZXJpZXMobWVkaWEpCisgICAgLCBtX21lZGlhUXVl
cmllcyhXVEZNb3ZlKG1lZGlhKSkKICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKICAgICAsIG1fbG9h
ZGluZyhmYWxzZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmgJKHJl
dmlzaW9uIDIwMTI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7
CiBjbGFzcyBTdHlsZVJ1bGVJbXBvcnQgOiBwdWJsaWMgU3R5bGVSdWxlQmFzZSB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZVJ1bGVJ
bXBvcnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNl
dD4pOworICAgIHN0YXRpYyBSZWY8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBocmVmLCBSZWY8TWVkaWFRdWVyeVNldD4mJik7CiAKICAgICB+U3R5bGVSdWxlSW1wb3J0KCk7
CiAgICAgCkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDU1NTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICAgICBmcmllbmQgY2xhc3Mg
SW1wb3J0ZWRTdHlsZVNoZWV0Q2xpZW50OwogCi0gICAgU3R5bGVSdWxlSW1wb3J0KGNvbnN0IFN0
cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAgU3R5bGVSdWxlSW1w
b3J0KGNvbnN0IFN0cmluZyYgaHJlZiwgUmVmPE1lZGlhUXVlcnlTZXQ+JiYpOwogCiAgICAgU3R5
bGVTaGVldENvbnRlbnRzKiBtX3BhcmVudFN0eWxlU2hlZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCShyZXZpc2lvbiAyMDEyOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI5LDEzICsxMjksMTMgQEAgYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OmlzQ2FjaGVhYmxlKCkg
YwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2Vy
QXBwZW5kUnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpCit2b2lkIFN0eWxlU2hl
ZXRDb250ZW50czo6cGFyc2VyQXBwZW5kUnVsZShSZWY8U3R5bGVSdWxlQmFzZT4mJiBydWxlKQog
ewogICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKLSAgICBpZiAoaXM8U3R5bGVS
dWxlSW1wb3J0PigqcnVsZSkpIHsKKyAgICBpZiAoaXM8U3R5bGVSdWxlSW1wb3J0PihydWxlKSkg
ewogICAgICAgICAvLyBQYXJzZXIgZW5mb3JjZXMgdGhhdCBAaW1wb3J0IHJ1bGVzIGNvbWUgYmVm
b3JlIGFueXRoaW5nIGVsc2UgZXhjZXB0IEBjaGFyc2V0LgogICAgICAgICBBU1NFUlQobV9jaGls
ZFJ1bGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIG1faW1wb3J0UnVsZXMuYXBwZW5kKGRvd25jYXN0
PFN0eWxlUnVsZUltcG9ydD4ocnVsZS5nZXQoKSkpOworICAgICAgICBtX2ltcG9ydFJ1bGVzLmFw
cGVuZChkb3duY2FzdDxTdHlsZVJ1bGVJbXBvcnQ+KHJ1bGUucHRyKCkpKTsKICAgICAgICAgbV9p
bXBvcnRSdWxlcy5sYXN0KCktPnNldFBhcmVudFN0eWxlU2hlZXQodGhpcyk7CiAgICAgICAgIG1f
aW1wb3J0UnVsZXMubGFzdCgpLT5yZXF1ZXN0U3R5bGVTaGVldCgpOwogICAgICAgICByZXR1cm47
CkBAIC0xNDMsMTkgKzE0MywxOSBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQXBw
ZW5kUnVsCiAKICNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKICAgICAvLyBBZGQg
d2FybmluZyBtZXNzYWdlIHRvIGluc3BlY3RvciBpZiBkcGkvZHBjbSB2YWx1ZXMgYXJlIHVzZWQg
Zm9yIHNjcmVlbiBtZWRpYS4KLSAgICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpydWxlKSkKKyAg
ICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KHJ1bGUpKQogICAgICAgICByZXBvcnRNZWRpYVF1ZXJ5
V2FybmluZ0lmTmVlZGVkKHNpbmdsZU93bmVyRG9jdW1lbnQoKSwgZG93bmNhc3Q8U3R5bGVSdWxl
TWVkaWE+KCpydWxlKS5tZWRpYVF1ZXJpZXMoKSk7CiAjZW5kaWYKIAogICAgIC8vIE5PVEU6IFRo
ZSBzZWxlY3RvciBsaXN0IGhhcyB0byBmaXQgaW50byBSdWxlRGF0YS4gPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTE4MzY5PgogICAgIC8vIElmIHdlJ3JlIGFkZGluZyBhIHJ1bGUgd2l0aCBhIGh1Z2Ug
bnVtYmVyIG9mIHNlbGVjdG9ycywgc3BsaXQgaXQgdXAgaW50byBtdWx0aXBsZSBydWxlcwotICAg
IGlmIChpczxTdHlsZVJ1bGU+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGU+KCpydWxlKS5z
ZWxlY3Rvckxpc3QoKS5jb21wb25lbnRDb3VudCgpID4gUnVsZURhdGE6Om1heGltdW1TZWxlY3Rv
ckNvbXBvbmVudENvdW50KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gcnVs
ZXMgPSBkb3duY2FzdDxTdHlsZVJ1bGU+KCpydWxlKS5zcGxpdEludG9NdWx0aXBsZVJ1bGVzV2l0
aE1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KFJ1bGVEYXRhOjptYXhpbXVtU2VsZWN0b3JD
b21wb25lbnRDb3VudCk7CisgICAgaWYgKGlzPFN0eWxlUnVsZT4ocnVsZSkgJiYgZG93bmNhc3Q8
U3R5bGVSdWxlPihydWxlLmdldCgpKS5zZWxlY3Rvckxpc3QoKS5jb21wb25lbnRDb3VudCgpID4g
UnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KSB7CisgICAgICAgIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlPj4gcnVsZXMgPSBkb3duY2FzdDxTdHlsZVJ1bGU+KHJ1bGUuZ2V0
KCkpLnNwbGl0SW50b011bHRpcGxlUnVsZXNXaXRoTWF4aW11bVNlbGVjdG9yQ29tcG9uZW50Q291
bnQoUnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KTsKICAgICAgICAgbV9j
aGlsZFJ1bGVzLmFwcGVuZFZlY3RvcihydWxlcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOworICAgIG1fY2hpbGRSdWxlcy5hcHBlbmQo
V1RGTW92ZShydWxlKSk7CiB9CiAKIFN0eWxlUnVsZUJhc2UqIFN0eWxlU2hlZXRDb250ZW50czo6
cnVsZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdApAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgU3R5
bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGkKICAgICBtX2VuY29kaW5nRnJvbUNoYXJz
ZXRSdWxlID0gZW5jb2Rpbmc7IAogfQogCi1ib29sIFN0eWxlU2hlZXRDb250ZW50czo6d3JhcHBl
ckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlLCB1bnNpZ25lZCBpbmRl
eCkKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZShSZWY8U3R5bGVS
dWxlQmFzZT4mJiBydWxlLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBBU1NFUlQobV9pc011dGFi
bGUpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDw9IHJ1bGVD
b3VudCgpKTsKQEAgLTIyNiwyNCArMjI2LDI0IEBAIGJvb2wgU3R5bGVTaGVldENvbnRlbnRzOjp3
cmFwcGVySW5zZXJ0UnUKICAgICAKICAgICBpZiAoY2hpbGRWZWN0b3JJbmRleCA8IG1faW1wb3J0
UnVsZXMuc2l6ZSgpIHx8IChjaGlsZFZlY3RvckluZGV4ID09IG1faW1wb3J0UnVsZXMuc2l6ZSgp
ICYmIHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSkgewogICAgICAgICAvLyBJbnNlcnRpbmcgbm9uLWlt
cG9ydCBydWxlIGJlZm9yZSBAaW1wb3J0IGlzIG5vdCBhbGxvd2VkLgotICAgICAgICBpZiAoIWlz
PFN0eWxlUnVsZUltcG9ydD4oKnJ1bGUpKQorICAgICAgICBpZiAoIWlzPFN0eWxlUnVsZUltcG9y
dD4ocnVsZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1faW1wb3J0UnVs
ZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIGRvd25jYXN0PFN0eWxlUnVsZUltcG9ydD4ocnVs
ZS5nZXQoKSkpOworICAgICAgICBtX2ltcG9ydFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4
LCBkb3duY2FzdDxTdHlsZVJ1bGVJbXBvcnQ+KHJ1bGUucHRyKCkpKTsKICAgICAgICAgbV9pbXBv
cnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlzKTsKICAg
ICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxlU2hlZXQo
KTsKICAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2Ug
bWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFm
dGVyIGEgbm9uLWltcG9ydCBydWxlIGlzIG5vdCBhbGxvd2VkLgotICAgIGlmIChpczxTdHlsZVJ1
bGVJbXBvcnQ+KCpydWxlKSkKKyAgICBpZiAoaXM8U3R5bGVSdWxlSW1wb3J0PihydWxlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxl
cy5zaXplKCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyB3b3VsZCBvdmVy
ZmxvdyBSdWxlRGF0YSwgd2UgZHJvcCB0aGUgb3BlcmF0aW9uLgotICAgIGlmIChpczxTdHlsZVJ1
bGU+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGU+KCpydWxlKS5zZWxlY3Rvckxpc3QoKS5j
b21wb25lbnRDb3VudCgpID4gUnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50
KQorICAgIGlmIChpczxTdHlsZVJ1bGU+KHJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZT4ocnVs
ZS5nZXQoKSkuc2VsZWN0b3JMaXN0KCkuY29tcG9uZW50Q291bnQoKSA+IFJ1bGVEYXRhOjptYXhp
bXVtU2VsZWN0b3JDb21wb25lbnRDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKKyAgICBtX2NoaWxk
UnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIFdURk1vdmUocnVsZSkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5o
CShyZXZpc2lvbiAyMDEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRl
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTeW50
YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXI7IH0KIAogICAgIHZvaWQgcGFyc2VyQWRkTmFtZXNwYWNl
KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7Ci0g
ICAgdm9pZCBwYXJzZXJBcHBlbmRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4pOworICAg
IHZvaWQgcGFyc2VyQXBwZW5kUnVsZShSZWY8U3R5bGVSdWxlQmFzZT4mJik7CiAgICAgdm9pZCBw
YXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKTsg
CiAgICAgdm9pZCBwYXJzZXJTZXRVc2VzUmVtVW5pdHMoKSB7IG1fdXNlc1JlbVVuaXRzID0gdHJ1
ZTsgfQogICAgIHZvaWQgcGFyc2VyU2V0VXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgbV91
c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gdHJ1ZTsgfQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGVzdGltYXRlZFNpemVJbkJ5dGVzKCkgY29uc3Q7CiAgICAg
Ci0gICAgYm9vbCB3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+LCB1
bnNpZ25lZCBpbmRleCk7CisgICAgYm9vbCB3cmFwcGVySW5zZXJ0UnVsZShSZWY8U3R5bGVSdWxl
QmFzZT4mJiwgdW5zaWduZWQgaW5kZXgpOwogICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5z
aWduZWQgaW5kZXgpOwogCiAgICAgUmVmPFN0eWxlU2hlZXRDb250ZW50cz4gY29weSgpIGNvbnN0
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVTaGVldENvbnRlbnRzKCp0aGlzKSk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCShyZXZp
c2lvbiAyMDEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgSW5saW5lU3R5bGVT
aGVldE93bmVyOjpjcmVhdGVTaGVldCgKICAgICBtX2xvYWRpbmcgPSB0cnVlOwogCiAgICAgbV9z
aGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShlbGVtZW50LCBVUkwoKSwgbV9zdGFy
dFRleHRQb3NpdGlvbiwgZG9jdW1lbnQuZW5jb2RpbmcoKSk7Ci0gICAgbV9zaGVldC0+c2V0TWVk
aWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOworICAgIG1fc2hlZXQtPnNldE1lZGlh
UXVlcmllcyhtZWRpYVF1ZXJpZXMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgbV9zaGVldC0+c2V0
VGl0bGUoZWxlbWVudC50aXRsZSgpKTsKICAgICBtX3NoZWV0LT5jb250ZW50cygpLnBhcnNlU3Ry
aW5nQXRQb3NpdGlvbih0ZXh0LCBtX3N0YXJ0VGV4dFBvc2l0aW9uLCBtX2lzUGFyc2luZ0NoaWxk
cmVuKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMjAxMjkwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3
IEBACiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNT
U0FnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCisjaW5jbHVkZSAiTWVk
aWFMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279621</attachid>
            <date>2016-05-23 21:15:54 -0700</date>
            <delta_ts>2016-05-23 22:02:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157875-20160523211700.patch</filename>
            <type>text/plain</type>
            <size>41141</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA1LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IENTUyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9u
QXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0
aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICogY3NzL0NTU0Jhc2lj
U2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVBvc2l0aW9uT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQmFzaWNTaGFwZUNpcmNsZTo6Y3NzVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NCYXNpY1NoYXBlRWxsaXBzZTo6Y3NzVGV4dCk6CisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdv
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU01lZGlhUnVsZTo6bWVkaWEpOgorICAgICAgICAqIGNzcy9DU1NNZWRpYVJ1bGUuaDoK
KyAgICAgICAgKiBjc3MvQ1NTT01VdGlscy5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3Mv
Q1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0TWVkaWFRdWVyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojppc0xv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6bWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2hlZXQ6OmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZTo6UnVsZU11dGF0aW9uU2Nv
cGUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogY3NzL1Byb3Bl
cnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVHcm91cDo6d3JhcHBlclJlbW92ZVJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSdWxlTWVkaWE6OlN0eWxlUnVsZU1lZGlhKToKKyAgICAgICAgKiBjc3MvU3R5
bGVSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpkZXJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpTdHlsZVJ1bGVCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZU1lZGlhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
dWxlTWVkaWE6Om1lZGlhUXVlcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVNZWRp
YTo6Y29weSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGVJbXBv
cnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpTdHlsZVJ1bGVJbXBvcnQpOgorICAgICAg
ICAqIGNzcy9TdHlsZVJ1bGVJbXBvcnQuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRl
bnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6aXNDYWNoZWFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJBcHBlbmRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cnVsZUF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyU2V0RW5jb2RpbmdGcm9t
Q2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjp3cmFw
cGVySW5zZXJ0UnVsZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpoYXNTeW50YWN0aWNhbGx5VmFsaWRD
U1NIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJT
ZXRVc2VzUmVtVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpw
YXJzZXJTZXRVc2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlU2hlZXRDb250ZW50czo6Y29weSk6CisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRP
d25lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0
ZVNoZWV0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisK
IDIwMTYtMDUtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBD
aGFuZ2luZyBib3JkZXIgY29sb3IgYW5kIHNpemUgc2ltdWx0YW5lb3VzbHkgZmFpbHMgdG8gcmVw
YWludC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjcwNSw3
ICsyNzA1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAg
ICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAs
ICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykg
LiAiKSIsICJjYXN0ZWRUaGlzIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKSBpZiAhJGF0
dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb2Jq
ID0gJGpzVHlwZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAkanNUeXBlO1xuIik7CkBAIC0yOTE4LDcgKzI5MTgsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBpZiAoJHB1dEZvcndhcmRzKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2Rl
R2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSB8fCAkbmFtZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR7dHlwZX0+
IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJHtpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lfSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byBmb3J3YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiR7
aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0oKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZm9yd2FyZGVkSW1wbClcbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7XG4iKTsKQEAgLTM2NTksOSAr
MzY1OSw5IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKCpzdGF0ZSwgJGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNl
TmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lKTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgk
ZnVuY3Rpb24tPmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJDYWxsYmFja0Z1bmN0aW9uLmgiKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlD
YWxsYmFjazwke2NhbGxiYWNrQ2xhc3NOYW1lfT4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoJGFyZ3VtZW50SW5kZXgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgYXV0byAkbmFtZSA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNr
PCR7Y2FsbGJhY2tDbGFzc05hbWV9PihzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgk
YXJndW1lbnRJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkdHlwZT4gJG5hbWUg
PSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgkYXJndW1lbnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5h
bWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7
XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFs
dWUgPSAiV1RGTW92ZSgkbmFtZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjAxMzE2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RNZWRpYQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
c3RhdGUtPmFyZ3VtZW50KDApLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4gbGlzdGVuZXIgPSBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgYXV0byBsaXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6
Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZChXVEZNb3ZlKGxpc3RlbmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNSwxMCArMTAxNSwx
MCBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUs
IDAsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdE9iaiIsIG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0
Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVj
dChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmoiLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHRlc3RDYWxsYmFja0Z1
bmN0aW9uID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBh
dXRvIG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZSgqdGVzdENhbGxiYWNrLCAqdGVzdENhbGxiYWNr
RnVuY3Rpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KU05ld2x5
Q3JlYXRlZChzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0
KSkpKTsKIH0KQEAgLTM4NTIsNyArMzg1Miw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgUmVmUHRyPFRlc3ROb2RlPiBmb3J3
YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLnB1dEZvcndhcmRzTnVsbGFibGVBdHRy
aWJ1dGUoKTsKKyAgICBhdXRvIGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCku
cHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpOwogICAgIGlmICghZm9yd2FyZGVkSW1wbCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDsK
QEAgLTUwMjEsNyArNTAyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVu
dCgwKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKCpzdGF0ZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENh
bGxiYWNrQXJnIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBcmco
V1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC01MDQxLDcgKzUwNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkp
CiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUs
IDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0FyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC01MDc2
LDcgKzUwNzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNG
dW5jdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKCpzdGF0ZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNr
RnVuY3Rpb25BcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNr
ID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNh
bGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNTA5Niw3ICs1
MDk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VM
WSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0
T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsK
LSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gSlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoV1RGTW92ZShub25DYWxsYmFjayks
IFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQpAQCAtNTEzNyw3ICs1MTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpDbwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghc3Rh
dGUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJz
dGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBj
YWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0
ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSksIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNy
ZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxi
YWNrQXJnKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQpAQCAtNTI2OSw3ICs1MjY5LDcgQEAgc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghc3RhdGUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dB
cmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9i
aiIsICJvdmVybG9hZGVkTWV0aG9kIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJh
Y2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIGNhbGxiYWNr
ID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVk
TWV0aG9kKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDEz
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdGVtcGxhdGU8PiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEp
LmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9u
RXJyb3IoKnN0YXRlLCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIp
OwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNr
OjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0VHlwZWRlZnM6OmNy
ZWF0ZShoZWxsbywgKnRlc3RDYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
c09iamVjdCh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGTW92ZShvYmplY3QpKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jh
c2ljU2hhcGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNT
aGFwZXMuY3BwCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFz
aWNTaGFwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBTdHJp
bmcgc2VyaWFsaXplUG9zaXRpb25PZmZzZXQoY28KICAgICByZXR1cm4gb2Zmc2V0LmNzc1RleHQo
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gYnVpbGRTZXJpYWxpemFibGVQ
b3NpdGlvbk9mZnNldChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQsIENTU1Zh
bHVlSUQgZGVmYXVsdFNpZGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBidWlsZFNl
cmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KENTU1ByaW1pdGl2ZVZhbHVlKiBvZmZzZXQsIENTU1Zh
bHVlSUQgZGVmYXVsdFNpZGUpCiB7CiAgICAgQ1NTVmFsdWVJRCBzaWRlID0gZGVmYXVsdFNpZGU7
CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQ7CkBAIC0xMTAsOCArMTEwLDgg
QEAgc3RhdGljIFN0cmluZyBidWlsZENpcmNsZVN0cmluZyhjb25zdCBTdAogCiBTdHJpbmcgQ1NT
QmFzaWNTaGFwZUNpcmNsZTo6Y3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBub3JtYWxpemVkQ1ggPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1f
Y2VudGVyWCwgQ1NTVmFsdWVMZWZ0KTsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1h
bGl6ZWRDWSA9IGJ1aWxkU2VyaWFsaXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJZLCBDU1NW
YWx1ZVRvcCk7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1ggPSBidWls
ZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVyWC5nZXQoKSwgQ1NTVmFsdWVMZWZ0
KTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG5vcm1hbGl6ZWRDWSA9IGJ1aWxkU2VyaWFs
aXphYmxlUG9zaXRpb25PZmZzZXQobV9jZW50ZXJZLmdldCgpLCBDU1NWYWx1ZVRvcCk7CiAKICAg
ICBTdHJpbmcgcmFkaXVzOwogICAgIGlmIChtX3JhZGl1cyAmJiBtX3JhZGl1cy0+Z2V0VmFsdWVJ
RCgpICE9IENTU1ZhbHVlQ2xvc2VzdFNpZGUpCkBAIC0xNjcsOCArMTY3LDggQEAgc3RhdGljIFN0
cmluZyBidWlsZEVsbGlwc2VTdHJpbmcoY29uc3QgUwogCiBTdHJpbmcgQ1NTQmFzaWNTaGFwZUVs
bGlwc2U6OmNzc1RleHQoKSBjb25zdAogewotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9y
bWFsaXplZENYID0gYnVpbGRTZXJpYWxpemFibGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclgsIENT
U1ZhbHVlTGVmdCk7Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1kgPSBi
dWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zmc2V0KG1fY2VudGVyWSwgQ1NTVmFsdWVUb3ApOwor
ICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsaXplZENYID0gYnVpbGRTZXJpYWxpemFi
bGVQb3NpdGlvbk9mZnNldChtX2NlbnRlclguZ2V0KCksIENTU1ZhbHVlTGVmdCk7CisgICAgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxpemVkQ1kgPSBidWlsZFNlcmlhbGl6YWJsZVBvc2l0
aW9uT2Zmc2V0KG1fY2VudGVyWS5nZXQoKSwgQ1NTVmFsdWVUb3ApOwogCiAgICAgU3RyaW5nIHJh
ZGl1c1g7CiAgICAgU3RyaW5nIHJhZGl1c1k7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw5ICsy
MDAsOSBAQCBkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHgoY29uCiBjbGFzcyBD
U1NDYWxjUHJpbWl0aXZlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENTU0NhbGNQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHZhbHVlLCBib29sIGlzSW50ZWdlcikKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNQcmltaXRp
dmVWYWx1ZT4gY3JlYXRlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpc0lu
dGVnZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0
aXZlVmFsdWUodmFsdWUsIGlzSW50ZWdlcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoV1RGTW92ZSh2YWx1ZSksIGlzSW50ZWdlcikpOwogICAg
IH0KIAogICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoZG91
YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUsIGJvb2wgaXNJbnRl
Z2VyKQpAQCAtMjMyLDkgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKG1fdmFsdWUtPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKSwgV2ViQ29yZTo6Rml4ZWQpKTsKICAgICAg
ICAgY2FzZSBDYWxjUGVyY2VudDoKICAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDogewot
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gbV92YWx1ZS5n
ZXQoKTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENhbGNFeHByZXNzaW9u
TGVuZ3RoPihwcmltaXRpdmVWYWx1ZQotICAgICAgICAgICAgICAgID8gcHJpbWl0aXZlVmFsdWUt
PmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
Pihjb252ZXJzaW9uRGF0YSkgOiBMZW5ndGgoVW5kZWZpbmVkKSk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4obV92YWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24+KGNvbnZl
cnNpb25EYXRhKSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gT25seSB0eXBlcyB0aGF0IGNvdWxk
IGJlIHBhcnQgb2YgYSBMZW5ndGggZXhwcmVzc2lvbiBjYW4gYmUgY29udmVydGVkCiAgICAgICAg
IC8vIHRvIGEgQ2FsY0V4cHJlc3Npb25Ob2RlLiBDYWxjUGVyY2VudE51bWJlciBtYWtlcyBubyBz
ZW5zZSBhcyBhIExlbmd0aC4KQEAgLTI4Myw3ICsyODEsNyBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlUHRyKG1fdmFsdWUsIHN0YXRpY19jYXN0PGNv
bnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZSY+KG90aGVyKS5tX3ZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIGNvbXBhcmVDU1NWYWx1ZShtX3ZhbHVlLCBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjUHJp
bWl0aXZlVmFsdWUmPihvdGhlcikubV92YWx1ZSk7CiAgICAgfQogCiAgICAgVHlwZSB0eXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9CkBAIC0yOTMs
MTMgKzI5MSwxMyBAQCBwcml2YXRlOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBD
U1NDYWxjUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWUs
IGJvb2wgaXNJbnRlZ2VyKQorICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1ZShSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQogICAgICAgICA6IENT
U0NhbGNFeHByZXNzaW9uTm9kZSh1bml0Q2F0ZWdvcnkoKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMpdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSksIGlzSW50ZWdlcikKLSAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQorICAgICAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCiAgICAgewogICAg
IH0KIAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV92YWx1ZTsKKyAgICBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IG1fdmFsdWU7CiB9OwogCiBzdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25D
YXRlZ29yeSBhZGRTdWJ0cmFjdFJlc3VsdFtDYWxjQW5nbGVdW0NhbGNBbmdsZV0gPSB7CkBAIC02
MDcsMTEgKzYwNSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwYXJzZXJWYWx1ZS0+Y3JlYXRlQ1NTVmFs
dWUoKTsKLSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQor
ICAgICAgICBpZiAoIXZhbHVlIHx8ICFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwot
ICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoJnBy
aW1pdGl2ZVZhbHVlLCBwYXJzZXJWYWx1ZS0+aXNJbnQpOworICAgICAgICByZXN1bHQtPnZhbHVl
ID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPihw
cmltaXRpdmVWYWx1ZSksIHBhcnNlclZhbHVlLT5pc0ludCk7CiAKICAgICAgICAgKysqaW5kZXg7
CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5j
cHAJKHJldmlzaW9uIDIwMTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTUnVsZUxp
c3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtNjUsNyArNjYsNyBAQCBTdHJp
bmcgQ1NTTWVkaWFSdWxlOjpjc3NUZXh0KCkgY29uc3QKIE1lZGlhTGlzdCogQ1NTTWVkaWFSdWxl
OjptZWRpYSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtZWRpYVF1ZXJpZXMoKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghbV9tZWRpYUNTU09NV3Jh
cHBlcikKICAgICAgICAgbV9tZWRpYUNTU09NV3JhcHBlciA9IE1lZGlhTGlzdDo6Y3JlYXRlKG1l
ZGlhUXVlcmllcygpLCBjb25zdF9jYXN0PENTU01lZGlhUnVsZSo+KHRoaXMpKTsKICAgICByZXR1
cm4gbV9tZWRpYUNTU09NV3JhcHBlci5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NNZWRpYVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFS
dWxlLmgJKHJldmlzaW9uIDIwMTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTQgKzIwLDEzIEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU01lZGlhUnVsZV9oCi0jZGVmaW5lIENT
U01lZGlhUnVsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU0dyb3VwaW5nUnVsZS5o
IgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IE1lZGlhTGlzdDsKIGNsYXNzIFN0eWxlUnVsZU1lZGlhOwogCiBjbGFzcyBDU1NNZWRpYVJ1bGUg
ZmluYWwgOiBwdWJsaWMgQ1NTR3JvdXBpbmdSdWxlIHsKQEAgLTU0LDUgKzUzLDMgQEAgcHJpdmF0
ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1Nf
UlVMRShDU1NNZWRpYVJ1bGUsIENTU1J1bGU6Ok1FRElBX1JVTEUpCi0KLSNlbmRpZiAvLyBDU1NN
ZWRpYVJ1bGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCShyZXZpc2lvbiAyMDEzMTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTT01VdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMiArMjgsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDU1NPTVV0aWxz
X2gKLSNkZWZpbmUgQ1NTT01VdGlsc19oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHVuaWNv
ZGUvdXR5cGVzLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bWFjaGluZS5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAvLyBVdGlsaXRpZXMgZm9y
IENTU09NIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLwogCkBAIC00Niw1ICs0NCwzIEBA
IHZvaWQgc2VyaWFsaXplSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGkKIHZvaWQgc2VyaWFsaXpl
U3RyaW5nKGNvbnN0IFN0cmluZyYsIFN0cmluZ0J1aWxkZXImKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQ1NTT01VdGlsc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAkocmV2aXNpb24gMjAxMzE2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODA1LDcgKzEyODA1LDcgQEAgUmVmUHRyPFN0eWxl
UnVsZUltcG9ydD4gQ1NTUGFyc2VyOjpjcmVhdAogICAgICAgICBwb3BSdWxlRGF0YSgpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgYXV0byBydWxlID0gU3R5bGVSdWxlSW1w
b3J0OjpjcmVhdGUodXJsLCBtZWRpYSk7CisgICAgYXV0byBydWxlID0gU3R5bGVSdWxlSW1wb3J0
OjpjcmVhdGUodXJsLCBtZWRpYS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICBwcm9jZXNzQW5kQWRk
TmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgcmV0dXJuIFdURk1vdmUocnVsZSk7
CiB9CkBAIC0xMjgyMCw3ICsxMjgyMCw3IEBAIFJlZjxTdHlsZVJ1bGVNZWRpYT4gQ1NTUGFyc2Vy
OjpjcmVhdGVNZWQKICAgICAgICAgLy8gZXZlbiB3aGVuIGl0IGlzIHN5bnRhY3RpY2FsbHkgaW5j
b3JyZWN0LgogICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShNZWRpYVF1ZXJ5
U2V0OjpjcmVhdGUoKSwgZW1wdHlSdWxlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJ1bGUgPSBT
dHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCBydWxlcyA/ICpydWxlcyA6IGVtcHR5UnVsZXMp
OworICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShtZWRpYS5yZWxlYXNlTm9u
TnVsbCgpLCBydWxlcyA/ICpydWxlcyA6IGVtcHR5UnVsZXMpOwogICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKICAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9u
TnVsbCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAkocmV2aXNp
b24gMjAxMzE2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lm
bmRlZiBDU1NSZWZsZWN0VmFsdWVfaAotI2RlZmluZSBDU1NSZWZsZWN0VmFsdWVfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJDU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAi
Q1NTVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzEsNSArNjksMyBAQCBwcml2YXRl
OgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19W
QUxVRShDU1NSZWZsZWN0VmFsdWUsIGlzUmVmbGVjdFZhbHVlKCkpCi0KLSNlbmRpZiAvLyBDU1NS
ZWZsZWN0VmFsdWVfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2
aXNpb24gMjAxMzE2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjIsOSArMjIyLDkgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzZXRE
aXNhYmxlZChib29sIGRpcwogICAgIGRpZE11dGF0ZSgpOwogfQogCi12b2lkIENTU1N0eWxlU2hl
ZXQ6OnNldE1lZGlhUXVlcmllcyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmll
cykKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6c2V0TWVkaWFRdWVyaWVzKFJlZjxNZWRpYVF1ZXJ5U2V0
PiYmIG1lZGlhUXVlcmllcykKIHsKLSAgICBtX21lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllczsK
KyAgICBtX21lZGlhUXVlcmllcyA9IFdURk1vdmUobWVkaWFRdWVyaWVzKTsKICAgICBpZiAobV9t
ZWRpYUNTU09NV3JhcHBlciAmJiBtX21lZGlhUXVlcmllcykKICAgICAgICAgbV9tZWRpYUNTU09N
V3JhcHBlci0+cmVhdHRhY2gobV9tZWRpYVF1ZXJpZXMuZ2V0KCkpOwogCkBAIC0zMTAsNyArMzEw
LDcgQEAgdW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdAogCiAgICAgUnVs
ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzLCBSdWxlSW5zZXJ0aW9uLCBpczxTdHls
ZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSA/IGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4ocnVs
ZS5nZXQoKSkgOiBudWxscHRyKTsKIAotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29udGVudHMuZ2V0
KCkud3JhcHBlckluc2VydFJ1bGUocnVsZSwgaW5kZXgpOworICAgIGJvb2wgc3VjY2VzcyA9IG1f
Y29udGVudHMuZ2V0KCkud3JhcHBlckluc2VydFJ1bGUocnVsZS5yZWxlYXNlTm9uTnVsbCgpLCBp
bmRleCk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVF
U1RfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIENTU1N0
eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUodW5zaWduZWQgCiAKICAgICBpZiAoIW1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVyc1tpbmRleF0pCi0gICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhd
LT5zZXRQYXJlbnRTdHlsZVNoZWV0KDApOworICAgICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzW2luZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldChudWxscHRyKTsKICAgICAgICAgbV9j
aGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7CiAgICAgfQogfQpAQCAtMzgxLDkg
KzM4MSw5IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkgY29uc3QKIH0KIAogTWVk
aWFMaXN0KiBDU1NTdHlsZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoteyAKK3sKICAgICBpZiAoIW1f
bWVkaWFRdWVyaWVzKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBpZiAoIW1fbWVkaWFDU1NPTVdyYXBwZXIpCiAgICAgICAgIG1fbWVkaWFDU1NPTVdy
YXBwZXIgPSBNZWRpYUxpc3Q6OmNyZWF0ZShtX21lZGlhUXVlcmllcy5nZXQoKSwgY29uc3RfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4odGhpcykpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIE1lZGlhTGlzdCog
Q1NTU3R5bGVTaGVldDo6bWVkaWEoKSBjb25zdCAKIAogQ1NTU3R5bGVTaGVldCogQ1NTU3R5bGVT
aGVldDo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IAogeyAKLSAgICByZXR1cm4gbV9vd25lclJ1
bGUgPyBtX293bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsgCisgICAgcmV0dXJuIG1f
b3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IG51bGxwdHI7CiB9
CiAKIERvY3VtZW50KiBDU1NTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkgY29uc3QKQEAgLTQw
MCw3ICs0MDAsNyBAQCBEb2N1bWVudCogQ1NTU3R5bGVTaGVldDo6b3duZXJEb2N1bWVudCgpCiAg
ICAgY29uc3QgQ1NTU3R5bGVTaGVldCogcm9vdCA9IHRoaXM7CiAgICAgd2hpbGUgKHJvb3QtPnBh
cmVudFN0eWxlU2hlZXQoKSkKICAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudFN0eWxlU2hlZXQo
KTsKLSAgICByZXR1cm4gcm9vdC0+b3duZXJOb2RlKCkgPyAmcm9vdC0+b3duZXJOb2RlKCktPmRv
Y3VtZW50KCkgOiAwOworICAgIHJldHVybiByb290LT5vd25lck5vZGUoKSA/ICZyb290LT5vd25l
ck5vZGUoKS0+ZG9jdW1lbnQoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6
Y2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCkKQEAgLTQxOCw3ICs0MTgsNyBAQCBDU1NTdHls
ZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZTo6UnVsZU11CiB9CiAKIENTU1N0eWxlU2hlZXQ6OlJ1
bGVNdXRhdGlvblNjb3BlOjpSdWxlTXV0YXRpb25TY29wZShDU1NSdWxlKiBydWxlKQotICAgIDog
bV9zdHlsZVNoZWV0KHJ1bGUgPyBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwKQorICAgIDog
bV9zdHlsZVNoZWV0KHJ1bGUgPyBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiBudWxscHRyKQog
ICAgICwgbV9tdXRhdGlvblR5cGUoT3RoZXJNdXRhdGlvbikKICAgICAsIG1fY29udGVudHNXZXJl
Q2xvbmVkRm9yTXV0YXRpb24oQ29udGVudHNXZXJlTm90Q2xvbmVkRm9yTXV0YXRpb24pCiAgICAg
LCBtX2luc2VydGVkS2V5ZnJhbWVzUnVsZShudWxscHRyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5oCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIENT
U1N0eWxlU2hlZXRfaAogCiAjaW5jbHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgotI2luY2x1ZGUgIkNT
U1J1bGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC04NSw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyT3duZXJSdWxlKCkgeyBtX293bmVyUnVsZSA9IDA7IH0KICAgICBEb2N1bWVudCogb3du
ZXJEb2N1bWVudCgpIGNvbnN0OwogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRNZWRpYVF1
ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAgdm9pZCBzZXRNZWRpYVF1ZXJp
ZXMoUmVmPE1lZGlhUXVlcnlTZXQ+JiYpOwogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5n
JiB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KIAogICAgIGJvb2wgaGFkUnVsZXNNdXRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRlZFJ1bGVzOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gMjAxMzE2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1
ZGUgIkNTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNp
bmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAJKHJldmlzaW9uIDIwMTMxNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3VwcG9ydHNSdWxlLmgi
CiAjaW5jbHVkZSAiQ1NTVW5rbm93blJ1bGUuaCIKKyNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIK
ICNpbmNsdWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCkBAIC00NSwxNCArNDYsMTQgQEAgc3Ry
dWN0IFNhbWVTaXplQXNTdHlsZVJ1bGVCYXNlIDogcHVibGljIAogCiBDT01QSUxFX0FTU0VSVChz
aXplb2YoU3R5bGVSdWxlQmFzZSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNTdHlsZVJ1bGVCYXNlKSwg
U3R5bGVSdWxlQmFzZV9zaG91bGRfc3RheV9zbWFsbCk7CiAKLVBhc3NSZWZQdHI8Q1NTUnVsZT4g
U3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVudFNo
ZWV0KSBjb25zdAorUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3Jh
cHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3Jl
YXRlQ1NTT01XcmFwcGVyKHBhcmVudFNoZWV0LCAwKTsKKyAgICByZXR1cm4gY3JlYXRlQ1NTT01X
cmFwcGVyKHBhcmVudFNoZWV0LCBudWxscHRyKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlPiBT
dHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTUnVsZSogcGFyZW50UnVsZSkgY29u
c3QKK1JlZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NT
UnVsZSogcGFyZW50UnVsZSkgY29uc3QKIHsgCi0gICAgcmV0dXJuIGNyZWF0ZUNTU09NV3JhcHBl
cigwLCBwYXJlbnRSdWxlKTsKKyAgICByZXR1cm4gY3JlYXRlQ1NTT01XcmFwcGVyKG51bGxwdHIs
IHBhcmVudFJ1bGUpOwogfQogCiB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQpAQCAtMzI5
LDkgKzMzMCw5IEBAIHZvaWQgU3R5bGVSdWxlR3JvdXA6OndyYXBwZXJSZW1vdmVSdWxlKHUKIH0K
IAogCi1TdHlsZVJ1bGVNZWRpYTo6U3R5bGVSdWxlTWVkaWEoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5
U2V0PiBtZWRpYSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMpCitT
dHlsZVJ1bGVNZWRpYTo6U3R5bGVSdWxlTWVkaWEoUmVmPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEs
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBhZG9wdFJ1bGVzKQogICAgIDogU3R5bGVS
dWxlR3JvdXAoTWVkaWEsIGFkb3B0UnVsZXMpCi0gICAgLCBtX21lZGlhUXVlcmllcyhtZWRpYSkK
KyAgICAsIG1fbWVkaWFRdWVyaWVzKFdURk1vdmUobWVkaWEpKQogewogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUnVsZS5oCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSw5IEBACiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFN0eWxlUnVsZV9oCi0jZGVmaW5l
IFN0eWxlUnVsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5o
IgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC0z
Myw2ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU1J1bGU7CiBjbGFzcyBD
U1NTdHlsZVJ1bGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgTWVkaWFRdWVyeVNldDsK
IGNsYXNzIE11dGFibGVTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiAK
QEAgLTgyLDggKzgxLDggQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGVyZSBz
aG91bGRuJ3QgYmUgYW55IG5lZWQgZm9yIHRoZSBudWxsIHBhcmVudCB2ZXJzaW9uLgotICAgIFBh
c3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVu
dFNoZWV0ID0gMCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBjcmVhdGVDU1NPTVdy
YXBwZXIoQ1NTUnVsZSogcGFyZW50UnVsZSkgY29uc3Q7CisgICAgUmVmUHRyPENTU1J1bGU+IGNy
ZWF0ZUNTU09NV3JhcHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IG51bGxwdHIpIGNv
bnN0OworICAgIFJlZlB0cjxDU1NSdWxlPiBjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTUnVsZSogcGFy
ZW50UnVsZSkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBTdHlsZVJ1bGVCYXNlKFR5cGUgdHlw
ZSwgc2lnbmVkIHNvdXJjZUxpbmUgPSAwKSA6IG1fdHlwZSh0eXBlKSwgbV9zb3VyY2VMaW5lKHNv
dXJjZUxpbmUpIHsgfQpAQCAtMTkzLDkgKzE5Miw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFN0eWxl
UnVsZU1lZGlhIDogcHVibGljIFN0eWxlUnVsZUdyb3VwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFN0eWxlUnVsZU1lZGlhPiBjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRp
YSwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMpCisgICAgc3RhdGlj
IFJlZjxTdHlsZVJ1bGVNZWRpYT4gY3JlYXRlKFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgYWRvcHRSdWxlcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZU1lZGlhKG1lZGlhLCBhZG9wdFJ1bGVzKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZU1lZGlhKFdURk1vdmUobWVk
aWEpLCBhZG9wdFJ1bGVzKSk7CiAgICAgfQogCiAgICAgTWVkaWFRdWVyeVNldCogbWVkaWFRdWVy
aWVzKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJpZXMuZ2V0KCk7IH0KQEAgLTIwMyw3ICsy
MDIsNyBAQCBwdWJsaWM6CiAgICAgUmVmPFN0eWxlUnVsZU1lZGlhPiBjb3B5KCkgY29uc3QgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZVJ1bGVNZWRpYSgqdGhpcykpOyB9CiAKIHByaXZhdGU6
Ci0gICAgU3R5bGVSdWxlTWVkaWEoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiwgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIGFkb3B0UnVsZXMpOworICAgIFN0eWxlUnVsZU1lZGlhKFJl
ZjxNZWRpYVF1ZXJ5U2V0PiYmLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgYWRvcHRS
dWxlcyk7CiAgICAgU3R5bGVSdWxlTWVkaWEoY29uc3QgU3R5bGVSdWxlTWVkaWEmKTsKIAogICAg
IFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhUXVlcmllczsKQEAgLTI5Nyw1ICsyOTYsMyBA
QCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlN0CiAgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlN0eWxlUnVsZUJhc2UmIHJ1bGUpIHsgcmV0dXJuIHJ1
bGUuaXNWaWV3cG9ydFJ1bGUoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogI2Vu
ZGlmIC8vIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0KLSNlbmRpZiAvLyBTdHlsZVJ1
bGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAJKHJldmlzaW9u
IDIwMTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwyMyArMjgsMjQgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U3R5
bGVSdWxlSW1wb3J0PiBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGhyZWYs
IFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEpCitSZWY8U3R5bGVSdWxlSW1wb3J0PiBT
dHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGhyZWYsIFJlZjxNZWRpYVF1ZXJ5
U2V0PiYmIG1lZGlhKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZUltcG9y
dChocmVmLCBtZWRpYSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZUltcG9y
dChocmVmLCBXVEZNb3ZlKG1lZGlhKSkpOwogfQogCi1TdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVs
ZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVk
aWEpCitTdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYs
IFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhKQogICAgIDogU3R5bGVSdWxlQmFzZShJbXBvcnQs
IDApCiAgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQoMCkKICAgICAsIG1fc3R5bGVTaGVldENsaWVu
dCh0aGlzKQogICAgICwgbV9zdHJIcmVmKGhyZWYpCi0gICAgLCBtX21lZGlhUXVlcmllcyhtZWRp
YSkKKyAgICAsIG1fbWVkaWFRdWVyaWVzKFdURk1vdmUobWVkaWEpKQogICAgICwgbV9jYWNoZWRT
aGVldCgwKQogICAgICwgbV9sb2FkaW5nKGZhbHNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUnVsZUltcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGVJbXBvcnQuaAkocmV2aXNpb24gMjAxMzE2KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZUltcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNz
IFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFN0eWxlUnVsZUltcG9ydCA6IHB1YmxpYyBTdHls
ZVJ1bGVCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFN0eWxlUnVsZUltcG9ydD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaHJlZiwgUGFz
c1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAgc3RhdGljIFJlZjxTdHlsZVJ1bGVJbXBvcnQ+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGhyZWYsIFJlZjxNZWRpYVF1ZXJ5U2V0PiYmKTsKIAogICAg
IH5TdHlsZVJ1bGVJbXBvcnQoKTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBVUkwmIGJh
c2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCop
OwogICAgIGZyaWVuZCBjbGFzcyBJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQ7CiAKLSAgICBTdHls
ZVJ1bGVJbXBvcnQoY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+
KTsKKyAgICBTdHlsZVJ1bGVJbXBvcnQoY29uc3QgU3RyaW5nJiBocmVmLCBSZWY8TWVkaWFRdWVy
eVNldD4mJik7CiAKICAgICBTdHlsZVNoZWV0Q29udGVudHMqIG1fcGFyZW50U3R5bGVTaGVldDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHJldmlz
aW9uIDIwMTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTMgKzEyOSwxMyBAQCBib29sIFN0eWxlU2hlZXRDb250
ZW50czo6aXNDYWNoZWFibGUoKSBjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3R5bGVT
aGVldENvbnRlbnRzOjpwYXJzZXJBcHBlbmRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
cnVsZSkKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJBcHBlbmRSdWxlKFJlZjxTdHls
ZVJ1bGVCYXNlPiYmIHJ1bGUpCiB7CiAgICAgQVNTRVJUKCFydWxlLT5pc0NoYXJzZXRSdWxlKCkp
OwotICAgIGlmIChpczxTdHlsZVJ1bGVJbXBvcnQ+KCpydWxlKSkgeworICAgIGlmIChpczxTdHls
ZVJ1bGVJbXBvcnQ+KHJ1bGUpKSB7CiAgICAgICAgIC8vIFBhcnNlciBlbmZvcmNlcyB0aGF0IEBp
bXBvcnQgcnVsZXMgY29tZSBiZWZvcmUgYW55dGhpbmcgZWxzZSBleGNlcHQgQGNoYXJzZXQuCiAg
ICAgICAgIEFTU0VSVChtX2NoaWxkUnVsZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgbV9pbXBvcnRS
dWxlcy5hcHBlbmQoZG93bmNhc3Q8U3R5bGVSdWxlSW1wb3J0PihydWxlLmdldCgpKSk7CisgICAg
ICAgIG1faW1wb3J0UnVsZXMuYXBwZW5kKGRvd25jYXN0PFN0eWxlUnVsZUltcG9ydD4ocnVsZS5w
dHIoKSkpOwogICAgICAgICBtX2ltcG9ydFJ1bGVzLmxhc3QoKS0+c2V0UGFyZW50U3R5bGVTaGVl
dCh0aGlzKTsKICAgICAgICAgbV9pbXBvcnRSdWxlcy5sYXN0KCktPnJlcXVlc3RTdHlsZVNoZWV0
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0MywxOSArMTQzLDE5IEBAIHZvaWQgU3R5bGVTaGVl
dENvbnRlbnRzOjpwYXJzZXJBcHBlbmRSdWwKIAogI2lmIEVOQUJMRShSRVNPTFVUSU9OX01FRElB
X1FVRVJZKQogICAgIC8vIEFkZCB3YXJuaW5nIG1lc3NhZ2UgdG8gaW5zcGVjdG9yIGlmIGRwaS9k
cGNtIHZhbHVlcyBhcmUgdXNlZCBmb3Igc2NyZWVuIG1lZGlhLgotICAgIGlmIChpczxTdHlsZVJ1
bGVNZWRpYT4oKnJ1bGUpKQotICAgICAgICByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVk
KHNpbmdsZU93bmVyRG9jdW1lbnQoKSwgZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKS5t
ZWRpYVF1ZXJpZXMoKSk7CisgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPihydWxlKSkKKyAgICAg
ICAgcmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZChzaW5nbGVPd25lckRvY3VtZW50KCks
IGRvd25jYXN0PFN0eWxlUnVsZU1lZGlhPihydWxlLmdldCgpKS5tZWRpYVF1ZXJpZXMoKSk7CiAj
ZW5kaWYKIAogICAgIC8vIE5PVEU6IFRoZSBzZWxlY3RvciBsaXN0IGhhcyB0byBmaXQgaW50byBS
dWxlRGF0YS4gPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE4MzY5PgogICAgIC8vIElmIHdlJ3JlIGFk
ZGluZyBhIHJ1bGUgd2l0aCBhIGh1Z2UgbnVtYmVyIG9mIHNlbGVjdG9ycywgc3BsaXQgaXQgdXAg
aW50byBtdWx0aXBsZSBydWxlcwotICAgIGlmIChpczxTdHlsZVJ1bGU+KCpydWxlKSAmJiBkb3du
Y2FzdDxTdHlsZVJ1bGU+KCpydWxlKS5zZWxlY3Rvckxpc3QoKS5jb21wb25lbnRDb3VudCgpID4g
UnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KSB7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlPj4gcnVsZXMgPSBkb3duY2FzdDxTdHlsZVJ1bGU+KCpydWxlKS5z
cGxpdEludG9NdWx0aXBsZVJ1bGVzV2l0aE1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KFJ1
bGVEYXRhOjptYXhpbXVtU2VsZWN0b3JDb21wb25lbnRDb3VudCk7CisgICAgaWYgKGlzPFN0eWxl
UnVsZT4ocnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlPihydWxlLmdldCgpKS5zZWxlY3Rvckxp
c3QoKS5jb21wb25lbnRDb3VudCgpID4gUnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBvbmVu
dENvdW50KSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gcnVsZXMgPSBkb3du
Y2FzdDxTdHlsZVJ1bGU+KHJ1bGUuZ2V0KCkpLnNwbGl0SW50b011bHRpcGxlUnVsZXNXaXRoTWF4
aW11bVNlbGVjdG9yQ29tcG9uZW50Q291bnQoUnVsZURhdGE6Om1heGltdW1TZWxlY3RvckNvbXBv
bmVudENvdW50KTsKICAgICAgICAgbV9jaGlsZFJ1bGVzLmFwcGVuZFZlY3RvcihydWxlcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOwor
ICAgIG1fY2hpbGRSdWxlcy5hcHBlbmQoV1RGTW92ZShydWxlKSk7CiB9CiAKIFN0eWxlUnVsZUJh
c2UqIFN0eWxlU2hlZXRDb250ZW50czo6cnVsZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdApAQCAt
MjA3LDcgKzIwNyw3IEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGkK
ICAgICBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlID0gZW5jb2Rpbmc7IAogfQogCi1ib29sIFN0
eWxlU2hlZXRDb250ZW50czo6d3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBydWxlLCB1bnNpZ25lZCBpbmRleCkKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFw
cGVySW5zZXJ0UnVsZShSZWY8U3R5bGVSdWxlQmFzZT4mJiBydWxlLCB1bnNpZ25lZCBpbmRleCkK
IHsKICAgICBBU1NFUlQobV9pc011dGFibGUpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGluZGV4IDw9IHJ1bGVDb3VudCgpKTsKQEAgLTIyNiwyNCArMjI2LDI0IEBAIGJv
b2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnUKICAgICAKICAgICBpZiAoY2hp
bGRWZWN0b3JJbmRleCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpIHx8IChjaGlsZFZlY3RvckluZGV4
ID09IG1faW1wb3J0UnVsZXMuc2l6ZSgpICYmIHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSkgewogICAg
ICAgICAvLyBJbnNlcnRpbmcgbm9uLWltcG9ydCBydWxlIGJlZm9yZSBAaW1wb3J0IGlzIG5vdCBh
bGxvd2VkLgotICAgICAgICBpZiAoIWlzPFN0eWxlUnVsZUltcG9ydD4oKnJ1bGUpKQorICAgICAg
ICBpZiAoIWlzPFN0eWxlUnVsZUltcG9ydD4ocnVsZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIG1faW1wb3J0UnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIGRvd25j
YXN0PFN0eWxlUnVsZUltcG9ydD4ocnVsZS5nZXQoKSkpOworICAgICAgICBtX2ltcG9ydFJ1bGVz
Lmluc2VydChjaGlsZFZlY3RvckluZGV4LCBkb3duY2FzdDxTdHlsZVJ1bGVJbXBvcnQ+KHJ1bGUu
cHRyKCkpKTsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+c2V0UGFy
ZW50U3R5bGVTaGVldCh0aGlzKTsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3Rvcklu
ZGV4XS0+cmVxdWVzdFN0eWxlU2hlZXQoKTsKICAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQg
ZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQg
c2hlZXRzIGFyZSBsb2FkZWQuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBJ
bnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBydWxlIGlzIG5vdCBhbGxv
d2VkLgotICAgIGlmIChpczxTdHlsZVJ1bGVJbXBvcnQ+KCpydWxlKSkKKyAgICBpZiAoaXM8U3R5
bGVSdWxlSW1wb3J0PihydWxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNoaWxkVmVj
dG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVy
IG9mIHNlbGVjdG9ycyB3b3VsZCBvdmVyZmxvdyBSdWxlRGF0YSwgd2UgZHJvcCB0aGUgb3BlcmF0
aW9uLgotICAgIGlmIChpczxTdHlsZVJ1bGU+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGU+
KCpydWxlKS5zZWxlY3Rvckxpc3QoKS5jb21wb25lbnRDb3VudCgpID4gUnVsZURhdGE6Om1heGlt
dW1TZWxlY3RvckNvbXBvbmVudENvdW50KQorICAgIGlmIChpczxTdHlsZVJ1bGU+KHJ1bGUpICYm
IGRvd25jYXN0PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkuc2VsZWN0b3JMaXN0KCkuY29tcG9uZW50
Q291bnQoKSA+IFJ1bGVEYXRhOjptYXhpbXVtU2VsZWN0b3JDb21wb25lbnRDb3VudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3Rvcklu
ZGV4LCBydWxlKTsKKyAgICBtX2NoaWxkUnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIFdU
Rk1vdmUocnVsZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXI7IH0KIAogICAg
IHZvaWQgcGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25z
dCBBdG9taWNTdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBwYXJzZXJBcHBlbmRSdWxlKFBhc3NSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4pOworICAgIHZvaWQgcGFyc2VyQXBwZW5kUnVsZShSZWY8U3R5bGVS
dWxlQmFzZT4mJik7CiAgICAgdm9pZCBwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShj
b25zdCBTdHJpbmcmIGVuY29kaW5nKTsgCiAgICAgdm9pZCBwYXJzZXJTZXRVc2VzUmVtVW5pdHMo
KSB7IG1fdXNlc1JlbVVuaXRzID0gdHJ1ZTsgfQogICAgIHZvaWQgcGFyc2VyU2V0VXNlc1N0eWxl
QmFzZWRFZGl0YWJpbGl0eSgpIHsgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5ID0gdHJ1ZTsg
fQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGVzdGltYXRlZFNp
emVJbkJ5dGVzKCkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCB3cmFwcGVySW5zZXJ0UnVsZShQYXNz
UmVmUHRyPFN0eWxlUnVsZUJhc2U+LCB1bnNpZ25lZCBpbmRleCk7CisgICAgYm9vbCB3cmFwcGVy
SW5zZXJ0UnVsZShSZWY8U3R5bGVSdWxlQmFzZT4mJiwgdW5zaWduZWQgaW5kZXgpOwogICAgIHZv
aWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCiAgICAgUmVmPFN0eWxlU2hl
ZXRDb250ZW50cz4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVTaGVl
dENvbnRlbnRzKCp0aGlzKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHls
ZVNoZWV0T3duZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVT
dHlsZVNoZWV0T3duZXIuY3BwCShyZXZpc2lvbiAyMDEzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1
OCw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldCgKICAgICBtX2xv
YWRpbmcgPSB0cnVlOwogCiAgICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGlu
ZShlbGVtZW50LCBVUkwoKSwgbV9zdGFydFRleHRQb3NpdGlvbiwgZG9jdW1lbnQuZW5jb2Rpbmco
KSk7Ci0gICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkp
OworICAgIG1fc2hlZXQtPnNldE1lZGlhUXVlcmllcyhtZWRpYVF1ZXJpZXMucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgbV9zaGVldC0+c2V0VGl0bGUoZWxlbWVudC50aXRsZSgpKTsKICAgICBtX3No
ZWV0LT5jb250ZW50cygpLnBhcnNlU3RyaW5nQXRQb3NpdGlvbih0ZXh0LCBtX3N0YXJ0VGV4dFBv
c2l0aW9uLCBtX2lzUGFyc2luZ0NoaWxkcmVuKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMjAxMzE2KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFn
ZUFnZW50LmgiCisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgo=
</data>
<flag name="review"
          id="303674"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="303677"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>