<?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>150721</bug_id>
          
          <creation_ts>2015-10-30 10:43:05 -0700</creation_ts>
          <short_desc>B3-&gt;Air lowering should have a story for compare-branch fusion</short_desc>
          <delta_ts>2015-11-05 15:06:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>150720</dependson>
          <blocked>150279</blocked>
    
    <blocked>150903</blocked>
    
    <blocked>150954</blocked>
    
    <blocked>150958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1137891</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 10:43:05 -0700</bug_when>
    <thetext>Thingy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138340</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 11:51:36 -0800</bug_when>
    <thetext>One way to do this would be to have a comparison selector that takes as an argument the set of possible comparing Air opcodes.  For example it might be something like:

struct Opcodes {
    Opcode compare8;
    Opcode compare16;
    Opcode compare32;
    Opcode compare64;
    Opcode test8;
    Opcode test16;
    Opcode test32;
    Opcode test64;
    Opcode compareDouble8;
    Opcode compareDouble16;
    Opcode compareDouble32;
    Opcode compareDouble64;
};

The comparison selector could then either produce an Inst or an array of Insts that conduct the comparison using whatever compare operations the caller wanted. It can use isValidForm() to decide which Insts are valid, so we can be sure that it only produces valid ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139422</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 13:43:29 -0800</bug_when>
    <thetext>*** Bug 150726 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139423</commentid>
    <comment_count>3</comment_count>
      <attachid>264807</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 13:44:30 -0800</bug_when>
    <thetext>Created attachment 264807
work in progress

OMG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139431</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 14:09:57 -0800</bug_when>
    <thetext>*** Bug 150727 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139460</commentid>
    <comment_count>5</comment_count>
      <attachid>264820</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 15:12:50 -0800</bug_when>
    <thetext>Created attachment 264820
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139489</commentid>
    <comment_count>6</comment_count>
      <attachid>264827</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 16:52:39 -0800</bug_when>
    <thetext>Created attachment 264827
at least it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139543</commentid>
    <comment_count>7</comment_count>
      <attachid>264842</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 20:28:09 -0800</bug_when>
    <thetext>Created attachment 264842
more

Added constant folding rules</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139553</commentid>
    <comment_count>8</comment_count>
      <attachid>264846</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-04 21:49:27 -0800</bug_when>
    <thetext>Created attachment 264846
more tests, fixed bugs

I still have a lot more tests to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139703</commentid>
    <comment_count>9</comment_count>
      <attachid>264877</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-05 12:15:26 -0800</bug_when>
    <thetext>Created attachment 264877
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139705</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 12:18:29 -0800</bug_when>
    <thetext>Attachment 264877 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2443:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2444:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2498:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2503:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2514:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2530:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2546:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2549:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2564:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2569:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2579:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2582:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2592:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2597:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2605:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2608:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2622:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2627:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3127:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:69:  The parameter name &quot;inst&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:112:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139712</commentid>
    <comment_count>11</comment_count>
      <attachid>264877</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-05 12:36:10 -0800</bug_when>
    <thetext>Comment on attachment 264877
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:836
&gt; +                // First handle compare&apos;s that involve fewer bits than B3&apos;s type system supports.

compares

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:864
&gt; +                // Now handle compare&apos;s that involve a load and an immediate.

compares

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:870
&gt; +                // Now handle compare&apos;s that involve a load. It&apos;s not obvious that it&apos;s better to

compares

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:883
&gt; +                // Now handle compare&apos;s that involve an immediate and a tmp.

compares</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139713</commentid>
    <comment_count>12</comment_count>
      <attachid>264879</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-05 12:38:15 -0800</bug_when>
    <thetext>Created attachment 264879
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139716</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 12:41:13 -0800</bug_when>
    <thetext>Attachment 264879 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2443:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2444:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2498:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2503:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2514:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2530:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2546:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2549:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2564:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2569:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2579:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2582:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2592:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2597:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2605:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2608:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2622:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2627:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3127:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 21 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139740</commentid>
    <comment_count>14</comment_count>
      <attachid>264879</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 13:52:00 -0800</bug_when>
    <thetext>Comment on attachment 264879
patch for landing

Clearing flags on attachment: 264879

Committed r192072: &lt;http://trac.webkit.org/changeset/192072&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139741</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 13:52:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139773</commentid>
    <comment_count>16</comment_count>
      <attachid>264879</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-05 14:47:09 -0800</bug_when>
    <thetext>Comment on attachment 264879
patch for landing

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

Quick read:

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:103
&gt; +            // Seriously, we don&apos;t need to be smart here. It just doesn&apos;t matter.
&gt; +            return m_opcode + m_numArgs;

You can use WTF::PairHash() for a safe hash of two integers.

I don&apos;t think the comment is very helpful since it does not say why it does not matter.

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:153
&gt; +    // I don&apos;t want to think about this very hard, it&apos;s not worth it. I&apos;m a be conservative.

&quot;I&apos;m a be&quot;

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:180
&gt; +        ArgPromise(const Arg&amp; arg, Value* valueToLock = nullptr)

explicit?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:223
&gt; +        Value* m_value;

    Value* m_value { nullptr; }
For the ArgPromise() { } constructor.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:399
&gt;              return Arg();

The return should be ArgPromise() instead of Arg() now.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:786
&gt; +            if (!canBeInternal(value) &amp;&amp; value != currentValue)

When is &quot;value != currentValue&quot; ever false?

A Branch can reference itself?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:935
&gt; +                Arg rightImm = imm(right);

Not sure you need to bother with this. In other places, you expect the output to be canonicalized by ReduceStrength.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:938
&gt; +                    Arg::Width width, const ArgPromise&amp; left, const ArgPromise&amp; right) -&gt; Inst {

This would be more readable on the previous line.
Here is looks a bit like the first statement of the lambda.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:979
&gt; +                // 32-bit test. Note that this spits on the grave of inferior endians, such as the
&gt; +                // big one.

lol

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1017
&gt; +        if (canBeInternal(value) || value == currentValue) {

When is &quot;value == currentValue&quot; true?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1029
&gt; +        // Sometimes this is the only form of test available. We prefer not to use this because
&gt; +        // it&apos;s less canonical.
&gt; +        return test(width, resCond, tmpPromise(value), tmpPromise(value));

IMHO, we should CRASH() if we don&apos;t get a valid Inst out of this.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:430
&gt; +            

spaaaaace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139781</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-05 14:53:52 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 264879 [details]
&gt; patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264879&amp;action=review
&gt; 
&gt; Quick read:
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:103
&gt; &gt; +            // Seriously, we don&apos;t need to be smart here. It just doesn&apos;t matter.
&gt; &gt; +            return m_opcode + m_numArgs;
&gt; 
&gt; You can use WTF::PairHash() for a safe hash of two integers.
&gt; 
&gt; I don&apos;t think the comment is very helpful since it does not say why it does
&gt; not matter.

Because there will not be enough unique CheckSpecial::Keys.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:153
&gt; &gt; +    // I don&apos;t want to think about this very hard, it&apos;s not worth it. I&apos;m a be conservative.
&gt; 
&gt; &quot;I&apos;m a be&quot;
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:180
&gt; &gt; +        ArgPromise(const Arg&amp; arg, Value* valueToLock = nullptr)
&gt; 
&gt; explicit?

I want to be able to turn an Arg into an ArgPromise.  We use this for passing imm().

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:223
&gt; &gt; +        Value* m_value;
&gt; 
&gt;     Value* m_value { nullptr; }
&gt; For the ArgPromise() { } constructor.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:399
&gt; &gt;              return Arg();
&gt; 
&gt; The return should be ArgPromise() instead of Arg() now.

Oh, true.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:786
&gt; &gt; +            if (!canBeInternal(value) &amp;&amp; value != currentValue)
&gt; 
&gt; When is &quot;value != currentValue&quot; ever false?

When we fail to fuse the compare/branch.  We go down this path when we&apos;re compiling a LessThan directly, for example.

&gt; 
&gt; A Branch can reference itself?
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:935
&gt; &gt; +                Arg rightImm = imm(right);
&gt; 
&gt; Not sure you need to bother with this. In other places, you expect the
&gt; output to be canonicalized by ReduceStrength.

Oops, good point.  Filed: https://bugs.webkit.org/show_bug.cgi?id=150954

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:938
&gt; &gt; +                    Arg::Width width, const ArgPromise&amp; left, const ArgPromise&amp; right) -&gt; Inst {
&gt; 
&gt; This would be more readable on the previous line.
&gt; Here is looks a bit like the first statement of the lambda.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:979
&gt; &gt; +                // 32-bit test. Note that this spits on the grave of inferior endians, such as the
&gt; &gt; +                // big one.
&gt; 
&gt; lol
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1017
&gt; &gt; +        if (canBeInternal(value) || value == currentValue) {
&gt; 
&gt; When is &quot;value == currentValue&quot; true?
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1029
&gt; &gt; +        // Sometimes this is the only form of test available. We prefer not to use this because
&gt; &gt; +        // it&apos;s less canonical.
&gt; &gt; +        return test(width, resCond, tmpPromise(value), tmpPromise(value));
&gt; 
&gt; IMHO, we should CRASH() if we don&apos;t get a valid Inst out of this.

We will, in the validation.  It&apos;s true that we could add asserts here.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:430
&gt; &gt; +            
&gt; 
&gt; spaaaaace.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264807</attachid>
            <date>2015-11-04 13:44:30 -0800</date>
            <delta_ts>2015-11-04 15:12:50 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32639</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE5MjAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAg
ICAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAg
cmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVF
cXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGli
bGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBaZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNl
IGJ1aWxkcy4KICAgICAgICAgfQogICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0
aW9uIGZsaXAoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICByZXR1cm4gY29uZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAg
IHJldHVybiBCZWxvdzoKKyAgICAgICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICBy
ZXR1cm4gQmVsb3dPckVxdWFsOgorICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0
dXJuIEFib3ZlOworICAgICAgICBjYXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVy
biBBYm92ZU9yRXF1YWw7CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICBy
ZXR1cm4gTGVzc1RoYW47CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAg
ICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAg
ICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1
YWw6CisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVx
dWFsOworICAgIH0KKworICAgIC8vIFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChj
b25kLCB2YWx1ZSwgdmFsdWUpCisgICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAg
ICAgYnJhbmNoMzIoY29uZCwgc2lnbkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAg
c3RhdGljIGJvb2wgaXNTaWduZWQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2Ug
Tm90RXF1YWw6CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRl
clRoYW5PckVxdWFsOgorICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NU
aGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1
ZSBpZiB0aGlzOgorICAgIC8vICAgICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAv
LyBJcyB0aGUgc2FtZSBhcyB0aGlzOgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0
OCh2YWx1ZSksIHplcm9FeHQ4KHZhbHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNl
IEFib3ZlOgorICAgICAgICBjYXNlIEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoK
KyAgICAgICAgY2FzZSBCZWxvd09yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KICNlbmRpZgogCiAgICAgLy8gUGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlv
bnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzQsNiArMTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7
CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAg
Ly8gSW52ZXJ0IGEgcmVsYXRpb25hbCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBi
ZWNvbWVzID49LCBldGMuCiAgICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw5ICsy
NTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBlZmZlY3RpdmVBZGRyKHZhbHVlLT5sYXN0
Q2hpbGQoKSwgdmFsdWUpOwogICAgIH0KIAotICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZh
bHVlKQorICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZhbHVlLCBCMzo6T3Bjb2RlIGxvYWRP
cGNvZGUpCiAgICAgewotICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSAhPSBMb2FkKQor
ICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSAhPSBsb2FkT3Bjb2RlKQogICAgICAgICAg
ICAgcmV0dXJuIEFyZygpOwogICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwobG9hZFZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKQEAgLTI2Myw2ICsyNjMsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOwogICAgIH0KIAorICAgIEFyZyBsb2FkQWRk
cihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRBZGRyKGxvYWRW
YWx1ZSwgTG9hZCk7CisgICAgfQorCiAgICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAodmFsdWUtPnJlcHJlc2VudGFibGVBczxpbnQzMl90PigpKQpAQCAtNTkxLDYg
KzU5NiwyNjMgQEAgcHVibGljOgogICAgIH07CiAgICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NT
ZWxlY3RvcjsKIAorICAgIC8vIEF0dGVtcHRzIHRvIGNyZWF0ZSBhbiBJbnN0IHRvIGRvIHRoZSBj
b21wYXJpc29uIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gdmFsdWUuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ29tcGFyZUZ1bmN0b3IsIHR5cGVuYW1lIFRlc3RGdW5jdG9yLCB0eXBlbmFtZSBDb21w
YXJlRG91YmxlRnVuY3Rvcj4KKyAgICBJbnN0IGNyZWF0ZUNvbXBhcmUoCisgICAgICAgIFZhbHVl
KiB2YWx1ZSwKKyAgICAgICAgY29uc3QgQ29tcGFyZUZ1bmN0b3ImIGNvbXBhcmUsIC8vIFNpZ25h
dHVyZTogKEFyZzo6V2lkdGgsIEFyZyByZWxDb25kLCBBcmcsIEFyZykgLT4gSW5zdAorICAgICAg
ICBjb25zdCBUZXN0RnVuY3RvciYgdGVzdCwgLy8gU2lnbmF0dXJlOiAoQXJnOjpXaWR0aCwgQXJn
IHJlc0NvbmQsIEFyZywgQXJnKSAtPiBJbnN0CisgICAgICAgIGNvbnN0IENvbXBhcmVEb3VibGVG
dW5jdG9yJiBjb21wYXJlRG91YmxlLCAvLyBTaWduYXR1cmU6IChBcmcgZG91YmxlQ29uZCwgQXJn
LCBBcmcpIC0+IEluc3QKKyAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQorICAgIHsKKyAg
ICAgICAgLy8gQ2hldyB0aHJvdWdoIGFueSBuZWdhdGlvbnMuIEl0J3Mgbm90IHN0cmljdGx5IG5l
Y2Vzc2FyeSBmb3IgdGhpcyB0byBiZSBhIGxvb3AsIGJ1dCB3ZSBsaWtlCisgICAgICAgIC8vIHRv
IGZvbGxvdyB0aGUgcnVsZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciByZWR1Y2VzIHN0
cmVuZ3RoIHdoZW5ldmVyIGl0IGRvZXNuJ3QKKyAgICAgICAgLy8gcmVxdWlyZSBtYWtpbmcgdGhp
bmdzIG1vcmUgY29tcGxpY2F0ZWQuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlm
ICghY2FuQmVJbnRlcm5hbCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBib29sIHNob3VsZEludmVydCA9CisgICAgICAgICAgICAgICAgKHZhbHVlLT5vcGNvZGUo
KSA9PSBCaXRYb3IgJiYgdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgxKSkKKyAgICAgICAgICAgICAg
ICB8fCAodmFsdWUtPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGlsZCgxKS0+aXNJbnQo
MCkpOworICAgICAgICAgICAgaWYgKCFzaG91bGRJbnZlcnQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlu
dmVydGVkID0gIWludmVydGVkOworICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byBjcmVhdGVSZWxDb25kID0gWyZdICgKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIHJlbGF0aW9uYWxDb25kaXRp
b24sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNv
bmRpdGlvbikgeworICAgICAgICAgICAgQXJnIHJlbENvbmQgPSBBcmc6OnJlbENvbmQocmVsYXRp
b25hbENvbmRpdGlvbikuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAgICAgQXJnIGRvdWJs
ZUNvbmQgPSBBcmc6OmRvdWJsZUNvbmQoZG91YmxlQ29uZGl0aW9uKS5pbnZlcnRlZChpbnZlcnRl
ZCk7CisgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgaWYgKGlz
SW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0
SW1tID0gaW1tKGxlZnQpOworICAgICAgICAgICAgICAgIEFyZyByaWdodEltbSA9IGltbShyaWdo
dCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIHRyeUNvbXBhcmUgPSBbJl0gKEFyZzo6V2lkdGgg
d2lkdGgsIEFyZyBsZWZ0LCBBcmcgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0LCByaWdodCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLmZsaXBwZWQoKSwg
cmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAgICAgYXV0byB0cnlDb21wYXJlTG9hZEltbSA9IFsmXSAoCisgICAgICAgICAg
ICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSwgQXJnOlNp
Z25lZG5lc3Mgc2lnbmVkbmVzcykgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChy
aWdodEltbSAmJiByaWdodEltbS5yZXByZXNlbnRhYmxlQXMod2lkdGgsIHNpZ25lZG5lc3MpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdp
ZHRoLCBsb2FkQWRkcihsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBs
ZWZ0SW1tLnJlcHJlc2VudGFibGVBcyh3aWR0aCwgc2lnbmVkbmVzcykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxlZnRJbW0s
IGxvYWRBZGRyKHJpZ2h0LCBsb2FkT3Bjb2RlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgY29tcGFyZSdzIHRoYXQg
aW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBwb3J0cy4KKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBpbXBvcnRhbnQuIEZvciBleGFtcGxlLCB3ZSB3
YW50IHRoaXMgdG8gYmUgYSBzaW5nbGUgaW5zdHJ1Y3Rpb246CisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyAgICAgQDEgPSBMb2FkOFMoLi4uKQorICAgICAgICAgICAgICAg
IC8vICAgICBAMiA9IENvbnN0MzIoLi4uKQorICAgICAgICAgICAgICAgIC8vICAgICBAMyA9IExl
c3NUaGFuKEAxLCBAMikKKyAgICAgICAgICAgICAgICAvLyAgICAgQnJhbmNoKEAzKQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJn
OjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFosIEFyZzo6VW5zaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Np
Z25lZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBh
cmVMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2UywgQXJnOjpTaWduZWQpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFy
Zzo6V2lkdGgxNiwgTG9hZDE2WiwgQXJnOjpVbnNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIE5vdyBoYW5kbGUgY29tcGFyZSdzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVk
aWF0ZS4KKworICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9y
QjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9hZCwgQXJnOjpTaWduZWQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8g
Tm93IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4gV2UgZG8gdGhpcyBmaXJz
dCBiZWNhdXNlIHRoZSB3YXkgd2UgZG8KKyAgICAgICAgICAgICAgICAvLyBpdCBwaW5zIGEgdmFs
dWUgdG8gYSB0bXAuIEl0J3MgYmV0dGVyIHRvIHBpbiBhbiBpbW1lZGlhdGUgdG8gYSB0bXAgdGhh
biB0byBwaW4gYQorICAgICAgICAgICAgICAgIC8vIGxvYWQgdG8gYSB0bXAuCisKKyAgICAgICAg
ICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2FkQWRkcihsZWZ0
KSwgdG1wKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVm
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRy
eUNvbXBhcmUod2lkdGgsIHRtcChsZWZ0KSwgbG9hZEFkZHIocmlnaHQpKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTm93
IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVmdEltbS5y
ZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsZWZ0SW1tLCB0bXAocmlnaHQpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyaWdodEltbSAmJiByaWdodEltbS5y
ZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXAobGVmdCksIHJpZ2h0SW1tKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gRmluYWxseSwgaGFuZGxlIGNvbXBhcmlzb24gYmV0d2VlbiB0bXBz
LgorICAgICAgICAgICAgICAgIHJldHVybiB0cnlDb21wYXJlKHdpZHRoLCB0bXAobGVmdCksIHRt
cChyaWdodCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEb3VibGUgY29tcGFy
aXNvbnMgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHNtYXJ0LgorICAgICAgICAgICAgcmV0dXJu
IGNvbXBhcmVEb3VibGUoZG91YmxlQ29uZCwgdG1wKGxlZnQpLCB0bXAocmlnaHQpKTsKKyAgICAg
ICAgfTsKKworICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2
YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgQXJnIHJlc0NvbmQgPSBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8pLmludmVydGVkKGludmVydGVkKTsKKyAgICAgICAgCisgICAgICAg
IGF1dG8gYXR0ZW1wdEZ1c2VkID0gWyZdICgpIC0+IEluc3QgeworICAgICAgICAgICAgc3dpdGNo
ICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCk7CisgICAgICAgICAgICBj
YXNlIEVxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAg
IGNhc2UgTGVzc1RoYW46CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pOwor
ICAgICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVHcmVhdGVyVGhhbik7CisgICAgICAgICAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKTsKKyAgICAgICAgICAg
IGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWwpOworICAgICAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAg
ICAgICAgICAvLyBXZSB1c2UgYSBib2d1cyBkb3VibGUgY29uZGl0aW9uIGJlY2F1c2UgdGhlc2Ug
aW50ZWdlciBjb21wYXJpc29ucyB3b24ndCBnb3QgZG93biB0aGF0CisgICAgICAgICAgICAgICAg
Ly8gcGF0aCBhbnl3YXkuCisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAg
ICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAg
ICAgICAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCk7CisgICAgICAgICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEJpdEFuZDogeworICAgICAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZh
bHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIEFyZyBsZWZ0
SW1tID0gaW1tKGxlZnQpOworICAgICAgICAgICAgICAgIEFyZyByaWdodEltbSA9IGltbShyaWdo
dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byB0cnlUZXN0ID0gWyZd
IChBcmc6OldpZHRoIHdpZHRoLCBBcmcgbGVmdCwgQXJnIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgbGVm
dCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgcmln
aHQsIGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgYXV0byB0cnlUZXN0TG9hZEltbSA9IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCwg
QjM6Ok9wY29kZSBsb2FkT3Bjb2RlKSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJpZ2h0SW1tICYmIHJpZ2h0SW1tLnJlcHJlc2VudGFibGVBcyh3aWR0aCwgQXJnOjpVbnNpZ25l
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qo
d2lkdGgsIGxvYWRBZGRyKGxlZnQsIGxvYWRPcGNvZGUpLCByaWdodEltbSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYm
IGxlZnRJbW0ucmVwcmVzZW50YWJsZUFzKHdpZHRoLCBBcmc6OlVuc2lnbmVkKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbGVmdElt
bSwgbG9hZEFkZHIocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIEZpcnN0
IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lz
dGVtIHN1cHBvcnRzLgorCisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVz
dExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WikpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9h
ZEltbShBcmc6OldpZHRoOCwgTG9hZDhTKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1t
KEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShB
cmc6OldpZHRoMTYsIExvYWQxNlMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEg
bG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcyBhcmUKKyAgICAgICAg
ICAgICAgICAvLyAzMi1iaXQsIGFuZCB3ZSB3YW50IHplcm8tZXh0ZW5zaW9uLiBIZW5jZSwgdGhl
IGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkIGFzIGEKKyAgICAgICAgICAgICAgICAvLyAzMi1i
aXQgdGVzdC4gTm90ZSB0aGF0IHRoaXMgc3BpdHMgb24gdGhlIGdyYXZlIG9mIGluZmVyaW9yIGVu
ZGlhbnMsIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICAgICAgLy8gYmlnIG9uZS4KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZElt
bShXaWR0aDMyLCBMb2FkKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwor
ICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQu
CisKKyAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlw
ZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVz
dWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9hZEFkZHIobGVmdCksIHRtcChyaWdodCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIHRtcChsZWZ0KSwgbG9hZEFkZHIocmlnaHQp
KSkgeworICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBh
bmQgYSB0bXAuCisKKyAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLnJlcHJl
c2VudGFibGVBczx1aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlUZXN0KFdpZHRoMzIsIGxlZnRJbW0sIHRtcChyaWdodCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJbW0ucmVwcmVzZW50YWJsZUFzPHVpbnQz
Ml90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qo
V2lkdGgzMiwgdG1wKGxlZnQpLCByaWdodEltbSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZp
bmFsbHksIGp1c3QgZG8gdG1wJ3MuCisgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVRlc3Qod2lk
dGgsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwodmFsdWUpKSB7CisgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSBhdHRlbXB0RnVzZWQoKSkgeworICAgICAgICAgICAgICAg
IGNvbW1pdEludGVybmFsKHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdGVz
dCh3aWR0aCwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgLy8gU29tZXRpbWVzIHRoaXMgaXMgdGhlIG9ubHkg
Zm9ybSBvZiB0ZXN0IGF2YWlsYWJsZS4gV2UgcHJlZmVyIG5vdCB0byB1c2UgdGhpcyBiZWNhdXNl
IGl0J3MKKyAgICAgICAgLy8gbGVzcyBjYW5vbmljYWwuCisgICAgICAgIHJldHVybiB0ZXN0KHdp
ZHRoLCByZXNDb25kLCB0bXAobGVmdCksIHRtcCh2YWx1ZSksIHRtcCh2YWx1ZSkpOworICAgIH0K
KwogICAgIC8vIEJlbG93IGlzIHRoZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9yLCBzbyB0
aGF0IHdlIGNhbiBwYXNzICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KICAgICAvLyBUaGlz
IHdpbGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYg
dGhlcmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCiAgICAgLy8gaXQgd29uJ3QgbWF0Y2gg
YSBMb2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRz
IHdoZW4gdGhlIG9yaWdpbmFsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5j
cHAJKHJldmlzaW9uIDE5MjAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDQ2IEBACiAKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK09wdGlv
bmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIHJldHVybiBO
b3RFcXVhbDsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICByZXR1cm4gRXF1YWw7CisgICAg
Y2FzZSBMZXNzVGhhbjoKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgcmV0
dXJuIEdyZWF0ZXJFcXVhbDsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBHcmVh
dGVyVGhhbjoKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIExl
c3NFcXVhbDsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBMZXNzRXF1YWw6Cisg
ICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsK
KyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBMZXNzVGhhbjsKKyAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgcmV0dXJuIEJlbG93RXF1
YWw7CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgcmV0dXJuIEFib3ZlRXF1YWw7CisgICAgY2Fz
ZSBBYm92ZUVxdWFsOgorICAgICAgICByZXR1cm4gQmVsb3c7CisgICAgY2FzZSBCZWxvd0VxdWFs
OgorICAgICAgICByZXR1cm4gQWJvdmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNwYWNl
IFdURiB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MjAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNiArMjA1LDggQEAgaW5saW5l
IGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKICAgICB9CiB9CiAKK09wdGlvbmFsPE9w
Y29kZT4gaW52ZXJ0ZWRDb21wYXJlKE9wY29kZSwgVHlwZSk7CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMTkyMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMjEgQEAg
QmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhkb3VibGUgZgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK1ZhbHVlKiBQcm9jZWR1cmU6OmFkZEludENvbnN0YW50KFR5cGUgdHlwZSwgaW50
NjRfdCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEludDMyOgorICAg
ICAgICByZXR1cm4gYWRkPENvbnN0MzJWYWx1ZT4oT3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSk7CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDY0
VmFsdWU+KE9yaWdpbigpLCB2YWx1ZSk7CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJldHVy
biBhZGQ8Q29uc3REb3VibGVWYWx1ZT4oT3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4odmFs
dWUpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKIHZvaWQgUHJvY2VkdXJlOjpy
ZXNldFZhbHVlT3duZXJzKCkKIHsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAx
OTIwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFsdWVUeXBlKiBhZGQoQXJn
dW1lbnRzLi4uKTsKIAorICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChUeXBlLCBpbnQ2NF90IHZh
bHVlKTsKKwogICAgIHZvaWQgcmVzZXRWYWx1ZU93bmVycygpOwogICAgIHZvaWQgcmVzZXRSZWFj
aGFiaWxpdHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw0MCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogbmFtZXNwYWNlIHsKIAorLy8gVGhl
IGdvYWwgb2YgdGhpcyBwaGFzZSBpcyB0bzoKKy8vCisvLyAtIFJlcGxhY2Ugb3BlcmF0aW9ucyB3
aXRoIGxlc3MgZXhwZW5zaXZlIHZhcmlhbnRzLiBUaGlzIGluY2x1ZGVzIGNvbnN0YW50IGZvbGRp
bmcgYW5kIGNsYXNzaWMKKy8vICAgc3RyZW5ndGggcmVkdWN0aW9ucyBsaWtlIHR1cm5pbmcgTXVs
KHgsIDEgPDwgaykgaW50byBTaGwoeCwgaykuCisvLworLy8gLSBSZWFzc29jaWF0ZSBjb25zdGFu
dCBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgTG9hZChBZGQoeCwgYykpIGlzIHR1cm5lZCBpbnRv
IExvYWQoeCwgb2Zmc2V0ID0gYykKKy8vICAgYW5kIEFkZChBZGQoeCwgYyksIGQpIGlzIHR1cm5l
ZCBpbnRvIEFkZCh4LCBjICsgZCkuCisvLworLy8gLSBDYW5vbmljYWxpemUgb3BlcmF0aW9ucy4g
VGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQncyBub3QgYXQgYWxsIG9idmlvdXMgd2hpY2gg
a2luZCBvZgorLy8gICBvcGVyYXRpb24gaXMgbGVzcyBleHBlbnNpdmUsIGJ1dCBpdCdzIHVzZWZ1
bCBmb3Igc3Vic2VxdWVudCBwaGFzZXMgLSBwYXJ0aWN1bGFybHkgTG93ZXJUb0FpciAtCisvLyAg
IHRvIGhhdmUgb25seSBvbmUgd2F5IG9mIHJlcHJlc2VudGluZyB0aGluZ3MuCisvLworLy8gVGhp
cyBwaGFzZSBydW5zIHRvIGZpeHBvaW50LiBUaGVyZWZvcmUsIHRoZSBjYW5vbmljYWxpemF0aW9u
cyBtdXN0IGJlIGRlc2lnbmVkIHRvIGJlIG1vbm90b25pYy4KKy8vIEZvciBleGFtcGxlLCBpZiB3
ZSBoYWQgYSBjYW5vbmljYWxpemF0aW9uIHRoYXQgc2FpZCB0aGF0IEFkZCh4LCAtYykgc2hvdWxk
IGJlIFN1Yih4LCBjKSBhbmQKKy8vIGFub3RoZXIgY2Fub25pY2FsaXphdGlvbiB0aGF0IHNhaWQg
dGhhdCBTdWIoeCwgZCkgc2hvdWxkIGJlIEFkZCh4LCAtZCksIHRoZW4gdGhpcyBwaGFzZSB3b3Vs
ZCBlbmQKKy8vIHVwIHJ1bm5pbmcgZm9yZXZlci4gV2UgZG9uJ3Qgd2FudCB0aGF0LgorLy8KKy8v
IFRoZXJlZm9yZSwgd2UgbmVlZCB0byBwcmlvcml0aXplIGNlcnRhaW4gY2Fub25pY2FsIGZvcm1z
IG92ZXIgb3RoZXJzLiBOYWl2ZWx5LCB3ZSB3YW50IHN0cmVuZ3RoCisvLyByZWR1Y3Rpb24gdG8g
cmVkdWNlIHRoZSBudW1iZXIgb2YgdmFsdWVzLCBhbmQgc28gYSBmb3JtIGludm9sdmluZyBmZXdl
ciB0b3RhbCB2YWx1ZXMgaXMgbW9yZQorLy8gY2Fub25pY2FsLiBCdXQgd2UgbWlnaHQgYnJlYWsg
dGhpcywgZm9yIGV4YW1wbGUgd2hlbiByZWR1Y2luZyBzdHJlbmd0aCBvZiBNdWwoeCwgOSkuIFRo
aXMgY291bGQgYmUKKy8vIGJldHRlciB3cml0dGVuIGFzIEFkZChTaGwoeCwgMyksIHgpLCB3aGlj
aCBhbHNvIGhhcHBlbnMgdG8gYmUgcmVwcmVzZW50YWJsZSB1c2luZyBhIHNpbmdsZQorLy8gaW5z
dHJ1Y3Rpb24gb24geDg2LgorLy8KKy8vIEhlcmUgYXJlIHNvbWUgb2YgdGhlIHJ1bGVzIHdlIGhh
dmU6CisvLworLy8gQ2Fub25pY2FsIGZvcm0gb2YgbG9naWNhbCBub3Q6IEJpdFhvcih2YWx1ZSwg
MSkuIFdlIG1heSBoYXZlIHRvIGF2b2lkIHVzaW5nIHRoaXMgZm9ybSBpZiB3ZSBkb24ndAorLy8g
a25vdyBmb3Igc3VyZSB0aGF0ICd2YWx1ZScgaXMgMC1vci0xIChpLmUuIHJldHVybnNCb29sKS4g
SW4gdGhhdCBjYXNlIHdlIGZhbGwgYmFjayBvbgorLy8gRXF1YWwodmFsdWUsIDApLgorLy8KKy8v
IENhbm9uaWNhbCBmb3JtIG9mIGNvbW11dGF0aXZlIG9wZXJhdGlvbnM6IGlmIHRoZSBvcGVyYXRp
b24gaW52b2x2ZXMgYSBjb25zdGFudCwgdGhlIGNvbnN0YW50IG11c3QKKy8vIGNvbWUgc2Vjb25k
LiBBZGQoeCwgY29uc3RhbnQpIGlzIGNhbm9uaWNhbCwgd2hpbGUgQWRkKGNvbnN0YW50LCB4KSBp
cyBub3QuIElmIHRoZXJlIGFyZSBubworLy8gY29uc3RhbnRzIHRoZW4gdGhlIGNhbm9uaWNhbCBm
b3JtIGludm9sdmVzIHRoZSBsb3dlci1pbmRleGVkIHZhbHVlIGZpcnN0LiBHaXZlbiBBZGQoeCwg
eSksIGl0J3MKKy8vIGNhbm9uaWNhbCBpZiB4LT5pbmRleCgpIDw9IHktPmluZGV4KCkuCisKIGNs
YXNzIFJlZHVjZVN0cmVuZ3RoIHsKIHB1YmxpYzoKICAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1
cmUmIHByb2MpCkBAIC0yNTcsMTkgKzI5MSwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29t
cGFyZSwgMSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogaW52ZXJ0ZWRDb21wYXJlCisgICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFyZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5pbnZl
cnRlZENvbXBhcmUobV9wcm9jKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKGludmVyZWRDb21wYXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEJpdFhvcih2YWx1ZVgsIHZhbHVlWCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogemVyby1j
b25zdGFudC4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5j
aGlsZCgxKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiB6ZXJvQ29uc3RhbnQ7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKLSAgICAgICAgICAgICAgICAg
ICAgemVyb0NvbnN0YW50ID0gbV9wcm9jLmFkZDxDb25zdDMyVmFsdWU+KG1fdmFsdWUtPm9yaWdp
bigpLCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50
NjQpCi0gICAgICAgICAgICAgICAgICAgIHplcm9Db25zdGFudCA9IG1fcHJvYy5hZGQ8Q29uc3Q2
NFZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWUtPnR5cGUoKSA9PSBEb3Vi
bGUpOwotICAgICAgICAgICAgICAgICAgICB6ZXJvQ29uc3RhbnQgPSBtX3Byb2MuYWRkPENvbnN0
RG91YmxlVmFsdWU+KG1fdmFsdWUtPm9yaWdpbigpLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSh6ZXJvQ29uc3RhbnQpOworICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFs
dWUtPnR5cGUoKSwgMCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
CkBAIC0zMzgsMTYgKzM3MiwxNSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEVxdWFsOgogICAg
ICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEVxdWFsKEVxdWFsKHgsIDApLCAwKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBOb3RF
cXVhbCh4LCAwKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBFcXVhbCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKQotICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNMaWtlWmVybygpKSB7CisgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGJvb2wsIDApCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEJpdFhvcihib29sLCAxKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5y
ZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDApKSB7CiAgICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICBOb3RF
cXVhbCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCks
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+
KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVHVybiB0aGlz
IEVxdWFsKGJvb2wsIDEpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGJvb2wKICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSAmJiBtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQzMigxKSkgewpAQCAtMzU2LDEwICszODksNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBGSVhNRTog
SGF2ZSBhIGNvbXBhcmUtZmxpcHBpbmcgb3B0aW1pemF0aW9uLCBsaWtlIEVxdWFsKExlc3NUaGFu
KGEsIGIpLCAwKSB0dXJucyBpbnRvCi0gICAgICAgICAgICAvLyBHcmVhdGVyRXF1YWwoYSwgYiku
Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNzI2Ci0KICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIp
CiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV9w
cm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwpAQCAtNDA5LDYgKzQzOCwxNCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdFhvcih4LCAxKSwgdGhl
biwgZWxzZSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgsIGVsc2UsIHRoZW4p
CisgICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yICYm
IGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CisgICAgICAgICAgICAg
ICAgYnJhbmNoLT5jaGlsZCgwKSA9IGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgIHN0ZDo6c3dhcChicmFuY2gtPnRha2VuKCksIGJyYW5jaC0+bm90VGFrZW4oKSk7
CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgVHJpU3RhdGUgdHJpU3RhdGUgPSBicmFuY2gtPmNoaWxkKDAp
LT5hc1RyaVN0YXRlKCk7CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKDAsIHRo
ZW4sIGVsc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lv
biAxOTIwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsMTUgQEAgVmFsdWUqIFZhbHVlOjpub3RFcXVhbENvbnN0
YW50KFByb2NlZHVyZQogICAgIHJldHVybiBudWxscHRyOwogfQogCitWYWx1ZSogVmFsdWU6Omlu
dmVydGVkQ29tcGFyZShQcm9jZWR1cmUmIHByb2MpIGNvbnN0Cit7CisgICAgaWYgKCFudW1DaGls
ZHJlbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoT3B0aW9uYWw8T3Bjb2Rl
PiBpbnZlcnRlZE9wY29kZSA9IGludmVydGVkQ29tcGFyZShvcGNvZGUoKSwgY2hpbGQoMCktPnR5
cGUoKSkpCisgICAgICAgIHJldHVybiBwcm9jLmFkZDxWYWx1ZT4oKmludmVydGVkT3Bjb2RlLCBv
cmlnaW4oKSwgY2hpbGRyZW4oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgVmFs
dWU6OnJldHVybnNCb29sKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IEludDMyKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTIwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiAr
MTE4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogbm90RXF1YWxD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogCisgICAgLy8gSWYgdGhl
IHZhbHVlIGlzIGEgY29tcGFyaXNvbiB0aGVuIHRoaXMgcmV0dXJucyB0aGUgaW52ZXJ0ZWQgZm9y
bSBvZiB0aGF0IGNvbXBhcmlzb24sIGlmCisgICAgLy8gcG9zc2libGUuIEl0IGNhbiBiZSBpbXBv
c3NpYmxlIGZvciBkb3VibGUgY29tcGFyaXNvbnMsIHdoZXJlIGZvciBleGFtcGxlIExlc3NUaGFu
IGFuZAorICAgIC8vIEdyZWF0ZXJFcXVhbCBiZWhhdmUgZGlmZmVyZW50bHkuIElmIHRoaXMgcmV0
dXJucyBhIHZhbHVlLCBpdCBpcyBhIG5ldyB2YWx1ZSwgd2hpY2ggbXVzdCBiZQorICAgIC8vIGVp
dGhlciBpbnNlcnRlZCBpbnRvIHNvbWUgYmxvY2sgb3IgZGVsZXRlZC4KKyAgICBWYWx1ZSogaW52
ZXJ0ZWRDb21wYXJlKFByb2NlZHVyZSYpIGNvbnN0OworCiAgICAgYm9vbCBoYXNJbnQzMigpIGNv
bnN0OwogICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OwogICAgIGJvb2wgaXNJbnQzMihpbnQz
Ml90KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJ
KHJldmlzaW9uIDE5MjAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitib29sIEFyZzo6aXNSZXByZXNlbnRh
YmxlQXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHNpZ25lZG5lc3MpIHsKKyAgICBjYXNlIFNpZ25lZDoKKyAgICAgICAgc3dpdGNoICh3
aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJl
c2VudGFibGVBczxpbnQ4X3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAg
IHJldHVybiBpc1JlcHJlc2VudGFibGVBczxpbnQxNl90PigpOworICAgICAgICBjYXNlIFdpZHRo
MzI6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKTsKKyAg
ICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFz
PGludDY0X3Q+KCk7CisgICAgICAgIH0KKyAgICBjYXNlIFVuc2lnbmVkOgorICAgICAgICBzd2l0
Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgcmV0dXJuIGlz
UmVwcmVzZW50YWJsZUFzPHVpbnQ4X3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAg
ICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50MTZfdD4oKTsKKyAgICAgICAgY2Fz
ZSBXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQzMl90
PigpOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNl
bnRhYmxlQXM8dWludDY0X3Q+KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQXJnOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTkyMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEwLDYgKzExMCwxOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bnVtVHlwZXMgPSAyOwogCisgICAgZW51bSBXaWR0aCA6IGludDhfdCB7CisgICAgICAgIFdpZHRo
OCwKKyAgICAgICAgV2lkdGgxNiwKKyAgICAgICAgV2lkdGgzMiwKKyAgICAgICAgV2lkdGg2NAor
ICAgIH07CisKKyAgICBlbnVtIFNpZ25lZG5lc3MgOiBpbnQ4X3QgeworICAgICAgICBTaWduZWQs
CisgICAgICAgIFVuc2lnbmVkCisgICAgfTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Um9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2UgdGhlIEFyZy4gSXQncyBkZWxpYmVy
YXRlbHkgZmFsc2UgZm9yCiAgICAgLy8gVXNlQWRkciwgc2luY2UgaXNVc2UoKSBmb3IgYW4gQXJn
OjphZGRyIG1lYW5zIHRoYXQgd2UgYXJlIGxvYWRpbmcgZnJvbSB0aGUgYWRkcmVzcy4KICAgICBz
dGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCkBAIC0xNTMsNiArMTY1LDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEdQOwogICAgIH0KIAorICAgIHN0YXRpYyBXaWR0aCB3aWR0aEZvckIz
VHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIFdpZHRoODsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJl
dHVybiBXaWR0aDMyOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICBjYXNlIERvdWJsZToK
KyAgICAgICAgICAgIHJldHVybiBXaWR0aDY0OworICAgICAgICB9CisgICAgfQorCiAgICAgQXJn
KCkKICAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKICAgICB7CkBAIC0zNzYsNiArNDAyLDIwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgYm9vbCBpc1JlcHJlc2VudGFibGVBcygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8VD4odmFsdWUoKSk7CisgICAgfQorCisg
ICAgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhXaWR0aCwgU2lnbmVkbmVzcykgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgYXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKCkpOworICAgIH0KKwogICAgIHZvaWQq
IHBvaW50ZXJWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bTY0KTsKQEAgLTY4NCw2ICs3MjQsNDEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0K
IAorICAgIC8vIFRoaXMgaXMgdmFsaWQgZm9yIGNvbmRpdGlvbiBhcmd1bWVudHMuIEl0IHdpbGwg
aW52ZXJ0IHRoZW0uCisgICAgQXJnIGludmVydGVkKGJvb2wgaW52ZXJ0ZWQgPSB0cnVlKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFpbnZlcnRlZCkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAg
ICAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1JlbGF0aW9u
YWxDb25kaXRpb24oKSkpOworICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgICAgICByZXR1
cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzUmVzdWx0Q29uZGl0aW9uKCkpKTsK
KyAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICAgICAgcmV0dXJuIGRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0RvdWJsZUNvbmRpdGlvbigpKSk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgQXJnIGZsaXBwZWQo
Ym9vbCBmbGlwcGVkID0gdHJ1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghZmxpcHBlZCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OmZsaXAoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpKTsKKyAgICB9CisKKyAgICBi
b29sIGlzU2lnbmVkQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNSZWxDb25k
KCkgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzU2lnbmVkKGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsK
KyAgICB9CisKKyAgICBib29sIGlzVW5zaWduZWRDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1JlbENvbmQoKSAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNVbnNpZ25lZChhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKICAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5MjAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbiB8fCBvcGNvZGUgIT0gTm9wIHx8IGFy
Z3Muc2l6ZSgpOyB9CisKICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lk
IHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhh
dAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNh
cnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKICAgICAvLyBwcm9iYWJs
eSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMTgxLDEy
ICsxODEsNTMgQEAgTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKIE1vdmVEb3VibGVUbzY0IFU6Riwg
RDpHCiAgICAgVG1wLCBUbXAKIAorQ29tcGFyZTMyIFU6RywgVTpHLCBVOkcsIEQ6RworICAgIFJl
bENvbmQsIFRtcCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEltbSwgVG1wCisKK0NvbXBh
cmU2NCBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZWxDb25kLCBUbXAsIEltbSwgVG1wCisgICAg
UmVsQ29uZCwgVG1wLCBUbXAsIFRtcAorCitUZXN0MzIgVTpHLCBVOkcsIFU6RywgRDpHCisgICAg
UmVzQ29uZCwgQWRkciwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1wCisKK1Rl
c3Q2NCBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZXNDb25kLCBUbXAsIEltbSwgVG1wCisgICAg
UmVzQ29uZCwgVG1wLCBUbXAsIFRtcAorCitCcmFuY2g4IFU6RywgVTpHLCBVOkcgL2JyYW5jaAor
ICAgIFJlbENvbmQsIEFkZHIsIEltbQorICAgIFJlbENvbmQsIEluZGV4LCBJbW0KKworQnJhbmNo
MzIgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisgICAgUmVsQ29uZCwgQWRkciwgSW1tCisgICAgUmVs
Q29uZCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEltbQorICAgIFJlbENvbmQsIFRtcCwg
QWRkcgorICAgIFJlbENvbmQsIEFkZHIsIFRtcAorICAgIFJlbENvbmQsIEFkZHIsIEltbQorICAg
IFJlbENvbmQsIEluZGV4LCBJbW0KKworQnJhbmNoNjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisg
ICAgUmVsQ29uZCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEFkZHIKKyAgICBSZWxDb25k
LCBBZGRyLCBUbXAKKyAgICBSZWxDb25kICxJbmRleCwgVG1wCisKK0JyYW5jaFRlc3Q4IFU6Rywg
VTpHLCBVOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIEFkZHIsIEltbQorICAgIFJlc0NvbmQsIElu
ZGV4LCBJbW0KKwogQnJhbmNoVGVzdDMyIFU6RywgVTpHLCBVOkcgL2JyYW5jaAogICAgIFJlc0Nv
bmQsIFRtcCwgVG1wCiAgICAgUmVzQ29uZCwgVG1wLCBJbW0KICAgICBSZXNDb25kLCBBZGRyLCBJ
bW0KICAgICBSZXNDb25kLCBJbmRleCwgSW1tCiAKKyMgV2FybmluZzogZm9ybXMgdGhhdCB0YWtl
IGFuIGltbWVkaWF0ZSB3aWxsIHNpZ24tZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZS4gWW91IHByb2Jh
Ymx5IHdhbnQKKyMgQnJhbmNoVGVzdDMyIGluIG1vc3QgY2FzZXMgd2hlcmUgeW91IHVzZSBhbiBp
bW1lZGlhdGUuCiBCcmFuY2hUZXN0NjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCiAgICAgUmVzQ29u
ZCwgVG1wLCBUbXAKICAgICBSZXNDb25kLCBUbXAsIEltbQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264820</attachid>
            <date>2015-11-04 15:12:50 -0800</date>
            <delta_ts>2015-11-04 16:52:39 -0800</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54792</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAg
ICAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAg
cmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVF
cXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGli
bGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBaZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNl
IGJ1aWxkcy4KICAgICAgICAgfQogICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0
aW9uIGZsaXAoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICByZXR1cm4gY29uZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAg
IHJldHVybiBCZWxvdzoKKyAgICAgICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICBy
ZXR1cm4gQmVsb3dPckVxdWFsOgorICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0
dXJuIEFib3ZlOworICAgICAgICBjYXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVy
biBBYm92ZU9yRXF1YWw7CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICBy
ZXR1cm4gTGVzc1RoYW47CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAg
ICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAg
ICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1
YWw6CisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVx
dWFsOworICAgIH0KKworICAgIC8vIFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChj
b25kLCB2YWx1ZSwgdmFsdWUpCisgICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAg
ICAgYnJhbmNoMzIoY29uZCwgc2lnbkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAg
c3RhdGljIGJvb2wgaXNTaWduZWQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2Ug
Tm90RXF1YWw6CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRl
clRoYW5PckVxdWFsOgorICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NU
aGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1
ZSBpZiB0aGlzOgorICAgIC8vICAgICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAv
LyBJcyB0aGUgc2FtZSBhcyB0aGlzOgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0
OCh2YWx1ZSksIHplcm9FeHQ4KHZhbHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNl
IEFib3ZlOgorICAgICAgICBjYXNlIEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoK
KyAgICAgICAgY2FzZSBCZWxvd09yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KICNlbmRpZgogCiAgICAgLy8gUGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlv
bnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzQsNiArMTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7
CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAg
Ly8gSW52ZXJ0IGEgcmVsYXRpb25hbCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBi
ZWNvbWVzID49LCBldGMuCiAgICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDYgKzU3LDE3IEBAIHVuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQogCiB9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKIAorQ2hlY2tTcGVjaWFsOjpLZXk6OktleShjb25zdCBJbnN0JiBpbnN0
KQoreworICAgIG1fb3Bjb2RlID0gaW5zdC5vcGNvZGU7CisgICAgbV9udW1BcmdzID0gaW5zdC5h
cmdzLnNpemUoKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3Ms
ICIpIik7Cit9CisKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKICAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQogICAgICwg
bV9udW1DaGVja0FyZ3MobnVtQXJncykKQEAgLTY0LDYgKzc1LDExIEBAIENoZWNrU3BlY2lhbDo6
Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG8KICAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUp
KTsKIH0KIAorQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoY29uc3QgQ2hlY2tTcGVjaWFsOjpL
ZXkmIGtleSkKKyAgICA6IENoZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCkp
Cit7Cit9CisKIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMTkyMDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKICNpbmNsdWRl
ICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIEluc3Q7
Cit9CisKIC8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNo
LCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRoYXQgYnJhbmNoIHRvIG91cgogLy8gb3V0LW9m
LWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNv
biwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJlcgogLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3
ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVy
bG9hZCB3ZSB3YW50LiBJdApAQCAtNDYsNyArNTEsNjUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CiAKIGNsYXNzIENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwg
ewogcHVibGljOgorICAgIC8vIFN1cHBvcnQgZm9yIGhhc2ggY29uc2luZyB0aGVzZSB0aGluZ3Mu
CisgICAgY2xhc3MgS2V5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEtleSgpCisgICAgICAgICAg
ICA6IG1fb3Bjb2RlKEFpcjo6Tm9wKQorICAgICAgICAgICAgLCBtX251bUFyZ3MoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBLZXkoQWlyOjpPcGNvZGUgb3Bjb2Rl
LCB1bnNpZ25lZCBudW1BcmdzKQorICAgICAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCisgICAg
ICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBleHBsaWNpdCBLZXkoY29uc3QgSW5zdCYgaW5zdCk7CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX29wY29kZSA9PSBvdGhlci5tX29wY29kZQorICAgICAgICAgICAgICAgICYmIG1fbnVt
QXJncyA9IG90aGVyLm1fbnVtQXJnczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBLZXkmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gS2V5KCk7IH0KKworICAgICAgICBB
aXI6Ok9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorICAgICAgICB1
bnNpZ25lZCBudW1BcmdzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcmdzOyB9CisKKyAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisgICAgICAgIEtleShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fb3Bjb2RlKEFpcjo6Tm9w
KQorICAgICAgICAgICAgLCBtX251bUFyZ3MoMSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpcyA9PSBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFNlcmlvdXNseSwgd2UgZG9uJ3QgbmVlZCB0byBiZSBzbWFydCBoZXJl
LiBJdCBqdXN0IGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAgICAgcmV0dXJuIG1fb3Bjb2RlICsg
bV9udW1BcmdzOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEFp
cjo6T3Bjb2RlIG1fb3Bjb2RlOworICAgICAgICB1bnNpZ25lZCBtX251bUFyZ3M7CisgICAgfTsK
KyAgICAKICAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOwor
ICAgIENoZWNrU3BlY2lhbChjb25zdCBLZXkmIGtleSk7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwog
CiBwcm90ZWN0ZWQ6CkBAIC03MCw4ICsxMzMsMjkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X251bUNoZWNrQXJnczsKIH07CiAKK3N0cnVjdCBDaGVja1NwZWNpYWxLZXlIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGVja1NwZWNpYWw6OktleSYga2V5KSB7IHJldHVy
biBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2hlY2tTcGVjaWFs
OjpLZXkmIGEsIGNvbnN0IENoZWNrU3BlY2lhbDo6S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7Cit9OworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAorbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5PiB7CisgICAgdHlwZWRl
ZiBKU0M6OkIzOjpDaGVja1NwZWNpYWxLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
QjM6OkNoZWNrU3BlY2lhbDo6S2V5PiB7CisgICAgLy8gSSBkb24ndCB3YW50IHRvIHRoaW5rIGFi
b3V0IHRoaXMgdmVyeSBoYXJkLCBpdCdzIG5vdCB3b3J0aCBpdC4gSSdtIGEgYmUgY29uc2VydmF0
aXZlLgorICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKIAogI2Vu
ZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDkgKzI1Myw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGVmZmVjdGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgp
LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisg
ICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkK
ICAgICB7Ci0gICAgICAgIGlmIChsb2FkVmFsdWUtPm9wY29kZSgpICE9IExvYWQpCisgICAgICAg
IGlmIChsb2FkVmFsdWUtPm9wY29kZSgpICE9IGxvYWRPcGNvZGUpCiAgICAgICAgICAgICByZXR1
cm4gQXJnKCk7CiAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOwpAQCAtMjY0LDYgKzI2NCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CiAgICAgfQogCisgICAgQXJnIGxvYWRBZGRyKFZhbHVl
KiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbG9hZEFkZHIobG9hZFZhbHVlLCBM
b2FkKTsKKyAgICB9CisKICAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICh2YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpCkBAIC02MjIsNiArNjI3LDM1
MyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBBZGRyZXNzU2VsZWN0b3IgYWRkcmVzc1NlbGVjdG9y
OwogCisgICAgLy8gQ3JlYXRlIGFuIEluc3QgdG8gZG8gdGhlIGNvbXBhcmlzb24gc3BlY2lmaWVk
IGJ5IHRoZSBnaXZlbiB2YWx1ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJlRnVuY3Rv
ciwgdHlwZW5hbWUgVGVzdEZ1bmN0b3IsIHR5cGVuYW1lIENvbXBhcmVEb3VibGVGdW5jdG9yPgor
ICAgIEluc3QgY3JlYXRlR2VuZXJpY0NvbXBhcmUoCisgICAgICAgIFZhbHVlKiB2YWx1ZSwKKyAg
ICAgICAgY29uc3QgQ29tcGFyZUZ1bmN0b3ImIGNvbXBhcmUsIC8vIFNpZ25hdHVyZTogKEFyZzo6
V2lkdGgsIEFyZyByZWxDb25kLCBBcmcsIEFyZykgLT4gSW5zdAorICAgICAgICBjb25zdCBUZXN0
RnVuY3RvciYgdGVzdCwgLy8gU2lnbmF0dXJlOiAoQXJnOjpXaWR0aCwgQXJnIHJlc0NvbmQsIEFy
ZywgQXJnKSAtPiBJbnN0CisgICAgICAgIGNvbnN0IENvbXBhcmVEb3VibGVGdW5jdG9yJiBjb21w
YXJlRG91YmxlLCAvLyBTaWduYXR1cmU6IChBcmcgZG91YmxlQ29uZCwgQXJnLCBBcmcpIC0+IElu
c3QKKyAgICAgICAgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgLy8gQ2hl
dyB0aHJvdWdoIGFueSBuZWdhdGlvbnMuIEl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3Ig
dGhpcyB0byBiZSBhIGxvb3AsIGJ1dCB3ZSBsaWtlCisgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUg
cnVsZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciByZWR1Y2VzIHN0cmVuZ3RoIHdoZW5l
dmVyIGl0IGRvZXNuJ3QKKyAgICAgICAgLy8gcmVxdWlyZSBtYWtpbmcgdGhpbmdzIG1vcmUgY29t
cGxpY2F0ZWQuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlmICghY2FuQmVJbnRl
cm5hbCh2YWx1ZSkgfHwgdmFsdWUgPT0gY3VycmVudFZhbHVlKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgYm9vbCBzaG91bGRJbnZlcnQgPQorICAgICAgICAgICAgICAgICh2
YWx1ZS0+b3Bjb2RlKCkgPT0gQml0WG9yICYmIHZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkgJiYg
dmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKQorICAgICAgICAgICAgICAgIHx8ICh2YWx1
ZS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSk7CisgICAg
ICAgICAgICBpZiAoIXNob3VsZEludmVydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgaW52ZXJ0ZWQgPSAh
aW52ZXJ0ZWQ7CisgICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgIH0K
KworICAgICAgICBhdXRvIGNyZWF0ZVJlbENvbmQgPSBbJl0gKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gcmVsYXRpb25hbENvbmRpdGlvbiwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uKSB7
CisgICAgICAgICAgICBBcmcgcmVsQ29uZCA9IEFyZzo6cmVsQ29uZChyZWxhdGlvbmFsQ29uZGl0
aW9uKS5pbnZlcnRlZChpbnZlcnRlZCk7CisgICAgICAgICAgICBBcmcgZG91YmxlQ29uZCA9IEFy
Zzo6ZG91YmxlQ29uZChkb3VibGVDb25kaXRpb24pLmludmVydGVkKGludmVydGVkKTsKKyAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUq
IHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICBpZiAoaXNJbnQodmFsdWUt
PmNoaWxkKDApLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgQXJnIGxlZnRJbW0gPSBpbW0o
bGVmdCk7CisgICAgICAgICAgICAgICAgQXJnIHJpZ2h0SW1tID0gaW1tKHJpZ2h0KTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gdHJ5Q29tcGFyZSA9IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCwgQXJn
IGxlZnQsIEFyZyByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IGNvbXBhcmUod2lkdGgsIHJlbENvbmQsIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChJ
bnN0IHJlc3VsdCA9IGNvbXBhcmUod2lkdGgsIHJlbENvbmQuZmxpcHBlZCgpLCByaWdodCwgbGVm
dCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICBhdXRvIHRyeUNvbXBhcmVMb2FkSW1tID0gWyZdICgKKyAgICAgICAgICAgICAgICAgICAg
QXJnOjpXaWR0aCB3aWR0aCwgQjM6Ok9wY29kZSBsb2FkT3Bjb2RlLCBBcmc6U2lnbmVkbmVzcyBz
aWduZWRuZXNzKSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0SW1tICYm
IHJpZ2h0SW1tLnJlcHJlc2VudGFibGVBcyh3aWR0aCwgc2lnbmVkbmVzcykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRB
ZGRyKGxlZnQsIGxvYWRPcGNvZGUpLCByaWdodEltbSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYmIGxlZnRJbW0ucmVw
cmVzZW50YWJsZUFzKHdpZHRoLCBzaWduZWRuZXNzKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbGVmdEltbSwgbG9hZEFkZHIo
cmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1p
dEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGZl
d2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIHdlIHdhbnQgdGhpcyB0
byBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vICAgICBAMSA9IExvYWQ4UyguLi4pCisgICAgICAgICAgICAgICAgLy8gICAgIEAy
ID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgLy8gICAgIEAzID0gTGVzc1RoYW4oQDEs
IEAyKQorICAgICAgICAgICAgICAgIC8vICAgICBCcmFuY2goQDMpCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoOCwg
TG9hZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WiwgQXJnOjpV
bnNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0o
QXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2
LCBMb2FkMTZaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLgorCisg
ICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmVMb2FkSW1tKHdpZHRoLCBMb2FkLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxl
IGNvbXBhcmUncyB0aGF0IGludm9sdmUgYSBsb2FkLiBXZSBkbyB0aGlzIGZpcnN0IGJlY2F1c2Ug
dGhlIHdheSB3ZSBkbworICAgICAgICAgICAgICAgIC8vIGl0IHBpbnMgYSB2YWx1ZSB0byBhIHRt
cC4gSXQncyBiZXR0ZXIgdG8gcGluIGFuIGltbWVkaWF0ZSB0byBhIHRtcCB0aGFuIHRvIHBpbiBh
CisgICAgICAgICAgICAgICAgLy8gbG9hZCB0byBhIHRtcC4KKworICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRBZGRyKGxlZnQpLCB0bXAocmln
aHQpKSkgeworICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3
aWR0aCwgdG1wKGxlZnQpLCBsb2FkQWRkcihyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIGNv
bXBhcmUncyB0aGF0IGludm9sdmUgYW4gaW1tZWRpYXRlIGFuZCBhIHRtcC4KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLnJlcHJlc2VudGFi
bGVBczxpbnQzMl90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIGxlZnRJbW0sIHRtcChyaWdodCkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0SW1tICYmIHJpZ2h0SW1tLnJlcHJlc2VudGFi
bGVBczxpbnQzMl90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIHRtcChsZWZ0KSwgcmlnaHRJbW0pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRtcHMuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRyeUNvbXBhcmUod2lkdGgsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERvdWJsZSBjb21wYXJpc29ucyBjYW4n
dCByZWFsbHkgZG8gYW55dGhpbmcgc21hcnQuCisgICAgICAgICAgICByZXR1cm4gY29tcGFyZURv
dWJsZShkb3VibGVDb25kLCB0bXAobGVmdCksIHRtcChyaWdodCkpOworICAgICAgICB9OworCisg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpOworICAgICAgICBBcmcgcmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybykuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAKKyAgICAgICAgYXV0byBhdHRl
bXB0RnVzZWQgPSBbJl0gKCkgLT4gSW5zdCB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5v
cGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgICAgIGNhc2UgRXF1YWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgY2FzZSBMZXNz
VGhhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbik7CisgICAgICAgICAg
ICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuKTsKKyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpOworICAgICAgICAgICAgY2FzZSBHcmVh
dGVyRXF1YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICAgICAgICAgIC8v
IFdlIHVzZSBhIGJvZ3VzIGRvdWJsZSBjb25kaXRpb24gYmVjYXVzZSB0aGVzZSBpbnRlZ2VyIGNv
bXBhcmlzb25zIHdvbid0IGdvdCBkb3duIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBwYXRoIGFu
eXdheS4KKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNl
IEJlbG93OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIGNh
c2UgQWJvdmVFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAg
ICAgICAgICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
UmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKTsKKyAgICAgICAgICAgIGNhc2UgQml0QW5kOiB7CisgICAgICAgICAgICAgICAgVmFs
dWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0
ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICAgICAgQXJnIGxlZnRJbW0gPSBpbW0o
bGVmdCk7CisgICAgICAgICAgICAgICAgQXJnIHJpZ2h0SW1tID0gaW1tKHJpZ2h0KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVRlc3QgPSBbJl0gKEFyZzo6V2lk
dGggd2lkdGgsIEFyZyBsZWZ0LCBBcmcgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCBsZWZ0LCByaWdodCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCByaWdodCwgbGVmdCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAg
ICBhdXRvIHRyeVRlc3RMb2FkSW1tID0gWyZdIChBcmc6OldpZHRoIHdpZHRoLCBCMzo6T3Bjb2Rl
IGxvYWRPcGNvZGUpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0g
JiYgcmlnaHRJbW0ucmVwcmVzZW50YWJsZUFzKHdpZHRoLCBBcmc6OlVuc2lnbmVkKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbG9h
ZEFkZHIobGVmdCwgbG9hZE9wY29kZSksIHJpZ2h0SW1tKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVmdEltbS5y
ZXByZXNlbnRhYmxlQXMod2lkdGgsIEFyZzo6VW5zaWduZWQpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsZWZ0SW1tLCBsb2FkQWRk
cihyaWdodCwgbG9hZE9wY29kZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIHRl
c3QncyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9y
dHMuCisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShB
cmc6OldpZHRoOCwgTG9hZDhaKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6
V2lkdGg4LCBMb2FkOFMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0
aDE2LCBMb2FkMTZaKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAg
ICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgx
NiwgTG9hZDE2UykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAg
ICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgYSBsb2FkIGFuZCBh
biBpbW1lZGlhdGUuIE5vdGUgdGhhdCBpbW1lZGlhdGVzIGFyZQorICAgICAgICAgICAgICAgIC8v
IDMyLWJpdCwgYW5kIHdlIHdhbnQgemVyby1leHRlbnNpb24uIEhlbmNlLCB0aGUgaW1tZWRpYXRl
IGZvcm0gaXMgY29tcGlsZWQgYXMgYQorICAgICAgICAgICAgICAgIC8vIDMyLWJpdCB0ZXN0LiBO
b3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3JhdmUgb2YgaW5mZXJpb3IgZW5kaWFucywgc3Vj
aCBhcyB0aGUKKyAgICAgICAgICAgICAgICAvLyBiaWcgb25lLgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKFdpZHRoMzIs
IExvYWQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAg
ICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4KKworICAgICAg
ICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlU
ZXN0KHdpZHRoLCBsb2FkQWRkcihsZWZ0KSwgdG1wKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVz
dWx0ID0gdHJ5VGVzdCh3aWR0aCwgdG1wKGxlZnQpLCBsb2FkQWRkcihyaWdodCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgYW4gaW1tZWRpYXRlIGFuZCBhIHRtcC4K
KworICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYmIGxlZnRJbW0ucmVwcmVzZW50YWJsZUFz
PHVpbnQzMl90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRy
eVRlc3QoV2lkdGgzMiwgbGVmdEltbSwgdG1wKHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChyaWdodEltbSAmJiByaWdodEltbS5yZXByZXNlbnRhYmxlQXM8dWludDMyX3Q+KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdChXaWR0aDMyLCB0
bXAobGVmdCksIHJpZ2h0SW1tKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRmluYWxseSwganVz
dCBkbyB0bXAncy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5VGVzdCh3aWR0aCwgdG1wKGxl
ZnQpLCB0bXAocmlnaHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbCh2YWx1ZSkgfHwgdmFsdWUgPT0gY3VycmVudFZh
bHVlKSB7CisgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSBhdHRlbXB0RnVzZWQoKSkgewor
ICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEp
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBTb21l
dGltZXMgdGhpcyBpcyB0aGUgb25seSBmb3JtIG9mIHRlc3QgYXZhaWxhYmxlLiBXZSBwcmVmZXIg
bm90IHRvIHVzZSB0aGlzIGJlY2F1c2UKKyAgICAgICAgLy8gaXQncyBsZXNzIGNhbm9uaWNhbC4K
KyAgICAgICAgcmV0dXJuIHRlc3Qod2lkdGgsIHJlc0NvbmQsIHRtcChsZWZ0KSwgdG1wKHZhbHVl
KSwgdG1wKHZhbHVlKSk7CisgICAgfQorCisgICAgSW5zdCBjcmVhdGVCcmFuY2goVmFsdWUqIHZh
bHVlLCBib29sIGludmVydGVkID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRl
R2VuZXJpY0NvbXBhcmUoCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIFt0aGlzXSAo
QXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLCBjb25zdCBBcmcmIGxlZnQsIGNv
bnN0IEFyZyYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKEJyYW5jaDgsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0Lmtp
bmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g4LCBjdXJy
ZW50VmFsdWUsIHJlbENvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDMyOgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoMzIsIEFyZzo6UmVsQ29uZCwg
bGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdChCcmFuY2gzMiwgY3VycmVudFZhbHVlLCByZWxDb25kLCBsZWZ0LCByaWdodCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBX
aWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoNjQsIEFy
Zzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g2NCwgY3VycmVudHZhbHVlLCByZWxDb25kLCBsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnOjpXaWR0aCB3
aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLCBjb25zdCBBcmcmIGxlZnQsIGNvbnN0IEFyZyYgcmln
aHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KEJyYW5jaFRlc3Q4LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDgsIGN1cnJlbnRW
YWx1ZSwgcmVzQ29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2hUZXN0MzIsIEFyZzo6UmVzQ29uZCwg
bGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdChCcmFuY2hUZXN0MzIsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNh
c2UgV2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRl
c3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3Q2NCwgY3VycmVudFZhbHVlLCBy
ZXNDb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAo
QXJnIGRvdWJsZUNvbmQsIEFyZyBsZWZ0LCBBcmcgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2hEb3VibGUsIEFyZzo6RG91YmxlQ29uZCwgbGVm
dCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hEb3VibGUs
IGN1cnJlbnRWYWx1ZSwgZG91YmxlQ29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAg
IHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaW52ZXJ0ZWQpOwor
ICAgIH0KKworICAgIEluc3QgY3JlYXRlQ29tcGFyZShWYWx1ZSogdmFsdWUsIGJvb2wgaW52ZXJ0
ZWQgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgK
KyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgW3RoaXNdIChBcmc6OldpZHRoIHdpZHRo
LCBjb25zdCBBcmcmIHJlbENvbmQsIGNvbnN0IEFyZyYgbGVmdCwgY29uc3QgQXJnJiByaWdodCkg
LT4gSW5zdCB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICAgICAg
ICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoMzI6
CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVs
Q29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoQ29tcGFyZTMyLCBjdXJyZW50VmFsdWUsIHJlbENvbmQs
IGxlZnQsIHJpZ2h0LCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTY0LCBBcmc6OlJlbENvbmQsIGxlZnQua2lu
ZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KENvbXBhcmU2NCwgY3VycmVudHZhbHVlLCByZWxDb25kLCBsZWZ0LCByaWdodCwg
dG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10gKEFy
Zzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVzQ29uZCwgY29uc3QgQXJnJiBsZWZ0LCBjb25z
dCBBcmcmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICAgICAgY2FzZSBXaWR0
aDE2OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAg
IGNhc2UgV2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFRlc3Qz
MiwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpLCBBcmc6OlRtcCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChUZXN0MzIsIGN1cnJlbnRWYWx1ZSwg
cmVzQ29uZCwgbGVmdCwgcmlnaHQsIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVm
dC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoVGVzdDY0LCBjdXJyZW50VmFsdWUsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0
LCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAo
QXJnIGRvdWJsZUNvbmQsIEFyZyBsZWZ0LCBBcmcgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTAzCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpbnZlcnRlZCk7
CisgICAgfQorCiAgICAgLy8gQmVsb3cgaXMgdGhlIGNvZGUgZm9yIGEgbG93ZXJpbmcgc2VsZWN0
b3IsIHNvIHRoYXQgd2UgY2FuIHBhc3MgKnRoaXMgdG8gcnVuTG93ZXJpbmdNYXRjaGVyLgogICAg
IC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZhbHVlIGV4cHJlc3Npb25zLCBidXQg
b25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhhbXBsZSwKICAgICAvLyBpdCB3b24n
dCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0
d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKQEAgLTg2OCw2ICsxMjIwLDY2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCB0cnlFcXVhbCgpCisgICAg
eworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVl
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5Tm90RXF1YWwo
KQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJl
bnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUxl
c3NUaGFuKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFy
ZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9v
bCB0cnlHcmVhdGVyVGhhbigpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNy
ZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGJvb2wgdHJ5TGVzc0VxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5h
cHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCB0cnlHcmVhdGVyRXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5z
dHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUFib3ZlKCkKKyAgICB7CisgICAgICAg
IGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlCZWxvdygpCisgICAgeworICAg
ICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QWJvdmVFcXVhbCgpCisg
ICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZh
bHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QmVsb3dF
cXVhbCgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUo
Y3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIFBhdGNo
cG9pbnRTcGVjaWFsKiBwYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKICAgICBib29sIHRy
eVBhdGNocG9pbnQoKQogICAgIHsKQEAgLTg4NSwzOCArMTI5NywyMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIENoZWNrU3BlY2lhbCogY2hlY2tCcmFuY2hU
ZXN0MzJTcGVjaWFsIHsgbnVsbHB0ciB9OwotICAgIENoZWNrU3BlY2lhbCogY2hlY2tCcmFuY2hU
ZXN0NjRTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIEhhc2hNYXA8Q2hlY2tTcGVjaWFsOjpLZXks
IENoZWNrU3BlY2lhbCo+IGNoZWNrU3BlY2lhbHM7CiAgICAgYm9vbCB0cnlDaGVjayhWYWx1ZSog
dmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIWlzSW50KHZhbHVlLT50eXBlKCkpKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRvdWJsZSBicmFuY2hlcy4KLSAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3MjcKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBJbnN0IGJyYW5jaCA9IGNy
ZWF0ZUJyYW5jaCh2YWx1ZS0+Y2hpbGQoMCkpOwogCi0gICAgICAgIENoZWNrU3BlY2lhbCogc3Bl
Y2lhbDsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50
MzI6Ci0gICAgICAgICAgICBzcGVjaWFsID0gZW5zdXJlU3BlY2lhbChjaGVja0JyYW5jaFRlc3Qz
MlNwZWNpYWwsIEJyYW5jaFRlc3QzMiwgMyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKGNoZWNrQnJh
bmNoVGVzdDY0U3BlY2lhbCwgQnJhbmNoVGVzdDY0LCAzKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIENoZWNrU3BlY2lhbDo6
S2V5IGtleShicmFuY2gpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGNoZWNrU3BlY2lhbHMuYWRk
KGtleSwgbnVsbHB0cik7CisgICAgICAgIGVuc3VyZVNwZWNpYWwocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSwga2V5KTsKIAogICAgICAgICBDaGVja1ZhbHVlKiBjaGVja1ZhbHVlID0gY3VycmVudFZh
bHVlLT5hczxDaGVja1ZhbHVlPigpOwogCi0gICAgICAgIEluc3QgaW5zdCgKLSAgICAgICAgICAg
IFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCksCi0gICAgICAgICAgICBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0bXAodmFsdWUpLCBBcmc6Omlt
bSgtMSkpOworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIGNoZWNrVmFsdWUsIEFyZzo6c3BlY2lh
bChzcGVjaWFsKSwgV1RGOjptb3ZlKGJyYW5jaC5hcmdzKSk7CiAKICAgICAgICAgZmlsbFN0YWNr
bWFwKGluc3QsIGNoZWNrVmFsdWUsIDEpOwogCi0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQo
V1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChURjo6bW92ZShp
bnN0KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTM3LDQ2ICsxMzMzLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCB0cnlCcmFuY2goVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBicmFuY2ggZnVzaW9uIGJ5IGRlbGVnYXRpbmcgdG8g
YSBwYXR0ZXJuIG1hdGNoZXIgZm9yIGNvbXBhcmlzb25zLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzIxCi0KLSAgICAgICAgLy8gSW4gQjMg
aXQncyBwb3NzaWJsZSB0byBicmFuY2ggb24gYW55IHZhbHVlLiBUaGUgc2VtYW50aWNzIG9mOgot
ICAgICAgICAvLwotICAgICAgICAvLyAgICAgQnJhbmNoKHZhbHVlKQotICAgICAgICAvLwotICAg
ICAgICAvLyBBcmUgZ3VhcmFudGVlZCB0byBiZSBpZGVudGljYWwgdG86Ci0gICAgICAgIC8vCi0g
ICAgICAgIC8vICAgICBCcmFuY2goTm90RXF1YWwodmFsdWUsIDApKQotCi0gICAgICAgIGlmICgh
aXNJbnQodmFsdWUtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
ZG91YmxlIGJyYW5jaGVzLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDcyNwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlOwotICAgICAgICBzd2l0Y2ggKHZhbHVl
LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIG9wY29kZSA9IEJy
YW5jaFRlc3QzMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAg
ICAgICAgICAgb3Bjb2RlID0gQnJhbmNoVGVzdDY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBBcmcgcmVzQ29uZCA9IEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyk7Ci0KLSAgICAgICAgQXJnIGFkZHIg
PSBsb2FkQWRkcih2YWx1ZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJlc0Nv
bmQua2luZCgpLCBhZGRyLmtpbmQoKSwgQXJnOjpJbW0pKSB7Ci0gICAgICAgICAgICBjb21taXRJ
bnRlcm5hbCh2YWx1ZSk7Ci0gICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCByZXNDb25kLCBhZGRy
LCBBcmc6OmltbSgtMSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhcHBlbmQob3Bjb2RlLCByZXNDb25kLCB0bXAodmFsdWUpLCBBcmc6OmltbSgtMSkp
OworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJyYW5jaCh2YWx1ZS0+Y2hpbGQo
MCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIu
cGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE4IEBAIENvbnN0NjQgPSBDb25z
dDY0KCkKIFN0YWNrU2xvdCA9IFN0YWNrU2xvdCgpCiBGcmFtZVBvaW50ZXIgPSBGcmFtZVBvaW50
ZXIoKQogCisjIFRoZXNlIHBhdHRlcm5zIGRlbGVnYXRlIHRvIHRoZSBjb21wYXJpc29uIG1hdGNo
ZXIuCitFcXVhbCA9IEVxdWFsKCkKK05vdEVxdWFsID0gTm90RXF1YWwoKQorTGVzc1RoYW4gPSBM
ZXNzVGhhbigpCitHcmVhdGVyVGhhbiA9IEdyZWF0ZXJUaGFuKCkKK0xlc3NFcXVhbCA9IExlc3NF
cXVhbCgpCitHcmVhdGVyRXF1YWwgPSBHcmVhdGVyRXF1YWwoKQorQWJvdmUgPSBBYm92ZSgpCitC
ZWxvdyA9IEJlbG93KCkKK0Fib3ZlRXF1YWwgPSBBYm92ZUVxdWFsKCkKK0JlbG93RXF1YWwgPSBC
ZWxvd0VxdWFsKCkKKwogUGF0Y2hwb2ludCA9IFBhdGNocG9pbnQoKQogQ2hlY2sgPSBDaGVjayh2
YWx1ZSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lv
biAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw0NiBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitPcHRpb25hbDxPcGNvZGU+
IGludmVydGVkQ29tcGFyZShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICBjYXNlIEVxdWFsOgorICAgICAgICByZXR1cm4gTm90RXF1YWw7Cisg
ICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIEVxdWFsOworICAgIGNhc2UgTGVzc1Ro
YW46CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBHcmVhdGVy
RXF1YWw7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIGNhc2UgR3JlYXRlclRoYW46Cisg
ICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBMZXNzRXF1YWw7Cisg
ICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICBpZiAo
aXNJbnQodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW47CisgICAgICAgIHJl
dHVybiBOdWxsb3B0OworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpCisgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47CisgICAgICAgIHJldHVybiBOdWxs
b3B0OworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIHJldHVybiBCZWxvd0VxdWFsOworICAgIGNh
c2UgQmVsb3c6CisgICAgICAgIHJldHVybiBBYm92ZUVxdWFsOworICAgIGNhc2UgQWJvdmVFcXVh
bDoKKyAgICAgICAgcmV0dXJuIEJlbG93OworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAg
cmV0dXJuIEFib3ZlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIGVudW0gT3Bjb2RlIDogaW50
MTZfdCB7CiAgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgogICAgIEp1
bXAsCiAgICAgCi0gICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8g
UG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgaW50ZWdlciB0eXBlLiBCcmFuY2hl
cyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKICAgICAvLyBDb250cm9sVmFsdWUgY2xh
c3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4K
ICAgICBCcmFuY2gsCiAKQEAgLTIwNSw2ICsyMDUsOCBAQCBpbmxpbmUgYm9vbCBpc0NoZWNrTWF0
aChPcGNvZGUgb3Bjb2RlKQogICAgIH0KIH0KIAorT3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRlZENv
bXBhcmUoT3Bjb2RlLCBUeXBlKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVz
cGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
CShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwyMSBAQCBCYXNpY0Jsb2NrKiBQcm9j
ZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorVmFsdWUq
IFByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBhZGQ8
Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKKyAg
ICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gYWRkPENvbnN0NjRWYWx1ZT4oT3JpZ2luKCks
IHZhbHVlKTsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdERvdWJs
ZVZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBQcm9jZWR1cmU6OnJlc2V0VmFsdWVPd25lcnMo
KQogewogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOwogCisg
ICAgVmFsdWUqIGFkZEludENvbnN0YW50KFR5cGUsIGludDY0X3QgdmFsdWUpOworCiAgICAgdm9p
ZCByZXNldFZhbHVlT3duZXJzKCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShy
ZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDQwIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgewogCiBuYW1lc3BhY2UgewogCisvLyBUaGUgZ29hbCBvZiB0aGlzIHBo
YXNlIGlzIHRvOgorLy8KKy8vIC0gUmVwbGFjZSBvcGVyYXRpb25zIHdpdGggbGVzcyBleHBlbnNp
dmUgdmFyaWFudHMuIFRoaXMgaW5jbHVkZXMgY29uc3RhbnQgZm9sZGluZyBhbmQgY2xhc3NpYwor
Ly8gICBzdHJlbmd0aCByZWR1Y3Rpb25zIGxpa2UgdHVybmluZyBNdWwoeCwgMSA8PCBrKSBpbnRv
IFNobCh4LCBrKS4KKy8vCisvLyAtIFJlYXNzb2NpYXRlIGNvbnN0YW50IG9wZXJhdGlvbnMuIEZv
ciBleGFtcGxlLCBMb2FkKEFkZCh4LCBjKSkgaXMgdHVybmVkIGludG8gTG9hZCh4LCBvZmZzZXQg
PSBjKQorLy8gICBhbmQgQWRkKEFkZCh4LCBjKSwgZCkgaXMgdHVybmVkIGludG8gQWRkKHgsIGMg
KyBkKS4KKy8vCisvLyAtIENhbm9uaWNhbGl6ZSBvcGVyYXRpb25zLiBUaGVyZSBhcmUgc29tZSBj
YXNlcyB3aGVyZSBpdCdzIG5vdCBhdCBhbGwgb2J2aW91cyB3aGljaCBraW5kIG9mCisvLyAgIG9w
ZXJhdGlvbiBpcyBsZXNzIGV4cGVuc2l2ZSwgYnV0IGl0J3MgdXNlZnVsIGZvciBzdWJzZXF1ZW50
IHBoYXNlcyAtIHBhcnRpY3VsYXJseSBMb3dlclRvQWlyIC0KKy8vICAgdG8gaGF2ZSBvbmx5IG9u
ZSB3YXkgb2YgcmVwcmVzZW50aW5nIHRoaW5ncy4KKy8vCisvLyBUaGlzIHBoYXNlIHJ1bnMgdG8g
Zml4cG9pbnQuIFRoZXJlZm9yZSwgdGhlIGNhbm9uaWNhbGl6YXRpb25zIG11c3QgYmUgZGVzaWdu
ZWQgdG8gYmUgbW9ub3RvbmljLgorLy8gRm9yIGV4YW1wbGUsIGlmIHdlIGhhZCBhIGNhbm9uaWNh
bGl6YXRpb24gdGhhdCBzYWlkIHRoYXQgQWRkKHgsIC1jKSBzaG91bGQgYmUgU3ViKHgsIGMpIGFu
ZAorLy8gYW5vdGhlciBjYW5vbmljYWxpemF0aW9uIHRoYXQgc2FpZCB0aGF0IFN1Yih4LCBkKSBz
aG91bGQgYmUgQWRkKHgsIC1kKSwgdGhlbiB0aGlzIHBoYXNlIHdvdWxkIGVuZAorLy8gdXAgcnVu
bmluZyBmb3JldmVyLiBXZSBkb24ndCB3YW50IHRoYXQuCisvLworLy8gVGhlcmVmb3JlLCB3ZSBu
ZWVkIHRvIHByaW9yaXRpemUgY2VydGFpbiBjYW5vbmljYWwgZm9ybXMgb3ZlciBvdGhlcnMuIE5h
aXZlbHksIHdlIHdhbnQgc3RyZW5ndGgKKy8vIHJlZHVjdGlvbiB0byByZWR1Y2UgdGhlIG51bWJl
ciBvZiB2YWx1ZXMsIGFuZCBzbyBhIGZvcm0gaW52b2x2aW5nIGZld2VyIHRvdGFsIHZhbHVlcyBp
cyBtb3JlCisvLyBjYW5vbmljYWwuIEJ1dCB3ZSBtaWdodCBicmVhayB0aGlzLCBmb3IgZXhhbXBs
ZSB3aGVuIHJlZHVjaW5nIHN0cmVuZ3RoIG9mIE11bCh4LCA5KS4gVGhpcyBjb3VsZCBiZQorLy8g
YmV0dGVyIHdyaXR0ZW4gYXMgQWRkKFNobCh4LCAzKSwgeCksIHdoaWNoIGFsc28gaGFwcGVucyB0
byBiZSByZXByZXNlbnRhYmxlIHVzaW5nIGEgc2luZ2xlCisvLyBpbnN0cnVjdGlvbiBvbiB4ODYu
CisvLworLy8gSGVyZSBhcmUgc29tZSBvZiB0aGUgcnVsZXMgd2UgaGF2ZToKKy8vCisvLyBDYW5v
bmljYWwgZm9ybSBvZiBsb2dpY2FsIG5vdDogQml0WG9yKHZhbHVlLCAxKS4gV2UgbWF5IGhhdmUg
dG8gYXZvaWQgdXNpbmcgdGhpcyBmb3JtIGlmIHdlIGRvbid0CisvLyBrbm93IGZvciBzdXJlIHRo
YXQgJ3ZhbHVlJyBpcyAwLW9yLTEgKGkuZS4gcmV0dXJuc0Jvb2wpLiBJbiB0aGF0IGNhc2Ugd2Ug
ZmFsbCBiYWNrIG9uCisvLyBFcXVhbCh2YWx1ZSwgMCkuCisvLworLy8gQ2Fub25pY2FsIGZvcm0g
b2YgY29tbXV0YXRpdmUgb3BlcmF0aW9uczogaWYgdGhlIG9wZXJhdGlvbiBpbnZvbHZlcyBhIGNv
bnN0YW50LCB0aGUgY29uc3RhbnQgbXVzdAorLy8gY29tZSBzZWNvbmQuIEFkZCh4LCBjb25zdGFu
dCkgaXMgY2Fub25pY2FsLCB3aGlsZSBBZGQoY29uc3RhbnQsIHgpIGlzIG5vdC4gSWYgdGhlcmUg
YXJlIG5vCisvLyBjb25zdGFudHMgdGhlbiB0aGUgY2Fub25pY2FsIGZvcm0gaW52b2x2ZXMgdGhl
IGxvd2VyLWluZGV4ZWQgdmFsdWUgZmlyc3QuIEdpdmVuIEFkZCh4LCB5KSwgaXQncworLy8gY2Fu
b25pY2FsIGlmIHgtPmluZGV4KCkgPD0geS0+aW5kZXgoKS4KKwogY2xhc3MgUmVkdWNlU3RyZW5n
dGggewogcHVibGljOgogICAgIFJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKQEAgLTI1
NywxOSArMjkxLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihjb21wYXJlLCAxKQorICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBpbnZlcnRlZENvbXBhcmUKKyAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgeworICAgICAgICAgICAgICAgIGlmIChWYWx1ZSog
aW52ZXJ0ZWRDb21wYXJlID0gbV92YWx1ZS0+Y2hpbGQoMCktPmludmVydGVkQ29tcGFyZShtX3By
b2MpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoaW52ZXJlZENv
bXBhcmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVlWCwg
dmFsdWVYKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgogICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAg
ICAgICAgICAgICAgVmFsdWUqIHplcm9Db25zdGFudDsKLSAgICAgICAgICAgICAgICBpZiAobV92
YWx1ZS0+dHlwZSgpID09IEludDMyKQotICAgICAgICAgICAgICAgICAgICB6ZXJvQ29uc3RhbnQg
PSBtX3Byb2MuYWRkPENvbnN0MzJWYWx1ZT4obV92YWx1ZS0+b3JpZ2luKCksIDApOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCkKLSAgICAgICAgICAg
ICAgICAgICAgemVyb0NvbnN0YW50ID0gbV9wcm9jLmFkZDxDb25zdDY0VmFsdWU+KG1fdmFsdWUt
Pm9yaWdpbigpLCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+dHlwZSgpID09IERvdWJsZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHplcm9Db25zdGFudCA9IG1fcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4obV92
YWx1ZS0+b3JpZ2luKCksIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKHplcm9Db25zdGFudCk7CisgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZS0+dHlwZSgpLCAwKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTMzOCwxNiArMzcy
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXF1YWw6CiAgICAgICAgICAgICBoYW5kbGVD
b21tdXRhdGl2aXR5KCk7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoRXF1YWwo
eCwgMCksIDApCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5vdEVxdWFsKHgsIDApCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludDMyKDApCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5pc0xpa2VaZXJvKCkpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogRXF1YWwoYm9vbCwgMCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2ws
IDEpCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYg
bV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkpIHsKICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIE5vdEVxdWFsLCBtX3ZhbHVlLT5v
cmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBCaXRY
b3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1
ZS0+b3JpZ2luKCksIDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkK
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogYm9vbAogICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEp
KSB7CkBAIC0zNTYsMTAgKzM4OSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBIYXZlIGEgY29tcGFyZS1m
bGlwcGluZyBvcHRpbWl6YXRpb24sIGxpa2UgRXF1YWwoTGVzc1RoYW4oYSwgYiksIDApIHR1cm5z
IGludG8KLSAgICAgICAgICAgIC8vIEdyZWF0ZXJFcXVhbChhLCBiKS4KLSAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3MjYKLQogICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogY29uc3QxID09IGNvbnN0MgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+ZXF1YWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNo
aWxkKDEpKSk7CkBAIC0zOTYsMTQgKzQyNSwyNCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEJyYW5jaChOb3RFcXVhbCh4LCAwKSkKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogQnJhbmNoKHgpCi0gICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gTm90RXF1YWwgJiYgYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzTGlrZVplcm8o
KSkgeworICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVx
dWFsICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewogICAgICAgICAg
ICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChFcXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkKICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgsIGVsc2UsIHRoZW4pCi0gICAgICAgICAgICBp
ZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgYnJhbmNoLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmlzTGlrZVplcm8oKSkgeworICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hp
bGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5p
c0ludCgwKSkgeworICAgICAgICAgICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFuY2gtPmNo
aWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYnJhbmNoLT50YWtl
bigpLCBicmFuY2gtPm5vdFRha2VuKCkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQnJhbmNoKEJpdFhvcihib29sLCAxKSwgdGhlbiwgZWxzZSkKKyAgICAgICAgICAgIC8vIElu
dG8gdGhpczogQnJhbmNoKGJvb2wsIGVsc2UsIHRoZW4pCisgICAgICAgICAgICBpZiAoYnJhbmNo
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICAgICAgICAgJiYgYnJhbmNo
LT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50MzIoMSkKKyAgICAgICAgICAgICAgICAmJiBicmFu
Y2gtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgewogICAgICAgICAgICAgICAg
IGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAoYnJhbmNoLT50YWtlbigpLCBicmFuY2gtPm5vdFRha2VuKCkpOwog
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMSArMjkx
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxk
cmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgICAgICBjYXNlIFJldHVybjoKICAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9p
ZCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQnJhbmNoOgogICAgICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgi
QXQgIiwgKnZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShy
ZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsMTUgQEAgVmFsdWUqIFZhbHVlOjpub3RFcXVh
bENvbnN0YW50KFByb2NlZHVyZQogICAgIHJldHVybiBudWxscHRyOwogfQogCitWYWx1ZSogVmFs
dWU6OmludmVydGVkQ29tcGFyZShQcm9jZWR1cmUmIHByb2MpIGNvbnN0Cit7CisgICAgaWYgKCFu
dW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoT3B0aW9uYWw8
T3Bjb2RlPiBpbnZlcnRlZE9wY29kZSA9IGludmVydGVkQ29tcGFyZShvcGNvZGUoKSwgY2hpbGQo
MCktPnR5cGUoKSkpCisgICAgICAgIHJldHVybiBwcm9jLmFkZDxWYWx1ZT4oKmludmVydGVkT3Bj
b2RlLCBvcmlnaW4oKSwgY2hpbGRyZW4oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJv
b2wgVmFsdWU6OnJldHVybnNCb29sKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IEludDMy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTIwMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNiArMTE4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZhbHVlKiBlcXVhbENvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogbm90
RXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogCisgICAgLy8g
SWYgdGhlIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB0aGVuIHRoaXMgcmV0dXJucyB0aGUgaW52ZXJ0
ZWQgZm9ybSBvZiB0aGF0IGNvbXBhcmlzb24sIGlmCisgICAgLy8gcG9zc2libGUuIEl0IGNhbiBi
ZSBpbXBvc3NpYmxlIGZvciBkb3VibGUgY29tcGFyaXNvbnMsIHdoZXJlIGZvciBleGFtcGxlIExl
c3NUaGFuIGFuZAorICAgIC8vIEdyZWF0ZXJFcXVhbCBiZWhhdmUgZGlmZmVyZW50bHkuIElmIHRo
aXMgcmV0dXJucyBhIHZhbHVlLCBpdCBpcyBhIG5ldyB2YWx1ZSwgd2hpY2ggbXVzdCBiZQorICAg
IC8vIGVpdGhlciBpbnNlcnRlZCBpbnRvIHNvbWUgYmxvY2sgb3IgZGVsZXRlZC4KKyAgICBWYWx1
ZSogaW52ZXJ0ZWRDb21wYXJlKFByb2NlZHVyZSYpIGNvbnN0OworCiAgICAgYm9vbCBoYXNJbnQz
MigpIGNvbnN0OwogICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OwogICAgIGJvb2wgaXNJbnQz
MihpbnQzMl90KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShy
ZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAyMyw2ICsyMDIzLDkzIEBAIHZvaWQgdGVzdFNpbXBsZUNoZWNr
KCkKICAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAxKSA9PSA0Mik7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0eXBlbmFtZSBSaWdodEZ1bmN0b3I+Cit2b2lkIGdlbmVy
aWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAgICBPcGNvZGUgb3Bjb2RlLCBjb25zdCBMZWZ0RnVuY3Rv
ciYgbGVmdCwgY29uc3QgUmlnaHRGdW5jdG9yJiByaWdodCwgaW50IGxlZnQsIGludCByaWdodCwg
aW50IHJlc3VsdCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5DYXNlID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwg
T3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBvcGNvZGUsIE9yaWdpbigpLCBsZWZ0RnVuY3Rvcihyb290LCBwcm9jKSwgcmlnaHRGdW5j
dG9yKHJvb3QsIHByb2MpKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwgRnJl
cXVlbnRlZEJsb2NrKGVsc2VDYXNlKSk7CisKKyAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IG9u
IHRoZSB0aGVuIGNhc2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGdldCBpZi1jb252ZXJ0
ZWQuCisgICAgUGF0Y2hwaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2th
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuaXNHUFIoKSk7
CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcGFy
YW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICB0aGVuQ2FzZS0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CisKKyAg
ICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Ms
IGxlZnQsIHJpZ2h0KSA9PSByZXN1bHQpOworfQorCit2b2lkIHRlc3RCcmFuY2hDb21wYXJlKE9w
Y29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCByZXN1bHQpCit7CisgICAgLy8g
VGVzdCB0bXAtdG8tdG1wLgorICAgIGdlbmVyaWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAgICAgICAg
b3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2Mp
IHsKKyAgICAgICAgICAgIHJldHVybiByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9j
ZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVz
dWx0KTsKKworICAgIC8vIFRlc3QgaW1tLXRvLXRtcC4KKyAgICBnZW5lcmljVGVzdEJyYW5jaENv
bXBhcmUoCisgICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywg
UHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4obGVmdCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayog
YmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQs
IHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCB0bXAtdG8taW1tLgorICAgIGdlbmVyaWNU
ZXN0QnJhbmNoQ29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxv
Y2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9LAorICAgICAgICBb
Jl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJl
dHVybiByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcmlnaHQp
OworICAgICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKworICAgIC8vIFRl
c3QgaW1tLXRvLWltbS4KKyAgICBnZW5lcmljVGVzdEJyYW5jaENvbXBhcmUoCisgICAgICAgIG9w
Y29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7
CisgICAgICAgICAgICByZXR1cm4gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGxlZnQpOworICAgICAgICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJs
b2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcmlnaHQpOworICAgICAgICB9LAorICAg
ICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKK30KKwogI2RlZmluZSBSVU4odGVzdCkgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkp
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXApAQCAtMjMwMCw2ICsyMzg3LDU1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIq
IGZpbHRlcikKICAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnQoKSk7CiAgICAgUlVOKHRlc3RT
aW1wbGVDaGVjaygpKTsKIAorICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShFcXVhbCwgNDIsIDQy
LCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEVxdWFsLCA0MiwgNDMsIDApKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoRXF1YWwsIC00MiwgLTQyLCAxKSk7CisgICAgUlVOKHRl
c3RCcmFuY2hDb21wYXJlKEVxdWFsLCAtNDIsIC00MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNo
Q29tcGFyZShOb3RFcXVhbCwgNDIsIDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJl
KE5vdEVxdWFsLCA0MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTm90RXF1
YWwsIC00MiwgLTQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKE5vdEVxdWFsLCAt
NDIsIC00MywgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzVGhhbiwgNDIsIDQy
LCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKExlc3NUaGFuLCA0MiwgNDMsIDEpKTsK
KyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVzc1RoYW4sIDQzLCA0MiwgMCkpOworICAgIFJV
Tih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzVGhhbiwgLTQyLCA0MywgMSkpOworICAgIFJVTih0ZXN0
QnJhbmNoQ29tcGFyZShMZXNzVGhhbiwgNDMsIC00MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNo
Q29tcGFyZShHcmVhdGVyVGhhbiwgNDIsIDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21w
YXJlKEdyZWF0ZXJUaGFuLCA0MiwgNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUo
R3JlYXRlclRoYW4sIDQzLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVh
dGVyVGhhbiwgLTQyLCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVy
VGhhbiwgNDMsIC00MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzRXF1YWws
IDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzRXF1YWwsIDQyLCA0
MywgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzRXF1YWwsIDQzLCA0MiwgMCkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzRXF1YWwsIC00MiwgNDMsIDEpKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVzc0VxdWFsLCA0MywgLTQyLCAwKSk7CisgICAgUlVO
KHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJFcXVhbCwgNDIsIDQyLCAxKSk7CisgICAgUlVOKHRl
c3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJFcXVhbCwgNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RC
cmFuY2hDb21wYXJlKEdyZWF0ZXJFcXVhbCwgNDMsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFu
Y2hDb21wYXJlKEdyZWF0ZXJFcXVhbCwgLTQyLCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNo
Q29tcGFyZShHcmVhdGVyRXF1YWwsIDQzLCAtNDIsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENv
bXBhcmUoQmVsb3csIDQyLCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShCZWxv
dywgNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93LCA0MywgNDIs
IDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3csIC00MiwgNDMsIDApKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3csIDQzLCAtNDIsIDEpKTsKKyAgICBSVU4odGVz
dEJyYW5jaENvbXBhcmUoQWJvdmUsIDQyLCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29t
cGFyZShBYm92ZSwgNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3Zl
LCA0MywgNDIsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmUsIC00MiwgNDMs
IDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmUsIDQzLCAtNDIsIDApKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3dFcXVhbCwgNDIsIDQyLCAxKSk7CisgICAgUlVO
KHRlc3RCcmFuY2hDb21wYXJlKEJlbG93RXF1YWwsIDQyLCA0MywgMSkpOworICAgIFJVTih0ZXN0
QnJhbmNoQ29tcGFyZShCZWxvd0VxdWFsLCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5j
aENvbXBhcmUoQmVsb3dFcXVhbCwgLTQyLCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29t
cGFyZShCZWxvd0VxdWFsLCA0MywgLTQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJl
KEFib3ZlRXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92
ZUVxdWFsLCA0MiwgNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmVFcXVh
bCwgNDMsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlRXF1YWwsIC00
MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmVFcXVhbCwgNDMsIC00
MiwgMCkpOworCiAgICAgaWYgKCFkaWRSdW4pCiAgICAgICAgIHVzYWdlKCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDM0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLCBT
aWduZWRuZXNzIHNpZ25lZG5lc3MpIGNvbnN0Cit7CisgICAgc3dpdGNoIChzaWduZWRuZXNzKSB7
CisgICAgY2FzZSBTaWduZWQ6CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2Fz
ZSBXaWR0aDg6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8aW50OF90Pigp
OworICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRh
YmxlQXM8aW50MTZfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgcmV0
dXJuIGlzUmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGg2NDoK
KyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxpbnQ2NF90PigpOworICAgICAg
ICB9CisgICAgY2FzZSBVbnNpZ25lZDoKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAg
ICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50
OF90PigpOworICAgICAgICBjYXNlIFdpZHRoMTY6CisgICAgICAgICAgICByZXR1cm4gaXNSZXBy
ZXNlbnRhYmxlQXM8dWludDE2X3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAg
ICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50MzJfdD4oKTsKKyAgICAgICAgY2FzZSBX
aWR0aDY0OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQ2NF90Pigp
OworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsMTggQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKIAorICAg
IGVudW0gV2lkdGggOiBpbnQ4X3QgeworICAgICAgICBXaWR0aDgsCisgICAgICAgIFdpZHRoMTYs
CisgICAgICAgIFdpZHRoMzIsCisgICAgICAgIFdpZHRoNjQKKyAgICB9OworCisgICAgZW51bSBT
aWduZWRuZXNzIDogaW50OF90IHsKKyAgICAgICAgU2lnbmVkLAorICAgICAgICBVbnNpZ25lZAor
ICAgIH07CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRo
ZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcuIEl0J3MgZGVsaWJlcmF0ZWx5IGZhbHNlIGZvcgogICAg
IC8vIFVzZUFkZHIsIHNpbmNlIGlzVXNlKCkgZm9yIGFuIEFyZzo6YWRkciBtZWFucyB0aGF0IHdl
IGFyZSBsb2FkaW5nIGZyb20gdGhlIGFkZHJlc3MuCiAgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9s
ZSByb2xlKQpAQCAtMTUzLDYgKzE2NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHUDsK
ICAgICB9CiAKKyAgICBzdGF0aWMgV2lkdGggd2lkdGhGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBXaWR0aDg7
CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gV2lkdGgzMjsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4g
V2lkdGg2NDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEFyZygpCiAgICAgICAgIDogbV9raW5k
KEludmFsaWQpCiAgICAgewpAQCAtMzc2LDYgKzQwMiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29mZnNldDsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJv
b2wgaXNSZXByZXNlbnRhYmxlQXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzUmVw
cmVzZW50YWJsZUFzPFQ+KHZhbHVlKCkpOworICAgIH0KKworICAgIGJvb2wgaXNSZXByZXNlbnRh
YmxlQXMoV2lkdGgsIFNpZ25lZG5lc3MpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBUIGFzTnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPih2YWx1ZSgpKTsKKyAgICB9CisKICAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7CkBAIC02ODQsNiArNzI0
LDQxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVDb25kaXRpb24+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAgICAvLyBUaGlzIGlzIHZh
bGlkIGZvciBjb25kaXRpb24gYXJndW1lbnRzLiBJdCB3aWxsIGludmVydCB0aGVtLgorICAgIEFy
ZyBpbnZlcnRlZChib29sIGludmVydGVkID0gdHJ1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghaW52ZXJ0ZWQpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgICAgIHJldHVybiByZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpKTsKKyAg
ICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICAgICAgcmV0dXJuIHJlc0NvbmQoTWFjcm9Bc3Nl
bWJsZXI6OmludmVydChhc1Jlc3VsdENvbmRpdGlvbigpKSk7CisgICAgICAgIGNhc2UgRG91Ymxl
Q29uZDoKKyAgICAgICAgICAgIHJldHVybiBkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZl
cnQoYXNEb3VibGVDb25kaXRpb24oKSkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEFyZyBmbGlwcGVkKGJvb2wgZmxpcHBlZCA9IHRydWUp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWZsaXBwZWQpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpmbGlwKGFzUmVs
YXRpb25hbENvbmRpdGlvbigpKSk7CisgICAgfQorCisgICAgYm9vbCBpc1NpZ25lZENvbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzUmVsQ29uZCgpICYmIE1hY3JvQXNzZW1ibGVy
Ojppc1NpZ25lZChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgfQorCisgICAgYm9vbCBp
c1Vuc2lnbmVkQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNSZWxDb25kKCkg
JiYgTWFjcm9Bc3NlbWJsZXI6OmlzVW5zaWduZWQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpOwor
ICAgIH0KKwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiAgICAgQXJnKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBvcmlnaW4gfHwgb3Bjb2RlICE9IE5vcCB8fCBhcmdzLnNpemUoKTsgfQorCiAgICAg
Ly8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1
c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKICAgICAvLyBlZGl0IElSLiBJ
UiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29u
c3QgSW5zdCYiIHRoZW4geW91J3JlCiAgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJ
KHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMiArMTgxLDUzIEBAIE1vdmU2NFRv
RG91YmxlIFU6RywgRDpGCiBNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RwogICAgIFRtcCwgVG1wCiAK
K0NvbXBhcmUzMiBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1w
CisgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAorCitDb21wYXJlNjQgVTpHLCBVOkcsIFU6Rywg
RDpHCisgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAorICAgIFJlbENvbmQsIFRtcCwgVG1wLCBU
bXAKKworVGVzdDMyIFU6RywgVTpHLCBVOkcsIEQ6RworICAgIFJlc0NvbmQsIEFkZHIsIEltbSwg
VG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcAorCitUZXN0NjQgVTpHLCBVOkcsIFU6Rywg
RDpHCisgICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIFRtcCwgVG1wLCBU
bXAKKworQnJhbmNoOCBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZWxDb25kLCBBZGRyLCBJ
bW0KKyAgICBSZWxDb25kLCBJbmRleCwgSW1tCisKK0JyYW5jaDMyIFU6RywgVTpHLCBVOkcgL2Jy
YW5jaAorICAgIFJlbENvbmQsIEFkZHIsIEltbQorICAgIFJlbENvbmQsIFRtcCwgVG1wCisgICAg
UmVsQ29uZCwgVG1wLCBJbW0KKyAgICBSZWxDb25kLCBUbXAsIEFkZHIKKyAgICBSZWxDb25kLCBB
ZGRyLCBUbXAKKyAgICBSZWxDb25kLCBBZGRyLCBJbW0KKyAgICBSZWxDb25kLCBJbmRleCwgSW1t
CisKK0JyYW5jaDY0IFU6RywgVTpHLCBVOkcgL2JyYW5jaAorICAgIFJlbENvbmQsIFRtcCwgVG1w
CisgICAgUmVsQ29uZCwgVG1wLCBBZGRyCisgICAgUmVsQ29uZCwgQWRkciwgVG1wCisgICAgUmVs
Q29uZCAsSW5kZXgsIFRtcAorCitCcmFuY2hUZXN0OCBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAg
ICBSZXNDb25kLCBBZGRyLCBJbW0KKyAgICBSZXNDb25kLCBJbmRleCwgSW1tCisKIEJyYW5jaFRl
c3QzMiBVOkcsIFU6RywgVTpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAgIFJl
c0NvbmQsIFRtcCwgSW1tCiAgICAgUmVzQ29uZCwgQWRkciwgSW1tCiAgICAgUmVzQ29uZCwgSW5k
ZXgsIEltbQogCisjIFdhcm5pbmc6IGZvcm1zIHRoYXQgdGFrZSBhbiBpbW1lZGlhdGUgd2lsbCBz
aWduLWV4dGVuZCB0aGVpciBpbW1lZGlhdGUuIFlvdSBwcm9iYWJseSB3YW50CisjIEJyYW5jaFRl
c3QzMiBpbiBtb3N0IGNhc2VzIHdoZXJlIHlvdSB1c2UgYW4gaW1tZWRpYXRlLgogQnJhbmNoVGVz
dDY0IFU6RywgVTpHLCBVOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgVG1wCiAgICAgUmVz
Q29uZCwgVG1wLCBJbW0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264827</attachid>
            <date>2015-11-04 16:52:39 -0800</date>
            <delta_ts>2015-11-04 20:28:09 -0800</delta_ts>
            <desc>at least it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58699</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAg
ICAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAg
cmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVF
cXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGli
bGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBaZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNl
IGJ1aWxkcy4KICAgICAgICAgfQogICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0
aW9uIGZsaXAoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICByZXR1cm4gY29uZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAg
IHJldHVybiBCZWxvdzsKKyAgICAgICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICBy
ZXR1cm4gQmVsb3dPckVxdWFsOworICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0
dXJuIEFib3ZlOworICAgICAgICBjYXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVy
biBBYm92ZU9yRXF1YWw7CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICBy
ZXR1cm4gTGVzc1RoYW47CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAg
ICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDsKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAg
ICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1
YWw6CisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVx
dWFsOworICAgIH0KKworICAgIC8vIFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChj
b25kLCB2YWx1ZSwgdmFsdWUpCisgICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAg
ICAgYnJhbmNoMzIoY29uZCwgc2lnbkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAg
c3RhdGljIGJvb2wgaXNTaWduZWQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2Ug
Tm90RXF1YWw6CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRl
clRoYW5PckVxdWFsOgorICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NU
aGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1
ZSBpZiB0aGlzOgorICAgIC8vICAgICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAv
LyBJcyB0aGUgc2FtZSBhcyB0aGlzOgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0
OCh2YWx1ZSksIHplcm9FeHQ4KHZhbHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNl
IEFib3ZlOgorICAgICAgICBjYXNlIEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoK
KyAgICAgICAgY2FzZSBCZWxvd09yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KICNlbmRpZgogCiAgICAgLy8gUGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlv
bnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzQsNiArMTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7
CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAg
Ly8gSW52ZXJ0IGEgcmVsYXRpb25hbCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBi
ZWNvbWVzID49LCBldGMuCiAgICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDYgKzU3LDE3IEBAIHVuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQogCiB9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKIAorQ2hlY2tTcGVjaWFsOjpLZXk6OktleShjb25zdCBJbnN0JiBpbnN0
KQoreworICAgIG1fb3Bjb2RlID0gaW5zdC5vcGNvZGU7CisgICAgbV9udW1BcmdzID0gaW5zdC5h
cmdzLnNpemUoKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3Ms
ICIpIik7Cit9CisKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKICAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQogICAgICwg
bV9udW1DaGVja0FyZ3MobnVtQXJncykKQEAgLTY0LDYgKzc1LDExIEBAIENoZWNrU3BlY2lhbDo6
Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG8KICAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUp
KTsKIH0KIAorQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoY29uc3QgQ2hlY2tTcGVjaWFsOjpL
ZXkmIGtleSkKKyAgICA6IENoZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCkp
Cit7Cit9CisKIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMTkyMDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKICNpbmNsdWRl
ICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBJbnN0
OworfQorCiAvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5j
aCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKIC8vIG91dC1v
Zi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFz
b24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKIC8vIHdoaWNoIGJyYW5jaCBvcGNvZGUg
d2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3Zl
cmxvYWQgd2Ugd2FudC4gSXQKQEAgLTQ2LDcgKzUxLDY1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCiBjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFs
IHsKIHB1YmxpYzoKKyAgICAvLyBTdXBwb3J0IGZvciBoYXNoIGNvbnNpbmcgdGhlc2UgdGhpbmdz
LgorICAgIGNsYXNzIEtleSB7CisgICAgcHVibGljOgorICAgICAgICBLZXkoKQorICAgICAgICAg
ICAgOiBtX29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICAgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAgICAgLCBtX251bUFyZ3MobnVtQXJncykKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgZXhwbGljaXQgS2V5KGNvbnN0IEFpcjo6SW5zdCYgaW5zdCk7CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX29wY29kZSA9PSBvdGhlci5tX29wY29kZQorICAgICAgICAgICAgICAgICYm
IG1fbnVtQXJncyA9PSBvdGhlci5tX251bUFyZ3M7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEtleSgpOyB9CisKKyAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKyAg
ICAgICAgdW5zaWduZWQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJnczsgfQorCisg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgICAgICBLZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICAgICAgOiBtX29wY29kZShB
aXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnRoaXMgPT0gS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBTZXJpb3VzbHksIHdlIGRvbid0IG5lZWQgdG8gYmUgc21h
cnQgaGVyZS4gSXQganVzdCBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgICAgIHJldHVybiBtX29w
Y29kZSArIG1fbnVtQXJnczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBBaXI6Ok9wY29kZSBtX29wY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1BcmdzOwor
ICAgIH07CisgICAgCiAgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1B
cmdzKTsKKyAgICBDaGVja1NwZWNpYWwoY29uc3QgS2V5JiBrZXkpOwogICAgIH5DaGVja1NwZWNp
YWwoKTsKIAogcHJvdGVjdGVkOgpAQCAtNzAsOCArMTMzLDI5IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwogCitzdHJ1Y3QgQ2hlY2tTcGVjaWFsS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkg
eyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoZWNr
U3BlY2lhbDo6S2V5JiBhLCBjb25zdCBDaGVja1NwZWNpYWw6OktleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAg
IHR5cGVkZWYgSlNDOjpCMzo6Q2hlY2tTcGVjaWFsS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAgIC8vIEkgZG9uJ3Qgd2FudCB0byB0
aGluayBhYm91dCB0aGlzIHZlcnkgaGFyZCwgaXQncyBub3Qgd29ydGggaXQuIEknbSBhIGJlIGNv
bnNlcnZhdGl2ZS4KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CiAKICNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw5ICsy
NTMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBlZmZlY3RpdmVBZGRyKHZhbHVlLT5sYXN0
Q2hpbGQoKSwgdmFsdWUpOwogICAgIH0KIAotICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZh
bHVlKQorICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZhbHVlLCBCMzo6T3Bjb2RlIGxvYWRP
cGNvZGUpCiAgICAgewotICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSAhPSBMb2FkKQor
ICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSAhPSBsb2FkT3Bjb2RlKQogICAgICAgICAg
ICAgcmV0dXJuIEFyZygpOwogICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwobG9hZFZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKQEAgLTI2NCw2ICsyNjQsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOwogICAgIH0KIAorICAgIEFyZyBsb2FkQWRk
cihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvYWRBZGRyKGxvYWRW
YWx1ZSwgTG9hZCk7CisgICAgfQorCiAgICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAodmFsdWUtPnJlcHJlc2VudGFibGVBczxpbnQzMl90PigpKQpAQCAtNjIyLDYg
KzYyNywzNTQgQEAgcHVibGljOgogICAgIH07CiAgICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NT
ZWxlY3RvcjsKIAorICAgIC8vIENyZWF0ZSBhbiBJbnN0IHRvIGRvIHRoZSBjb21wYXJpc29uIHNw
ZWNpZmllZCBieSB0aGUgZ2l2ZW4gdmFsdWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGFy
ZUZ1bmN0b3IsIHR5cGVuYW1lIFRlc3RGdW5jdG9yLCB0eXBlbmFtZSBDb21wYXJlRG91YmxlRnVu
Y3Rvcj4KKyAgICBJbnN0IGNyZWF0ZUdlbmVyaWNDb21wYXJlKAorICAgICAgICBWYWx1ZSogdmFs
dWUsCisgICAgICAgIGNvbnN0IENvbXBhcmVGdW5jdG9yJiBjb21wYXJlLCAvLyBTaWduYXR1cmU6
IChBcmc6OldpZHRoLCBBcmcgcmVsQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKKyAgICAgICAgY29u
c3QgVGVzdEZ1bmN0b3ImIHRlc3QsIC8vIFNpZ25hdHVyZTogKEFyZzo6V2lkdGgsIEFyZyByZXND
b25kLCBBcmcsIEFyZykgLT4gSW5zdAorICAgICAgICBjb25zdCBDb21wYXJlRG91YmxlRnVuY3Rv
ciYgY29tcGFyZURvdWJsZSwgLy8gU2lnbmF0dXJlOiAoQXJnIGRvdWJsZUNvbmQsIEFyZywgQXJn
KSAtPiBJbnN0CisgICAgICAgIGJvb2wgaW52ZXJ0ZWQgPSBmYWxzZSkKKyAgICB7CisgICAgICAg
IC8vIENoZXcgdGhyb3VnaCBhbnkgbmVnYXRpb25zLiBJdCdzIG5vdCBzdHJpY3RseSBuZWNlc3Nh
cnkgZm9yIHRoaXMgdG8gYmUgYSBsb29wLCBidXQgd2UgbGlrZQorICAgICAgICAvLyB0byBmb2xs
b3cgdGhlIHJ1bGUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgcmVkdWNlcyBzdHJlbmd0
aCB3aGVuZXZlciBpdCBkb2Vzbid0CisgICAgICAgIC8vIHJlcXVpcmUgbWFraW5nIHRoaW5ncyBt
b3JlIGNvbXBsaWNhdGVkLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpZiAoIWNh
bkJlSW50ZXJuYWwodmFsdWUpIHx8IHZhbHVlID09IGN1cnJlbnRWYWx1ZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkSW52ZXJ0ID0KKyAgICAgICAgICAg
ICAgICAodmFsdWUtPm9wY29kZSgpID09IEJpdFhvciAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50
KDEpICYmIHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkKKyAgICAgICAgICAgICAgICB8
fCAodmFsdWUtPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkp
OworICAgICAgICAgICAgaWYgKCFzaG91bGRJbnZlcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGludmVy
dGVkID0gIWludmVydGVkOworICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBjcmVhdGVSZWxDb25kID0gWyZdICgKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIHJlbGF0aW9uYWxDb25kaXRpb24s
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGRvdWJsZUNvbmRp
dGlvbikgeworICAgICAgICAgICAgQXJnIHJlbENvbmQgPSBBcmc6OnJlbENvbmQocmVsYXRpb25h
bENvbmRpdGlvbikuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAgICAgQXJnIGRvdWJsZUNv
bmQgPSBBcmc6OmRvdWJsZUNvbmQoZG91YmxlQ29uZGl0aW9uKS5pbnZlcnRlZChpbnZlcnRlZCk7
CisgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAg
IFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgaWYgKGlzSW50
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIEFyZyBsZWZ0SW1t
ID0gaW1tKGxlZnQpOworICAgICAgICAgICAgICAgIEFyZyByaWdodEltbSA9IGltbShyaWdodCk7
CisKKyAgICAgICAgICAgICAgICBhdXRvIHRyeUNvbXBhcmUgPSBbJl0gKEFyZzo6V2lkdGggd2lk
dGgsIEFyZyBsZWZ0LCBBcmcgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0LCByaWdodCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLmZsaXBwZWQoKSwgcmln
aHQsIGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgYXV0byB0cnlDb21wYXJlTG9hZEltbSA9IFsmXSAoCisgICAgICAgICAgICAg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSwgQXJnOjpTaWdu
ZWRuZXNzIHNpZ25lZG5lc3MpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmln
aHRJbW0gJiYgcmlnaHRJbW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIHNpZ25lZG5lc3MpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdp
ZHRoLCBsb2FkQWRkcihsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBs
ZWZ0SW1tLmlzUmVwcmVzZW50YWJsZUFzKHdpZHRoLCBzaWduZWRuZXNzKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbGVmdElt
bSwgbG9hZEFkZHIocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlJ3MgdGhh
dCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIHdl
IHdhbnQgdGhpcyB0byBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vICAgICBAMSA9IExvYWQ4UyguLi4pCisgICAgICAgICAgICAg
ICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgLy8gICAgIEAzID0g
TGVzc1RoYW4oQDEsIEAyKQorICAgICAgICAgICAgICAgIC8vICAgICBCcmFuY2goQDMpCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJ
bW0oQXJnOjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZENvbmQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6Oldp
ZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJl
bENvbmQuaXNTaWduZWRDb25kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVz
dWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBBcmc6OlNpZ25l
ZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Vu
c2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRy
eUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WiwgQXJnOjpVbnNpZ25lZCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZSdzIHRoYXQgaW52b2x2ZSBh
IGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4KKworICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lk
dGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwgTG9h
ZCwgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisg
ICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGEgbG9h
ZC4gV2UgZG8gdGhpcyBmaXJzdCBiZWNhdXNlIHRoZSB3YXkgd2UgZG8KKyAgICAgICAgICAgICAg
ICAvLyBpdCBwaW5zIGEgdmFsdWUgdG8gYSB0bXAuIEl0J3MgYmV0dGVyIHRvIHBpbiBhbiBpbW1l
ZGlhdGUgdG8gYSB0bXAgdGhhbiB0byBwaW4gYQorICAgICAgICAgICAgICAgIC8vIGxvYWQgdG8g
YSB0bXAuCisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdp
ZHRoLCBsb2FkQWRkcihsZWZ0KSwgdG1wKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIHRtcChsZWZ0KSwgbG9hZEFkZHIocmln
aHQpKSkgeworICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGFuIGltbWVk
aWF0ZSBhbmQgYSB0bXAuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGxl
ZnRJbW0gJiYgbGVmdEltbS5pc1JlcHJlc2VudGFibGVBczxpbnQzMl90PigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIGxlZnRJbW0s
IHRtcChyaWdodCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJp
Z2h0SW1tICYmIHJpZ2h0SW1tLmlzUmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgdG1wKGxl
ZnQpLCByaWdodEltbSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZpbmFsbHksIGhhbmRsZSBj
b21wYXJpc29uIGJldHdlZW4gdG1wcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5Q29tcGFy
ZSh3aWR0aCwgdG1wKGxlZnQpLCB0bXAocmlnaHQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gRG91YmxlIGNvbXBhcmlzb25zIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyBzbWFy
dC4KKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlRG91YmxlKGRvdWJsZUNvbmQsIHRtcChsZWZ0
KSwgdG1wKHJpZ2h0KSk7CisgICAgICAgIH07CisKKyAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9
IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSk7CisgICAgICAgIEFyZyByZXNDb25k
ID0gQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKS5pbnZlcnRlZChpbnZlcnRl
ZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGF0dGVtcHRGdXNlZCA9IFsmXSAoKSAtPiBJbnN0
IHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBj
YXNlIE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQpOworICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuKTsKKyAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJU
aGFuLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4pOworICAgICAgICAgICAgY2Fz
ZSBMZXNzRXF1YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFu
T3JFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICAgICAgICAg
IGNhc2UgQWJvdmU6CisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgYm9ndXMgZG91YmxlIGNv
bmRpdGlvbiBiZWNhdXNlIHRoZXNlIGludGVnZXIgY29tcGFyaXNvbnMgd29uJ3QgZ290IGRvd24g
dGhhdAorICAgICAgICAgICAgICAgIC8vIHBhdGggYW55d2F5LgorICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIGNhc2UgQmVsb3c6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEJlbG93RXF1
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93T3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAg
IGNhc2UgQml0QW5kOiB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hp
bGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOwor
CisgICAgICAgICAgICAgICAgQXJnIGxlZnRJbW0gPSBpbW0obGVmdCk7CisgICAgICAgICAgICAg
ICAgQXJnIHJpZ2h0SW1tID0gaW1tKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBhdXRvIHRyeVRlc3QgPSBbJl0gKEFyZzo6V2lkdGggd2lkdGgsIEFyZyBsZWZ0LCBB
cmcgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQg
PSB0ZXN0KHdpZHRoLCByZXNDb25kLCBsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQg
PSB0ZXN0KHdpZHRoLCByZXNDb25kLCByaWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwor
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIHRyeVRlc3RMb2FkSW1t
ID0gWyZdIChBcmc6OldpZHRoIHdpZHRoLCBCMzo6T3Bjb2RlIGxvYWRPcGNvZGUpIC0+IEluc3Qg
eworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJbW0uaXNSZXByZXNl
bnRhYmxlQXMod2lkdGgsIEFyZzo6VW5zaWduZWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2FkQWRkcihsZWZ0LCBsb2FkT3Bj
b2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLmlzUmVwcmVzZW50YWJsZUFzKHdp
ZHRoLCBBcmc6OlVuc2lnbmVkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbGVmdEltbSwgbG9hZEFkZHIocmlnaHQsIGxvYWRPcGNv
ZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAg
IC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydz
IHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorCisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WikpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRl
c3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0
TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBp
bnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRoYXQgaW1tZWRpYXRlcyBhcmUK
KyAgICAgICAgICAgICAgICAvLyAzMi1iaXQsIGFuZCB3ZSB3YW50IHplcm8tZXh0ZW5zaW9uLiBI
ZW5jZSwgdGhlIGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkIGFzIGEKKyAgICAgICAgICAgICAg
ICAvLyAzMi1iaXQgdGVzdC4gTm90ZSB0aGF0IHRoaXMgc3BpdHMgb24gdGhlIGdyYXZlIG9mIGlu
ZmVyaW9yIGVuZGlhbnMsIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICAgICAgLy8gYmlnIG9uZS4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlU
ZXN0TG9hZEltbShBcmc6OldpZHRoMzIsIExvYWQpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0ZXN0J3MgdGhhdCBp
bnZvbHZlIGEgbG9hZC4KKworICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6
OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2FkQWRkcihsZWZ0KSwgdG1wKHJp
Z2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgdG1wKGxlZnQpLCBs
b2FkQWRkcihyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJp
Z2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUg
YW4gaW1tZWRpYXRlIGFuZCBhIHRtcC4KKworICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYm
IGxlZnRJbW0uaXNSZXByZXNlbnRhYmxlQXM8dWludDMyX3Q+KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdChBcmc6OldpZHRoMzIsIGxlZnRJbW0sIHRt
cChyaWdodCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJbW0u
aXNSZXByZXNlbnRhYmxlQXM8dWludDMyX3Q+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEluc3QgcmVzdWx0ID0gdHJ5VGVzdChBcmc6OldpZHRoMzIsIHRtcChsZWZ0KSwgcmlnaHRJbW0p
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBGaW5hbGx5LCBqdXN0IGRvIHRtcCdzLgorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnlUZXN0KHdpZHRoLCB0bXAobGVmdCksIHRtcChyaWdodCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGlmIChjYW5C
ZUludGVybmFsKHZhbHVlKSB8fCB2YWx1ZSA9PSBjdXJyZW50VmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChJbnN0IHJlc3VsdCA9IGF0dGVtcHRGdXNlZCgpKSB7CisgICAgICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0ZXN0KHdp
ZHRoLCByZXNDb25kLCB0bXAodmFsdWUpLCBBcmc6OmltbSgtMSkpKQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbWV0aW1lcyB0aGlzIGlzIHRoZSBv
bmx5IGZvcm0gb2YgdGVzdCBhdmFpbGFibGUuIFdlIHByZWZlciBub3QgdG8gdXNlIHRoaXMgYmVj
YXVzZQorICAgICAgICAvLyBpdCdzIGxlc3MgY2Fub25pY2FsLgorICAgICAgICByZXR1cm4gdGVz
dCh3aWR0aCwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgdG1wKHZhbHVlKSk7CisgICAgfQorCisgICAg
SW5zdCBjcmVhdGVCcmFuY2goVmFsdWUqIHZhbHVlLCBib29sIGludmVydGVkID0gZmFsc2UpCisg
ICAgeworICAgICAgICByZXR1cm4gY3JlYXRlR2VuZXJpY0NvbXBhcmUoCisgICAgICAgICAgICB2
YWx1ZSwKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiBy
ZWxDb25kLCBjb25zdCBBcmcmIGxlZnQsIGNvbnN0IEFyZyYgcmlnaHQpIC0+IEluc3QgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
V2lkdGg4OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoOCwgQXJn
OjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDgsIGN1cnJlbnRWYWx1ZSwgcmVsQ29uZCwgbGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgp
OworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJp
Z2h0LmtpbmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2gz
MiwgY3VycmVudFZhbHVlLCByZWxDb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2g2NCwgQXJnOjpSZWxDb25k
LCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KEJyYW5jaDY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdIChBcmc6OldpZHRoIHdpZHRoLCBjb25z
dCBBcmcmIHJlc0NvbmQsIGNvbnN0IEFyZyYgbGVmdCwgY29uc3QgQXJnJiByaWdodCkgLT4gSW5z
dCB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFu
Y2hUZXN0OCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3Q4LCBjdXJyZW50VmFsdWUs
IHJlc0NvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3Qo
KTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3QzMiwgQXJnOjpSZXND
b25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgY3VycmVudFZhbHVlLCByZXNDb25kLCBsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShCcmFuY2hUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0NjQsIGN1cnJl
bnRWYWx1ZSwgcmVzQ29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBbdGhpc10gKEFyZyBkb3VibGVDb25kLCBBcmcgbGVmdCwgQXJnIHJpZ2h0KSAtPiBJbnN0IHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRG91YmxlLCBBcmc6OkRvdWJs
ZUNvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSW5zdChCcmFuY2hEb3VibGUsIGN1cnJlbnRWYWx1ZSwgZG91YmxlQ29uZCwgbGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgaW52ZXJ0ZWQpOworICAgIH0KKworICAgIEluc3QgY3JlYXRlQ29tcGFyZShW
YWx1ZSogdmFsdWUsIGJvb2wgaW52ZXJ0ZWQgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAg
W3RoaXNdIChBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlbENvbmQsIGNvbnN0IEFyZyYg
bGVmdCwgY29uc3QgQXJnJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgc3dpdGNo
ICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCks
IHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoQ29tcGFyZTMyLCBjdXJyZW50VmFsdWUsIHJlbENvbmQsIGxlZnQsIHJpZ2h0LCB0bXAo
Y3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShDb21wYXJlNjQsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0Lmtp
bmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoQ29t
cGFyZTY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsIGxlZnQsIHJpZ2h0LCB0bXAoY3VycmVudFZh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnOjpXaWR0aCB3aWR0
aCwgY29uc3QgQXJnJiByZXNDb25kLCBjb25zdCBBcmcmIGxlZnQsIGNvbnN0IEFyZyYgcmlnaHQp
IC0+IEluc3QgeworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2
OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oVGVz
dDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KFRlc3QzMiwgY3VycmVudFZhbHVl
LCByZXNDb25kLCBsZWZ0LCByaWdodCwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0
OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oVGVzdDY0LCBBcmc6OlJlc0Nv
bmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KFRlc3Q2NCwgY3VycmVudFZhbHVlLCByZXNDb25kLCBsZWZ0
LCByaWdodCwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBb
dGhpc10gKEFyZywgQXJnLCBBcmcpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTAzCisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3Qo
KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpbnZlcnRlZCk7CisgICAgfQorCiAgICAg
Ly8gQmVsb3cgaXMgdGhlIGNvZGUgZm9yIGEgbG93ZXJpbmcgc2VsZWN0b3IsIHNvIHRoYXQgd2Ug
Y2FuIHBhc3MgKnRoaXMgdG8gcnVuTG93ZXJpbmdNYXRjaGVyLgogICAgIC8vIFRoaXMgd2lsbCBt
YXRjaCBjb21wbGV4IG11bHRpLXZhbHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBp
cyBubyBzaGFyaW5nLiBGb3IgZXhhbXBsZSwKICAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQg
dHdpY2UgYW5kIGNhdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0
aGUgb3JpZ2luYWwKQEAgLTg2OCw2ICsxMjIxLDY2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCisgICAgYm9vbCB0cnlFcXVhbCgpCisgICAgeworICAgICAgICBpbnN0
cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5Tm90RXF1YWwoKQorICAgIHsKKyAgICAg
ICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUxlc3NUaGFuKCkKKyAgICB7
CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlHcmVhdGVyVGhh
bigpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3Vy
cmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5
TGVzc0VxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29t
cGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ym9vbCB0cnlHcmVhdGVyRXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVu
ZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIHRyeUFib3ZlKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5h
cHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCB0cnlCZWxvdygpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0
KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QWJvdmVFcXVhbCgpCisgICAgeworICAgICAgICBp
bnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QmVsb3dFcXVhbCgpCisgICAgewor
ICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIFBhdGNocG9pbnRTcGVjaWFsKiBw
YXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKICAgICBib29sIHRyeVBhdGNocG9pbnQoKQog
ICAgIHsKQEAgLTg4NSwzNCArMTI5OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIENoZWNrU3BlY2lhbCogY2hlY2tCcmFuY2hUZXN0MzJTcGVjaWFsIHsg
bnVsbHB0ciB9OwotICAgIENoZWNrU3BlY2lhbCogY2hlY2tCcmFuY2hUZXN0NjRTcGVjaWFsIHsg
bnVsbHB0ciB9OworICAgIEhhc2hNYXA8Q2hlY2tTcGVjaWFsOjpLZXksIENoZWNrU3BlY2lhbCo+
IGNoZWNrU3BlY2lhbHM7CiAgICAgYm9vbCB0cnlDaGVjayhWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIWlzSW50KHZhbHVlLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGRvdWJsZSBicmFuY2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3MjcKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQorICAgICAgICBJbnN0IGJyYW5jaCA9IGNyZWF0ZUJyYW5jaCh2YWx1
ZS0+Y2hpbGQoMCkpOwogCi0gICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbDsKLSAgICAgICAg
c3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAg
ICBzcGVjaWFsID0gZW5zdXJlU3BlY2lhbChjaGVja0JyYW5jaFRlc3QzMlNwZWNpYWwsIEJyYW5j
aFRlc3QzMiwgMyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAg
ICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKGNoZWNrQnJhbmNoVGVzdDY0U3BlY2lh
bCwgQnJhbmNoVGVzdDY0LCAzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgICAgIENoZWNrU3BlY2lhbDo6S2V5IGtleShicmFuY2gp
OworICAgICAgICBhdXRvIHJlc3VsdCA9IGNoZWNrU3BlY2lhbHMuYWRkKGtleSwgbnVsbHB0cik7
CisgICAgICAgIFNwZWNpYWwqIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUsIGtleSk7CiAKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IGN1cnJl
bnRWYWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKIAotICAgICAgICBJbnN0IGluc3QoCi0gICAgICAg
ICAgICBQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpLAotICAgICAgICAg
ICAgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdG1wKHZhbHVlKSwgQXJn
OjppbW0oLTEpKTsKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNw
ZWNpYWwoc3BlY2lhbCkpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kVmVjdG9yKGJyYW5jaC5h
cmdzKTsKIAogICAgICAgICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMSk7CiAKQEAg
LTkzNyw0NiArMTMzNSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdHJ5QnJhbmNoKFZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYnJhbmNoIGZ1c2lvbiBi
eSBkZWxlZ2F0aW5nIHRvIGEgcGF0dGVybiBtYXRjaGVyIGZvciBjb21wYXJpc29ucy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcyMQotCi0g
ICAgICAgIC8vIEluIEIzIGl0J3MgcG9zc2libGUgdG8gYnJhbmNoIG9uIGFueSB2YWx1ZS4gVGhl
IHNlbWFudGljcyBvZjoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gICAgIEJyYW5jaCh2YWx1ZSkK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gQXJlIGd1YXJhbnRlZWQgdG8gYmUgaWRlbnRpY2FsIHRv
OgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgQnJhbmNoKE5vdEVxdWFsKHZhbHVlLCAwKSkK
LQotICAgICAgICBpZiAoIWlzSW50KHZhbHVlLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGRvdWJsZSBicmFuY2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3MjcKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTsKLSAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAg
ICAgICBvcGNvZGUgPSBCcmFuY2hUZXN0MzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIG9wY29kZSA9IEJyYW5jaFRlc3Q2NDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
QXJnIHJlc0NvbmQgPSBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pOwotCi0g
ICAgICAgIEFyZyBhZGRyID0gbG9hZEFkZHIodmFsdWUpOwotICAgICAgICBpZiAoaXNWYWxpZEZv
cm0ob3Bjb2RlLCByZXNDb25kLmtpbmQoKSwgYWRkci5raW5kKCksIEFyZzo6SW1tKSkgewotICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOwotICAgICAgICAgICAgYXBwZW5kKG9wY29k
ZSwgcmVzQ29uZCwgYWRkciwgQXJnOjppbW0oLTEpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgdG1wKHZhbHVl
KSwgQXJnOjppbW0oLTEpKTsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFu
Y2godmFsdWUtPmNoaWxkKDApKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxOCBA
QCBDb25zdDY0ID0gQ29uc3Q2NCgpCiBTdGFja1Nsb3QgPSBTdGFja1Nsb3QoKQogRnJhbWVQb2lu
dGVyID0gRnJhbWVQb2ludGVyKCkKIAorIyBUaGVzZSBwYXR0ZXJucyBkZWxlZ2F0ZSB0byB0aGUg
Y29tcGFyaXNvbiBtYXRjaGVyLgorRXF1YWwgPSBFcXVhbCgpCitOb3RFcXVhbCA9IE5vdEVxdWFs
KCkKK0xlc3NUaGFuID0gTGVzc1RoYW4oKQorR3JlYXRlclRoYW4gPSBHcmVhdGVyVGhhbigpCitM
ZXNzRXF1YWwgPSBMZXNzRXF1YWwoKQorR3JlYXRlckVxdWFsID0gR3JlYXRlckVxdWFsKCkKK0Fi
b3ZlID0gQWJvdmUoKQorQmVsb3cgPSBCZWxvdygpCitBYm92ZUVxdWFsID0gQWJvdmVFcXVhbCgp
CitCZWxvd0VxdWFsID0gQmVsb3dFcXVhbCgpCisKIFBhdGNocG9pbnQgPSBQYXRjaHBvaW50KCkK
IENoZWNrID0gQ2hlY2sodmFsdWUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNDYgQEAKIAogI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
T3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRlZENvbXBhcmUoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgcmV0
dXJuIE5vdEVxdWFsOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIHJldHVybiBFcXVhbDsK
KyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gR3JlYXRlckVxdWFsOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBjYXNl
IEdyZWF0ZXJUaGFuOgorICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICByZXR1
cm4gTGVzc0VxdWFsOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBjYXNlIExlc3NFcXVh
bDoKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIEdyZWF0ZXJU
aGFuOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIExlc3NUaGFuOworICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICByZXR1cm4gQmVs
b3dFcXVhbDsKKyAgICBjYXNlIEJlbG93OgorICAgICAgICByZXR1cm4gQWJvdmVFcXVhbDsKKyAg
ICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgIHJldHVybiBCZWxvdzsKKyAgICBjYXNlIEJlbG93
RXF1YWw6CisgICAgICAgIHJldHVybiBBYm92ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1l
c3BhY2UgV1RGIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtMTc4LDcgKzE4MCw3IEBAIGVudW0gT3Bjb2RlIDogaW50
MTZfdCB7CiAgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgogICAgIEp1
bXAsCiAgICAgCi0gICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8g
UG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgaW50ZWdlciB0eXBlLiBCcmFuY2hl
cyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKICAgICAvLyBDb250cm9sVmFsdWUgY2xh
c3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4K
ICAgICBCcmFuY2gsCiAKQEAgLTIwNSw2ICsyMDcsOCBAQCBpbmxpbmUgYm9vbCBpc0NoZWNrTWF0
aChPcGNvZGUgb3Bjb2RlKQogICAgIH0KIH0KIAorT3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRlZENv
bXBhcmUoT3Bjb2RlLCBUeXBlKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKIG5hbWVz
cGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
CShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwyMSBAQCBCYXNpY0Jsb2NrKiBQcm9j
ZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorVmFsdWUq
IFByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBhZGQ8
Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKKyAg
ICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gYWRkPENvbnN0NjRWYWx1ZT4oT3JpZ2luKCks
IHZhbHVlKTsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdERvdWJs
ZVZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBQcm9jZWR1cmU6OnJlc2V0VmFsdWVPd25lcnMo
KQogewogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNUeXBlLmgiCiAj
aW5jbHVkZSAiUHVyZU5hTi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgpAQCAtNTMsNiArNTQsOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFsdWVUeXBlKiBh
ZGQoQXJndW1lbnRzLi4uKTsKIAorICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChUeXBlLCBpbnQ2
NF90IHZhbHVlKTsKKwogICAgIHZvaWQgcmVzZXRWYWx1ZU93bmVycygpOwogICAgIHZvaWQgcmVz
ZXRSZWFjaGFiaWxpdHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw0MCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogbmFtZXNwYWNlIHsKIAor
Ly8gVGhlIGdvYWwgb2YgdGhpcyBwaGFzZSBpcyB0bzoKKy8vCisvLyAtIFJlcGxhY2Ugb3BlcmF0
aW9ucyB3aXRoIGxlc3MgZXhwZW5zaXZlIHZhcmlhbnRzLiBUaGlzIGluY2x1ZGVzIGNvbnN0YW50
IGZvbGRpbmcgYW5kIGNsYXNzaWMKKy8vICAgc3RyZW5ndGggcmVkdWN0aW9ucyBsaWtlIHR1cm5p
bmcgTXVsKHgsIDEgPDwgaykgaW50byBTaGwoeCwgaykuCisvLworLy8gLSBSZWFzc29jaWF0ZSBj
b25zdGFudCBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgTG9hZChBZGQoeCwgYykpIGlzIHR1cm5l
ZCBpbnRvIExvYWQoeCwgb2Zmc2V0ID0gYykKKy8vICAgYW5kIEFkZChBZGQoeCwgYyksIGQpIGlz
IHR1cm5lZCBpbnRvIEFkZCh4LCBjICsgZCkuCisvLworLy8gLSBDYW5vbmljYWxpemUgb3BlcmF0
aW9ucy4gVGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQncyBub3QgYXQgYWxsIG9idmlvdXMg
d2hpY2gga2luZCBvZgorLy8gICBvcGVyYXRpb24gaXMgbGVzcyBleHBlbnNpdmUsIGJ1dCBpdCdz
IHVzZWZ1bCBmb3Igc3Vic2VxdWVudCBwaGFzZXMgLSBwYXJ0aWN1bGFybHkgTG93ZXJUb0FpciAt
CisvLyAgIHRvIGhhdmUgb25seSBvbmUgd2F5IG9mIHJlcHJlc2VudGluZyB0aGluZ3MuCisvLwor
Ly8gVGhpcyBwaGFzZSBydW5zIHRvIGZpeHBvaW50LiBUaGVyZWZvcmUsIHRoZSBjYW5vbmljYWxp
emF0aW9ucyBtdXN0IGJlIGRlc2lnbmVkIHRvIGJlIG1vbm90b25pYy4KKy8vIEZvciBleGFtcGxl
LCBpZiB3ZSBoYWQgYSBjYW5vbmljYWxpemF0aW9uIHRoYXQgc2FpZCB0aGF0IEFkZCh4LCAtYykg
c2hvdWxkIGJlIFN1Yih4LCBjKSBhbmQKKy8vIGFub3RoZXIgY2Fub25pY2FsaXphdGlvbiB0aGF0
IHNhaWQgdGhhdCBTdWIoeCwgZCkgc2hvdWxkIGJlIEFkZCh4LCAtZCksIHRoZW4gdGhpcyBwaGFz
ZSB3b3VsZCBlbmQKKy8vIHVwIHJ1bm5pbmcgZm9yZXZlci4gV2UgZG9uJ3Qgd2FudCB0aGF0Lgor
Ly8KKy8vIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBwcmlvcml0aXplIGNlcnRhaW4gY2Fub25pY2Fs
IGZvcm1zIG92ZXIgb3RoZXJzLiBOYWl2ZWx5LCB3ZSB3YW50IHN0cmVuZ3RoCisvLyByZWR1Y3Rp
b24gdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdmFsdWVzLCBhbmQgc28gYSBmb3JtIGludm9sdmlu
ZyBmZXdlciB0b3RhbCB2YWx1ZXMgaXMgbW9yZQorLy8gY2Fub25pY2FsLiBCdXQgd2UgbWlnaHQg
YnJlYWsgdGhpcywgZm9yIGV4YW1wbGUgd2hlbiByZWR1Y2luZyBzdHJlbmd0aCBvZiBNdWwoeCwg
OSkuIFRoaXMgY291bGQgYmUKKy8vIGJldHRlciB3cml0dGVuIGFzIEFkZChTaGwoeCwgMyksIHgp
LCB3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgcmVwcmVzZW50YWJsZSB1c2luZyBhIHNpbmdsZQor
Ly8gaW5zdHJ1Y3Rpb24gb24geDg2LgorLy8KKy8vIEhlcmUgYXJlIHNvbWUgb2YgdGhlIHJ1bGVz
IHdlIGhhdmU6CisvLworLy8gQ2Fub25pY2FsIGZvcm0gb2YgbG9naWNhbCBub3Q6IEJpdFhvcih2
YWx1ZSwgMSkuIFdlIG1heSBoYXZlIHRvIGF2b2lkIHVzaW5nIHRoaXMgZm9ybSBpZiB3ZSBkb24n
dAorLy8ga25vdyBmb3Igc3VyZSB0aGF0ICd2YWx1ZScgaXMgMC1vci0xIChpLmUuIHJldHVybnNC
b29sKS4gSW4gdGhhdCBjYXNlIHdlIGZhbGwgYmFjayBvbgorLy8gRXF1YWwodmFsdWUsIDApLgor
Ly8KKy8vIENhbm9uaWNhbCBmb3JtIG9mIGNvbW11dGF0aXZlIG9wZXJhdGlvbnM6IGlmIHRoZSBv
cGVyYXRpb24gaW52b2x2ZXMgYSBjb25zdGFudCwgdGhlIGNvbnN0YW50IG11c3QKKy8vIGNvbWUg
c2Vjb25kLiBBZGQoeCwgY29uc3RhbnQpIGlzIGNhbm9uaWNhbCwgd2hpbGUgQWRkKGNvbnN0YW50
LCB4KSBpcyBub3QuIElmIHRoZXJlIGFyZSBubworLy8gY29uc3RhbnRzIHRoZW4gdGhlIGNhbm9u
aWNhbCBmb3JtIGludm9sdmVzIHRoZSBsb3dlci1pbmRleGVkIHZhbHVlIGZpcnN0LiBHaXZlbiBB
ZGQoeCwgeSksIGl0J3MKKy8vIGNhbm9uaWNhbCBpZiB4LT5pbmRleCgpIDw9IHktPmluZGV4KCku
CisKIGNsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKIHB1YmxpYzoKICAgICBSZWR1Y2VTdHJlbmd0aChQ
cm9jZWR1cmUmIHByb2MpCkBAIC0yNTcsMTkgKzI5MSwxOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRY
b3IoY29tcGFyZSwgMSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogaW52ZXJ0ZWRDb21wYXJl
CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFyZSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5pbnZlcnRlZENvbXBhcmUobV9wcm9jKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ld1ZhbHVlKGludmVydGVkQ29tcGFyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBCaXRYb3IodmFsdWVYLCB2YWx1ZVgpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IHplcm8tY29uc3RhbnQuCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92
YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogemVyb0NvbnN0YW50Owot
ICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIpCi0gICAgICAgICAg
ICAgICAgICAgIHplcm9Db25zdGFudCA9IG1fcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihtX3ZhbHVl
LT5vcmlnaW4oKSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobV92YWx1ZS0+dHlwZSgp
ID09IEludDY0KQotICAgICAgICAgICAgICAgICAgICB6ZXJvQ29uc3RhbnQgPSBtX3Byb2MuYWRk
PENvbnN0NjRWYWx1ZT4obV92YWx1ZS0+b3JpZ2luKCksIDApOwotICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT50eXBlKCkg
PT0gRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgemVyb0NvbnN0YW50ID0gbV9wcm9jLmFk
ZDxDb25zdERvdWJsZVZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgMCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoemVyb0NvbnN0YW50KTsK
KyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFu
dChtX3ZhbHVlLT50eXBlKCksIDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIApAQCAtMzM4LDE2ICszNzIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBFcXVh
bDoKICAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKIAotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBFcXVhbChFcXVhbCh4LCAwKSwgMCkKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogTm90RXF1YWwoeCwgMCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gRXF1YWwgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkKLSAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzTGlrZVplcm8oKSkgewor
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChib29sLCAwKQorICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBCaXRYb3IoYm9vbCwgMSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+cmV0dXJuc0Jvb2woKSAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKSkgewog
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgTm90RXF1YWwsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApLAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3Qz
MlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFR1
cm4gdGhpcyBFcXVhbChib29sLCAxKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBib29sCiAg
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKQEAgLTM1NiwxMCArMzg5LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8g
RklYTUU6IEhhdmUgYSBjb21wYXJlLWZsaXBwaW5nIG9wdGltaXphdGlvbiwgbGlrZSBFcXVhbChM
ZXNzVGhhbihhLCBiKSwgMCkgdHVybnMgaW50bwotICAgICAgICAgICAgLy8gR3JlYXRlckVxdWFs
KGEsIGIpLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDcyNgotCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGNvbnN0MSwg
Y29uc3QyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29uc3QyCiAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKQEAgLTM5NiwxNCArNDI1LDI0IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKE5vdEVxdWFsKHgsIDAp
KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goeCkKLSAgICAgICAgICAgIGlmIChi
cmFuY2gtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCAmJiBicmFuY2gtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+aXNMaWtlWmVybygpKSB7CisgICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwgJiYgYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSkt
PmlzSW50KDApKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5jaGlsZCgwKSA9IGJyYW5jaC0+
Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEVxdWFsKHgs
IDApLCB0aGVuLCBlbHNlKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goeCwgZWxz
ZSwgdGhlbikKLSAgICAgICAgICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBF
cXVhbCAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNMaWtlWmVybygpKSB7CisgICAg
ICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgYnJhbmNo
LT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgYnJhbmNo
LT5jaGlsZCgwKSA9IGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAg
IHN0ZDo6c3dhcChicmFuY2gtPnRha2VuKCksIGJyYW5jaC0+bm90VGFrZW4oKSk7CisgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goQml0WG9yKGJvb2wsIDEpLCB0aGVuLCBl
bHNlKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goYm9vbCwgZWxzZSwgdGhlbikK
KyAgICAgICAgICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAg
ICAgICAgICAgICAgICAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQzMigxKQor
ICAgICAgICAgICAgICAgICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1cm5zQm9v
bCgpKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5jaGlsZCgwKSA9IGJyYW5jaC0+Y2hpbGQo
MCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChicmFuY2gtPnRha2VuKCks
IGJyYW5jaC0+bm90VGFrZW4oKSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5
MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkxLDExICsyOTEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAg
ICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgICAgICBjYXNlIFN3
aXRjaDoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAx
LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCiAj
aW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xNTcsNiArMTU4LDE1IEBAIFZh
bHVlKiBWYWx1ZTo6bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAorVmFsdWUqIFZhbHVlOjppbnZlcnRlZENvbXBhcmUoUHJvY2VkdXJlJiBwcm9jKSBj
b25zdAoreworICAgIGlmICghbnVtQ2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKE9wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRPcGNvZGUgPSBCMzo6aW52ZXJ0ZWRD
b21wYXJlKG9wY29kZSgpLCBjaGlsZCgwKS0+dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHByb2Mu
YWRkPFZhbHVlPigqaW52ZXJ0ZWRPcGNvZGUsIHR5cGUoKSwgb3JpZ2luKCksIGNoaWxkcmVuKCkp
OworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNv
bnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBJbnQzMikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuaAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBWYWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIp
IGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqIG90aGVyKSBjb25zdDsKIAorICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIGNvbXBhcmlz
b24gdGhlbiB0aGlzIHJldHVybnMgdGhlIGludmVydGVkIGZvcm0gb2YgdGhhdCBjb21wYXJpc29u
LCBpZgorICAgIC8vIHBvc3NpYmxlLiBJdCBjYW4gYmUgaW1wb3NzaWJsZSBmb3IgZG91YmxlIGNv
bXBhcmlzb25zLCB3aGVyZSBmb3IgZXhhbXBsZSBMZXNzVGhhbiBhbmQKKyAgICAvLyBHcmVhdGVy
RXF1YWwgYmVoYXZlIGRpZmZlcmVudGx5LiBJZiB0aGlzIHJldHVybnMgYSB2YWx1ZSwgaXQgaXMg
YSBuZXcgdmFsdWUsIHdoaWNoIG11c3QgYmUKKyAgICAvLyBlaXRoZXIgaW5zZXJ0ZWQgaW50byBz
b21lIGJsb2NrIG9yIGRlbGV0ZWQuCisgICAgVmFsdWUqIGludmVydGVkQ29tcGFyZShQcm9jZWR1
cmUmKSBjb25zdDsKKwogICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKICAgICBpbnQzMl90IGFz
SW50MzIoKSBjb25zdDsKICAgICBib29sIGlzSW50MzIoaW50MzJfdCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjMsNiAr
MjAyMyw5NCBAQCB2b2lkIHRlc3RTaW1wbGVDaGVjaygpCiAgICAgQ0hFQ0soaW52b2tlPGludD4o
Y29kZSwgMSkgPT0gNDIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZWZ0RnVuY3RvciwgdHlw
ZW5hbWUgUmlnaHRGdW5jdG9yPgordm9pZCBnZW5lcmljVGVzdEJyYW5jaENvbXBhcmUoCisgICAg
QjM6Ok9wY29kZSBvcGNvZGUsIGNvbnN0IExlZnRGdW5jdG9yJiBsZWZ0RnVuY3RvciwgY29uc3Qg
UmlnaHRGdW5jdG9yJiByaWdodEZ1bmN0b3IsCisgICAgaW50IGxlZnQsIGludCByaWdodCwgaW50
IHJlc3VsdCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5DYXNlID0gcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJvYy5hZGRCbG9jaygpOworCisgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBvcGNvZGUsIE9yaWdpbigpLCBsZWZ0RnVuY3Rvcihyb290LCBwcm9jKSwgcmlnaHRGdW5jdG9y
KHJvb3QsIHByb2MpKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwgRnJlcXVl
bnRlZEJsb2NrKGVsc2VDYXNlKSk7CisKKyAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IG9uIHRo
ZSB0aGVuIGNhc2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGdldCBpZi1jb252ZXJ0ZWQu
CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4ocHJvYywgSW50MzIsIE9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
cy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBw
YXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgIHRoZW5DYXNlLT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKwor
ICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJv
YywgbGVmdCwgcmlnaHQpID09IHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdEJyYW5jaENvbXBhcmUo
QjM6Ok9wY29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCByZXN1bHQpCit7Cisg
ICAgLy8gVGVzdCB0bXAtdG8tdG1wLgorICAgIGdlbmVyaWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAg
ICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUm
IHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxv
Y2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxv
Y2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwg
cmlnaHQsIHJlc3VsdCk7CisKKyAgICAvLyBUZXN0IGltbS10by10bXAuCisgICAgZ2VuZXJpY1Rl
c3RCcmFuY2hDb21wYXJlKAorICAgICAgICBvcGNvZGUsCisgICAgICAgIFsmXSAoQmFzaWNCbG9j
ayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCk7CisgICAgICAgIH0s
CisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAg
ICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisKKyAgICAvLyBU
ZXN0IHRtcC10by1pbW0uCisgICAgZ2VuZXJpY1Rlc3RCcmFuY2hDb21wYXJlKAorICAgICAgICBv
cGNvZGUsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykg
eworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJv
Y2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCByaWdodCk7CisgICAgICAgIH0sCisgICAgICAgIGxl
ZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBpbW0tdG8taW1tLgorICAgIGdlbmVy
aWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2lj
QmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9j
ay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQpOworICAgICAg
ICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsK
KyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIHJpZ2h0KTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3Vs
dCk7Cit9CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIzMDAs
NiArMjM4OCw1NSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RT
aW1wbGVQYXRjaHBvaW50KCkpOwogICAgIFJVTih0ZXN0U2ltcGxlQ2hlY2soKSk7CiAKKyAgICBS
VU4odGVzdEJyYW5jaENvbXBhcmUoRXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJh
bmNoQ29tcGFyZShFcXVhbCwgNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJl
KEVxdWFsLCAtNDIsIC00MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShFcXVhbCwg
LTQyLCAtNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTm90RXF1YWwsIDQyLCA0
MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShOb3RFcXVhbCwgNDIsIDQzLCAxKSk7
CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKE5vdEVxdWFsLCAtNDIsIC00MiwgMCkpOworICAg
IFJVTih0ZXN0QnJhbmNoQ29tcGFyZShOb3RFcXVhbCwgLTQyLCAtNDMsIDEpKTsKKyAgICBSVU4o
dGVzdEJyYW5jaENvbXBhcmUoTGVzc1RoYW4sIDQyLCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJh
bmNoQ29tcGFyZShMZXNzVGhhbiwgNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21w
YXJlKExlc3NUaGFuLCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVz
c1RoYW4sIC00MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVzc1RoYW4s
IDQzLCAtNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIDQy
LCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyVGhhbiwgNDIsIDQz
LCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJUaGFuLCA0MywgNDIsIDEp
KTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIC00MiwgNDMsIDApKTsK
KyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIDQzLCAtNDIsIDEpKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVzc0VxdWFsLCA0MiwgNDIsIDEpKTsKKyAgICBSVU4o
dGVzdEJyYW5jaENvbXBhcmUoTGVzc0VxdWFsLCA0MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJy
YW5jaENvbXBhcmUoTGVzc0VxdWFsLCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENv
bXBhcmUoTGVzc0VxdWFsLCAtNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJl
KExlc3NFcXVhbCwgNDMsIC00MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVh
dGVyRXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVy
RXF1YWwsIDQyLCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1
YWwsIDQzLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1YWws
IC00MiwgNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlckVxdWFsLCA0
MywgLTQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93LCA0MiwgNDIsIDAp
KTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3csIDQyLCA0MywgMSkpOworICAgIFJV
Tih0ZXN0QnJhbmNoQ29tcGFyZShCZWxvdywgNDMsIDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFu
Y2hDb21wYXJlKEJlbG93LCAtNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJl
KEJlbG93LCA0MywgLTQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlLCA0
MiwgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmUsIDQyLCA0MywgMCkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZSwgNDMsIDQyLCAxKSk7CisgICAgUlVO
KHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlLCAtNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFu
Y2hDb21wYXJlKEFib3ZlLCA0MywgLTQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJl
KEJlbG93RXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShCZWxv
d0VxdWFsLCA0MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3dFcXVh
bCwgNDMsIDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93RXF1YWwsIC00
MiwgNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3dFcXVhbCwgNDMsIC00
MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZUVxdWFsLCA0MiwgNDIsIDEp
KTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmVFcXVhbCwgNDIsIDQzLCAwKSk7Cisg
ICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlRXF1YWwsIDQzLCA0MiwgMSkpOworICAgIFJV
Tih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZUVxdWFsLCAtNDIsIDQzLCAxKSk7CisgICAgUlVOKHRl
c3RCcmFuY2hDb21wYXJlKEFib3ZlRXF1YWwsIDQzLCAtNDIsIDApKTsKKwogICAgIGlmICghZGlk
UnVuKQogICAgICAgICB1c2FnZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywzNCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wgQXJn
Ojppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBzaWduZWRuZXNzKSBj
b25zdAoreworICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgeworICAgIGNhc2UgU2lnbmVkOgorICAg
ICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAg
cmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPGludDhfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDE2
OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPGludDE2X3Q+KCk7CisgICAg
ICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxp
bnQzMl90PigpOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gaXNS
ZXByZXNlbnRhYmxlQXM8aW50NjRfdD4oKTsKKyAgICAgICAgfQorICAgIGNhc2UgVW5zaWduZWQ6
CisgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAg
ICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8dWludDhfdD4oKTsKKyAgICAgICAgY2FzZSBX
aWR0aDE2OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQxNl90Pigp
OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRh
YmxlQXM8dWludDMyX3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgIHJl
dHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50NjRfdD4oKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwogdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KG1fa2luZCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZp
c2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CiAKKyAgICBlbnVtIFdpZHRoIDogaW50OF90IHsK
KyAgICAgICAgV2lkdGg4LAorICAgICAgICBXaWR0aDE2LAorICAgICAgICBXaWR0aDMyLAorICAg
ICAgICBXaWR0aDY0CisgICAgfTsKKworICAgIGVudW0gU2lnbmVkbmVzcyA6IGludDhfdCB7Cisg
ICAgICAgIFNpZ25lZCwKKyAgICAgICAgVW5zaWduZWQKKyAgICB9OworCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJn
LiBJdCdzIGRlbGliZXJhdGVseSBmYWxzZSBmb3IKICAgICAvLyBVc2VBZGRyLCBzaW5jZSBpc1Vz
ZSgpIGZvciBhbiBBcmc6OmFkZHIgbWVhbnMgdGhhdCB3ZSBhcmUgbG9hZGluZyBmcm9tIHRoZSBh
ZGRyZXNzLgogICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKQEAgLTE1Myw2ICsxNjUs
MjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR1A7CiAgICAgfQogCisgICAgc3RhdGljIFdp
ZHRoIHdpZHRoRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gV2lkdGg4OworICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgcmV0dXJuIFdpZHRoMzI7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAg
IGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIFdpZHRoNjQ7CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBBcmcoKQogICAgICAgICA6IG1fa2luZChJbnZhbGlkKQogICAgIHsKQEAgLTM3
Niw2ICs0MDIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzUmVwcmVzZW50YWJsZUFzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxlQXM8VD4odmFs
dWUoKSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhXaWR0aCwgU2lnbmVk
bmVzcykgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgYXNOdW1iZXIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKCkpOwor
ICAgIH0KKwogICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoa2luZCgpID09IEltbTY0KTsKQEAgLTY4NCw2ICs3MjQsNDEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4o
bV9vZmZzZXQpOwogICAgIH0KIAorICAgIC8vIFRoaXMgaXMgdmFsaWQgZm9yIGNvbmRpdGlvbiBh
cmd1bWVudHMuIEl0IHdpbGwgaW52ZXJ0IHRoZW0uCisgICAgQXJnIGludmVydGVkKGJvb2wgaW52
ZXJ0ZWQgPSB0cnVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpbnZlcnRlZCkKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBSZWxDb25kOgorICAgICAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OmludmVydChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSkpOworICAgICAgICBjYXNlIFJlc0NvbmQ6
CisgICAgICAgICAgICByZXR1cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzUmVz
dWx0Q29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICAgICAg
cmV0dXJuIGRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0RvdWJsZUNvbmRpdGlv
bigpKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQor
CisgICAgQXJnIGZsaXBwZWQoYm9vbCBmbGlwcGVkID0gdHJ1ZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghZmxpcHBlZCkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgcmV0
dXJuIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OmZsaXAoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkp
KTsKKyAgICB9CisKKyAgICBib29sIGlzU2lnbmVkQ29uZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNSZWxDb25kKCkgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzU2lnbmVkKGFzUmVsYXRp
b25hbENvbmRpdGlvbigpKTsKKyAgICB9CisKKyAgICBib29sIGlzVW5zaWduZWRDb25kKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1JlbENvbmQoKSAmJiBNYWNyb0Fzc2VtYmxlcjo6
aXNVbnNpZ25lZChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgfQorCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJl
dmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbiB8fCBv
cGNvZGUgIT0gTm9wIHx8IGFyZ3Muc2l6ZSgpOyB9CisKICAgICAvLyBOb3RlIHRoYXQgdGhlc2Ug
ZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0
aGVtIGZvciB0aGluZ3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVk
aXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3Un
cmUKICAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTgxLDEyICsxODEsNTIgQEAgTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKIE1v
dmVEb3VibGVUbzY0IFU6RiwgRDpHCiAgICAgVG1wLCBUbXAKIAorQ29tcGFyZTMyIFU6RywgVTpH
LCBVOkcsIEQ6RworICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAs
IEltbSwgVG1wCisKK0NvbXBhcmU2NCBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZWxDb25kLCBU
bXAsIEltbSwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcAorCitUZXN0MzIgVTpHLCBV
OkcsIFU6RywgRDpHCisgICAgUmVzQ29uZCwgQWRkciwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBU
bXAsIFRtcCwgVG1wCisKK1Rlc3Q2NCBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZXNDb25kLCBU
bXAsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcAorCitCcmFuY2g4IFU6Rywg
VTpHLCBVOkcgL2JyYW5jaAorICAgIFJlbENvbmQsIEFkZHIsIEltbQorICAgIFJlbENvbmQsIElu
ZGV4LCBJbW0KKworQnJhbmNoMzIgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisgICAgUmVsQ29uZCwg
QWRkciwgSW1tCisgICAgUmVsQ29uZCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEltbQor
ICAgIFJlbENvbmQsIFRtcCwgQWRkcgorICAgIFJlbENvbmQsIEFkZHIsIFRtcAorICAgIFJlbENv
bmQsIEluZGV4LCBJbW0KKworQnJhbmNoNjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisgICAgUmVs
Q29uZCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEFkZHIKKyAgICBSZWxDb25kLCBBZGRy
LCBUbXAKKyAgICBSZWxDb25kLCBJbmRleCwgVG1wCisKK0JyYW5jaFRlc3Q4IFU6RywgVTpHLCBV
OkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIEFkZHIsIEltbQorICAgIFJlc0NvbmQsIEluZGV4LCBJ
bW0KKwogQnJhbmNoVGVzdDMyIFU6RywgVTpHLCBVOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRt
cCwgVG1wCiAgICAgUmVzQ29uZCwgVG1wLCBJbW0KICAgICBSZXNDb25kLCBBZGRyLCBJbW0KICAg
ICBSZXNDb25kLCBJbmRleCwgSW1tCiAKKyMgV2FybmluZzogZm9ybXMgdGhhdCB0YWtlIGFuIGlt
bWVkaWF0ZSB3aWxsIHNpZ24tZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZS4gWW91IHByb2JhYmx5IHdh
bnQKKyMgQnJhbmNoVGVzdDMyIGluIG1vc3QgY2FzZXMgd2hlcmUgeW91IHVzZSBhbiBpbW1lZGlh
dGUuCiBCcmFuY2hUZXN0NjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1w
LCBUbXAKICAgICBSZXNDb25kLCBUbXAsIEltbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMTkyMDM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC00MTAsNyArNDEwLDcgQEAgZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZv
cm1zLCBjb2x1bQogICAgIGVuZAogCiAgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2lu
ZHMubGVuZ3RoCi0gICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAg
ICByYWlzZSAiRGlkIG5vdCByZWR1Y2UgdG8gb25lIGZvcm06ICN7Zm9ybXMuaW5zcGVjdH0iIHVu
bGVzcyBmb3Jtcy5sZW5ndGggPT0gMQogICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KICAgICAg
ICAgcmV0dXJuCiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
NzQsNyArMzQ3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QK
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAg
ICAgICAgaW50MzJfdCBkaXZpc29yID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAg
ICAgICAgIGlmIChkaXZpc29yID4gMSAmJiBoYXNPbmVCaXRTZXQoZGl2aXNvcikpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb2dhcml0aG0gPSBXVEY6OmZhc3RMb2cyKGRpdmlzb3IpOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvZ2FyaXRobSA9IFdURjo6ZmFzdExvZzIoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGRpdmlzb3IpKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgZGl2aWRl
bmRHUFIgPSBvcDEuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU4LDEzICsxNDU4LDEzIEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICAKICAgICBzd2l0Y2gg
KGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoaXNTaWduZWQo
dHlwZSkpCisgICAgICAgIGlmIChKU0M6OmlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9h
ZDhTaWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUp
LCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgoQmFzZUlu
ZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKKyAgICAg
ICAgaWYgKEpTQzo6aXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkMTZTaWduZWRFeHRl
bmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXls
b2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChzY3JhdGNo
LCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKQEAgLTE1OTYsNyArMTU5Niw3
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICBp
ZiAoaXNDbGFtcGVkKHR5cGUpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKLSAgICAgICAgQVNTRVJUKCFpc1NpZ25lZCh0eXBlKSk7CisgICAgICAgIEFTU0VSVCgh
SlNDOjppc1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAg
SnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVk
SW1tMzIoMHhmZikpOwogICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvV1RGL3d0
Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsMTQgQEAgaW5saW5l
IHVuc2lnbmVkIGZhc3RMb2cyKHVuc2lnbmVkIGkpCiAgICAgcmV0dXJuIGxvZzI7CiB9CiAKK2lu
bGluZSB1bnNpZ25lZCBmYXN0TG9nMih1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICB1bnNpZ25lZCBs
b3cgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOworICAgIGlmIChsb3cpCisgICAgICAg
IHJldHVybiBmYXN0TG9nMihsb3cpOworICAgIHJldHVybiBmYXN0TG9nMihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odmFsdWUgPj4gMzIpKSArIDMyOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IGlubGluZSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+
Ojp2YWx1ZSwgVD46OnR5cGUgc2FmZUZQRGl2aXNpb24oVCB1LCBUIHYpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264842</attachid>
            <date>2015-11-04 20:28:09 -0800</date>
            <delta_ts>2015-11-04 21:49:27 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76534</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAg
ICAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAg
cmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVF
cXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGli
bGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBaZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNl
IGJ1aWxkcy4KICAgICAgICAgfQogICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0
aW9uIGZsaXAoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICByZXR1cm4gY29uZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAg
IHJldHVybiBCZWxvdzsKKyAgICAgICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICBy
ZXR1cm4gQmVsb3dPckVxdWFsOworICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0
dXJuIEFib3ZlOworICAgICAgICBjYXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVy
biBBYm92ZU9yRXF1YWw7CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICBy
ZXR1cm4gTGVzc1RoYW47CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAg
ICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDsKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAg
ICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1
YWw6CisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVx
dWFsOworICAgIH0KKworICAgIC8vIFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChj
b25kLCB2YWx1ZSwgdmFsdWUpCisgICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAg
ICAgYnJhbmNoMzIoY29uZCwgc2lnbkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAg
c3RhdGljIGJvb2wgaXNTaWduZWQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2Ug
Tm90RXF1YWw6CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRl
clRoYW5PckVxdWFsOgorICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NU
aGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1
ZSBpZiB0aGlzOgorICAgIC8vICAgICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAv
LyBJcyB0aGUgc2FtZSBhcyB0aGlzOgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0
OCh2YWx1ZSksIHplcm9FeHQ4KHZhbHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNl
IEFib3ZlOgorICAgICAgICBjYXNlIEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoK
KyAgICAgICAgY2FzZSBCZWxvd09yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KICNlbmRpZgogCiAgICAgLy8gUGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlv
bnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzQsNiArMTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7
CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAg
Ly8gSW52ZXJ0IGEgcmVsYXRpb25hbCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBi
ZWNvbWVzID49LCBldGMuCiAgICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDYgKzU3LDE3IEBAIHVuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQogCiB9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKIAorQ2hlY2tTcGVjaWFsOjpLZXk6OktleShjb25zdCBJbnN0JiBpbnN0
KQoreworICAgIG1fb3Bjb2RlID0gaW5zdC5vcGNvZGU7CisgICAgbV9udW1BcmdzID0gaW5zdC5h
cmdzLnNpemUoKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3Ms
ICIpIik7Cit9CisKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKICAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQogICAgICwg
bV9udW1DaGVja0FyZ3MobnVtQXJncykKQEAgLTY0LDYgKzc1LDExIEBAIENoZWNrU3BlY2lhbDo6
Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG8KICAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUp
KTsKIH0KIAorQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoY29uc3QgQ2hlY2tTcGVjaWFsOjpL
ZXkmIGtleSkKKyAgICA6IENoZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCkp
Cit7Cit9CisKIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMTkyMDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKICNpbmNsdWRl
ICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBJbnN0
OworfQorCiAvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5j
aCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKIC8vIG91dC1v
Zi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFz
b24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKIC8vIHdoaWNoIGJyYW5jaCBvcGNvZGUg
d2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3Zl
cmxvYWQgd2Ugd2FudC4gSXQKQEAgLTQ2LDcgKzUxLDY1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCiBjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFs
IHsKIHB1YmxpYzoKKyAgICAvLyBTdXBwb3J0IGZvciBoYXNoIGNvbnNpbmcgdGhlc2UgdGhpbmdz
LgorICAgIGNsYXNzIEtleSB7CisgICAgcHVibGljOgorICAgICAgICBLZXkoKQorICAgICAgICAg
ICAgOiBtX29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICAgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAgICAgLCBtX251bUFyZ3MobnVtQXJncykKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgZXhwbGljaXQgS2V5KGNvbnN0IEFpcjo6SW5zdCYgaW5zdCk7CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX29wY29kZSA9PSBvdGhlci5tX29wY29kZQorICAgICAgICAgICAgICAgICYm
IG1fbnVtQXJncyA9PSBvdGhlci5tX251bUFyZ3M7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEtleSgpOyB9CisKKyAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKyAg
ICAgICAgdW5zaWduZWQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJnczsgfQorCisg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgICAgICBLZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICAgICAgOiBtX29wY29kZShB
aXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnRoaXMgPT0gS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBTZXJpb3VzbHksIHdlIGRvbid0IG5lZWQgdG8gYmUgc21h
cnQgaGVyZS4gSXQganVzdCBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgICAgIHJldHVybiBtX29w
Y29kZSArIG1fbnVtQXJnczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBBaXI6Ok9wY29kZSBtX29wY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1BcmdzOwor
ICAgIH07CisgICAgCiAgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1B
cmdzKTsKKyAgICBDaGVja1NwZWNpYWwoY29uc3QgS2V5JiBrZXkpOwogICAgIH5DaGVja1NwZWNp
YWwoKTsKIAogcHJvdGVjdGVkOgpAQCAtNzAsOCArMTMzLDI5IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwogCitzdHJ1Y3QgQ2hlY2tTcGVjaWFsS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkg
eyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoZWNr
U3BlY2lhbDo6S2V5JiBhLCBjb25zdCBDaGVja1NwZWNpYWw6OktleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAg
IHR5cGVkZWYgSlNDOjpCMzo6Q2hlY2tTcGVjaWFsS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAgIC8vIEkgZG9uJ3Qgd2FudCB0byB0
aGluayBhYm91dCB0aGlzIHZlcnkgaGFyZCwgaXQncyBub3Qgd29ydGggaXQuIEknbSBhIGJlIGNv
bnNlcnZhdGl2ZS4KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CiAKICNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDE4ICs4Miw3NCBAQCBWYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jCiAg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgXiBvdGhl
ci0+YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1
ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHByb2MuYWRk
PENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPT0gb3RoZXItPmFzSW50MzIoKSk7Cisg
ICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVl
ID09IG90aGVyLT5hc0ludDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpub3RFcXVh
bENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUg
Q29uc3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAg
ICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAhPSBvdGhlci0+
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0
MzJWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAg
cmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVHJpU3Rh
dGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QK
K3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVyLT5hc0ludDMyKCkpOwor
fQorCitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8PSBvdGhlci0+YXNJ
bnQzMigpKTsKK30KKworVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUg
Pj0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YWJvdmVD
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKHN0
YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhl
ci0+YXNJbnQzMigpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YmVsb3dDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19j
YXN0PHVpbnQzMl90PihtX3ZhbHVlKSA8IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJ
bnQzMigpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1fdmFsdWUpID49IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJ
bnQzMigpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1fdmFsdWUpIDw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJ
bnQzMigpKSk7CiB9CiAKIHZvaWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXIm
IGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0
NywxNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0WG9y
Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBW
YWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFZhbHVlKiBub3RFcXVhbENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0Vx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBn
cmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRy
aVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBU
cmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRh
KENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjAz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDE4ICs4Miw3NCBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRYb3JD
b25zdGFudChQcm9jCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgXiBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6
ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0
YXRlIENvbnN0NjRWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPT0gb3RoZXIt
PmFzSW50NjQoKSk7CisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0
cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2
NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBj
b25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSAhPSBvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50NjQoKSk7Cit9CisK
K1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQ2NCgp
KTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVy
LT5hc0ludDY0KCkpOworfQorCitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Omxlc3NFcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQor
ICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1
ZSA8PSBvdGhlci0+YXNJbnQ2NCgpKTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVh
dGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0
NjRWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFv
dGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0
dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1
ZTo6YmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJv
dmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJp
U3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpID49IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YmVs
b3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJp
U3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpIDw9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7CiB9CiAKIHZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0
YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0NywxNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJp
dE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAg
ICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBWYWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBub3RFcXVhbENvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0
ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24g
MTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE4ICs2MSw0NiBAQCBWYWx1ZSogQ29uc3REb3VibGVW
YWx1ZTo6c3ViQ29uc3RhbnQoUHJvCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFs
dWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1WYWx1ZSog
Q29uc3REb3VibGVWYWx1ZTo6ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBv
dGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmln
aW4oKSwgbV92YWx1ZSA9PSBvdGhlci0+YXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0RvdWJs
ZSgpKTsKIH0KIAotVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdERvdWJsZVZh
bHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgIT0gb3RoZXItPmFzRG91Ymxl
KCkpOworICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUo
bV92YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICgh
b3RoZXItPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICBy
ZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8IG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKworVHJpU3Rh
dGUgQ29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzRG91Ymxl
KCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDw9
IG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKworVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXIt
Pmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4g
dHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKIHZvaWQgQ29uc3RE
b3VibGVWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTMgQEAgcHVi
bGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMyX3Qgb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1
ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRl
clRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRl
IGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJp
U3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgQWlyOwogCiBuYW1lc3BhY2UgewogCitjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKwogY2xhc3MgTG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKQEAgLTg2LDYgKzg4LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICAvLyBSZXNldCBz
b21lIHN0YXRlLgogICAgICAgICAgICAgaW5zdHMucmVzaXplKDApOworCisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyBCbG9jayAiLCAq
YmxvY2ssICI6XG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9j
a3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdo
YXQgYWxsb3dzIHVzCiAgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVs
eS4KQEAgLTk1LDExICsxMDAsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsb2Nr
ZWQuY29udGFpbnMoY3VycmVudFZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG93ZXJp
bmcgIiwgZGVlcER1bXAoY3VycmVudFZhbHVlKSwgIjpcbiIpOwogICAgICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgKnRoaXMpOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAoY3VycmVudFZhbHVlKSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzLmxhc3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0
aW9ucy4gaW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNz
CkBAIC0xNjgsOCArMTc5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCF0bXApIHsKICAgICAg
ICAgICAgIHdoaWxlIChzaG91bGRDb3B5UHJvcGFnYXRlKHZhbHVlKSkKICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1w
KGlzSW50KHZhbHVlLT50eXBlKCkpID8gQXJnOjpHUCA6IEFyZzo6RlApOwotICAgICAgICAgICAg
dmFsdWVUb1RtcFt2YWx1ZV0gPSB0bXA7CisgICAgICAgICAgICBUbXAmIHJlYWxUbXAgPSB2YWx1
ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgICAgIGlmICghcmVhbFRtcCkKKyAgICAgICAgICAgICAg
ICByZWFsVG1wID0gY29kZS5uZXdUbXAoQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkp
KTsKKyAgICAgICAgICAgIHRtcCA9IHJlYWxUbXA7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHRtcDsKICAgICB9CkBAIC0yNTMsOSArMjY2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIHZhbHVlKTsKICAgICB9CiAKLSAgICBB
cmcgbG9hZEFkZHIoVmFsdWUqIGxvYWRWYWx1ZSkKKyAgICBBcmcgbG9hZEFkZHIoVmFsdWUqIGxv
YWRWYWx1ZSwgQjM6Ok9wY29kZSBsb2FkT3Bjb2RlKQogICAgIHsKLSAgICAgICAgaWYgKGxvYWRW
YWx1ZS0+b3Bjb2RlKCkgIT0gTG9hZCkKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bjb2RlKCkg
IT0gbG9hZE9wY29kZSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKGxvYWRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CkBAIC0y
NjQsNiArMjc3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVlKTsK
ICAgICB9CiAKKyAgICBBcmcgbG9hZEFkZHIoVmFsdWUqIGxvYWRWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBsb2FkQWRkcihsb2FkVmFsdWUsIExvYWQpOworICAgIH0KKwogICAgIEFyZyBp
bW0oVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5yZXByZXNlbnRhYmxl
QXM8aW50MzJfdD4oKSkKQEAgLTYyMiw2ICs2NDAsMzU0IEBAIHB1YmxpYzoKICAgICB9OwogICAg
IEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CiAKKyAgICAvLyBDcmVhdGUgYW4gSW5z
dCB0byBkbyB0aGUgY29tcGFyaXNvbiBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHZhbHVlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVGdW5jdG9yLCB0eXBlbmFtZSBUZXN0RnVuY3Rvciwg
dHlwZW5hbWUgQ29tcGFyZURvdWJsZUZ1bmN0b3I+CisgICAgSW5zdCBjcmVhdGVHZW5lcmljQ29t
cGFyZSgKKyAgICAgICAgVmFsdWUqIHZhbHVlLAorICAgICAgICBjb25zdCBDb21wYXJlRnVuY3Rv
ciYgY29tcGFyZSwgLy8gU2lnbmF0dXJlOiAoQXJnOjpXaWR0aCwgQXJnIHJlbENvbmQsIEFyZywg
QXJnKSAtPiBJbnN0CisgICAgICAgIGNvbnN0IFRlc3RGdW5jdG9yJiB0ZXN0LCAvLyBTaWduYXR1
cmU6IChBcmc6OldpZHRoLCBBcmcgcmVzQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKKyAgICAgICAg
Y29uc3QgQ29tcGFyZURvdWJsZUZ1bmN0b3ImIGNvbXBhcmVEb3VibGUsIC8vIFNpZ25hdHVyZTog
KEFyZyBkb3VibGVDb25kLCBBcmcsIEFyZykgLT4gSW5zdAorICAgICAgICBib29sIGludmVydGVk
ID0gZmFsc2UpCisgICAgeworICAgICAgICAvLyBDaGV3IHRocm91Z2ggYW55IG5lZ2F0aW9ucy4g
SXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGlzIHRvIGJlIGEgbG9vcCwgYnV0IHdl
IGxpa2UKKyAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBydWxlIHRoYXQgdGhlIGluc3RydWN0aW9u
IHNlbGVjdG9yIHJlZHVjZXMgc3RyZW5ndGggd2hlbmV2ZXIgaXQgZG9lc24ndAorICAgICAgICAv
LyByZXF1aXJlIG1ha2luZyB0aGluZ3MgbW9yZSBjb21wbGljYXRlZC4KKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHZhbHVlKSAmJiB2YWx1ZSAhPSBj
dXJyZW50VmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHNo
b3VsZEludmVydCA9CisgICAgICAgICAgICAgICAgKHZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3Ig
JiYgdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgxKSAmJiB2YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNC
b29sKCkpCisgICAgICAgICAgICAgICAgfHwgKHZhbHVlLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2
YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSW52ZXJ0
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hp
bGQoMCk7CisgICAgICAgICAgICBpbnZlcnRlZCA9ICFpbnZlcnRlZDsKKyAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY3JlYXRlUmVs
Q29uZCA9IFsmXSAoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiByZWxhdGlvbmFsQ29uZGl0aW9uLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pIHsKKyAgICAgICAgICAgIEFyZyByZWxDb25k
ID0gQXJnOjpyZWxDb25kKHJlbGF0aW9uYWxDb25kaXRpb24pLmludmVydGVkKGludmVydGVkKTsK
KyAgICAgICAgICAgIEFyZyBkb3VibGVDb25kID0gQXJnOjpkb3VibGVDb25kKGRvdWJsZUNvbmRp
dGlvbikuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1
ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7
CisKKyAgICAgICAgICAgIGlmIChpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBBcmcgbGVmdEltbSA9IGltbShsZWZ0KTsKKyAgICAgICAgICAgICAgICBB
cmcgcmlnaHRJbW0gPSBpbW0ocmlnaHQpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlDb21w
YXJlID0gWyZdIChBcmc6OldpZHRoIHdpZHRoLCBBcmcgbGVmdCwgQXJnIHJpZ2h0KSAtPiBJbnN0
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gY29tcGFyZSh3aWR0aCwg
cmVsQ29uZCwgbGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gY29tcGFyZSh3aWR0
aCwgcmVsQ29uZC5mbGlwcGVkKCksIHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7Cisg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gdHJ5Q29tcGFyZUxvYWRJ
bW0gPSBbJl0gKAorICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBCMzo6T3Bj
b2RlIGxvYWRPcGNvZGUsIEFyZzo6U2lnbmVkbmVzcyBzaWduZWRuZXNzKSAtPiBJbnN0IHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0SW1tICYmIHJpZ2h0SW1tLmlzUmVwcmVzZW50YWJs
ZUFzKHdpZHRoLCBzaWduZWRuZXNzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbG9hZEFkZHIobGVmdCwgbG9hZE9wY29kZSks
IHJpZ2h0SW1tKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFs
KGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVmdEltbS5pc1JlcHJlc2VudGFibGVBcyh3aWR0aCwg
c2lnbmVkbmVzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIGxlZnRJbW0sIGxvYWRBZGRyKHJpZ2h0LCBsb2FkT3Bjb2RlKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBG
aXJzdCBoYW5kbGUgY29tcGFyZSdzIHRoYXQgaW52b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0
eXBlIHN5c3RlbSBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBp
bXBvcnRhbnQuIEZvciBleGFtcGxlLCB3ZSB3YW50IHRoaXMgdG8gYmUgYSBzaW5nbGUgaW5zdHJ1
Y3Rpb246CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgQDEgPSBM
b2FkOFMoLi4uKQorICAgICAgICAgICAgICAgIC8vICAgICBAMiA9IENvbnN0MzIoLi4uKQorICAg
ICAgICAgICAgICAgIC8vICAgICBAMyA9IExlc3NUaGFuKEAxLCBAMikKKyAgICAgICAgICAgICAg
ICAvLyAgICAgQnJhbmNoKEAzKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChyZWxDb25kLmlzU2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFMsIEFyZzo6U2ln
bmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlz
VW5zaWduZWRDb25kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0g
dHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4WiwgQXJnOjpVbnNpZ25lZCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzU2lnbmVkQ29uZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lk
dGgxNiwgTG9hZDE2UywgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZENvbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExv
YWQxNlosIEFyZzo6VW5zaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxl
IGNvbXBhcmUncyB0aGF0IGludm9sdmUgYSBsb2FkIGFuZCBhbiBpbW1lZGlhdGUuCisKKyAgICAg
ICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+
Y2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5
Q29tcGFyZUxvYWRJbW0od2lkdGgsIExvYWQsIEFyZzo6U2lnbmVkKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29t
cGFyZSdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuIFdlIGRvIHRoaXMgZmlyc3QgYmVjYXVzZSB0aGUg
d2F5IHdlIGRvCisgICAgICAgICAgICAgICAgLy8gaXQgcGlucyBhIHZhbHVlIHRvIGEgdG1wLiBJ
dCdzIGJldHRlciB0byBwaW4gYW4gaW1tZWRpYXRlIHRvIGEgdG1wIHRoYW4gdG8gcGluIGEKKyAg
ICAgICAgICAgICAgICAvLyBsb2FkIHRvIGEgdG1wLgorCisgICAgICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbG9hZEFkZHIobGVmdCksIHRtcChyaWdodCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRo
LCB0bXAobGVmdCksIGxvYWRBZGRyKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFy
ZSdzIHRoYXQgaW52b2x2ZSBhbiBpbW1lZGlhdGUgYW5kIGEgdG1wLgorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYmIGxlZnRJbW0uaXNSZXByZXNlbnRhYmxl
QXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlDb21wYXJlKHdpZHRoLCBsZWZ0SW1tLCB0bXAocmlnaHQpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChyaWdodEltbSAmJiByaWdodEltbS5pc1JlcHJlc2VudGFi
bGVBczxpbnQzMl90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIHRtcChsZWZ0KSwgcmlnaHRJbW0pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRtcHMuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRyeUNvbXBhcmUod2lkdGgsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERvdWJsZSBjb21wYXJpc29ucyBjYW4n
dCByZWFsbHkgZG8gYW55dGhpbmcgc21hcnQuCisgICAgICAgICAgICByZXR1cm4gY29tcGFyZURv
dWJsZShkb3VibGVDb25kLCB0bXAobGVmdCksIHRtcChyaWdodCkpOworICAgICAgICB9OworCisg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBl
KCkpOworICAgICAgICBBcmcgcmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybykuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAKKyAgICAgICAgYXV0byBhdHRl
bXB0RnVzZWQgPSBbJl0gKCkgLT4gSW5zdCB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5v
cGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgICAgIGNhc2UgRXF1YWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgY2FzZSBMZXNz
VGhhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbik7CisgICAgICAgICAg
ICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuKTsKKyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpOworICAgICAgICAgICAgY2FzZSBHcmVh
dGVyRXF1YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICAgICAgICAgIC8v
IFdlIHVzZSBhIGJvZ3VzIGRvdWJsZSBjb25kaXRpb24gYmVjYXVzZSB0aGVzZSBpbnRlZ2VyIGNv
bXBhcmlzb25zIHdvbid0IGdvdCBkb3duIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBwYXRoIGFu
eXdheS4KKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNl
IEJlbG93OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIGNh
c2UgQWJvdmVFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOwor
ICAgICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEJpdEFuZDogeworICAgICAgICAgICAgICAg
IFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBy
aWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIEFyZyBsZWZ0SW1tID0g
aW1tKGxlZnQpOworICAgICAgICAgICAgICAgIEFyZyByaWdodEltbSA9IGltbShyaWdodCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byB0cnlUZXN0ID0gWyZdIChBcmc6
OldpZHRoIHdpZHRoLCBBcmcgbGVmdCwgQXJnIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgbGVmdCwgcmln
aHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgcmlnaHQsIGxl
ZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICAgICAgYXV0byB0cnlUZXN0TG9hZEltbSA9IFsmXSAoQXJnOjpXaWR0aCB3aWR0aCwgQjM6Ok9w
Y29kZSBsb2FkT3Bjb2RlKSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0
SW1tICYmIHJpZ2h0SW1tLmlzUmVwcmVzZW50YWJsZUFzKHdpZHRoLCBBcmc6OlVuc2lnbmVkKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0
aCwgbG9hZEFkZHIobGVmdCwgbG9hZE9wY29kZSksIHJpZ2h0SW1tKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVm
dEltbS5pc1JlcHJlc2VudGFibGVBcyh3aWR0aCwgQXJnOjpVbnNpZ25lZCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIGxlZnRJbW0s
IGxvYWRBZGRyKHJpZ2h0LCBsb2FkT3Bjb2RlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgdGVzdCdzIHRoYXQgaW52
b2x2ZSBmZXdlciBiaXRzIHRoYW4gQjMncyB0eXBlIHN5c3RlbSBzdXBwb3J0cy4KKworICAgICAg
ICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBM
b2FkOFopKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAg
ICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4
UykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlop
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIC8v
IE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4g
Tm90ZSB0aGF0IGltbWVkaWF0ZXMgYXJlCisgICAgICAgICAgICAgICAgLy8gMzItYml0LCBhbmQg
d2Ugd2FudCB6ZXJvLWV4dGVuc2lvbi4gSGVuY2UsIHRoZSBpbW1lZGlhdGUgZm9ybSBpcyBjb21w
aWxlZCBhcyBhCisgICAgICAgICAgICAgICAgLy8gMzItYml0IHRlc3QuIE5vdGUgdGhhdCB0aGlz
IHNwaXRzIG9uIHRoZSBncmF2ZSBvZiBpbmZlcmlvciBlbmRpYW5zLCBzdWNoIGFzIHRoZQorICAg
ICAgICAgICAgICAgIC8vIGJpZyBvbmUuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDMyLCBMb2FkKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIC8v
IE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhIGxvYWQuCisKKyAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCkt
PnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0
aCwgbG9hZEFkZHIobGVmdCksIHRtcChyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRy
eVRlc3Qod2lkdGgsIHRtcChsZWZ0KSwgbG9hZEFkZHIocmlnaHQpKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCisKKyAgICAg
ICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLmlzUmVwcmVzZW50YWJsZUFzPHVpbnQz
Ml90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qo
QXJnOjpXaWR0aDMyLCBsZWZ0SW1tLCB0bXAocmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHJpZ2h0SW1tICYmIHJpZ2h0SW1tLmlzUmVwcmVzZW50YWJsZUFzPHVpbnQzMl90PigpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3QoQXJnOjpXaWR0
aDMyLCB0bXAobGVmdCksIHJpZ2h0SW1tKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRmluYWxs
eSwganVzdCBkbyB0bXAncy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5VGVzdCh3aWR0aCwg
dG1wKGxlZnQpLCB0bXAocmlnaHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbCh2YWx1ZSkgfHwgdmFsdWUgPT0gY3Vy
cmVudFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSBhdHRlbXB0RnVzZWQo
KSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgQXJnOjpp
bW0oLTEpKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAv
LyBTb21ldGltZXMgdGhpcyBpcyB0aGUgb25seSBmb3JtIG9mIHRlc3QgYXZhaWxhYmxlLiBXZSBw
cmVmZXIgbm90IHRvIHVzZSB0aGlzIGJlY2F1c2UKKyAgICAgICAgLy8gaXQncyBsZXNzIGNhbm9u
aWNhbC4KKyAgICAgICAgcmV0dXJuIHRlc3Qod2lkdGgsIHJlc0NvbmQsIHRtcCh2YWx1ZSksIHRt
cCh2YWx1ZSkpOworICAgIH0KKworICAgIEluc3QgY3JlYXRlQnJhbmNoKFZhbHVlKiB2YWx1ZSwg
Ym9vbCBpbnZlcnRlZCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUdlbmVy
aWNDb21wYXJlKAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBbdGhpc10gKEFyZzo6
V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVsQ29uZCwgY29uc3QgQXJnJiBsZWZ0LCBjb25zdCBB
cmcmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKEJyYW5jaDgsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0Lmtp
bmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g4LCBjdXJy
ZW50VmFsdWUsIHJlbENvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lk
dGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaDMyLCBBcmc6
OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoQnJhbmNoMzIsIGN1cnJlbnRWYWx1ZSwgcmVsQ29uZCwgbGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZv
cm0oQnJhbmNoNjQsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g2NCwgY3VycmVudFZhbHVl
LCByZWxDb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlz
XSAoQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLCBjb25zdCBBcmcmIGxlZnQs
IGNvbnN0IEFyZyYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lk
dGgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVzdDgsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5k
KCksIHJpZ2h0LmtpbmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChC
cmFuY2hUZXN0OCwgY3VycmVudFZhbHVlLCByZXNDb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6Oldp
ZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShCcmFuY2hUZXN0MzIsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIGN1cnJl
bnRWYWx1ZSwgcmVzQ29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVzdDY0LCBBcmc6OlJlc0NvbmQsIGxl
ZnQua2luZCgpLCByaWdodC5raW5kKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoQnJhbmNoVGVzdDY0LCBjdXJyZW50VmFsdWUsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdIChBcmcgZG91YmxlQ29uZCwgQXJnIGxl
ZnQsIEFyZyByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KEJyYW5jaERvdWJsZSwgQXJnOjpEb3VibGVDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoRG91YmxlLCBjdXJyZW50
VmFsdWUsIGRvdWJsZUNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGludmVydGVkKTsKKyAgICB9CisK
KyAgICBJbnN0IGNyZWF0ZUNvbXBhcmUoVmFsdWUqIHZhbHVlLCBib29sIGludmVydGVkID0gZmFs
c2UpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlR2VuZXJpY0NvbXBhcmUoCisgICAgICAg
ICAgICB2YWx1ZSwKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnOjpXaWR0aCB3aWR0aCwgY29uc3Qg
QXJnJiByZWxDb25kLCBjb25zdCBBcmcmIGxlZnQsIGNvbnN0IEFyZyYgcmlnaHQpIC0+IEluc3Qg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpX
aWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTMyLCBB
cmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KENvbXBhcmUzMiwgY3VycmVudFZhbHVlLCBy
ZWxDb25kLCBsZWZ0LCByaWdodCwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0Ogor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTY0LCBBcmc6OlJlbENv
bmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KENvbXBhcmU2NCwgY3VycmVudFZhbHVlLCByZWxDb25kLCBs
ZWZ0LCByaWdodCwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBbdGhpc10gKEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVzQ29uZCwgY29uc3QgQXJn
JiBsZWZ0LCBjb25zdCBBcmcmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHdpZHRoKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKFRlc3QzMiwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwg
cmlnaHQua2luZCgpLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdChUZXN0MzIsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwgbGVmdCwgcmlnaHQsIHRtcChjdXJy
ZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKFRlc3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpLCBB
cmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdChUZXN0NjQsIGN1
cnJlbnRWYWx1ZSwgcmVzQ29uZCwgbGVmdCwgcmlnaHQsIHRtcChjdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdIChBcmcsIEFyZywgQXJnKSAtPiBJbnN0IHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDkwMworICAg
ICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
aW52ZXJ0ZWQpOworICAgIH0KKwogICAgIC8vIEJlbG93IGlzIHRoZSBjb2RlIGZvciBhIGxvd2Vy
aW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNzICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0
Y2hlci4KICAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNz
aW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCiAgICAg
Ly8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNv
ZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdpbmFsCkBAIC04NjgsNiArMTIzNCw2NiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGJvb2wgdHJ5RXF1
YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1
cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRy
eU5vdEVxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29t
cGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ym9vbCB0cnlMZXNzVGhhbigpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNy
ZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGJvb2wgdHJ5R3JlYXRlclRoYW4oKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgp
LmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUxlc3NFcXVhbCgpCisgICAgeworICAgICAgICBpbnN0
cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5R3JlYXRlckVxdWFsKCkKKyAgICB7Cisg
ICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlBYm92ZSgpCisgICAg
eworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVl
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QmVsb3coKQor
ICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRW
YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUFib3Zl
RXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJl
KGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29s
IHRyeUJlbG93RXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVh
dGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
ICAgICBQYXRjaHBvaW50U3BlY2lhbCogcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07CiAg
ICAgYm9vbCB0cnlQYXRjaHBvaW50KCkKICAgICB7CkBAIC04ODUsMzQgKzEzMTEsMTkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDaGVja1NwZWNpYWwqIGNo
ZWNrQnJhbmNoVGVzdDMyU3BlY2lhbCB7IG51bGxwdHIgfTsKLSAgICBDaGVja1NwZWNpYWwqIGNo
ZWNrQnJhbmNoVGVzdDY0U3BlY2lhbCB7IG51bGxwdHIgfTsKKyAgICBIYXNoTWFwPENoZWNrU3Bl
Y2lhbDo6S2V5LCBDaGVja1NwZWNpYWwqPiBjaGVja1NwZWNpYWxzOwogICAgIGJvb2wgdHJ5Q2hl
Y2soVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCFpc0ludCh2YWx1ZS0+dHlwZSgp
KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBkb3VibGUgYnJhbmNoZXMuCi0g
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NzI3Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgSW5zdCBi
cmFuY2ggPSBjcmVhdGVCcmFuY2godmFsdWUpOwogCi0gICAgICAgIENoZWNrU3BlY2lhbCogc3Bl
Y2lhbDsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50
MzI6Ci0gICAgICAgICAgICBzcGVjaWFsID0gZW5zdXJlU3BlY2lhbChjaGVja0JyYW5jaFRlc3Qz
MlNwZWNpYWwsIEJyYW5jaFRlc3QzMiwgMyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKGNoZWNrQnJh
bmNoVGVzdDY0U3BlY2lhbCwgQnJhbmNoVGVzdDY0LCAzKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIENoZWNrU3BlY2lhbDo6
S2V5IGtleShicmFuY2gpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGNoZWNrU3BlY2lhbHMuYWRk
KGtleSwgbnVsbHB0cik7CisgICAgICAgIFNwZWNpYWwqIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFs
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIGtleSk7CiAKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hl
Y2tWYWx1ZSA9IGN1cnJlbnRWYWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKIAotICAgICAgICBJbnN0
IGluc3QoCi0gICAgICAgICAgICBQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNp
YWwpLAotICAgICAgICAgICAgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwg
dG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVj
a1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
VmVjdG9yKGJyYW5jaC5hcmdzKTsKIAogICAgICAgICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tW
YWx1ZSwgMSk7CiAKQEAgLTkzNyw0NiArMTM0OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdHJ5
QnJhbmNoKFZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
YnJhbmNoIGZ1c2lvbiBieSBkZWxlZ2F0aW5nIHRvIGEgcGF0dGVybiBtYXRjaGVyIGZvciBjb21w
YXJpc29ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDcyMQotCi0gICAgICAgIC8vIEluIEIzIGl0J3MgcG9zc2libGUgdG8gYnJhbmNoIG9u
IGFueSB2YWx1ZS4gVGhlIHNlbWFudGljcyBvZjoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gICAg
IEJyYW5jaCh2YWx1ZSkKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQXJlIGd1YXJhbnRlZWQgdG8g
YmUgaWRlbnRpY2FsIHRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgQnJhbmNoKE5vdEVx
dWFsKHZhbHVlLCAwKSkKLQotICAgICAgICBpZiAoIWlzSW50KHZhbHVlLT50eXBlKCkpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRvdWJsZSBicmFuY2hlcy4KLSAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3MjcKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFpcjo6T3Bjb2Rl
IG9wY29kZTsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2Ug
SW50MzI6Ci0gICAgICAgICAgICBvcGNvZGUgPSBCcmFuY2hUZXN0MzI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIG9wY29kZSA9IEJyYW5jaFRl
c3Q2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQXJnIHJlc0NvbmQgPSBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8pOwotCi0gICAgICAgIEFyZyBhZGRyID0gbG9hZEFkZHIodmFsdWUpOwotICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCByZXNDb25kLmtpbmQoKSwgYWRkci5raW5kKCksIEFy
Zzo6SW1tKSkgewotICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOwotICAgICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgYWRkciwgQXJnOjppbW0oLTEpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVz
Q29uZCwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFw
cGVuZChjcmVhdGVCcmFuY2godmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVy
bnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRj
aGVyLnBhdHRlcm5zCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1
LDE4IEBAIENvbnN0NjQgPSBDb25zdDY0KCkKIFN0YWNrU2xvdCA9IFN0YWNrU2xvdCgpCiBGcmFt
ZVBvaW50ZXIgPSBGcmFtZVBvaW50ZXIoKQogCisjIFRoZXNlIHBhdHRlcm5zIGRlbGVnYXRlIHRv
IHRoZSBjb21wYXJpc29uIG1hdGNoZXIuCitFcXVhbCA9IEVxdWFsKCkKK05vdEVxdWFsID0gTm90
RXF1YWwoKQorTGVzc1RoYW4gPSBMZXNzVGhhbigpCitHcmVhdGVyVGhhbiA9IEdyZWF0ZXJUaGFu
KCkKK0xlc3NFcXVhbCA9IExlc3NFcXVhbCgpCitHcmVhdGVyRXF1YWwgPSBHcmVhdGVyRXF1YWwo
KQorQWJvdmUgPSBBYm92ZSgpCitCZWxvdyA9IEJlbG93KCkKK0Fib3ZlRXF1YWwgPSBBYm92ZUVx
dWFsKCkKK0JlbG93RXF1YWwgPSBCZWxvd0VxdWFsKCkKKwogUGF0Y2hwb2ludCA9IFBhdGNocG9p
bnQoKQogQ2hlY2sgPSBDaGVjayh2YWx1ZSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw0NiBAQAogCiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitPcHRpb25hbDxPcGNvZGU+IGludmVydGVkQ29tcGFyZShPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEVxdWFsOgorICAgICAg
ICByZXR1cm4gTm90RXF1YWw7CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIEVx
dWFsOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgIHJldHVybiBHcmVhdGVyRXF1YWw7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAg
IGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAg
IHJldHVybiBMZXNzRXF1YWw7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIGNhc2UgTGVz
c0VxdWFsOgorICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gR3Jl
YXRlclRoYW47CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIGNhc2UgR3JlYXRlckVxdWFs
OgorICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47
CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIHJldHVy
biBCZWxvd0VxdWFsOworICAgIGNhc2UgQmVsb3c6CisgICAgICAgIHJldHVybiBBYm92ZUVxdWFs
OworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAgcmV0dXJuIEJlbG93OworICAgIGNhc2Ug
QmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEFib3ZlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBOdWxsb3B0OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
IG5hbWVzcGFjZSBXVEYgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBA
QAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzgsNyArMTgwLDcgQEAgZW51bSBPcGNvZGUg
OiBpbnQxNl90IHsKICAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCiAg
ICAgSnVtcCwKICAgICAKLSAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAg
ICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSBpbnRlZ2VyIHR5cGUuIEJy
YW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQogICAgIC8vIENvbnRyb2xWYWx1
ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vz
c29yLgogICAgIEJyYW5jaCwKIApAQCAtMjA1LDYgKzIwNyw4IEBAIGlubGluZSBib29sIGlzQ2hl
Y2tNYXRoKE9wY29kZSBvcGNvZGUpCiAgICAgfQogfQogCitPcHRpb25hbDxPcGNvZGU+IGludmVy
dGVkQ29tcGFyZShPcGNvZGUsIFR5cGUpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAog
bmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDM4IEBAIEJhc2ljQmxvY2sq
IFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitW
YWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgcmV0dXJu
IGFkZDxDb25zdDMyVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkp
OworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVybiBhZGQ8Q29uc3Q2NFZhbHVlPihPcmln
aW4oKSwgdmFsdWUpOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICByZXR1cm4gYWRkPENvbnN0
RG91YmxlVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitWYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29u
c3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUpCit7CisgICAgaW50MzJfdCB2YWx1ZSA9IDA7CisgICAg
c3dpdGNoICh0cmlTdGF0ZSkgeworICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKKyAgICAgICAgdmFs
dWUgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRydWVUcmlTdGF0ZToKKyAgICAgICAg
dmFsdWUgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1peGVkVHJpU3RhdGU6CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChJ
bnQzMiwgdmFsdWUpOworfQorCiB2b2lkIFByb2NlZHVyZTo6cmVzZXRWYWx1ZU93bmVycygpCiB7
CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsy
OCwxMyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzVHlwZS5oIgogI2lu
Y2x1ZGUgIlB1cmVOYU4uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVHJpU3RhdGUuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTMsNiArNTUs
MTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CiAKKyAgICBW
YWx1ZSogYWRkSW50Q29uc3RhbnQoVHlwZSwgaW50NjRfdCB2YWx1ZSk7CisKKyAgICAvLyBSZXR1
cm5zIG51bGwgZm9yIE1peGVkVHJpU3RhdGUuCisgICAgVmFsdWUqIGFkZEJvb2xDb25zdGFudChU
cmlTdGF0ZSk7CisKICAgICB2b2lkIHJlc2V0VmFsdWVPd25lcnMoKTsKICAgICB2b2lkIHJlc2V0
UmVhY2hhYmlsaXR5KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NDIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIG5hbWVzcGFjZSB7CiAKKy8v
IFRoZSBnb2FsIG9mIHRoaXMgcGhhc2UgaXMgdG86CisvLworLy8gLSBSZXBsYWNlIG9wZXJhdGlv
bnMgd2l0aCBsZXNzIGV4cGVuc2l2ZSB2YXJpYW50cy4gVGhpcyBpbmNsdWRlcyBjb25zdGFudCBm
b2xkaW5nIGFuZCBjbGFzc2ljCisvLyAgIHN0cmVuZ3RoIHJlZHVjdGlvbnMgbGlrZSB0dXJuaW5n
IE11bCh4LCAxIDw8IGspIGludG8gU2hsKHgsIGspLgorLy8KKy8vIC0gUmVhc3NvY2lhdGUgY29u
c3RhbnQgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIExvYWQoQWRkKHgsIGMpKSBpcyB0dXJuZWQg
aW50byBMb2FkKHgsIG9mZnNldCA9IGMpCisvLyAgIGFuZCBBZGQoQWRkKHgsIGMpLCBkKSBpcyB0
dXJuZWQgaW50byBBZGQoeCwgYyArIGQpLgorLy8KKy8vIC0gQ2Fub25pY2FsaXplIG9wZXJhdGlv
bnMuIFRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIGl0J3Mgbm90IGF0IGFsbCBvYnZpb3VzIHdo
aWNoIGtpbmQgb2YKKy8vICAgb3BlcmF0aW9uIGlzIGxlc3MgZXhwZW5zaXZlLCBidXQgaXQncyB1
c2VmdWwgZm9yIHN1YnNlcXVlbnQgcGhhc2VzIC0gcGFydGljdWxhcmx5IExvd2VyVG9BaXIgLQor
Ly8gICB0byBoYXZlIG9ubHkgb25lIHdheSBvZiByZXByZXNlbnRpbmcgdGhpbmdzLgorLy8KKy8v
IFRoaXMgcGhhc2UgcnVucyB0byBmaXhwb2ludC4gVGhlcmVmb3JlLCB0aGUgY2Fub25pY2FsaXph
dGlvbnMgbXVzdCBiZSBkZXNpZ25lZCB0byBiZSBtb25vdG9uaWMuCisvLyBGb3IgZXhhbXBsZSwg
aWYgd2UgaGFkIGEgY2Fub25pY2FsaXphdGlvbiB0aGF0IHNhaWQgdGhhdCBBZGQoeCwgLWMpIHNo
b3VsZCBiZSBTdWIoeCwgYykgYW5kCisvLyBhbm90aGVyIGNhbm9uaWNhbGl6YXRpb24gdGhhdCBz
YWlkIHRoYXQgU3ViKHgsIGQpIHNob3VsZCBiZSBBZGQoeCwgLWQpLCB0aGVuIHRoaXMgcGhhc2Ug
d291bGQgZW5kCisvLyB1cCBydW5uaW5nIGZvcmV2ZXIuIFdlIGRvbid0IHdhbnQgdGhhdC4KKy8v
CisvLyBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gcHJpb3JpdGl6ZSBjZXJ0YWluIGNhbm9uaWNhbCBm
b3JtcyBvdmVyIG90aGVycy4gTmFpdmVseSwgd2Ugd2FudCBzdHJlbmd0aAorLy8gcmVkdWN0aW9u
IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHZhbHVlcywgYW5kIHNvIGEgZm9ybSBpbnZvbHZpbmcg
ZmV3ZXIgdG90YWwgdmFsdWVzIGlzIG1vcmUKKy8vIGNhbm9uaWNhbC4gQnV0IHdlIG1pZ2h0IGJy
ZWFrIHRoaXMsIGZvciBleGFtcGxlIHdoZW4gcmVkdWNpbmcgc3RyZW5ndGggb2YgTXVsKHgsIDkp
LiBUaGlzIGNvdWxkIGJlCisvLyBiZXR0ZXIgd3JpdHRlbiBhcyBBZGQoU2hsKHgsIDMpLCB4KSwg
d2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHJlcHJlc2VudGFibGUgdXNpbmcgYSBzaW5nbGUKKy8v
IGluc3RydWN0aW9uIG9uIHg4Ni4KKy8vCisvLyBIZXJlIGFyZSBzb21lIG9mIHRoZSBydWxlcyB3
ZSBoYXZlOgorLy8KKy8vIENhbm9uaWNhbCBmb3JtIG9mIGxvZ2ljYWwgbm90OiBCaXRYb3IodmFs
dWUsIDEpLiBXZSBtYXkgaGF2ZSB0byBhdm9pZCB1c2luZyB0aGlzIGZvcm0gaWYgd2UgZG9uJ3QK
Ky8vIGtub3cgZm9yIHN1cmUgdGhhdCAndmFsdWUnIGlzIDAtb3ItMSAoaS5lLiByZXR1cm5zQm9v
bCkuIEluIHRoYXQgY2FzZSB3ZSBmYWxsIGJhY2sgb24KKy8vIEVxdWFsKHZhbHVlLCAwKS4KKy8v
CisvLyBDYW5vbmljYWwgZm9ybSBvZiBjb21tdXRhdGl2ZSBvcGVyYXRpb25zOiBpZiB0aGUgb3Bl
cmF0aW9uIGludm9sdmVzIGEgY29uc3RhbnQsIHRoZSBjb25zdGFudCBtdXN0CisvLyBjb21lIHNl
Y29uZC4gQWRkKHgsIGNvbnN0YW50KSBpcyBjYW5vbmljYWwsIHdoaWxlIEFkZChjb25zdGFudCwg
eCkgaXMgbm90LiBJZiB0aGVyZSBhcmUgbm8KKy8vIGNvbnN0YW50cyB0aGVuIHRoZSBjYW5vbmlj
YWwgZm9ybSBpbnZvbHZlcyB0aGUgbG93ZXItaW5kZXhlZCB2YWx1ZSBmaXJzdC4gR2l2ZW4gQWRk
KHgsIHkpLCBpdCdzCisvLyBjYW5vbmljYWwgaWYgeC0+aW5kZXgoKSA8PSB5LT5pbmRleCgpLgor
Citib29sIHZlcmJvc2UgPSBmYWxzZTsKKwogY2xhc3MgUmVkdWNlU3RyZW5ndGggewogcHVibGlj
OgogICAgIFJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKQEAgLTU0LDEwICs5MCwxNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBkbyB7CiAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IGZhbHNl
OwogCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2co
IlJlZHVjZSBzdHJlbmd0aCBJUiBiZWZvcmUgaXRlcmF0aW9uICMiLCArK2luZGV4LCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKG1fcHJvYyk7CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigp
KSB7CiAgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgICAgICAgICAgICAgIApA
QCAtMjU3LDE5ICsyOTksMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbXBhcmUsIDEpCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29tcGFyZQorICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CisgICAgICAgICAgICAgICAgaWYgKFZh
bHVlKiBpbnZlcnRlZENvbXBhcmUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aW52ZXJ0ZWRDb21wYXJl
KG1fcHJvYykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShpbnZl
cnRlZENvbXBhcmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZh
bHVlWCwgdmFsdWVYKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50Lgog
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7
Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHplcm9Db25zdGFudDsKLSAgICAgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKQotICAgICAgICAgICAgICAgICAgICB6ZXJvQ29u
c3RhbnQgPSBtX3Byb2MuYWRkPENvbnN0MzJWYWx1ZT4obV92YWx1ZS0+b3JpZ2luKCksIDApOwot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCkKLSAgICAg
ICAgICAgICAgICAgICAgemVyb0NvbnN0YW50ID0gbV9wcm9jLmFkZDxDb25zdDY0VmFsdWU+KG1f
dmFsdWUtPm9yaWdpbigpLCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+dHlwZSgpID09IERvdWJsZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHplcm9Db25zdGFudCA9IG1fcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1
ZT4obV92YWx1ZS0+b3JpZ2luKCksIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKHplcm9Db25zdGFudCk7CisgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZS0+dHlwZSgp
LCAwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTMzOCwx
NiArMzgwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRXF1YWw6CiAgICAgICAgICAgICBo
YW5kbGVDb21tdXRhdGl2aXR5KCk7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwo
RXF1YWwoeCwgMCksIDApCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5vdEVxdWFsKHgsIDAp
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYm
IG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDApCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0xpa2VaZXJvKCkpIHsKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogRXF1YWwoYm9vbCwgMCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9y
KGJvb2wsIDEpCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29s
KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkpIHsKICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIE5vdEVxdWFsLCBtX3Zh
bHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAg
ICBCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwg
bV92YWx1ZS0+b3JpZ2luKCksIDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9v
bCwgMSkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogYm9vbAogICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0lu
dDMyKDEpKSB7CkBAIC0zNTYsMTMgKzM5NywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBGSVhNRTogSGF2ZSBhIGNv
bXBhcmUtZmxpcHBpbmcgb3B0aW1pemF0aW9uLCBsaWtlIEVxdWFsKExlc3NUaGFuKGEsIGIpLCAw
KSB0dXJucyBpbnRvCi0gICAgICAgICAgICAvLyBHcmVhdGVyRXF1YWwoYSwgYikuCi0gICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzI2Ci0K
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIpCiAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKLSAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAg
ICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5lcXVh
bENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBOb3RFcXVhbDoKQEAgLTM4OCw3ICs0MjYsNDggQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChjb25zdDEsIGNvbnN0
MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3QxICE9IGNvbnN0MgotICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+
Y2hpbGQoMCktPm5vdEVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDApLT5sZXNzVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xD
b25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3ZhbHVlLT5j
aGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTGVzc0VxdWFs
OgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3By
b2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFudCht
X3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JlYXRlckVxdWFsOgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAg
ICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVy
RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgQWJvdmU6CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAor
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCkt
PmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgK
KyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDAp
LT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNo
aWxkKDApLT5hYm92ZUVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQo
bV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7CkBAIC0zOTYs
MTQgKzQ3NSwyNCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5j
aChOb3RFcXVhbCh4LCAwKSkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgpCi0g
ICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwgJiYg
YnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzTGlrZVplcm8oKSkgeworICAgICAgICAgICAg
aWYgKGJyYW5jaC0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFsICYmIGJyYW5jaC0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewogICAgICAgICAgICAgICAgIGJyYW5jaC0+Y2hp
bGQoMCkgPSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEJyYW5jaChFcXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkKICAgICAgICAgICAgIC8vIEludG8gdGhp
czogQnJhbmNoKHgsIGVsc2UsIHRoZW4pCi0gICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzTGlr
ZVplcm8oKSkgeworICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hpbGQoMCktPm9wY29kZSgpID09
IEVxdWFsICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgeworICAgICAg
ICAgICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYnJhbmNoLT50YWtlbigpLCBicmFuY2gtPm5vdFRh
a2VuKCkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdFhvcihi
b29sLCAxKSwgdGhlbiwgZWxzZSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJv
b2wsIGVsc2UsIHRoZW4pCisgICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQml0WG9yCisgICAgICAgICAgICAgICAgJiYgYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmlzSW50MzIoMSkKKyAgICAgICAgICAgICAgICAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGls
ZCgwKS0+cmV0dXJuc0Jvb2woKSkgewogICAgICAgICAgICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkg
PSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAo
YnJhbmNoLT50YWtlbigpLCBicmFuY2gtPm5vdFRha2VuKCkpOwogICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMSArMjkxLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBCcmFuY2g6CiAgICAgICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnJhbmNoOgogICAg
ICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJ
REFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0Nv
bnRyb2xWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpAQCAtMTQ3
LDEzICsxNDgsNjIgQEAgVmFsdWUqIFZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFs
dWUqKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBNaXhlZFRyaVN0
YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6bm90RXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0
Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjpsZXNz
VGhhbkNvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsK
K30KKworVHJpU3RhdGUgVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqKSBjb25zdAor
eworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6bGVzc0Vx
dWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwor
fQorCitUcmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAor
eworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6YWJvdmVD
b25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisK
K1RyaVN0YXRlIFZhbHVlOjpiZWxvd0NvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1
cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUgVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFu
dChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0
YXRlIFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAgIHJldHVy
biBNaXhlZFRyaVN0YXRlOwogfQogCi1WYWx1ZSogVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjppbnZlcnRlZENvbXBhcmUoUHJv
Y2VkdXJlJiBwcm9jKSBjb25zdAogeworICAgIGlmICghbnVtQ2hpbGRyZW4oKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgaWYgKE9wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRPcGNvZGUg
PSBCMzo6aW52ZXJ0ZWRDb21wYXJlKG9wY29kZSgpLCBjaGlsZCgwKS0+dHlwZSgpKSkKKyAgICAg
ICAgcmV0dXJuIHByb2MuYWRkPFZhbHVlPigqaW52ZXJ0ZWRPcGNvZGUsIHR5cGUoKSwgb3JpZ2lu
KCksIGNoaWxkcmVuKCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw4ICsxMTUsMjMgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0T3JDb25zdGFudChQcm9j
ZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUqIGJpdFhvckNv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1
ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZp
cnR1YWwgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBj
b25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NFcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVy
RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUg
YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUg
YmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUg
YWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlT
dGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKworICAgIC8vIElm
IHRoZSB2YWx1ZSBpcyBhIGNvbXBhcmlzb24gdGhlbiB0aGlzIHJldHVybnMgdGhlIGludmVydGVk
IGZvcm0gb2YgdGhhdCBjb21wYXJpc29uLCBpZgorICAgIC8vIHBvc3NpYmxlLiBJdCBjYW4gYmUg
aW1wb3NzaWJsZSBmb3IgZG91YmxlIGNvbXBhcmlzb25zLCB3aGVyZSBmb3IgZXhhbXBsZSBMZXNz
VGhhbiBhbmQKKyAgICAvLyBHcmVhdGVyRXF1YWwgYmVoYXZlIGRpZmZlcmVudGx5LiBJZiB0aGlz
IHJldHVybnMgYSB2YWx1ZSwgaXQgaXMgYSBuZXcgdmFsdWUsIHdoaWNoIG11c3QgYmUKKyAgICAv
LyBlaXRoZXIgaW5zZXJ0ZWQgaW50byBzb21lIGJsb2NrIG9yIGRlbGV0ZWQuCisgICAgVmFsdWUq
IGludmVydGVkQ29tcGFyZShQcm9jZWR1cmUmKSBjb25zdDsKIAogICAgIGJvb2wgaGFzSW50MzIo
KSBjb25zdDsKICAgICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyMyw2ICsyMDIzLDk0IEBA
IHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAxKSA9
PSA0Mik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0eXBlbmFtZSBSaWdo
dEZ1bmN0b3I+Cit2b2lkIGdlbmVyaWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAgICBCMzo6T3Bjb2Rl
IG9wY29kZSwgY29uc3QgTGVmdEZ1bmN0b3ImIGxlZnRGdW5jdG9yLCBjb25zdCBSaWdodEZ1bmN0
b3ImIHJpZ2h0RnVuY3RvciwKKyAgICBpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgcmVzdWx0KQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogdGhlbkNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogZWxzZUNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIG9wY29kZSwg
T3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdodEZ1bmN0b3Iocm9vdCwgcHJv
YykpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sodGhlbkNhc2UpLCBGcmVxdWVudGVkQmxvY2so
ZWxzZUNhc2UpKTsKKworICAgIC8vIFdlIHVzZSBhIHBhdGNocG9pbnQgb24gdGhlIHRoZW4gY2Fz
ZSB0byBlbnN1cmUgdGhhdCB0aGlzIGRvZXNuJ3QgZ2V0IGlmLWNvbnZlcnRlZC4KKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSB0aGVuQ2FzZS0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4ocHJvYywgSW50MzIsIE9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwYXJhbXMu
cmVwc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKworICAgIGVs
c2VDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbGVm
dCwgcmlnaHQpID09IHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdEJyYW5jaENvbXBhcmUoQjM6Ok9w
Y29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCByZXN1bHQpCit7CisgICAgLy8g
VGVzdCB0bXAtdG8tdG1wLgorICAgIGdlbmVyaWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAgICAgICAg
b3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2Mp
IHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFBy
b2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICBibG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQs
IHJlc3VsdCk7CisKKyAgICAvLyBUZXN0IGltbS10by10bXAuCisgICAgZ2VuZXJpY1Rlc3RCcmFu
Y2hDb21wYXJlKAorICAgICAgICBvcGNvZGUsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxv
Y2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbGVmdCk7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAg
ICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisKKyAgICAvLyBUZXN0IHRt
cC10by1pbW0uCisgICAgZ2VuZXJpY1Rlc3RCcmFuY2hDb21wYXJlKAorICAgICAgICBvcGNvZGUs
CisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAg
ICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJl
JiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCByaWdodCk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJp
Z2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBpbW0tdG8taW1tLgorICAgIGdlbmVyaWNUZXN0
QnJhbmNoQ29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQpOworICAgICAgICB9LAor
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAg
ICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIHJpZ2h0KTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3VsdCk7Cit9
CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIzMDAsNiArMjM4
OCw1NSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTaW1wbGVQ
YXRjaHBvaW50KCkpOwogICAgIFJVTih0ZXN0U2ltcGxlQ2hlY2soKSk7CiAKKyAgICBSVU4odGVz
dEJyYW5jaENvbXBhcmUoRXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29t
cGFyZShFcXVhbCwgNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEVxdWFs
LCAtNDIsIC00MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShFcXVhbCwgLTQyLCAt
NDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTm90RXF1YWwsIDQyLCA0MiwgMCkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShOb3RFcXVhbCwgNDIsIDQzLCAxKSk7CisgICAg
UlVOKHRlc3RCcmFuY2hDb21wYXJlKE5vdEVxdWFsLCAtNDIsIC00MiwgMCkpOworICAgIFJVTih0
ZXN0QnJhbmNoQ29tcGFyZShOb3RFcXVhbCwgLTQyLCAtNDMsIDEpKTsKKyAgICBSVU4odGVzdEJy
YW5jaENvbXBhcmUoTGVzc1RoYW4sIDQyLCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29t
cGFyZShMZXNzVGhhbiwgNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKExl
c3NUaGFuLCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVzc1RoYW4s
IC00MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTGVzc1RoYW4sIDQzLCAt
NDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIDQyLCA0Miwg
MCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyVGhhbiwgNDIsIDQzLCAwKSk7
CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJUaGFuLCA0MywgNDIsIDEpKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIC00MiwgNDMsIDApKTsKKyAgICBS
VU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIDQzLCAtNDIsIDEpKTsKKyAgICBSVU4o
dGVzdEJyYW5jaENvbXBhcmUoTGVzc0VxdWFsLCA0MiwgNDIsIDEpKTsKKyAgICBSVU4odGVzdEJy
YW5jaENvbXBhcmUoTGVzc0VxdWFsLCA0MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENv
bXBhcmUoTGVzc0VxdWFsLCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUo
TGVzc0VxdWFsLCAtNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKExlc3NF
cXVhbCwgNDMsIC00MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1
YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1YWws
IDQyLCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1YWwsIDQz
LCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1YWwsIC00Miwg
NDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlckVxdWFsLCA0MywgLTQy
LCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93LCA0MiwgNDIsIDApKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3csIDQyLCA0MywgMSkpOworICAgIFJVTih0ZXN0
QnJhbmNoQ29tcGFyZShCZWxvdywgNDMsIDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21w
YXJlKEJlbG93LCAtNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93
LCA0MywgLTQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlLCA0MiwgNDIs
IDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmUsIDQyLCA0MywgMCkpOworICAg
IFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZSwgNDMsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RC
cmFuY2hDb21wYXJlKEFib3ZlLCAtNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21w
YXJlKEFib3ZlLCA0MywgLTQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93
RXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShCZWxvd0VxdWFs
LCA0MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3dFcXVhbCwgNDMs
IDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93RXF1YWwsIC00MiwgNDMs
IDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3dFcXVhbCwgNDMsIC00MiwgMSkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZUVxdWFsLCA0MiwgNDIsIDEpKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmVFcXVhbCwgNDIsIDQzLCAwKSk7CisgICAgUlVO
KHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlRXF1YWwsIDQzLCA0MiwgMSkpOworICAgIFJVTih0ZXN0
QnJhbmNoQ29tcGFyZShBYm92ZUVxdWFsLCAtNDIsIDQzLCAxKSk7CisgICAgUlVOKHRlc3RCcmFu
Y2hDb21wYXJlKEFib3ZlRXF1YWwsIDQzLCAtNDIsIDApKTsKKwogICAgIGlmICghZGlkUnVuKQog
ICAgICAgICB1c2FnZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywzNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKK2Jvb2wgQXJnOjppc1Jl
cHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBzaWduZWRuZXNzKSBjb25zdAor
eworICAgIHN3aXRjaCAoc2lnbmVkbmVzcykgeworICAgIGNhc2UgU2lnbmVkOgorICAgICAgICBz
d2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgcmV0dXJu
IGlzUmVwcmVzZW50YWJsZUFzPGludDhfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDE2OgorICAg
ICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPGludDE2X3Q+KCk7CisgICAgICAgIGNh
c2UgV2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxpbnQzMl90
PigpOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNl
bnRhYmxlQXM8aW50NjRfdD4oKTsKKyAgICAgICAgfQorICAgIGNhc2UgVW5zaWduZWQ6CisgICAg
ICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICBy
ZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8dWludDhfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDE2
OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQxNl90PigpOworICAg
ICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8
dWludDMyX3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiBp
c1JlcHJlc2VudGFibGVBczx1aW50NjRfdD4oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9p
ZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fa2lu
ZCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAx
OTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsNiArMTEwLDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBudW1UeXBlcyA9IDI7CiAKKyAgICBlbnVtIFdpZHRoIDogaW50OF90IHsKKyAgICAg
ICAgV2lkdGg4LAorICAgICAgICBXaWR0aDE2LAorICAgICAgICBXaWR0aDMyLAorICAgICAgICBX
aWR0aDY0CisgICAgfTsKKworICAgIGVudW0gU2lnbmVkbmVzcyA6IGludDhfdCB7CisgICAgICAg
IFNpZ25lZCwKKyAgICAgICAgVW5zaWduZWQKKyAgICB9OworCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnLiBJdCdz
IGRlbGliZXJhdGVseSBmYWxzZSBmb3IKICAgICAvLyBVc2VBZGRyLCBzaW5jZSBpc1VzZSgpIGZv
ciBhbiBBcmc6OmFkZHIgbWVhbnMgdGhhdCB3ZSBhcmUgbG9hZGluZyBmcm9tIHRoZSBhZGRyZXNz
LgogICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKQEAgLTE1Myw2ICsxNjUsMjAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gR1A7CiAgICAgfQogCisgICAgc3RhdGljIFdpZHRoIHdp
ZHRoRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gV2lkdGg4OworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIFdpZHRoMzI7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgIGNhc2Ug
RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIFdpZHRoNjQ7CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBBcmcoKQogICAgICAgICA6IG1fa2luZChJbnZhbGlkKQogICAgIHsKQEAgLTM3Niw2ICs0
MDIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzUmVwcmVzZW50YWJsZUFzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxlQXM8VD4odmFsdWUoKSk7
CisgICAgfQorCisgICAgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhXaWR0aCwgU2lnbmVkbmVzcykg
Y29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgYXNOdW1iZXIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKCkpOworICAgIH0K
KwogICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
a2luZCgpID09IEltbTY0KTsKQEAgLTY4NCw2ICs3MjQsNDEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZz
ZXQpOwogICAgIH0KIAorICAgIC8vIFRoaXMgaXMgdmFsaWQgZm9yIGNvbmRpdGlvbiBhcmd1bWVu
dHMuIEl0IHdpbGwgaW52ZXJ0IHRoZW0uCisgICAgQXJnIGludmVydGVkKGJvb2wgaW52ZXJ0ZWQg
PSB0cnVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpbnZlcnRlZCkKKyAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBS
ZWxDb25kOgorICAgICAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVy
dChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSkpOworICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAg
ICAgICAgICByZXR1cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzUmVzdWx0Q29u
ZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICAgICAgcmV0dXJu
IGRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0RvdWJsZUNvbmRpdGlvbigpKSk7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAg
QXJnIGZsaXBwZWQoYm9vbCBmbGlwcGVkID0gdHJ1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghZmxpcHBlZCkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgcmV0dXJuIHJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OmZsaXAoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpKTsKKyAg
ICB9CisKKyAgICBib29sIGlzU2lnbmVkQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNSZWxDb25kKCkgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzU2lnbmVkKGFzUmVsYXRpb25hbENv
bmRpdGlvbigpKTsKKyAgICB9CisKKyAgICBib29sIGlzVW5zaWduZWRDb25kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1JlbENvbmQoKSAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNVbnNp
Z25lZChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9u
IDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbiB8fCBvcGNvZGUg
IT0gTm9wIHx8IGFyZ3Muc2l6ZSgpOyB9CisKICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rv
cnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZv
ciB0aGluZ3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsg
aWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKICAg
ICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMDM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5
KQpAQCAtMTgxLDEyICsxODEsNTIgQEAgTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKIE1vdmVEb3Vi
bGVUbzY0IFU6RiwgRDpHCiAgICAgVG1wLCBUbXAKIAorQ29tcGFyZTMyIFU6RywgVTpHLCBVOkcs
IEQ6RworICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEltbSwg
VG1wCisKK0NvbXBhcmU2NCBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZWxDb25kLCBUbXAsIElt
bSwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcAorCitUZXN0MzIgVTpHLCBVOkcsIFU6
RywgRDpHCisgICAgUmVzQ29uZCwgQWRkciwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIFRt
cCwgVG1wCisKK1Rlc3Q2NCBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZXNDb25kLCBUbXAsIElt
bSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcAorCitCcmFuY2g4IFU6RywgVTpHLCBV
OkcgL2JyYW5jaAorICAgIFJlbENvbmQsIEFkZHIsIEltbQorICAgIFJlbENvbmQsIEluZGV4LCBJ
bW0KKworQnJhbmNoMzIgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisgICAgUmVsQ29uZCwgQWRkciwg
SW1tCisgICAgUmVsQ29uZCwgVG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEltbQorICAgIFJl
bENvbmQsIFRtcCwgQWRkcgorICAgIFJlbENvbmQsIEFkZHIsIFRtcAorICAgIFJlbENvbmQsIElu
ZGV4LCBJbW0KKworQnJhbmNoNjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisgICAgUmVsQ29uZCwg
VG1wLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIEFkZHIKKyAgICBSZWxDb25kLCBBZGRyLCBUbXAK
KyAgICBSZWxDb25kLCBJbmRleCwgVG1wCisKK0JyYW5jaFRlc3Q4IFU6RywgVTpHLCBVOkcgL2Jy
YW5jaAorICAgIFJlc0NvbmQsIEFkZHIsIEltbQorICAgIFJlc0NvbmQsIEluZGV4LCBJbW0KKwog
QnJhbmNoVGVzdDMyIFU6RywgVTpHLCBVOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgVG1w
CiAgICAgUmVzQ29uZCwgVG1wLCBJbW0KICAgICBSZXNDb25kLCBBZGRyLCBJbW0KICAgICBSZXND
b25kLCBJbmRleCwgSW1tCiAKKyMgV2FybmluZzogZm9ybXMgdGhhdCB0YWtlIGFuIGltbWVkaWF0
ZSB3aWxsIHNpZ24tZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZS4gWW91IHByb2JhYmx5IHdhbnQKKyMg
QnJhbmNoVGVzdDMyIGluIG1vc3QgY2FzZXMgd2hlcmUgeW91IHVzZSBhbiBpbW1lZGlhdGUuCiBC
cmFuY2hUZXN0NjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1wLCBUbXAK
ICAgICBSZXNDb25kLCBUbXAsIEltbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkp
CkBAIC00MTAsNyArNDEwLDcgQEAgZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBj
b2x1bQogICAgIGVuZAogCiAgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2luZHMubGVu
Z3RoCi0gICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAgICByYWlz
ZSAiRGlkIG5vdCByZWR1Y2UgdG8gb25lIGZvcm06ICN7Zm9ybXMuaW5zcGVjdH0iIHVubGVzcyBm
b3Jtcy5sZW5ndGggPT0gMQogICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KICAgICAgICAgcmV0
dXJuCiAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NzQsNyAr
MzQ3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
aW50MzJfdCBkaXZpc29yID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgICAg
IGlmIChkaXZpc29yID4gMSAmJiBoYXNPbmVCaXRTZXQoZGl2aXNvcikpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb2dhcml0aG0gPSBXVEY6OmZhc3RMb2cyKGRpdmlzb3IpOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvZ2FyaXRobSA9IFdURjo6ZmFzdExvZzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGRpdmlzb3IpKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgZGl2aWRlbmRHUFIg
PSBvcDEuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU4LDEzICsxNDU4LDEzIEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICAKICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkp
CisgICAgICAgIGlmIChKU0M6OmlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9hZDhTaWdu
ZWRFeHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1
bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KHNj
cmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKKyAgICAgICAgaWYg
KEpTQzo6aXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMy
KEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChzY3JhdGNoLCBwcm9w
ZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKQEAgLTE1OTYsNyArMTU5Niw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICBpZiAoaXND
bGFtcGVkKHR5cGUpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsK
LSAgICAgICAgQVNTRVJUKCFpc1NpZ25lZCh0eXBlKSk7CisgICAgICAgIEFTU0VSVCghSlNDOjpp
c1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09y
RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgSnVtcCB0
b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIo
MHhmZikpOwogICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRo
RXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsMTQgQEAgaW5saW5lIHVuc2ln
bmVkIGZhc3RMb2cyKHVuc2lnbmVkIGkpCiAgICAgcmV0dXJuIGxvZzI7CiB9CiAKK2lubGluZSB1
bnNpZ25lZCBmYXN0TG9nMih1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICB1bnNpZ25lZCBsb3cgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOworICAgIGlmIChsb3cpCisgICAgICAgIHJldHVy
biBmYXN0TG9nMihsb3cpOworICAgIHJldHVybiBmYXN0TG9nMihzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odmFsdWUgPj4gMzIpKSArIDMyOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGlubGlu
ZSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp2YWx1
ZSwgVD46OnR5cGUgc2FmZUZQRGl2aXNpb24oVCB1LCBUIHYpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264846</attachid>
            <date>2015-11-04 21:49:27 -0800</date>
            <delta_ts>2015-11-05 12:15:26 -0800</delta_ts>
            <desc>more tests, fixed bugs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>88281</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAg
ICAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAg
cmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVF
cXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGli
bGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBaZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNl
IGJ1aWxkcy4KICAgICAgICAgfQogICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0
aW9uIGZsaXAoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICByZXR1cm4gY29uZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAg
IHJldHVybiBCZWxvdzsKKyAgICAgICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICBy
ZXR1cm4gQmVsb3dPckVxdWFsOworICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0
dXJuIEFib3ZlOworICAgICAgICBjYXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVy
biBBYm92ZU9yRXF1YWw7CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICBy
ZXR1cm4gTGVzc1RoYW47CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAg
ICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDsKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAg
ICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1
YWw6CisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVx
dWFsOworICAgIH0KKworICAgIC8vIFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChj
b25kLCB2YWx1ZSwgdmFsdWUpCisgICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAg
ICAgYnJhbmNoMzIoY29uZCwgc2lnbkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAg
c3RhdGljIGJvb2wgaXNTaWduZWQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2Ug
Tm90RXF1YWw6CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRl
clRoYW5PckVxdWFsOgorICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NU
aGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1
ZSBpZiB0aGlzOgorICAgIC8vICAgICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAv
LyBJcyB0aGUgc2FtZSBhcyB0aGlzOgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0
OCh2YWx1ZSksIHplcm9FeHQ4KHZhbHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgewor
ICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNl
IEFib3ZlOgorICAgICAgICBjYXNlIEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoK
KyAgICAgICAgY2FzZSBCZWxvd09yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KICNlbmRpZgogCiAgICAgLy8gUGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlv
bnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzQsNiArMTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7
CisgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAg
Ly8gSW52ZXJ0IGEgcmVsYXRpb25hbCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBi
ZWNvbWVzID49LCBldGMuCiAgICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDYgKzU3LDE3IEBAIHVuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQogCiB9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKIAorQ2hlY2tTcGVjaWFsOjpLZXk6OktleShjb25zdCBJbnN0JiBpbnN0
KQoreworICAgIG1fb3Bjb2RlID0gaW5zdC5vcGNvZGU7CisgICAgbV9udW1BcmdzID0gaW5zdC5h
cmdzLnNpemUoKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3Ms
ICIpIik7Cit9CisKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKICAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQogICAgICwg
bV9udW1DaGVja0FyZ3MobnVtQXJncykKQEAgLTY0LDYgKzc1LDExIEBAIENoZWNrU3BlY2lhbDo6
Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG8KICAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUp
KTsKIH0KIAorQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoY29uc3QgQ2hlY2tTcGVjaWFsOjpL
ZXkmIGtleSkKKyAgICA6IENoZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCkp
Cit7Cit9CisKIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMTkyMDM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKICNpbmNsdWRl
ICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBJbnN0
OworfQorCiAvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5j
aCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKIC8vIG91dC1v
Zi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFz
b24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKIC8vIHdoaWNoIGJyYW5jaCBvcGNvZGUg
d2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3Zl
cmxvYWQgd2Ugd2FudC4gSXQKQEAgLTQ2LDcgKzUxLDY1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCiBjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFs
IHsKIHB1YmxpYzoKKyAgICAvLyBTdXBwb3J0IGZvciBoYXNoIGNvbnNpbmcgdGhlc2UgdGhpbmdz
LgorICAgIGNsYXNzIEtleSB7CisgICAgcHVibGljOgorICAgICAgICBLZXkoKQorICAgICAgICAg
ICAgOiBtX29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICAgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAgICAgLCBtX251bUFyZ3MobnVtQXJncykKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgZXhwbGljaXQgS2V5KGNvbnN0IEFpcjo6SW5zdCYgaW5zdCk7CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX29wY29kZSA9PSBvdGhlci5tX29wY29kZQorICAgICAgICAgICAgICAgICYm
IG1fbnVtQXJncyA9PSBvdGhlci5tX251bUFyZ3M7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEtleSgpOyB9CisKKyAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKyAg
ICAgICAgdW5zaWduZWQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJnczsgfQorCisg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgICAgICBLZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICAgICAgOiBtX29wY29kZShB
aXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnRoaXMgPT0gS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBTZXJpb3VzbHksIHdlIGRvbid0IG5lZWQgdG8gYmUgc21h
cnQgaGVyZS4gSXQganVzdCBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgICAgIHJldHVybiBtX29w
Y29kZSArIG1fbnVtQXJnczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBBaXI6Ok9wY29kZSBtX29wY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1BcmdzOwor
ICAgIH07CisgICAgCiAgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1B
cmdzKTsKKyAgICBDaGVja1NwZWNpYWwoY29uc3QgS2V5JiBrZXkpOwogICAgIH5DaGVja1NwZWNp
YWwoKTsKIAogcHJvdGVjdGVkOgpAQCAtNzAsOCArMTMzLDI5IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwogCitzdHJ1Y3QgQ2hlY2tTcGVjaWFsS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkg
eyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoZWNr
U3BlY2lhbDo6S2V5JiBhLCBjb25zdCBDaGVja1NwZWNpYWw6OktleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAg
IHR5cGVkZWYgSlNDOjpCMzo6Q2hlY2tTcGVjaWFsS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAgIC8vIEkgZG9uJ3Qgd2FudCB0byB0
aGluayBhYm91dCB0aGlzIHZlcnkgaGFyZCwgaXQncyBub3Qgd29ydGggaXQuIEknbSBhIGJlIGNv
bnNlcnZhdGl2ZS4KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CiAKICNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDE4ICs4Miw3NCBAQCBWYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jCiAg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgXiBvdGhl
ci0+YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1
ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHByb2MuYWRk
PENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPT0gb3RoZXItPmFzSW50MzIoKSk7Cisg
ICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVl
ID09IG90aGVyLT5hc0ludDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpub3RFcXVh
bENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUg
Q29uc3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAg
ICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAhPSBvdGhlci0+
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0
MzJWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAg
cmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVHJpU3Rh
dGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QK
K3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVyLT5hc0ludDMyKCkpOwor
fQorCitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8PSBvdGhlci0+YXNJ
bnQzMigpKTsKK30KKworVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUg
Pj0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YWJvdmVD
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKHN0
YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhl
ci0+YXNJbnQzMigpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YmVsb3dDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19j
YXN0PHVpbnQzMl90PihtX3ZhbHVlKSA8IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJ
bnQzMigpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1fdmFsdWUpID49IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJ
bnQzMigpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1fdmFsdWUpIDw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJ
bnQzMigpKSk7CiB9CiAKIHZvaWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXIm
IGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0
NywxNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0WG9y
Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBW
YWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFZhbHVlKiBub3RFcXVhbENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0Vx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBn
cmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRy
aVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBU
cmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRh
KENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjAz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDE4ICs4Miw3NCBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRYb3JD
b25zdGFudChQcm9jCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgXiBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6
ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0
YXRlIENvbnN0NjRWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPT0gb3RoZXIt
PmFzSW50NjQoKSk7CisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0
cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2
NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBj
b25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSAhPSBvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50NjQoKSk7Cit9CisK
K1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQ2NCgp
KTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVy
LT5hc0ludDY0KCkpOworfQorCitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Omxlc3NFcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQor
ICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1
ZSA8PSBvdGhlci0+YXNJbnQ2NCgpKTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVh
dGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0
NjRWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFv
dGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0
dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1
ZTo6YmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJv
dmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJp
U3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpID49IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YmVs
b3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJp
U3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpIDw9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7CiB9CiAKIHZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0
YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0NywxNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJp
dE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAg
ICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBWYWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBub3RFcXVhbENvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0
ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24g
MTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE4ICs2MSw0NiBAQCBWYWx1ZSogQ29uc3REb3VibGVW
YWx1ZTo6c3ViQ29uc3RhbnQoUHJvCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFs
dWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1WYWx1ZSog
Q29uc3REb3VibGVWYWx1ZTo6ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBv
dGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmln
aW4oKSwgbV92YWx1ZSA9PSBvdGhlci0+YXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0RvdWJs
ZSgpKTsKIH0KIAotVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdERvdWJsZVZh
bHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgIT0gb3RoZXItPmFzRG91Ymxl
KCkpOworICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUo
bV92YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICgh
b3RoZXItPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICBy
ZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8IG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKworVHJpU3Rh
dGUgQ29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzRG91Ymxl
KCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDw9
IG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKworVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXIt
Pmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4g
dHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKIHZvaWQgQ29uc3RE
b3VibGVWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTMgQEAgcHVi
bGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMyX3Qgb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1
ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRl
clRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRl
IGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJp
U3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgQWlyOwogCiBuYW1lc3BhY2UgewogCitjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKwogY2xhc3MgTG93ZXJUb0FpciB7CiBwdWJsaWM6CiAgICAgTG93ZXJUb0FpcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKQEAgLTg2LDYgKzg4LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICAvLyBSZXNldCBz
b21lIHN0YXRlLgogICAgICAgICAgICAgaW5zdHMucmVzaXplKDApOworCisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyBCbG9jayAiLCAq
YmxvY2ssICI6XG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9j
a3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdo
YXQgYWxsb3dzIHVzCiAgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVs
eS4KQEAgLTk1LDExICsxMDAsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsb2Nr
ZWQuY29udGFpbnMoY3VycmVudFZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG93ZXJp
bmcgIiwgZGVlcER1bXAoY3VycmVudFZhbHVlKSwgIjpcbiIpOwogICAgICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgKnRoaXMpOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAoY3VycmVudFZhbHVlKSwgIlxuIik7
CiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzLmxhc3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0
aW9ucy4gaW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNz
CkBAIC0xNjIsMTggKzE3MywxMzggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAg
Y2xhc3MgQXJnUHJvbWlzZSB7CisgICAgcHVibGljOgorICAgICAgICBBcmdQcm9taXNlKCkgeyB9
CisKKyAgICAgICAgQXJnUHJvbWlzZShjb25zdCBBcmcmIGFyZywgVmFsdWUqIHZhbHVlVG9Mb2Nr
ID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogbV9hcmcoYXJnKQorICAgICAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlVG9Mb2NrKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
QXJnUHJvbWlzZSB0bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBcmdQ
cm9taXNlIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJnIHx8IG1fdmFsdWU7IH0KKworICAgICAg
ICBBcmc6OktpbmQga2luZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9h
cmcgJiYgbV92YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjpUbXA7CisgICAgICAg
ICAgICByZXR1cm4gbV9hcmcua2luZCgpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgQXJn
JiBwZWVrKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYXJnOworICAg
ICAgICB9CisKKyAgICAgICAgQXJnIGNvbnN1bWUoTG93ZXJUb0FpciYgbG93ZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9hcmcgJiYgbV92YWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbG93ZXIudG1wKG1fdmFsdWUpOworICAgICAgICAgICAgaWYgKG1fdmFsdWUp
CisgICAgICAgICAgICAgICAgbG93ZXIuY29tbWl0SW50ZXJuYWwobV92YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gbV9hcmc7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgLy8gVGhyZWUgZm9ybXM6CisgICAgICAgIC8vIEV2ZXJ5dGhpbmcgbnVsbDogaW52YWxp
ZC4KKyAgICAgICAgLy8gQXJnIG5vbi1udWxsLCB2YWx1ZSBudWxsOiBqdXN0IHVzZSB0aGUgYXJn
LCBub3RoaW5nIHNwZWNpYWwuCisgICAgICAgIC8vIEFyZyBudWxsLCB2YWx1ZSBub24tbnVsbDog
aXQncyBhIHRtcCwgcGluIGl0IHdoZW4gbmVjZXNzYXJ5LgorICAgICAgICAvLyBBcmcgbm9uLW51
bGwsIHZhbHVlIG5vbi1udWxsOiB1c2UgdGhlIGFyZywgbG9jayB0aGUgdmFsdWUuCisgICAgICAg
IEFyZyBtX2FyZzsKKyAgICAgICAgVmFsdWUqIG1fdmFsdWU7CisgICAgfTsKKworICAgIC8vIENv
bnNpZGVyIHVzaW5nIHRtcFByb21pc2UoKSBpbiBjYXNlcyB3aGVyZSB5b3UgYXJlbid0IHN1cmUg
dGhhdCB5b3Ugd2FudCB0byBwaW4gdGhlIHZhbHVlIHlldC4KKyAgICAvLyBIZXJlIGFyZSB0aHJl
ZSBjYW5vbmljYWwgd2F5cyBvZiB1c2luZyB0bXAoKSBhbmQgdG1wUHJvbWlzZSgpOgorICAgIC8v
CisgICAgLy8gSWRpb20gIzE6IFlvdSBrbm93IHRoYXQgeW91IHdhbnQgYSB0bXAoKSBhbmQgeW91
IGtub3cgdGhhdCBpdCB3aWxsIGJlIHZhbGlkIGZvciB0aGUKKyAgICAvLyBpbnN0cnVjdGlvbiB5
b3UncmUgZW1pdHRpbmcuCisgICAgLy8KKyAgICAvLyAgICAgYXBwZW5kKEZvbywgdG1wKGJhcikp
OworICAgIC8vCisgICAgLy8gSWRpb20gIzI6IFlvdSBkb24ndCBrbm93IGlmIHlvdSB3YW50IHRv
IHVzZSBhIHRtcCgpIGJlY2F1c2UgeW91IGhhdmVuJ3QgZGV0ZXJtaW5lZCBpZiB0aGUKKyAgICAv
LyBpbnN0cnVjdGlvbiB3aWxsIGFjY2VwdCBpdCwgc28geW91IHF1ZXJ5IGZpcnN0LgorICAgIC8v
CisgICAgLy8gICAgIGlmIChpc1ZhbGlkRm9ybShGb28sIEFyZzo6VG1wKSkKKyAgICAvLyAgICAg
ICAgIGFwcGVuZChGb28sIHRtcChiYXIpKQorICAgIC8vCisgICAgLy8gSWRpb20gIzM6IFNhbWUg
YXMgSWRpb20gIzIsIGJ1dCB1c2luZyB0bXBQcm9taXNlLgorICAgIC8vCisgICAgLy8gICAgIEFy
Z1Byb21pc2UgcHJvbWlzZSA9IHRtcFByb21pc2UoYmFyKTsKKyAgICAvLyAgICAgaWYgKGlzVmFs
aWRGb3JtKEZvbywgcHJvbWlzZS5raW5kKCkpKQorICAgIC8vICAgICAgICAgYXBwZW5kKEZvbywg
cHJvbWlzZS5jb25zdW1lKCp0aGlzKSkKKyAgICAvLworICAgIC8vIEluIGJvdGggaWRpb20gIzIg
YW5kIGlkaW9tICMzLCB3ZSBkb24ndCBwaW4gdGhlIHZhbHVlIHRvIGEgdGVtcG9yYXJ5IGV4Y2Vw
dCB3aGVuIHdlIGFjdHVhbGx5CisgICAgLy8gZW1pdCB0aGUgaW5zdHJ1Y3Rpb24uIEJvdGggdG1w
KCkgYW5kIHRtcFByb21pc2UoKS5jb25zdW1lKCp0aGlzKSB3aWxsIHBpbiBpdC4gUGlubmluZyBt
ZWFucworICAgIC8vIHRoYXQgd2Ugd2lsbCBoZW5jZWZvcnRoIHJlcXVpcmUgdGhhdCB0aGUgdmFs
dWUgb2YgJ2JhcicgaXMgZ2VuZXJhdGVkIGFzIGEgc2VwYXJhdGUKKyAgICAvLyBpbnN0cnVjdGlv
bi4KKyAgICAvLworICAgIC8vIEJlY2F1c2UgdG1wKCkgcGlucywgdGhlIGZvbGxvd2luZyBpcyBu
b3QgYW4gaWRpb20geW91IHNob3VsZCB1c2U6CisgICAgLy8KKyAgICAvLyAgICAgVG1wIHRtcCA9
IHRoaXMtPnRtcChiYXIpOworICAgIC8vICAgICBpZiAoaXNWYWxpZEZvcm0oRm9vLCB0bXAua2lu
ZCgpKSkKKyAgICAvLyAgICAgICAgIGFwcGVuZChGb28sIHRtcCk7CisgICAgLy8KKyAgICAvLyBU
aGF0J3MgYmVjYXVzZSBpZiBpc1ZhbGlkRm9ybSgpIHJldHVybnMgdHJ1ZSwgeW91IHdpbGwgaGF2
ZSBhbHJlYWR5IHBpbm5lZCB0aGUgJ2JhcicgdG8gYQorICAgIC8vIHRlbXBvcmFyeS4gWW91IG1p
Z2h0IGxhdGVyIHdhbnQgdG8gdHJ5IHRvIGRvIHNvbWV0aGluZyBsaWtlIGxvYWRQcm9taXNlKCks
IGFuZCB0aGF0IHdpbGwgZmFpbC4KKyAgICAvLyBUaGlzIGFyaXNlcyBpbiBvcGVyYXRpb25zIHRo
YXQgaGF2ZSBib3RoIGEgQWRkcixUbXAgYW5kIFRtcCxBZGRyIGZvcm1zLiBUaGUgZm9sbG93aW5n
IGNvZGUKKyAgICAvLyBzZWVtcyByaWdodCwgYnV0IHdpbGwgYWN0dWFsbHkgZmFpbCB0byBldmVy
IG1hdGNoIHRoZSBUbXAsQWRkciBmb3JtIGJlY2F1c2UgYnkgdGhlbiwgdGhlIHJpZ2h0CisgICAg
Ly8gdmFsdWUgaXMgYWxyZWFkeSBwaW5uZWQuCisgICAgLy8KKyAgICAvLyAgICAgYXV0byB0cnlU
aGluZ3MgPSBbdGhpc10gKGNvbnN0IEFyZyYgbGVmdCwgY29uc3QgQXJnJiByaWdodCkgeworICAg
IC8vICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSkpCisgICAgLy8gICAgICAgICAgICAgcmV0dXJuIEluc3QoRm9vLCBjdXJyZW50VmFsdWUsIGxl
ZnQsIHJpZ2h0KTsKKyAgICAvLyAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgLy8gICAgIH07
CisgICAgLy8gICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRoaW5ncyhsb2FkQWRkcihsZWZ0KSwg
dG1wKHJpZ2h0KSkpCisgICAgLy8gICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIC8vICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3ModG1wKGxlZnQpLCBsb2FkQWRkcihyaWdodCkpKQor
ICAgIC8vICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAvLworICAgIC8vIElmIHlvdSBpbWFn
aW5lIHRoYXQgbG9hZEFkZHIodmFsdWUpIGlzIGp1c3QgbG9hZFByb21pc2UodmFsdWUpLmNvbnN1
bWUoKnRoaXMpLCB0aGVuIHRoaXMgY29kZQorICAgIC8vIHdpbGwgcnVuIGNvcnJlY3RseSAtIGl0
IHdpbGwgZ2VuZXJhdGUgT0sgY29kZSAtIGJ1dCB0aGUgc2Vjb25kIGZvcm0gaXMgbmV2ZXIgbWF0
Y2hlZC4KKyAgICAvLyBsb2FkQWRkcihyaWdodCkgd2lsbCBuZXZlciBzdWNjZWVkIGJlY2F1c2Ug
aXQgd2lsbCBvYnNlcnZlIHRoYXQgJ3JpZ2h0JyBpcyBhbHJlYWR5IHBpbm5lZC4KKyAgICAvLyBP
ZiBjb3Vyc2UsIGl0J3MgZXhhY3RseSBiZWNhdXNlIG9mIHRoZSByaXNreSBuYXR1cmUgb2Ygc3Vj
aCBjb2RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhCisgICAgLy8gbG9hZEFkZHIoKSBoZWxwZXIgYW5k
IHJlcXVpcmUgeW91IHRvIGJhbGFuY2UgQXJnUHJvbWlzZSdzIGluIGNvZGUgbGlrZSB0aGlzLiBT
dWNoIGNvZGUgd2lsbAorICAgIC8vIHdvcmsgZmluZSBpZiB3cml0dGVuIGFzOgorICAgIC8vCisg
ICAgLy8gICAgIGF1dG8gdHJ5VGhpbmdzID0gW3RoaXNdIChjb25zdCBBcmdQcm9taXNlJiBsZWZ0
LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgeworICAgIC8vICAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKEZvbywgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCisgICAgLy8gICAgICAgICAgICAg
cmV0dXJuIEluc3QoRm9vLCBjdXJyZW50VmFsdWUsIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0
LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAvLyAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgLy8g
ICAgIH07CisgICAgLy8gICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRoaW5ncyhsb2FkUHJvbWlz
ZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKQorICAgIC8vICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAvLyAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGhpbmdzKHRtcFByb21pc2UobGVm
dCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpCisgICAgLy8gICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIFRtcCB0bXAoVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgVG1wJiB0bXAgPSB2YWx1
ZVRvVG1wW3ZhbHVlXTsKICAgICAgICAgaWYgKCF0bXApIHsKICAgICAgICAgICAgIHdoaWxlIChz
aG91bGRDb3B5UHJvcGFnYXRlKHZhbHVlKSkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
LT5jaGlsZCgwKTsKLSAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1wKGlzSW50KHZhbHVlLT50
eXBlKCkpID8gQXJnOjpHUCA6IEFyZzo6RlApOwotICAgICAgICAgICAgdmFsdWVUb1RtcFt2YWx1
ZV0gPSB0bXA7CisgICAgICAgICAgICBUbXAmIHJlYWxUbXAgPSB2YWx1ZVRvVG1wW3ZhbHVlXTsK
KyAgICAgICAgICAgIGlmICghcmVhbFRtcCkKKyAgICAgICAgICAgICAgICByZWFsVG1wID0gY29k
ZS5uZXdUbXAoQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgICAg
IHRtcCA9IHJlYWxUbXA7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAK
KyAgICBBcmdQcm9taXNlIHRtcFByb21pc2UoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEFyZ1Byb21pc2U6OnRtcCh2YWx1ZSk7CisgICAgfQorCiAgICAgYm9vbCBjYW5CZUlu
dGVybmFsKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50
ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2Fu
dCB0byBjYXVzZQpAQCAtMjUzLDE1ICszODQsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIHZhbHVlKTsKICAgICB9CiAKLSAgICBB
cmcgbG9hZEFkZHIoVmFsdWUqIGxvYWRWYWx1ZSkKKyAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNl
KFZhbHVlKiBsb2FkVmFsdWUsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKICAgICB7Ci0gICAgICAg
IGlmIChsb2FkVmFsdWUtPm9wY29kZSgpICE9IExvYWQpCisgICAgICAgIGlmIChsb2FkVmFsdWUt
Pm9wY29kZSgpICE9IGxvYWRPcGNvZGUpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAg
ICAgIGlmICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFy
ZygpOwogICAgICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOwotICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOworICAg
ICAgICByZXR1cm4gQXJnUHJvbWlzZShhZGRyKGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7CisgICAg
fQorCisgICAgQXJnUHJvbWlzZSBsb2FkUHJvbWlzZShWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvYWRQcm9taXNlKGxvYWRWYWx1ZSwgTG9hZCk7CiAgICAgfQogCiAg
ICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCkBAIC0zNDAsMjAgKzQ3NiwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIG92ZXIgdGhyZWUgb3BlcmFuZCBmb3Jtcy4KICAgICAgICAgCiAgICAgICAgIGlm
IChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7Ci0gICAgICAgICAgICBBcmcgbGVmdEFk
ZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIEFyZ1Byb21pc2UgbGVmdEFkZHIgPSBs
b2FkUHJvbWlzZShsZWZ0KTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxl
ZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgY29tbWl0SW50ZXJu
YWwobGVmdCk7CiAgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJy
ZW50VmFsdWUtPnR5cGUoKSksIHRtcChyaWdodCksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgQXJnIHJpZ2h0
QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAgICAgQXJnUHJvbWlzZSByaWdodEFkZHIgPSBs
b2FkUHJvbWlzZShyaWdodCk7CiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0
QWRkci5raW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmln
aHQpOwogICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUt
PnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGFwcGVuZChvcGNvZGUs
IHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRk
ci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0zNzgsMTAgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFyZyBzdG9yZUFkZHIg
PSBhZGRyKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCi0gICAg
ICAgIGlmIChsb2FkQWRkcih2YWx1ZSkgIT0gc3RvcmVBZGRyKQorICAgICAgICBBcmdQcm9taXNl
IGxvYWRQcm9taXNlID0gdGhpcy0+bG9hZFByb21pc2UodmFsdWUpOworICAgICAgICBpZiAobG9h
ZFByb21pc2UucGVlaygpICE9IHN0b3JlQWRkcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgIGxvYWRQcm9taXNlLmNv
bnN1bWUoKnRoaXMpOwogICAgICAgICBhcHBlbmQob3Bjb2RlLCBzdG9yZUFkZHIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zOTIsMTkgKzUyNywyMyBAQCBwdWJsaWM6CiAgICAg
ICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChz
dG9yZUFkZHIpOwogCi0gICAgICAgIFZhbHVlKiBsb2FkVmFsdWU7Ci0gICAgICAgIFZhbHVlKiBv
dGhlclZhbHVlOwotICAgICAgICBpZiAobG9hZEFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKSB7Ci0g
ICAgICAgICAgICBsb2FkVmFsdWUgPSBsZWZ0OworICAgICAgICBBcmdQcm9taXNlIGxvYWRQcm9t
aXNlOworICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIAorICAg
ICAgICBsb2FkUHJvbWlzZSA9IHRoaXMtPmxvYWRQcm9taXNlKGxlZnQpOworICAgICAgICBpZiAo
bG9hZFByb21pc2UucGVlaygpID09IHN0b3JlQWRkcikKICAgICAgICAgICAgIG90aGVyVmFsdWUg
PSByaWdodDsKLSAgICAgICAgfSBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZl
ICYmIGxvYWRBZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpIHsKLSAgICAgICAgICAgIGxvYWRWYWx1
ZSA9IHJpZ2h0OwotICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxz
ZQorICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAg
ICAgICAgICBsb2FkUHJvbWlzZSA9IHRoaXMtPmxvYWRQcm9taXNlKHJpZ2h0KTsKKyAgICAgICAg
ICAgIGlmIChsb2FkUHJvbWlzZS5wZWVrKCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgICAg
IG90aGVyVmFsdWUgPSBsZWZ0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFvdGhlclZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6SW1tLCBzdG9yZUFkZHIua2luZCgpKSAmJiBpbW0ob3RoZXJWYWx1ZSkpIHsK
LSAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxvYWRWYWx1ZSk7CisgICAgICAgICAgICBsb2Fk
UHJvbWlzZS5jb25zdW1lKCp0aGlzKTsKICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShv
dGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC00MTIsNyArNTUxLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWlzVmFsaWRGb3Jt
KG9wY29kZSwgQXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGNvbW1pdEludGVybmFsKGxvYWRWYWx1ZSk7CisgICAgICAgIGxv
YWRQcm9taXNlLmNvbnN1bWUoKnRoaXMpOwogICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3Ro
ZXJWYWx1ZSksIHN0b3JlQWRkcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYy
Miw2ICs3NjEsMzk2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIEFkZHJlc3NTZWxlY3RvciBhZGRy
ZXNzU2VsZWN0b3I7CiAKKyAgICAvLyBDcmVhdGUgYW4gSW5zdCB0byBkbyB0aGUgY29tcGFyaXNv
biBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHZhbHVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bXBhcmVGdW5jdG9yLCB0eXBlbmFtZSBUZXN0RnVuY3RvciwgdHlwZW5hbWUgQ29tcGFyZURvdWJs
ZUZ1bmN0b3I+CisgICAgSW5zdCBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAgICAgICAgVmFsdWUq
IHZhbHVlLAorICAgICAgICBjb25zdCBDb21wYXJlRnVuY3RvciYgY29tcGFyZSwgLy8gU2lnbmF0
dXJlOiAoQXJnOjpXaWR0aCwgQXJnIHJlbENvbmQsIEFyZywgQXJnKSAtPiBJbnN0CisgICAgICAg
IGNvbnN0IFRlc3RGdW5jdG9yJiB0ZXN0LCAvLyBTaWduYXR1cmU6IChBcmc6OldpZHRoLCBBcmcg
cmVzQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKKyAgICAgICAgY29uc3QgQ29tcGFyZURvdWJsZUZ1
bmN0b3ImIGNvbXBhcmVEb3VibGUsIC8vIFNpZ25hdHVyZTogKEFyZyBkb3VibGVDb25kLCBBcmcs
IEFyZykgLT4gSW5zdAorICAgICAgICBib29sIGludmVydGVkID0gZmFsc2UpCisgICAgeworICAg
ICAgICAvLyBDaGV3IHRocm91Z2ggYW55IG5lZ2F0aW9ucy4gSXQncyBub3Qgc3RyaWN0bHkgbmVj
ZXNzYXJ5IGZvciB0aGlzIHRvIGJlIGEgbG9vcCwgYnV0IHdlIGxpa2UKKyAgICAgICAgLy8gdG8g
Zm9sbG93IHRoZSBydWxlIHRoYXQgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIHJlZHVjZXMgc3Ry
ZW5ndGggd2hlbmV2ZXIgaXQgZG9lc24ndAorICAgICAgICAvLyByZXF1aXJlIG1ha2luZyB0aGlu
Z3MgbW9yZSBjb21wbGljYXRlZC4KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYg
KCFjYW5CZUludGVybmFsKHZhbHVlKSAmJiB2YWx1ZSAhPSBjdXJyZW50VmFsdWUpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHNob3VsZEludmVydCA9CisgICAgICAg
ICAgICAgICAgKHZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3IgJiYgdmFsdWUtPmNoaWxkKDEpLT5p
c0ludCgxKSAmJiB2YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCisgICAgICAgICAgICAg
ICAgfHwgKHZhbHVlLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50
KDApKTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSW52ZXJ0KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBp
bnZlcnRlZCA9ICFpbnZlcnRlZDsKKyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY3JlYXRlUmVsQ29uZCA9IFsmXSAoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiByZWxhdGlvbmFsQ29uZGl0
aW9uLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24pIHsKKyAgICAgICAgICAgIEFyZyByZWxDb25kID0gQXJnOjpyZWxDb25kKHJlbGF0
aW9uYWxDb25kaXRpb24pLmludmVydGVkKGludmVydGVkKTsKKyAgICAgICAgICAgIEFyZyBkb3Vi
bGVDb25kID0gQXJnOjpkb3VibGVDb25kKGRvdWJsZUNvbmRpdGlvbikuaW52ZXJ0ZWQoaW52ZXJ0
ZWQpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIGlmIChp
c0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVm
dEltbSA9IGltbShsZWZ0KTsKKyAgICAgICAgICAgICAgICBBcmcgcmlnaHRJbW0gPSBpbW0ocmln
aHQpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlDb21wYXJlID0gWyZdICgKKyAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29u
c3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0LCByaWdodCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLmZsaXBwZWQoKSwgcmlnaHQs
IGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgYXV0byB0cnlDb21wYXJlTG9hZEltbSA9IFsmXSAoCisgICAgICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSwgQXJnOjpTaWduZWRu
ZXNzIHNpZ25lZG5lc3MpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJ
bW0gJiYgcmlnaHRJbW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIHNpZ25lZG5lc3MpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRo
LCBsb2FkUHJvbWlzZShsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBs
ZWZ0SW1tLmlzUmVwcmVzZW50YWJsZUFzKHdpZHRoLCBzaWduZWRuZXNzKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbGVmdElt
bSwgbG9hZFByb21pc2UocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlJ3Mg
dGhhdCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUs
IHdlIHdhbnQgdGhpcyB0byBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vICAgICBAMSA9IExvYWQ4UyguLi4pCisgICAgICAgICAg
ICAgICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgLy8gICAgIEAz
ID0gTGVzc1RoYW4oQDEsIEAyKQorICAgICAgICAgICAgICAgIC8vICAgICBCcmFuY2goQDMpCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25k
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxv
YWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZENvbmQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6
OldpZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KHJlbENvbmQuaXNTaWduZWRDb25kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBBcmc6OlNp
Z25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5p
c1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WiwgQXJnOjpVbnNpZ25lZCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZSdzIHRoYXQgaW52b2x2
ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4KKworICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
d2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwg
TG9hZCwgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGEg
bG9hZC4gSXQncyBub3Qgb2J2aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRvCisgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9i
YWJseSBkb2Vzbid0IG1hdHRlci4KKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgs
IHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgY29tcGFyZSdzIHRoYXQgaW52b2x2ZSBhbiBpbW1lZGlhdGUgYW5kIGEgdG1wLgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYmIGxlZnRJbW0uaXNSZXBy
ZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsZWZ0SW1tLCB0bXBQcm9taXNlKHJpZ2h0KSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJ
bW0uaXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCByaWdo
dEltbSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZpbmFsbHksIGhhbmRsZSBjb21wYXJpc29u
IGJldHdlZW4gdG1wcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5Q29tcGFyZSh3aWR0aCwg
dG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBEb3VibGUgY29tcGFyaXNvbnMgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5n
IHNtYXJ0LgorICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVEb3VibGUoZG91YmxlQ29uZCwgdG1w
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpOworICAgICAgICB9OworCisgICAgICAg
IEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwor
ICAgICAgICBBcmcgcmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bykuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAKKyAgICAgICAgYXV0byBhdHRlbXB0RnVz
ZWQgPSBbJl0gKCkgLT4gSW5zdCB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgICAgIGNhc2UgRXF1YWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgY2FzZSBMZXNzVGhhbjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbik7CisgICAgICAgICAgICBjYXNl
IEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
KTsKKyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpOworICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkdyZWF0ZXJUaGFuT3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICAgICAgICAgIC8vIFdlIHVz
ZSBhIGJvZ3VzIGRvdWJsZSBjb25kaXRpb24gYmVjYXVzZSB0aGVzZSBpbnRlZ2VyIGNvbXBhcmlz
b25zIHdvbid0IGdvdCBkb3duIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBwYXRoIGFueXdheS4K
KyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEJlbG93
OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIGNhc2UgQWJv
dmVFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAg
ICAgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCk7CisgICAgICAgICAgICBjYXNlIEJpdEFuZDogeworICAgICAgICAgICAgICAgIFZhbHVl
KiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9
IHZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIEFyZyBsZWZ0SW1tID0gaW1tKGxl
ZnQpOworICAgICAgICAgICAgICAgIEFyZyByaWdodEltbSA9IGltbShyaWdodCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byB0cnlUZXN0ID0gWyZdICgKKyAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29u
c3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCBsZWZ0LCByaWdodCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCByaWdodCwgbGVmdCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIHRy
eVRlc3RMb2FkSW1tID0gWyZdIChBcmc6OldpZHRoIHdpZHRoLCBCMzo6T3Bjb2RlIGxvYWRPcGNv
ZGUpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJ
bW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIEFyZzo6VW5zaWduZWQpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2FkUHJvbWlz
ZShsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLmlzUmVw
cmVzZW50YWJsZUFzKHdpZHRoLCBBcmc6OlVuc2lnbmVkKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbGVmdEltbSwgbG9hZFByb21p
c2UocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZl
d2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorCisgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4Wikp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGlmIChJ
bnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRo
YXQgaW1tZWRpYXRlcyBhcmUKKyAgICAgICAgICAgICAgICAvLyAzMi1iaXQsIGFuZCB3ZSB3YW50
IHplcm8tZXh0ZW5zaW9uLiBIZW5jZSwgdGhlIGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkIGFz
IGEKKyAgICAgICAgICAgICAgICAvLyAzMi1iaXQgdGVzdC4gTm90ZSB0aGF0IHRoaXMgc3BpdHMg
b24gdGhlIGdyYXZlIG9mIGluZmVyaW9yIGVuZGlhbnMsIHN1Y2ggYXMgdGhlCisgICAgICAgICAg
ICAgICAgLy8gYmlnIG9uZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMzIsIExvYWQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4KKworICAgICAgICAgICAgICAgIEFyZzo6
V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2Fk
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeVRlc3Qod2lkdGgsIHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhbiBpbW1lZGlhdGUgYW5kIGEg
dG1wLgorCisgICAgICAgICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVmdEltbS5pc1JlcHJlc2Vu
dGFibGVBczx1aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlUZXN0KEFyZzo6V2lkdGgzMiwgbGVmdEltbSwgdG1wUHJvbWlzZShyaWdodCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJbW0uaXNSZXByZXNlbnRh
YmxlQXM8dWludDMyX3Q+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdChBcmc6OldpZHRoMzIsIHRtcFByb21pc2UobGVmdCksIHJpZ2h0SW1tKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gRmluYWxseSwganVzdCBkbyB0bXAncy4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5VGVzdCh3aWR0aCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShy
aWdodCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2YWx1ZSA9PSBjdXJyZW50VmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IGF0dGVtcHRGdXNlZCgpKSB7CisgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoSW5zdCByZXN1bHQg
PSB0ZXN0KHdpZHRoLCByZXNDb25kLCB0bXBQcm9taXNlKHZhbHVlKSwgQXJnOjppbW0oLTEpKSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBTb21ldGlt
ZXMgdGhpcyBpcyB0aGUgb25seSBmb3JtIG9mIHRlc3QgYXZhaWxhYmxlLiBXZSBwcmVmZXIgbm90
IHRvIHVzZSB0aGlzIGJlY2F1c2UKKyAgICAgICAgLy8gaXQncyBsZXNzIGNhbm9uaWNhbC4KKyAg
ICAgICAgcmV0dXJuIHRlc3Qod2lkdGgsIHJlc0NvbmQsIHRtcFByb21pc2UodmFsdWUpLCB0bXBQ
cm9taXNlKHZhbHVlKSk7CisgICAgfQorCisgICAgSW5zdCBjcmVhdGVCcmFuY2goVmFsdWUqIHZh
bHVlLCBib29sIGludmVydGVkID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRl
R2VuZXJpY0NvbXBhcmUoCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIFt0aGlzXSAo
CisgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLAor
ICAgICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2Um
IHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
VmFsaWRGb3JtKEJyYW5jaDgsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJyYW5jaDgsIGN1cnJlbnRWYWx1ZSwgcmVsQ29uZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0
aGlzKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgz
MjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaDMyLCBBcmc6OlJl
bENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2gzMiwg
Y3VycmVudFZhbHVlLCByZWxDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQu
Y29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
QnJhbmNoNjQsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJyYW5jaDY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAo
CisgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAor
ICAgICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2Um
IHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
VmFsaWRGb3JtKEJyYW5jaFRlc3Q4LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5r
aW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0OCwgY3VycmVudFZhbHVlLCByZXNDb25kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNv
bnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVz
dDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCcmFuY2hUZXN0MzIsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsK
KyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwg
cmlnaHQua2luZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDY0LCBjdXJyZW50VmFsdWUsIHJl
c0NvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2Um
IGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2lu
ZCgpLCByaWdodC5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoRG91YmxlLCBjdXJyZW50VmFsdWUsIGRvdWJs
ZUNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaW52ZXJ0ZWQpOworICAg
IH0KKworICAgIEluc3QgY3JlYXRlQ29tcGFyZShWYWx1ZSogdmFsdWUsIGJvb2wgaW52ZXJ0ZWQg
PSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAg
ICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgW3RoaXNdICgKKyAgICAgICAgICAgICAgICBB
cmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlbENvbmQsCisgICAgICAgICAgICAgICAgY29u
c3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6V2lkdGg4OgorICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTMyLCBBcmc6
OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29tcGFyZTMyLCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChj
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTY0LCBBcmc6OlJlbENvbmQs
IGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFy
ZTY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChjdXJyZW50VmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBb
dGhpc10gKAorICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVz
Q29uZCwKKyAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQ
cm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkg
eworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShUZXN0MzIsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0MzIsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5j
b25zdW1lKCp0aGlzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShUZXN0
NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXN0NjQsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwg
dG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQXJnJiwgY29uc3QgQXJnUHJvbWlzZSYsIGNvbnN0
IEFyZ1Byb21pc2UmKSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDkwMworICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgaW52ZXJ0ZWQpOworICAgIH0KKwogICAgIC8vIEJlbG93
IGlzIHRoZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNz
ICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KICAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29t
cGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hh
cmluZy4gRm9yIGV4YW1wbGUsCiAgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFu
ZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdp
bmFsCkBAIC04NjgsNiArMTM5Nyw2NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAorICAgIGJvb2wgdHJ5RXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgp
LmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHRyeU5vdEVxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3Rz
Lmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlMZXNzVGhhbigpCisgICAgeworICAgICAg
ICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5R3JlYXRlclRoYW4oKQorICAg
IHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1
ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUxlc3NFcXVh
bCgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3Vy
cmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5
R3JlYXRlckVxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRl
Q29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCB0cnlBYm92ZSgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNy
ZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGJvb2wgdHJ5QmVsb3coKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVu
ZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIHRyeUFib3ZlRXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFz
dCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUJlbG93RXF1YWwoKQorICAgIHsKKyAgICAgICAg
aW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBQYXRjaHBvaW50U3BlY2lhbCogcGF0Y2hwb2lu
dFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgYm9vbCB0cnlQYXRjaHBvaW50KCkKICAgICB7CkBA
IC04ODUsMzQgKzE0NzQsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBDaGVja1NwZWNpYWwqIGNoZWNrQnJhbmNoVGVzdDMyU3BlY2lhbCB7IG51bGxwdHIg
fTsKLSAgICBDaGVja1NwZWNpYWwqIGNoZWNrQnJhbmNoVGVzdDY0U3BlY2lhbCB7IG51bGxwdHIg
fTsKKyAgICBIYXNoTWFwPENoZWNrU3BlY2lhbDo6S2V5LCBDaGVja1NwZWNpYWwqPiBjaGVja1Nw
ZWNpYWxzOwogICAgIGJvb2wgdHJ5Q2hlY2soVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAg
aWYgKCFpc0ludCh2YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBkb3VibGUgYnJhbmNoZXMuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzI3Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyAgICAgICAgSW5zdCBicmFuY2ggPSBjcmVhdGVCcmFuY2godmFsdWUpOwogCi0g
ICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbDsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBzcGVjaWFsID0gZW5zdXJl
U3BlY2lhbChjaGVja0JyYW5jaFRlc3QzMlNwZWNpYWwsIEJyYW5jaFRlc3QzMiwgMyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHNwZWNpYWwg
PSBlbnN1cmVTcGVjaWFsKGNoZWNrQnJhbmNoVGVzdDY0U3BlY2lhbCwgQnJhbmNoVGVzdDY0LCAz
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIENoZWNrU3BlY2lhbDo6S2V5IGtleShicmFuY2gpOworICAgICAgICBhdXRvIHJl
c3VsdCA9IGNoZWNrU3BlY2lhbHMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgICAgIFNwZWNpYWwq
IHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIGtleSk7CiAK
ICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IGN1cnJlbnRWYWx1ZS0+YXM8Q2hlY2tW
YWx1ZT4oKTsKIAotICAgICAgICBJbnN0IGluc3QoCi0gICAgICAgICAgICBQYXRjaCwgY2hlY2tW
YWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpLAotICAgICAgICAgICAgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsKKyAgICAg
ICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOwor
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kVmVjdG9yKGJyYW5jaC5hcmdzKTsKIAogICAgICAgICBm
aWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMSk7CiAKQEAgLTkzNyw0NiArMTUxMSw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgdHJ5QnJhbmNoKFZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYnJhbmNoIGZ1c2lvbiBieSBkZWxlZ2F0aW5nIHRvIGEg
cGF0dGVybiBtYXRjaGVyIGZvciBjb21wYXJpc29ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcyMQotCi0gICAgICAgIC8vIEluIEIzIGl0
J3MgcG9zc2libGUgdG8gYnJhbmNoIG9uIGFueSB2YWx1ZS4gVGhlIHNlbWFudGljcyBvZjoKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gICAgIEJyYW5jaCh2YWx1ZSkKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gQXJlIGd1YXJhbnRlZWQgdG8gYmUgaWRlbnRpY2FsIHRvOgotICAgICAgICAvLwotICAg
ICAgICAvLyAgICAgQnJhbmNoKE5vdEVxdWFsKHZhbHVlLCAwKSkKLQotICAgICAgICBpZiAoIWlz
SW50KHZhbHVlLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRv
dWJsZSBicmFuY2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA3MjcKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBvcGNvZGUgPSBCcmFu
Y2hUZXN0MzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAg
ICAgICAgIG9wY29kZSA9IEJyYW5jaFRlc3Q2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgQXJnIHJlc0NvbmQgPSBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pOwotCi0gICAgICAgIEFyZyBhZGRyID0g
bG9hZEFkZHIodmFsdWUpOwotICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCByZXNDb25k
LmtpbmQoKSwgYWRkci5raW5kKCksIEFyZzo6SW1tKSkgewotICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwodmFsdWUpOwotICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgYWRkciwg
QXJnOjppbW0oLTEpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsK
KyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFuY2godmFsdWUpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAxOTIwMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE4IEBAIENvbnN0NjQgPSBDb25zdDY0KCkKIFN0YWNr
U2xvdCA9IFN0YWNrU2xvdCgpCiBGcmFtZVBvaW50ZXIgPSBGcmFtZVBvaW50ZXIoKQogCisjIFRo
ZXNlIHBhdHRlcm5zIGRlbGVnYXRlIHRvIHRoZSBjb21wYXJpc29uIG1hdGNoZXIuCitFcXVhbCA9
IEVxdWFsKCkKK05vdEVxdWFsID0gTm90RXF1YWwoKQorTGVzc1RoYW4gPSBMZXNzVGhhbigpCitH
cmVhdGVyVGhhbiA9IEdyZWF0ZXJUaGFuKCkKK0xlc3NFcXVhbCA9IExlc3NFcXVhbCgpCitHcmVh
dGVyRXF1YWwgPSBHcmVhdGVyRXF1YWwoKQorQWJvdmUgPSBBYm92ZSgpCitCZWxvdyA9IEJlbG93
KCkKK0Fib3ZlRXF1YWwgPSBBYm92ZUVxdWFsKCkKK0JlbG93RXF1YWwgPSBCZWxvd0VxdWFsKCkK
KwogUGF0Y2hwb2ludCA9IFBhdGNocG9pbnQoKQogQ2hlY2sgPSBDaGVjayh2YWx1ZSkKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw0NiBAQAogCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitPcHRpb25hbDxPcGNvZGU+IGludmVydGVkQ29t
cGFyZShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsK
KyAgICBjYXNlIEVxdWFsOgorICAgICAgICByZXR1cm4gTm90RXF1YWw7CisgICAgY2FzZSBOb3RF
cXVhbDoKKyAgICAgICAgcmV0dXJuIEVxdWFsOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBHcmVhdGVyRXF1YWw7CisgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGlmIChp
c0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBMZXNzRXF1YWw7CisgICAgICAgIHJldHVy
biBOdWxsb3B0OworICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICBpZiAoaXNJbnQodHlwZSkp
CisgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW47CisgICAgICAgIHJldHVybiBOdWxsb3B0
OworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gTGVzc1RoYW47CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIGNh
c2UgQWJvdmU6CisgICAgICAgIHJldHVybiBCZWxvd0VxdWFsOworICAgIGNhc2UgQmVsb3c6Cisg
ICAgICAgIHJldHVybiBBYm92ZUVxdWFsOworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAg
cmV0dXJuIEJlbG93OworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEFib3Zl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKIG5hbWVzcGFjZSBXVEYgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOjpCMzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lv
biAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1
ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNzgs
NyArMTgwLDcgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICAvLyBKdW1wLiBVc2VzIHRo
ZSBDb250cm9sVmFsdWUgY2xhc3MuCiAgICAgSnVtcCwKICAgICAKLSAgICAvLyBQb2x5bW9ycGhp
YyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1
YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3
aXRoIGFueSBpbnRlZ2VyIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2Vz
IHRoZQogICAgIC8vIENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNz
b3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29yLgogICAgIEJyYW5jaCwKIApAQCAtMjA1LDYgKzIw
Nyw4IEBAIGlubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCiAgICAgfQogfQog
CitPcHRpb25hbDxPcGNvZGU+IGludmVydGVkQ29tcGFyZShPcGNvZGUsIFR5cGUpOworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDM4IEBAIEJhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGYKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitWYWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChU
eXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDMyVmFsdWU+KE9yaWdpbigpLCBzdGF0
aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIHJldHVy
biBhZGQ8Q29uc3Q2NFZhbHVlPihPcmlnaW4oKSwgdmFsdWUpOworICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICByZXR1cm4gYWRkPENvbnN0RG91YmxlVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitWYWx1
ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUpCit7CisgICAg
aW50MzJfdCB2YWx1ZSA9IDA7CisgICAgc3dpdGNoICh0cmlTdGF0ZSkgeworICAgIGNhc2UgRmFs
c2VUcmlTdGF0ZToKKyAgICAgICAgdmFsdWUgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRydWVUcmlTdGF0ZToKKyAgICAgICAgdmFsdWUgPSAxOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE1peGVkVHJpU3RhdGU6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHJldHVybiBhZGRJbnRDb25zdGFudChJbnQzMiwgdmFsdWUpOworfQorCiB2b2lkIFByb2NlZHVy
ZTo6cmVzZXRWYWx1ZU93bmVycygpCiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0
aGlzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNp
b24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAor
I2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKICNpbmNsdWRlIDx3dGYv
QmFnLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVHJp
U3RhdGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewpAQCAtNTMsNiArNTUsMTEgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYWRk
KEFyZ3VtZW50cy4uLik7CiAKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVHlwZSwgaW50NjRf
dCB2YWx1ZSk7CisKKyAgICAvLyBSZXR1cm5zIG51bGwgZm9yIE1peGVkVHJpU3RhdGUuCisgICAg
VmFsdWUqIGFkZEJvb2xDb25zdGFudChUcmlTdGF0ZSk7CisKICAgICB2b2lkIHJlc2V0VmFsdWVP
d25lcnMoKTsKICAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5MjAz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNDIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CiAKIG5hbWVzcGFjZSB7CiAKKy8vIFRoZSBnb2FsIG9mIHRoaXMgcGhhc2UgaXMgdG86Cisv
LworLy8gLSBSZXBsYWNlIG9wZXJhdGlvbnMgd2l0aCBsZXNzIGV4cGVuc2l2ZSB2YXJpYW50cy4g
VGhpcyBpbmNsdWRlcyBjb25zdGFudCBmb2xkaW5nIGFuZCBjbGFzc2ljCisvLyAgIHN0cmVuZ3Ro
IHJlZHVjdGlvbnMgbGlrZSB0dXJuaW5nIE11bCh4LCAxIDw8IGspIGludG8gU2hsKHgsIGspLgor
Ly8KKy8vIC0gUmVhc3NvY2lhdGUgY29uc3RhbnQgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIExv
YWQoQWRkKHgsIGMpKSBpcyB0dXJuZWQgaW50byBMb2FkKHgsIG9mZnNldCA9IGMpCisvLyAgIGFu
ZCBBZGQoQWRkKHgsIGMpLCBkKSBpcyB0dXJuZWQgaW50byBBZGQoeCwgYyArIGQpLgorLy8KKy8v
IC0gQ2Fub25pY2FsaXplIG9wZXJhdGlvbnMuIFRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIGl0
J3Mgbm90IGF0IGFsbCBvYnZpb3VzIHdoaWNoIGtpbmQgb2YKKy8vICAgb3BlcmF0aW9uIGlzIGxl
c3MgZXhwZW5zaXZlLCBidXQgaXQncyB1c2VmdWwgZm9yIHN1YnNlcXVlbnQgcGhhc2VzIC0gcGFy
dGljdWxhcmx5IExvd2VyVG9BaXIgLQorLy8gICB0byBoYXZlIG9ubHkgb25lIHdheSBvZiByZXBy
ZXNlbnRpbmcgdGhpbmdzLgorLy8KKy8vIFRoaXMgcGhhc2UgcnVucyB0byBmaXhwb2ludC4gVGhl
cmVmb3JlLCB0aGUgY2Fub25pY2FsaXphdGlvbnMgbXVzdCBiZSBkZXNpZ25lZCB0byBiZSBtb25v
dG9uaWMuCisvLyBGb3IgZXhhbXBsZSwgaWYgd2UgaGFkIGEgY2Fub25pY2FsaXphdGlvbiB0aGF0
IHNhaWQgdGhhdCBBZGQoeCwgLWMpIHNob3VsZCBiZSBTdWIoeCwgYykgYW5kCisvLyBhbm90aGVy
IGNhbm9uaWNhbGl6YXRpb24gdGhhdCBzYWlkIHRoYXQgU3ViKHgsIGQpIHNob3VsZCBiZSBBZGQo
eCwgLWQpLCB0aGVuIHRoaXMgcGhhc2Ugd291bGQgZW5kCisvLyB1cCBydW5uaW5nIGZvcmV2ZXIu
IFdlIGRvbid0IHdhbnQgdGhhdC4KKy8vCisvLyBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gcHJpb3Jp
dGl6ZSBjZXJ0YWluIGNhbm9uaWNhbCBmb3JtcyBvdmVyIG90aGVycy4gTmFpdmVseSwgd2Ugd2Fu
dCBzdHJlbmd0aAorLy8gcmVkdWN0aW9uIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHZhbHVlcywg
YW5kIHNvIGEgZm9ybSBpbnZvbHZpbmcgZmV3ZXIgdG90YWwgdmFsdWVzIGlzIG1vcmUKKy8vIGNh
bm9uaWNhbC4gQnV0IHdlIG1pZ2h0IGJyZWFrIHRoaXMsIGZvciBleGFtcGxlIHdoZW4gcmVkdWNp
bmcgc3RyZW5ndGggb2YgTXVsKHgsIDkpLiBUaGlzIGNvdWxkIGJlCisvLyBiZXR0ZXIgd3JpdHRl
biBhcyBBZGQoU2hsKHgsIDMpLCB4KSwgd2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHJlcHJlc2Vu
dGFibGUgdXNpbmcgYSBzaW5nbGUKKy8vIGluc3RydWN0aW9uIG9uIHg4Ni4KKy8vCisvLyBIZXJl
IGFyZSBzb21lIG9mIHRoZSBydWxlcyB3ZSBoYXZlOgorLy8KKy8vIENhbm9uaWNhbCBmb3JtIG9m
IGxvZ2ljYWwgbm90OiBCaXRYb3IodmFsdWUsIDEpLiBXZSBtYXkgaGF2ZSB0byBhdm9pZCB1c2lu
ZyB0aGlzIGZvcm0gaWYgd2UgZG9uJ3QKKy8vIGtub3cgZm9yIHN1cmUgdGhhdCAndmFsdWUnIGlz
IDAtb3ItMSAoaS5lLiByZXR1cm5zQm9vbCkuIEluIHRoYXQgY2FzZSB3ZSBmYWxsIGJhY2sgb24K
Ky8vIEVxdWFsKHZhbHVlLCAwKS4KKy8vCisvLyBDYW5vbmljYWwgZm9ybSBvZiBjb21tdXRhdGl2
ZSBvcGVyYXRpb25zOiBpZiB0aGUgb3BlcmF0aW9uIGludm9sdmVzIGEgY29uc3RhbnQsIHRoZSBj
b25zdGFudCBtdXN0CisvLyBjb21lIHNlY29uZC4gQWRkKHgsIGNvbnN0YW50KSBpcyBjYW5vbmlj
YWwsIHdoaWxlIEFkZChjb25zdGFudCwgeCkgaXMgbm90LiBJZiB0aGVyZSBhcmUgbm8KKy8vIGNv
bnN0YW50cyB0aGVuIHRoZSBjYW5vbmljYWwgZm9ybSBpbnZvbHZlcyB0aGUgbG93ZXItaW5kZXhl
ZCB2YWx1ZSBmaXJzdC4gR2l2ZW4gQWRkKHgsIHkpLCBpdCdzCisvLyBjYW5vbmljYWwgaWYgeC0+
aW5kZXgoKSA8PSB5LT5pbmRleCgpLgorCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKwogY2xhc3Mg
UmVkdWNlU3RyZW5ndGggewogcHVibGljOgogICAgIFJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYg
cHJvYykKQEAgLTU0LDEwICs5MCwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBydW4oKQogICAgIHsK
ICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAw
OwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIG1fY2hhbmdlZENGRyA9IGZhbHNlOwogCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlZHVjZSBzdHJlbmd0aCBJUiBiZWZvcmUgaXRlcmF0
aW9uICMiLCArK2luZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKG1fcHJvYyk7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJs
b2NrOwogICAgICAgICAgICAgICAgIApAQCAtMjU3LDE5ICsyOTksMTkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQml0WG9yKGNvbXBhcmUsIDEpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGludmVydGVk
Q29tcGFyZQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7
CisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBpbnZlcnRlZENvbXBhcmUgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+aW52ZXJ0ZWRDb21wYXJlKG1fcHJvYykpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShpbnZlcnRlZENvbXBhcmUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVlWCwgdmFsdWVYKQogICAgICAgICAgICAgLy8gSW50
byB0aGlzOiB6ZXJvLWNvbnN0YW50LgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
ID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHplcm9Db25z
dGFudDsKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKQotICAg
ICAgICAgICAgICAgICAgICB6ZXJvQ29uc3RhbnQgPSBtX3Byb2MuYWRkPENvbnN0MzJWYWx1ZT4o
bV92YWx1ZS0+b3JpZ2luKCksIDApOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWUt
PnR5cGUoKSA9PSBJbnQ2NCkKLSAgICAgICAgICAgICAgICAgICAgemVyb0NvbnN0YW50ID0gbV9w
cm9jLmFkZDxDb25zdDY0VmFsdWU+KG1fdmFsdWUtPm9yaWdpbigpLCAwKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZS0+
dHlwZSgpID09IERvdWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIHplcm9Db25zdGFudCA9IG1f
cHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4obV92YWx1ZS0+b3JpZ2luKCksIDApOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKHplcm9Db25z
dGFudCk7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50
Q29uc3RhbnQobV92YWx1ZS0+dHlwZSgpLCAwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKQEAgLTMzOCwxNiArMzgwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgRXF1YWw6CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAKLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogRXF1YWwoRXF1YWwoeCwgMCksIDApCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IE5vdEVxdWFsKHgsIDApCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPm9wY29kZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDApCi0g
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0xpa2VaZXJv
KCkpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoYm9vbCwgMCkKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2wsIDEpCisgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIo
MCkpIHsKICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgIE5vdEVxdWFsLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSkpOworICAgICAgICAgICAgICAgICAgICBCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgwKSwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkKICAgICAgICAgICAgIC8vIEludG8gdGhpczog
Ym9vbAogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYm
IG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CkBAIC0zNTYsMTMgKzM5NywxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAvLyBGSVhNRTogSGF2ZSBhIGNvbXBhcmUtZmxpcHBpbmcgb3B0aW1pemF0aW9uLCBsaWtl
IEVxdWFsKExlc3NUaGFuKGEsIGIpLCAwKSB0dXJucyBpbnRvCi0gICAgICAgICAgICAvLyBHcmVh
dGVyRXF1YWwoYSwgYikuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNzI2Ci0KICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwo
Y29uc3QxLCBjb25zdDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25z
dDIKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmVx
dWFsQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOb3RFcXVhbDoK
QEAgLTM4OCw3ICs0MjYsNDggQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBOb3RFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29u
c3QxICE9IGNvbnN0MgotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5j
aGlsZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7Cisg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPm5vdEVxdWFsQ29uc3RhbnQobV92YWx1
ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExlc3NU
aGFuOgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBt
X3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzVGhhbkNvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRl
clRoYW5Db25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDApLT5sZXNzRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQWJvdmU6CisgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkp
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEp
KSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBYm92ZUVxdWFsOgorICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRk
Qm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5hYm92ZUVxdWFsQ29uc3RhbnQobV92YWx1
ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJlbG93
RXF1YWw6CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAg
IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93RXF1YWxDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgQnJhbmNoOiB7CkBAIC0zOTYsMTQgKzQ3NSwyNCBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChOb3RFcXVhbCh4LCAwKSkKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQnJhbmNoKHgpCi0gICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gTm90RXF1YWwgJiYgYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzTGlr
ZVplcm8oKSkgeworICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hpbGQoMCktPm9wY29kZSgpID09
IE5vdEVxdWFsICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewogICAg
ICAgICAgICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgw
KTsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChFcXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkK
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgsIGVsc2UsIHRoZW4pCi0gICAgICAg
ICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgYnJhbmNoLT5j
aGlsZCgwKS0+Y2hpbGQoMSktPmlzTGlrZVplcm8oKSkgeworICAgICAgICAgICAgaWYgKGJyYW5j
aC0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5pc0ludCgwKSkgeworICAgICAgICAgICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFu
Y2gtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYnJhbmNo
LT50YWtlbigpLCBicmFuY2gtPm5vdFRha2VuKCkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQnJhbmNoKEJpdFhvcihib29sLCAxKSwgdGhlbiwgZWxzZSkKKyAgICAgICAgICAg
IC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIGVsc2UsIHRoZW4pCisgICAgICAgICAgICBpZiAo
YnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICAgICAgICAgJiYg
YnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50MzIoMSkKKyAgICAgICAgICAgICAgICAm
JiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgewogICAgICAgICAg
ICAgICAgIGJyYW5jaC0+Y2hpbGQoMCkgPSBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAg
ICAgICAgICAgICAgICBzdGQ6OnN3YXAoYnJhbmNoLT50YWtlbigpLCBicmFuY2gtPm5vdFRha2Vu
KCkpOwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwx
MSArMjkxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51
bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgICAgICBjYXNlIFJldHVy
bjoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
PT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUo
KSksICgiQXQgIiwgKnZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCM0NDYWxs
VmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgogI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1N0
YWNrU2xvdFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgpAQCAtMTQ3LDEzICsxNDgsNjIgQEAgVmFsdWUqIFZhbHVlOjpiaXRY
b3JDb25zdGFudChQcm9jZWR1cmUmLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSog
VmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVHJpU3RhdGUg
VmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6bm90RXF1
YWxDb25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9
CisKK1RyaVN0YXRlIFZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAg
ICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUgVmFsdWU6OmdyZWF0ZXJUaGFu
Q29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQor
CitUcmlTdGF0ZSBWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAg
IHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlckVxdWFs
Q29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQor
CitUcmlTdGF0ZSBWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjpiZWxvd0NvbnN0YW50KFZh
bHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUg
VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1p
eGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFs
dWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1WYWx1ZSogVmFs
dWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZh
bHVlOjppbnZlcnRlZENvbXBhcmUoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAogeworICAgIGlmICgh
bnVtQ2hpbGRyZW4oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKE9wdGlvbmFs
PE9wY29kZT4gaW52ZXJ0ZWRPcGNvZGUgPSBCMzo6aW52ZXJ0ZWRDb21wYXJlKG9wY29kZSgpLCBj
aGlsZCgwKS0+dHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPFZhbHVlPigqaW52ZXJ0
ZWRPcGNvZGUsIHR5cGUoKSwgb3JpZ2luKCksIGNoaWxkcmVuKCkpOwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5
MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNSw4ICsxMTUsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmFsdWUqIGJpdEFu
ZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBW
YWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogICAg
IHZpcnR1YWwgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFRyaVN0YXRl
IGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRl
IG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0
YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRy
aVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdDsKKworICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIGNvbXBhcmlzb24gdGhlbiB0
aGlzIHJldHVybnMgdGhlIGludmVydGVkIGZvcm0gb2YgdGhhdCBjb21wYXJpc29uLCBpZgorICAg
IC8vIHBvc3NpYmxlLiBJdCBjYW4gYmUgaW1wb3NzaWJsZSBmb3IgZG91YmxlIGNvbXBhcmlzb25z
LCB3aGVyZSBmb3IgZXhhbXBsZSBMZXNzVGhhbiBhbmQKKyAgICAvLyBHcmVhdGVyRXF1YWwgYmVo
YXZlIGRpZmZlcmVudGx5LiBJZiB0aGlzIHJldHVybnMgYSB2YWx1ZSwgaXQgaXMgYSBuZXcgdmFs
dWUsIHdoaWNoIG11c3QgYmUKKyAgICAvLyBlaXRoZXIgaW5zZXJ0ZWQgaW50byBzb21lIGJsb2Nr
IG9yIGRlbGV0ZWQuCisgICAgVmFsdWUqIGludmVydGVkQ29tcGFyZShQcm9jZWR1cmUmKSBjb25z
dDsKIAogICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKICAgICBpbnQzMl90IGFzSW50MzIoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIw
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAyMyw2ICsyMDIzLDE1NCBAQCB2b2lkIHRlc3RTaW1wbGVDaGVjaygpCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oY29kZSwgMSkgPT0gNDIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
ZWZ0RnVuY3RvciwgdHlwZW5hbWUgUmlnaHRGdW5jdG9yPgordm9pZCBnZW5lcmljVGVzdEJyYW5j
aENvbXBhcmUoCisgICAgQjM6Ok9wY29kZSBvcGNvZGUsIGNvbnN0IExlZnRGdW5jdG9yJiBsZWZ0
RnVuY3RvciwgY29uc3QgUmlnaHRGdW5jdG9yJiByaWdodEZ1bmN0b3IsCisgICAgaW50IGxlZnQs
IGludCByaWdodCwgaW50IHJlc3VsdCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRoZW5DYXNl
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJvYy5hZGRC
bG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHBy
b2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBvcGNvZGUsIE9yaWdpbigpLCBsZWZ0RnVuY3Rvcihyb290LCBwcm9j
KSwgcmlnaHRGdW5jdG9yKHJvb3QsIHByb2MpKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRo
ZW5DYXNlKSwgRnJlcXVlbnRlZEJsb2NrKGVsc2VDYXNlKSk7CisKKyAgICAvLyBXZSB1c2UgYSBw
YXRjaHBvaW50IG9uIHRoZSB0aGVuIGNhc2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGdl
dCBpZi1jb252ZXJ0ZWQuCisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gdGhlbkNh
c2UtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEludDMyLCBPcmlnaW4oKSk7Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAg
ICB0aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcGF0Y2hwb2ludCk7CisKKyAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4o
CisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIGVsc2VDYXNlLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGxlZnQsIHJpZ2h0KSA9PSByZXN1bHQpOworfQorCit2b2lk
IHRlc3RCcmFuY2hDb21wYXJlKEIzOjpPcGNvZGUgb3Bjb2RlLCBpbnQgbGVmdCwgaW50IHJpZ2h0
LCBpbnQgcmVzdWx0KQoreworICAgIC8vIFRlc3QgdG1wLXRvLXRtcC4KKyAgICBnZW5lcmljVGVz
dEJyYW5jaENvbXBhcmUoCisgICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2Nr
KiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAor
ICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9LAorICAgICAgICBb
Jl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJl
dHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAg
IH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBpbW0tdG8t
dG1wLgorICAgIGdlbmVyaWNUZXN0QnJhbmNoQ29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAg
ICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAg
ICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGxlZnQpOworICAgICAgICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9j
ZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCBy
ZXN1bHQpOworCisgICAgLy8gVGVzdCB0bXAtdG8taW1tLgorICAgIGdlbmVyaWNUZXN0QnJhbmNo
Q29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2Nr
LCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFz
aWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcmlnaHQpOworICAg
ICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKworICAgIC8vIFRlc3QgaW1t
LXRvLWltbS4KKyAgICBnZW5lcmljVGVzdEJyYW5jaENvbXBhcmUoCisgICAgICAgIG9wY29kZSwK
KyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAg
ICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBsZWZ0KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywg
UHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCByaWdodCk7CisgICAgICAgIH0sCisgICAgICAg
IGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBhZGRyLXRvLXRtcAorICAgIGlu
dCBzbG90ID0gbGVmdDsKKyAgICBnZW5lcmljVGVzdEJyYW5jaENvbXBhcmUoCisgICAgICAgIG9w
Y29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7
CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAg
IGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KSk7
CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYg
cHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9j
ay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3VsdCk7
CisKKyAgICAvLyBUZXN0IGFkZHItdG8taW1tCisgICAgc2xvdCA9IGxlZnQ7CisgICAgZ2VuZXJp
Y1Rlc3RCcmFuY2hDb21wYXJlKAorICAgICAgICBvcGNvZGUsCisgICAgICAgIFsmXSAoQmFzaWNC
bG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCkpOworICAgICAgICB9LAorICAgICAgICBbJl0g
KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVy
biBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHJpZ2h0KTsK
KyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisKKyAgICAvLyBUZXN0
IHRtcC10by1hZGRyCisgICAgc2xvdCA9IHJpZ2h0OworICAgIGdlbmVyaWNUZXN0QnJhbmNoQ29t
cGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQ
cm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNC
bG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCkpOworICAgICAgICB9LAorICAgICAgICBsZWZ0
LCByaWdodCwgcmVzdWx0KTsKKworICAgIC8vIFRlc3QgaW1tLXRvLWFkZHIKKyAgICBzbG90ID0g
cmlnaHQ7CisgICAgZ2VuZXJpY1Rlc3RCcmFuY2hDb21wYXJlKAorICAgICAgICBvcGNvZGUsCisg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAg
ICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbGVmdCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFBy
b2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAmc2xvdCkpOworICAgICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0
KTsKK30KKwogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjMwMCw2
ICsyNDQ4LDU1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFNp
bXBsZVBhdGNocG9pbnQoKSk7CiAgICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsKIAorICAgIFJV
Tih0ZXN0QnJhbmNoQ29tcGFyZShFcXVhbCwgNDIsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFu
Y2hDb21wYXJlKEVxdWFsLCA0MiwgNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUo
RXF1YWwsIC00MiwgLTQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEVxdWFsLCAt
NDIsIC00MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShOb3RFcXVhbCwgNDIsIDQy
LCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKE5vdEVxdWFsLCA0MiwgNDMsIDEpKTsK
KyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoTm90RXF1YWwsIC00MiwgLTQyLCAwKSk7CisgICAg
UlVOKHRlc3RCcmFuY2hDb21wYXJlKE5vdEVxdWFsLCAtNDIsIC00MywgMSkpOworICAgIFJVTih0
ZXN0QnJhbmNoQ29tcGFyZShMZXNzVGhhbiwgNDIsIDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFu
Y2hDb21wYXJlKExlc3NUaGFuLCA0MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBh
cmUoTGVzc1RoYW4sIDQzLCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNz
VGhhbiwgLTQyLCA0MywgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzVGhhbiwg
NDMsIC00MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyVGhhbiwgNDIs
IDQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJUaGFuLCA0MiwgNDMs
IDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoR3JlYXRlclRoYW4sIDQzLCA0MiwgMSkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyVGhhbiwgLTQyLCA0MywgMCkpOwor
ICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyVGhhbiwgNDMsIC00MiwgMSkpOworICAg
IFJVTih0ZXN0QnJhbmNoQ29tcGFyZShMZXNzRXF1YWwsIDQyLCA0MiwgMSkpOworICAgIFJVTih0
ZXN0QnJhbmNoQ29tcGFyZShMZXNzRXF1YWwsIDQyLCA0MywgMSkpOworICAgIFJVTih0ZXN0QnJh
bmNoQ29tcGFyZShMZXNzRXF1YWwsIDQzLCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29t
cGFyZShMZXNzRXF1YWwsIC00MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUo
TGVzc0VxdWFsLCA0MywgLTQyLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0
ZXJFcXVhbCwgNDIsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJF
cXVhbCwgNDIsIDQzLCAwKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJFcXVh
bCwgNDMsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEdyZWF0ZXJFcXVhbCwg
LTQyLCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShHcmVhdGVyRXF1YWwsIDQz
LCAtNDIsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3csIDQyLCA0MiwgMCkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShCZWxvdywgNDIsIDQzLCAxKSk7CisgICAgUlVO
KHRlc3RCcmFuY2hDb21wYXJlKEJlbG93LCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5j
aENvbXBhcmUoQmVsb3csIC00MiwgNDMsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUo
QmVsb3csIDQzLCAtNDIsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmUsIDQy
LCA0MiwgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZSwgNDIsIDQzLCAwKSk7
CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlLCA0MywgNDIsIDEpKTsKKyAgICBSVU4o
dGVzdEJyYW5jaENvbXBhcmUoQWJvdmUsIC00MiwgNDMsIDEpKTsKKyAgICBSVU4odGVzdEJyYW5j
aENvbXBhcmUoQWJvdmUsIDQzLCAtNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUo
QmVsb3dFcXVhbCwgNDIsIDQyLCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEJlbG93
RXF1YWwsIDQyLCA0MywgMSkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShCZWxvd0VxdWFs
LCA0MywgNDIsIDApKTsKKyAgICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQmVsb3dFcXVhbCwgLTQy
LCA0MywgMCkpOworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShCZWxvd0VxdWFsLCA0MywgLTQy
LCAxKSk7CisgICAgUlVOKHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlRXF1YWwsIDQyLCA0MiwgMSkp
OworICAgIFJVTih0ZXN0QnJhbmNoQ29tcGFyZShBYm92ZUVxdWFsLCA0MiwgNDMsIDApKTsKKyAg
ICBSVU4odGVzdEJyYW5jaENvbXBhcmUoQWJvdmVFcXVhbCwgNDMsIDQyLCAxKSk7CisgICAgUlVO
KHRlc3RCcmFuY2hDb21wYXJlKEFib3ZlRXF1YWwsIC00MiwgNDMsIDEpKTsKKyAgICBSVU4odGVz
dEJyYW5jaENvbXBhcmUoQWJvdmVFcXVhbCwgNDMsIC00MiwgMCkpOworCiAgICAgaWYgKCFkaWRS
dW4pCiAgICAgICAgIHVzYWdlKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDM0IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorYm9vbCBBcmc6
OmlzUmVwcmVzZW50YWJsZUFzKFdpZHRoIHdpZHRoLCBTaWduZWRuZXNzIHNpZ25lZG5lc3MpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChzaWduZWRuZXNzKSB7CisgICAgY2FzZSBTaWduZWQ6CisgICAg
ICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgY2FzZSBXaWR0aDg6CisgICAgICAgICAgICBy
ZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8aW50OF90PigpOworICAgICAgICBjYXNlIFdpZHRoMTY6
CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8aW50MTZfdD4oKTsKKyAgICAg
ICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPGlu
dDMyX3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgIHJldHVybiBpc1Jl
cHJlc2VudGFibGVBczxpbnQ2NF90PigpOworICAgICAgICB9CisgICAgY2FzZSBVbnNpZ25lZDoK
KyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAg
ICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50OF90PigpOworICAgICAgICBjYXNlIFdp
ZHRoMTY6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8dWludDE2X3Q+KCk7
CisgICAgICAgIGNhc2UgV2lkdGgzMjoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFi
bGVBczx1aW50MzJfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgcmV0
dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQ2NF90PigpOworICAgICAgICB9CisgICAgfQorfQor
CiB2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIHN3aXRjaCAo
bV9raW5kKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlz
aW9uIDE5MjAzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsMTggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKIAorICAgIGVudW0gV2lkdGggOiBpbnQ4X3Qgewor
ICAgICAgICBXaWR0aDgsCisgICAgICAgIFdpZHRoMTYsCisgICAgICAgIFdpZHRoMzIsCisgICAg
ICAgIFdpZHRoNjQKKyAgICB9OworCisgICAgZW51bSBTaWduZWRuZXNzIDogaW50OF90IHsKKyAg
ICAgICAgU2lnbmVkLAorICAgICAgICBVbnNpZ25lZAorICAgIH07CisKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNlIHRoZSBBcmcu
IEl0J3MgZGVsaWJlcmF0ZWx5IGZhbHNlIGZvcgogICAgIC8vIFVzZUFkZHIsIHNpbmNlIGlzVXNl
KCkgZm9yIGFuIEFyZzo6YWRkciBtZWFucyB0aGF0IHdlIGFyZSBsb2FkaW5nIGZyb20gdGhlIGFk
ZHJlc3MuCiAgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSByb2xlKQpAQCAtMTUzLDYgKzE2NSwy
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHUDsKICAgICB9CiAKKyAgICBzdGF0aWMgV2lk
dGggd2lkdGhGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBXaWR0aDg7CisgICAgICAgIGNhc2UgSW50MzI6Cisg
ICAgICAgICAgICByZXR1cm4gV2lkdGgzMjsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
Y2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gV2lkdGg2NDsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIEFyZygpCiAgICAgICAgIDogbV9raW5kKEludmFsaWQpCiAgICAgewpAQCAtMzc2
LDYgKzQwMiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgaXNSZXByZXNlbnRhYmxlQXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEIzOjppc1JlcHJlc2VudGFibGVBczxUPih2YWx1
ZSgpKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVwcmVzZW50YWJsZUFzKFdpZHRoLCBTaWduZWRu
ZXNzKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBhc051bWJlcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odmFsdWUoKSk7Cisg
ICAgfQorCiAgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gSW1tNjQpOwpAQCAtNjg0LDYgKzcyNCw0MSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uPiht
X29mZnNldCk7CiAgICAgfQogCisgICAgLy8gVGhpcyBpcyB2YWxpZCBmb3IgY29uZGl0aW9uIGFy
Z3VtZW50cy4gSXQgd2lsbCBpbnZlcnQgdGhlbS4KKyAgICBBcmcgaW52ZXJ0ZWQoYm9vbCBpbnZl
cnRlZCA9IHRydWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWludmVydGVkKQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBj
YXNlIFJlbENvbmQ6CisgICAgICAgICAgICByZXR1cm4gcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
aW52ZXJ0KGFzUmVsYXRpb25hbENvbmRpdGlvbigpKSk7CisgICAgICAgIGNhc2UgUmVzQ29uZDoK
KyAgICAgICAgICAgIHJldHVybiByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjppbnZlcnQoYXNSZXN1
bHRDb25kaXRpb24oKSkpOworICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAgICAgICAgICBy
ZXR1cm4gZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzRG91YmxlQ29uZGl0aW9u
KCkpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBBcmcgZmxpcHBlZChib29sIGZsaXBwZWQgPSB0cnVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFmbGlwcGVkKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICByZXR1
cm4gcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6ZmxpcChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSkp
OworICAgIH0KKworICAgIGJvb2wgaXNTaWduZWRDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1JlbENvbmQoKSAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNTaWduZWQoYXNSZWxhdGlv
bmFsQ29uZGl0aW9uKCkpOworICAgIH0KKworICAgIGJvb2wgaXNVbnNpZ25lZENvbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzUmVsQ29uZCgpICYmIE1hY3JvQXNzZW1ibGVyOjpp
c1Vuc2lnbmVkKGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICB9CisKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2
aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9w
Y29kZSAhPSBOb3AgfHwgYXJncy5zaXplKCk7IH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBm
dW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRo
ZW0gZm9yIHRoaW5ncyB0aGF0CiAgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRp
dGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdy
ZQogICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTIwMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5n
IGNvcHkpCkBAIC0xODEsMTIgKzE4MSw1MiBAQCBNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgogTW92
ZURvdWJsZVRvNjQgVTpGLCBEOkcKICAgICBUbXAsIFRtcAogCitDb21wYXJlMzIgVTpHLCBVOkcs
IFU6RywgRDpHCisgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcAorICAgIFJlbENvbmQsIFRtcCwg
SW1tLCBUbXAKKworQ29tcGFyZTY0IFU6RywgVTpHLCBVOkcsIEQ6RworICAgIFJlbENvbmQsIFRt
cCwgSW1tLCBUbXAKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wCisKK1Rlc3QzMiBVOkcsIFU6
RywgVTpHLCBEOkcKKyAgICBSZXNDb25kLCBBZGRyLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIFRt
cCwgVG1wLCBUbXAKKworVGVzdDY0IFU6RywgVTpHLCBVOkcsIEQ6RworICAgIFJlc0NvbmQsIFRt
cCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1wCisKK0JyYW5jaDggVTpHLCBV
OkcsIFU6RyAvYnJhbmNoCisgICAgUmVsQ29uZCwgQWRkciwgSW1tCisgICAgUmVsQ29uZCwgSW5k
ZXgsIEltbQorCitCcmFuY2gzMiBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZWxDb25kLCBB
ZGRyLCBJbW0KKyAgICBSZWxDb25kLCBUbXAsIFRtcAorICAgIFJlbENvbmQsIFRtcCwgSW1tCisg
ICAgUmVsQ29uZCwgVG1wLCBBZGRyCisgICAgUmVsQ29uZCwgQWRkciwgVG1wCisgICAgUmVsQ29u
ZCwgSW5kZXgsIEltbQorCitCcmFuY2g2NCBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZWxD
b25kLCBUbXAsIFRtcAorICAgIFJlbENvbmQsIFRtcCwgQWRkcgorICAgIFJlbENvbmQsIEFkZHIs
IFRtcAorICAgIFJlbENvbmQsIEluZGV4LCBUbXAKKworQnJhbmNoVGVzdDggVTpHLCBVOkcsIFU6
RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgQWRkciwgSW1tCisgICAgUmVzQ29uZCwgSW5kZXgsIElt
bQorCiBCcmFuY2hUZXN0MzIgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1w
LCBUbXAKICAgICBSZXNDb25kLCBUbXAsIEltbQogICAgIFJlc0NvbmQsIEFkZHIsIEltbQogICAg
IFJlc0NvbmQsIEluZGV4LCBJbW0KIAorIyBXYXJuaW5nOiBmb3JtcyB0aGF0IHRha2UgYW4gaW1t
ZWRpYXRlIHdpbGwgc2lnbi1leHRlbmQgdGhlaXIgaW1tZWRpYXRlLiBZb3UgcHJvYmFibHkgd2Fu
dAorIyBCcmFuY2hUZXN0MzIgaW4gbW9zdCBjYXNlcyB3aGVyZSB5b3UgdXNlIGFuIGltbWVkaWF0
ZS4KIEJyYW5jaFRlc3Q2NCBVOkcsIFU6RywgVTpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAs
IFRtcAogICAgIFJlc0NvbmQsIFRtcCwgSW1tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAxOTIwMzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcg
Y29weSkKQEAgLTQxMCw3ICs0MTAsNyBAQCBkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9y
bXMsIGNvbHVtCiAgICAgZW5kCiAKICAgICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5k
cy5sZW5ndGgKLSAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAg
IHJhaXNlICJEaWQgbm90IHJlZHVjZSB0byBvbmUgZm9ybTogI3tmb3Jtcy5pbnNwZWN0fSIgdW5s
ZXNzIGZvcm1zLmxlbmd0aCA9PSAxCiAgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQogICAgICAg
ICByZXR1cm4KICAgICBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTIwMzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3
NCw3ICszNDc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAog
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7CiAgICAgICAg
ICAgICBpbnQzMl90IGRpdmlzb3IgPSBub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAg
ICAgICAgaWYgKGRpdmlzb3IgPiAxICYmIGhhc09uZUJpdFNldChkaXZpc29yKSkgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvZ2FyaXRobSA9IFdURjo6ZmFzdExvZzIoZGl2aXNvcik7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9nYXJpdGhtID0gV1RGOjpmYXN0TG9nMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oZGl2aXNvcikpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBkaXZpZGVu
ZEdQUiA9IG9wMS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTkyMDM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsMTMgKzE0NTgsMTMgQEAgSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIAogICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChpc1NpZ25lZCh0
eXBlKSkKKyAgICAgICAgaWYgKEpTQzo6aXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2Fk
OFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSks
IHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkOChCYXNlSW5k
ZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQorICAgICAg
ICBpZiAoSlNDOjppc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQxNlNpZ25lZEV4dGVu
ZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxv
YWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KHNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwpAQCAtMTU5Niw3ICsxNTk2LDcg
QEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIGlm
IChpc0NsYW1wZWQodHlwZSkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09
IDEpOwotICAgICAgICBBU1NFUlQoIWlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgQVNTRVJUKCFK
U0M6OmlzU2lnbmVkKHR5cGUpKTsKICAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJl
bG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICBK
dW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMigweGZmKSk7CiAgICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDE5MjAzNSkKKysrIFNvdXJjZS9XVEYvd3Rm
L01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCwxNCBAQCBpbmxpbmUg
dW5zaWduZWQgZmFzdExvZzIodW5zaWduZWQgaSkKICAgICByZXR1cm4gbG9nMjsKIH0KIAoraW5s
aW5lIHVuc2lnbmVkIGZhc3RMb2cyKHVpbnQ2NF90IHZhbHVlKQoreworICAgIHVuc2lnbmVkIGxv
dyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSk7CisgICAgaWYgKGxvdykKKyAgICAgICAg
cmV0dXJuIGZhc3RMb2cyKGxvdyk7CisgICAgcmV0dXJuIGZhc3RMb2cyKHN0YXRpY19jYXN0PHVu
c2lnbmVkPih2YWx1ZSA+PiAzMikpICsgMzI7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
aW5saW5lIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46
OnZhbHVlLCBUPjo6dHlwZSBzYWZlRlBEaXZpc2lvbihUIHUsIFQgdikKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264877</attachid>
            <date>2015-11-05 12:15:26 -0800</date>
            <delta_ts>2015-11-05 12:38:15 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNiBA
QAorMjAxNS0xMS0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzLT5BaXIgbG93ZXJpbmcgc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgY29tcGFyZS1icmFuY2gg
ZnVzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGFkZHMgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBjb21wYXJlcyBhbmQgY29tcGFyZS9i
cmFuY2ggZnVzaW9uIHRvIEIzLiBUaGUgZnVzaW9uIGlzCisgICAgICAgIHN1cGVyIGFnZ3Jlc3Np
dmUuIEl0IGNhbiBldmVuIGhhbmRsZSB0aGluZ3MgbGlrZSBCcmFuY2goTGVzc1RoYW4oTG9hZDhT
KC4uLiksIGNvbnN0YW50KSkuIEl0CisgICAgICAgIGNhbiBldmVuIGhhbmRsZSBmbGlwcGluZyB0
aGUgb3BlcmFuZHMgdG8gdGhlIGJyYW5jaCwgYW5kIGZsaXBwaW5nIHRoZSBjb21wYXJpc29uIGNv
bmRpdGlvbiwKKyAgICAgICAgaWYgaXQgZW5hYmxlcyBhIG1vcmUgZWZmaWNpZW50IGluc3RydWN0
aW9uLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSBpcyBhc3ltbWV0cnkgaW4gdGhlCisgICAgICAg
IGFkbWl0dGVkIGFyZ3VtZW50IGtpbmRzLiBGb3IgZXhhbXBsZSwgQnJhbmNoMzIgd2lsbCBvbmx5
IGFjY2VwdCBhbiBJbW0gYXMgYSBzZWNvbmQgb3BlcmFuZC4KKyAgICAgICAgSWYgd2UgZG8gYSBM
ZXNzVGhhbihjb25zdGFudCwgbG9hZCkgdGhlbiB3ZSB3aWxsIGdlbmVyYXRlIGl0IGFzOgorCisg
ICAgICAgICAgICBCcmFuY2gzMiBHcmVhdGVyVGhhbiAoYWRkciksIGltbS4KKworICAgICAgICBU
aGlzIGFsc28gc3VwcG9ydHMgY29tcGlsaW5nIGFuZCBmdXNpbmcgdGVzdHMsIGFuZCB0byBzb21l
IGV4dGVudCwgY29tcGlsaW5nIGFuZCBmdXNpbmcKKyAgICAgICAgZG91Ymxlcy4gVGhvdWdoIHdl
IGNhbm5vdCB0ZXN0IGRvdWJsZXMgeWV0IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3Vw
cG9ydCBmb3IgdGhhdC4KKworICAgICAgICBUaGlzIGFsc28gc3VwcG9ydHMgZnVzaW5nIGNvbXBh
cmUvYnJhbmNoZXMgaW4gQ2hlY2tzLiBXZSBiYXNpY2FsbHkgZ2V0IHRoYXQgZm9yIGZyZWUuCisK
KyAgICAgICAgQmVjYXVzZSBJIHdhbnRlZCB0byBmdXNlIGNvbXBhcmlzb25zIHdpdGggc3ViLTMy
LWJpdCBsb2FkcywgSSBhZGRlZCBzdXBwb3J0IGZvciB0aG9zZSwgdG9vLgorCisgICAgICAgIFRo
ZSB0ZXN0cyBhcmUgbm93IGdldHRpbmcgc3VwZXIgYmlnLCBzbyBJIG1hZGUgdGVzdGIzIHJ1biB0
ZXN0cyBpbiBwYXJhbGxlbC4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpmbGlwKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmlzU2lnbmVkKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmlzVW5zaWduZWQpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6dGVzdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZD
b21tb246OmludmVydCk6CisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OktleSk6CisgICAgICAgIChKU0M6OkIzOjpD
aGVja1NwZWNpYWw6OktleTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6
OkNoZWNrU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6On5DaGVja1Nw
ZWNpYWwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6CisgICAgICAgIChKU0M6OkIz
OjpDaGVja1NwZWNpYWw6OktleTo6S2V5KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGVy
YXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGNvZGUp
OgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om51bUFyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpoYXNoKToKKyAgICAgICAgKEpT
Qzo6QjM6OkNoZWNrU3BlY2lhbEtleUhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsS2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
Q29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMy
VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1
ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAg
KiBiMy9CM0NvbnN0MzJWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDY0VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3Q2NFZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRW
YWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFs
dWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6
Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjph
Ym92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBi
My9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlclRvQWlyKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cnVuKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6c2hvdWxkQ29weVByb3BhZ2F0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OkFyZ1Byb21pc2U6OkFyZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBcmdQcm9taXNlOjp0bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpBcmdQcm9taXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6QXJnUHJvbWlzZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OkFyZ1Byb21pc2U6OnBlZWspOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBcmdQcm9taXNlOjpjb25zdW1lKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
dG1wUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNhbkJlSW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphZGRyKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG9hZFByb21pc2UpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpMb3dlclRvQWlyOjppbW0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OnRyeUFwcGVuZFN0b3JlVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OnRyeUFwcGVuZFN0b3JlQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
OjpjcmVhdGVHZW5lcmljQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmNyZWF0ZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNy
ZWF0ZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlMb2Fk
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDhTKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDhaKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDE2Uyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OnRyeUxvYWQxNlopOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdGFj
a1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlFcXVhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeU5vdEVxdWFsKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TGVzc1RoYW4pOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjp0cnlHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OnRyeUxlc3NFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OnRyeUdyZWF0ZXJFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OnRyeUFib3ZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5
QmVsb3cpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBYm92ZUVxdWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QmVsb3dFcXVhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeVBhdGNocG9pbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlDaGVjayk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Okxvd2VyVG9BaXI6OnRyeUJyYW5jaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmxvYWRBZGRyKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0
Y2hlci5wYXR0ZXJuczoKKyAgICAgICAgKiBiMy9CM09wY29kZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjppbnZlcnRlZENvbXBhcmUpOgorICAgICAgICAqIGIzL0IzT3Bjb2RlLmg6CisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEludENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6YWRkQm9vbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVzZXRW
YWx1ZU93bmVycyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAgKiBiMy9C
M1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp6U2hyQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmdyZWF0ZXJU
aGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YWJvdmVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6YmVsb3dDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YWJvdmVFcXVh
bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmludmVydGVkQ29tcGFyZSk6CisgICAgICAgICog
YjMvQjNWYWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzUmVwcmVzZW50YWJsZUFzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVXNlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjp3aWR0aEZvckIzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp2YWx1ZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmFzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb2ludGVy
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzRG91YmxlQ29uZGl0aW9uKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbnZlcnRlZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6ZmxpcHBlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNTaWdu
ZWRDb25kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Vuc2lnbmVkQ29uZCk6Cisg
ICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6
SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9wZXJhdG9yIGJvb2wpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYjoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoaGlkZGVu
VHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3Rv
cmVMb2FkU3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6Om1vZGVsTG9hZCk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0TG9hZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RDb21wbGV4KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1w
bGVQYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVDaGVjayk6CisgICAg
ICAgIChKU0M6OkIzOjpnZW5lcmljVGVzdENvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6bW9k
ZWxDb21wYXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDb21wYXJlTG9hZCk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0Q29tcGFyZUltcGwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENvbXBh
cmUpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKwogMjAxNS0xMS0w
NSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IENsZWFuIHVwIEluamVjdGVkU2NyaXB0IHVzZXMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5
MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAgICAgICBjYXNlIERvdWJsZUxl
c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAgcmV0dXJuIERvdWJsZUdyZWF0
ZXJUaGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFrZSBjb21w
aWxlciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGlibGUoUmVzdWx0Q29uZGl0aW9u
IGNvbmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBa
ZXJvOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNlIGJ1aWxkcy4KICAgICAgICAg
fQogICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0aW9uIGZsaXAoUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAg
IGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgICAgICByZXR1cm4g
Y29uZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAgIHJldHVybiBCZWxvdzsKKyAg
ICAgICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gQmVsb3dPckVxdWFs
OworICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0dXJuIEFib3ZlOworICAgICAg
ICBjYXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiBBYm92ZU9yRXF1YWw7Cisg
ICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47Cisg
ICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuIExlc3NU
aGFuT3JFcXVhbDsKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgICAgIHJldHVybiBH
cmVhdGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgICAgICBy
ZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVxdWFsOworICAgIH0KKworICAg
IC8vIFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChjb25kLCB2YWx1ZSwgdmFsdWUp
CisgICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoMzIoY29uZCwg
c2lnbkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAgc3RhdGljIGJvb2wgaXNTaWdu
ZWQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25k
KSB7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAg
IGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAg
ICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NUaGFuT3JFcXVhbDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1ZSBpZiB0aGlzOgorICAgIC8v
ICAgICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAvLyBJcyB0aGUgc2FtZSBhcyB0
aGlzOgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0OCh2YWx1ZSksIHplcm9FeHQ4
KHZhbHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgeworICAgICAgICBjYXNlIEVxdWFs
OgorICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICBj
YXNlIEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgY2FzZSBCZWxv
d09yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KICNlbmRpZgogCiAgICAg
Ly8gUGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlvbnMsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NzQs
NiArMTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwg
ZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7CisgICAgICAgIHNldDMyKHg4
NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAgLy8gSW52ZXJ0IGEgcmVsYXRp
b25hbCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBiZWNvbWVzID49LCBldGMuCiAg
ICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDE3IEBAIHVuc2ln
bmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAor
Q2hlY2tTcGVjaWFsOjpLZXk6OktleShjb25zdCBJbnN0JiBpbnN0KQoreworICAgIG1fb3Bjb2Rl
ID0gaW5zdC5vcGNvZGU7CisgICAgbV9udW1BcmdzID0gaW5zdC5hcmdzLnNpemUoKTsKK30KKwor
dm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3MsICIpIik7Cit9CisKIENoZWNr
U3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJn
cykKICAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQogICAgICwgbV9udW1DaGVja0FyZ3MobnVt
QXJncykKQEAgLTY0LDYgKzc1LDExIEBAIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6
T3Bjb2RlIG8KICAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUpKTsKIH0KIAorQ2hlY2tTcGVj
aWFsOjpDaGVja1NwZWNpYWwoY29uc3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkKKyAgICA6IENo
ZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCkpCit7Cit9CisKIENoZWNrU3Bl
Y2lhbDo6fkNoZWNrU3BlY2lhbCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0
IEBACiAKICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lh
bC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgewogCituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBJbnN0OworfQorCiAvLyBXZSB3YW50
IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2Fu
dCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKIC8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVh
ZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFs
IHdpbGwgcmVtZW1iZXIKIC8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBh
bG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQK
QEAgLTQ2LDcgKzUxLDY1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFz
cyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKIHB1YmxpYzoKKyAgICAv
LyBTdXBwb3J0IGZvciBoYXNoIGNvbnNpbmcgdGhlc2UgdGhpbmdzLgorICAgIGNsYXNzIEtleSB7
CisgICAgcHVibGljOgorICAgICAgICBLZXkoKQorICAgICAgICAgICAgOiBtX29wY29kZShBaXI6
Ok5vcCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJn
cykKKyAgICAgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAgICAgLCBtX251bUFy
Z3MobnVtQXJncykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgS2V5
KGNvbnN0IEFpcjo6SW5zdCYgaW5zdCk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX29wY29k
ZSA9PSBvdGhlci5tX29wY29kZQorICAgICAgICAgICAgICAgICYmIG1fbnVtQXJncyA9PSBvdGhl
ci5tX251bUFyZ3M7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
S2V5JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEtleSgpOyB9CisKKyAgICAgICAgQWlyOjpPcGNvZGUg
b3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKyAgICAgICAgdW5zaWduZWQgbnVt
QXJncygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJnczsgfQorCisgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgICAgICBLZXkoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQorICAgICAgICAgICAgOiBtX29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAg
ICAgICwgbV9udW1BcmdzKDEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXMgPT0gS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBTZXJpb3VzbHksIHdlIGRvbid0IG5lZWQgdG8gYmUgc21hcnQgaGVyZS4gSXQganVzdCBk
b2Vzbid0IG1hdHRlci4KKyAgICAgICAgICAgIHJldHVybiBtX29wY29kZSArIG1fbnVtQXJnczsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBBaXI6Ok9wY29kZSBt
X29wY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1BcmdzOworICAgIH07CisgICAgCiAgICAg
Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICBDaGVja1Nw
ZWNpYWwoY29uc3QgS2V5JiBrZXkpOwogICAgIH5DaGVja1NwZWNpYWwoKTsKIAogcHJvdGVjdGVk
OgpAQCAtNzAsOCArMTMzLDI5IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0Fy
Z3M7CiB9OwogCitzdHJ1Y3QgQ2hlY2tTcGVjaWFsS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoZWNrU3BlY2lhbDo6S2V5JiBhLCBj
b25zdCBDaGVja1NwZWNpYWw6OktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6
Q2hlY2tTcGVjaWFsS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkNo
ZWNrU3BlY2lhbDo6S2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpDaGVja1Nw
ZWNpYWw6OktleT4geworICAgIC8vIEkgZG9uJ3Qgd2FudCB0byB0aGluayBhYm91dCB0aGlzIHZl
cnkgaGFyZCwgaXQncyBub3Qgd29ydGggaXQuIEknbSBhIGJlIGNvbnNlcnZhdGl2ZS4KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKICNlbmRpZiAvLyBCM0No
ZWNrU3BlY2lhbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxOCArMTAzLDc0IEBAIFZh
bHVlKiBDb25zdDMyVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWQKICAgICByZXR1cm4gcHJvYy5h
ZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG1fdmFsdWUpID4+IChvdGhlci0+YXNJbnQzMigpICYgMzEpKSk7CiB9CiAK
LVZhbHVlKiBDb25zdDMyVmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdp
bigpLCBtX3ZhbHVlID09IG90aGVyLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gTWl4ZWRU
cmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigp
KTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUm
IHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bm90RXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7CisgICAgICAg
IHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlICE9IG90
aGVyLT5hc0ludDMyKCkpOworfQorCitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NUaGFuQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkp
CisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3Zh
bHVlIDwgb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3Jl
YXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+
aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRy
aVN0YXRlKG1fdmFsdWUgPiBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVHJpU3RhdGUgQ29uc3Qz
MlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAg
cmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0
YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID49IG90aGVyLT5hc0ludDMyKCkp
OworfQorCitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bV92YWx1ZSkgPiBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOworfQor
CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1
ZSkgPCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOworfQorCitUcmlT
dGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJp
U3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVl
KSA+PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOworfQorCitUcmlT
dGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJp
U3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVl
KSA8PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQogCiB2b2lk
IENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5oCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTcgQEAgcHVibGljOgogICAg
IFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGVxdWFsQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogbm90RXF1YWxD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
VHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAg
IFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93RXF1YWxD
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTggKzEwMyw3
NCBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkCiAgICAgcmV0dXJu
IHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KHN0
YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYzKSkp
OwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVl
PihvcmlnaW4oKSwgbV92YWx1ZSA9PSBvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICAgICAgcmV0dXJu
IE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPT0gb3RoZXItPmFz
SW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6
Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIt
Pmhhc0ludDY0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBwcm9jLmFk
ZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICE9IG90aGVyLT5hc0ludDY0KCkpOwor
ICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1
ZSAhPSBvdGhlci0+YXNJbnQ2NCgpKTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNz
VGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJ
bnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3Rh
dGUobV92YWx1ZSA8IG90aGVyLT5hc0ludDY0KCkpOworfQorCitUcmlTdGF0ZSBDb25zdDY0VmFs
dWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICgh
b3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJl
dHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1RyaVN0YXRl
IENvbnN0NjRWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorewor
ICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDw9IG90aGVyLT5hc0ludDY0KCkpOworfQor
CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNJ
bnQ2NCgpKTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG1fdmFsdWUpID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkp
KTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fdmFsdWUpIDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKK30K
KworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV92YWx1ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKK30K
KworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV92YWx1ZSkgPD0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKIH0K
IAogdm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDE3IEBAIHB1Ymxp
YzoKICAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKICAgICBWYWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBlcXVhbENvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIG5v
dEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KworICAgIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYWJvdmVDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93Q29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUVxdWFs
Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxv
d0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVk
OgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91
YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDQ2
IEBAIFZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm8KICAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNE
b3VibGUoKSk7CiB9CiAKLVZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KFBy
b2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVW
YWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhl
ci0+aGFzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBwcm9j
LmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlID09IG90aGVyLT5hc0RvdWJsZSgp
KTsKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1f
dmFsdWUgPT0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1WYWx1ZSogQ29uc3REb3VibGVWYWx1
ZTo6bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QK
K1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlICE9IG90aGVyLT5hc0RvdWJsZSgpKTsKK30K
KworVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVy
biBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFz
RG91YmxlKCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUo
KSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1f
dmFsdWUgPiBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFs
dWU6Omxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0
dXJuIHRyaVN0YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzRG91YmxlKCkpOworfQorCitUcmlTdGF0
ZSBDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID49IG90aGVyLT5hc0RvdWJs
ZSgpKTsKIH0KIAogdm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXIm
IGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw4ICs0NCwxMyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
ICAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywg
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogbm90RXF1YWxDb25zdGFu
dChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBU
cmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShD
b21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw2ICs1Nyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVzcGFjZSB7CiAK
K2NvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1Ymxp
YzoKICAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQpAQCAt
ODYsNiArODgsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjdXJyZW50QmxvY2sgPSBibG9jazsK
ICAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCiAgICAgICAgICAgICBpbnN0cy5yZXNp
emUoMCk7CisKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIkxvd2VyaW5nIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2Vz
IGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1h
dGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgpAQCAtOTUsMTEgKzEwMCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyhjdXJyZW50VmFsdWUpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVj
dG9yPEluc3Q+KCkpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBkZWVwRHVtcChjdXJyZW50VmFsdWUpLCAiOlxu
Iik7CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5Mb3dlcmluZ01hdGNoZXIoY3Vy
cmVudFZhbHVlLCAqdGhpcyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVt
cChjdXJyZW50VmFsdWUpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHMu
bGFzdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGluc3QsICJc
biIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8g
Tm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVy
c2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKQEAgLTE2MiwxOCArMTczLDE0NyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICBjbGFzcyBBcmdQcm9taXNlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFyZ1Byb21pc2UoKSB7IH0KKworICAgICAgICBBcmdQcm9taXNlKGNvbnN0IEFyZyYg
YXJnLCBWYWx1ZSogdmFsdWVUb0xvY2sgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2FyZyhh
cmcpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWVUb0xvY2spCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyBBcmdQcm9taXNlIHRtcChWYWx1ZSogdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0
Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9hcmcg
fHwgbV92YWx1ZTsgfQorCisgICAgICAgIEFyZzo6S2luZCBraW5kKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFtX2FyZyAmJiBtX3ZhbHVlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBBcmc6OlRtcDsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZy5raW5kKCk7CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBBcmcmIHBlZWsoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9hcmc7CisgICAgICAgIH0KKworICAgICAgICBBcmcgY29uc3VtZShMb3dl
clRvQWlyJiBsb3dlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2FyZyAm
JiBtX3ZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50bXAobV92YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgICAgICBsb3dlci5jb21taXRJbnRl
cm5hbChtX3ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZzsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBUaHJlZSBmb3JtczoKKyAgICAgICAgLy8g
RXZlcnl0aGluZyBudWxsOiBpbnZhbGlkLgorICAgICAgICAvLyBBcmcgbm9uLW51bGwsIHZhbHVl
IG51bGw6IGp1c3QgdXNlIHRoZSBhcmcsIG5vdGhpbmcgc3BlY2lhbC4KKyAgICAgICAgLy8gQXJn
IG51bGwsIHZhbHVlIG5vbi1udWxsOiBpdCdzIGEgdG1wLCBwaW4gaXQgd2hlbiBuZWNlc3Nhcnku
CisgICAgICAgIC8vIEFyZyBub24tbnVsbCwgdmFsdWUgbm9uLW51bGw6IHVzZSB0aGUgYXJnLCBs
b2NrIHRoZSB2YWx1ZS4KKyAgICAgICAgQXJnIG1fYXJnOworICAgICAgICBWYWx1ZSogbV92YWx1
ZTsKKyAgICB9OworCisgICAgLy8gQ29uc2lkZXIgdXNpbmcgdG1wUHJvbWlzZSgpIGluIGNhc2Vz
IHdoZXJlIHlvdSBhcmVuJ3Qgc3VyZSB0aGF0IHlvdSB3YW50IHRvIHBpbiB0aGUgdmFsdWUgeWV0
LgorICAgIC8vIEhlcmUgYXJlIHRocmVlIGNhbm9uaWNhbCB3YXlzIG9mIHVzaW5nIHRtcCgpIGFu
ZCB0bXBQcm9taXNlKCk6CisgICAgLy8KKyAgICAvLyBJZGlvbSAjMTogWW91IGtub3cgdGhhdCB5
b3Ugd2FudCBhIHRtcCgpIGFuZCB5b3Uga25vdyB0aGF0IGl0IHdpbGwgYmUgdmFsaWQgZm9yIHRo
ZQorICAgIC8vIGluc3RydWN0aW9uIHlvdSdyZSBlbWl0dGluZy4KKyAgICAvLworICAgIC8vICAg
ICBhcHBlbmQoRm9vLCB0bXAoYmFyKSk7CisgICAgLy8KKyAgICAvLyBJZGlvbSAjMjogWW91IGRv
bid0IGtub3cgaWYgeW91IHdhbnQgdG8gdXNlIGEgdG1wKCkgYmVjYXVzZSB5b3UgaGF2ZW4ndCBk
ZXRlcm1pbmVkIGlmIHRoZQorICAgIC8vIGluc3RydWN0aW9uIHdpbGwgYWNjZXB0IGl0LCBzbyB5
b3UgcXVlcnkgZmlyc3QuIE5vdGUgdGhhdCB0aGUgY2FsbCB0byB0bXAoKSBoYXBwZW5zIG9ubHkg
YWZ0ZXIKKyAgICAvLyB5b3UgYXJlIHN1cmUgdGhhdCB5b3Ugd2lsbCB1c2UgaXQuCisgICAgLy8K
KyAgICAvLyAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgQXJnOjpUbXApKQorICAgIC8vICAgICAg
ICAgYXBwZW5kKEZvbywgdG1wKGJhcikpCisgICAgLy8KKyAgICAvLyBJZGlvbSAjMzogU2FtZSBh
cyBJZGlvbSAjMiwgYnV0IHVzaW5nIHRtcFByb21pc2UuIE5vdGljZSB0aGF0IHRoaXMgY2FsbHMg
Y29uc3VtZSgpIG9ubHkgYWZ0ZXIKKyAgICAvLyBpdCdzIHN1cmUgaXQgd2lsbCB1c2UgdGhlIHRt
cC4gVGhhdCdzIGRlbGliZXJhdGUuCisgICAgLy8KKyAgICAvLyAgICAgQXJnUHJvbWlzZSBwcm9t
aXNlID0gdG1wUHJvbWlzZShiYXIpOworICAgIC8vICAgICBpZiAoaXNWYWxpZEZvcm0oRm9vLCBw
cm9taXNlLmtpbmQoKSkpCisgICAgLy8gICAgICAgICBhcHBlbmQoRm9vLCBwcm9taXNlLmNvbnN1
bWUoKnRoaXMpKQorICAgIC8vCisgICAgLy8gSW4gYm90aCBpZGlvbSAjMiBhbmQgaWRpb20gIzMs
IHdlIGRvbid0IHBpbiB0aGUgdmFsdWUgdG8gYSB0ZW1wb3JhcnkgZXhjZXB0IHdoZW4gd2UgYWN0
dWFsbHkKKyAgICAvLyBlbWl0IHRoZSBpbnN0cnVjdGlvbi4gQm90aCB0bXAoKSBhbmQgdG1wUHJv
bWlzZSgpLmNvbnN1bWUoKnRoaXMpIHdpbGwgcGluIGl0LiBQaW5uaW5nIG1lYW5zCisgICAgLy8g
dGhhdCB3ZSB3aWxsIGhlbmNlZm9ydGggcmVxdWlyZSB0aGF0IHRoZSB2YWx1ZSBvZiAnYmFyJyBp
cyBnZW5lcmF0ZWQgYXMgYSBzZXBhcmF0ZQorICAgIC8vIGluc3RydWN0aW9uLiBXZSBkb24ndCB3
YW50IHRvIHBpbiB0aGUgdmFsdWUgdG8gYSB0ZW1wb3JhcnkgaWYgd2UgbWlnaHQgY2hhbmdlIG91
ciBtaW5kcywgYW5kCisgICAgLy8gcGFzcyBhbiBhZGRyZXNzIG9wZXJhbmQgcmVwcmVzZW50aW5n
ICdiYXInIHRvIEZvbyBpbnN0ZWFkLgorICAgIC8vCisgICAgLy8gQmVjYXVzZSB0bXAoKSBwaW5z
LCB0aGUgZm9sbG93aW5nIGlzIG5vdCBhbiBpZGlvbSB5b3Ugc2hvdWxkIHVzZToKKyAgICAvLwor
ICAgIC8vICAgICBUbXAgdG1wID0gdGhpcy0+dG1wKGJhcik7CisgICAgLy8gICAgIGlmIChpc1Zh
bGlkRm9ybShGb28sIHRtcC5raW5kKCkpKQorICAgIC8vICAgICAgICAgYXBwZW5kKEZvbywgdG1w
KTsKKyAgICAvLworICAgIC8vIFRoYXQncyBiZWNhdXNlIGlmIGlzVmFsaWRGb3JtKCkgcmV0dXJu
cyBmYWxzZSwgeW91IHdpbGwgaGF2ZSBhbHJlYWR5IHBpbm5lZCB0aGUgJ2JhcicgdG8gYQorICAg
IC8vIHRlbXBvcmFyeS4gWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8gdHJ5IHRvIGRvIHNvbWV0aGlu
ZyBsaWtlIGxvYWRQcm9taXNlKCksIGFuZCB0aGF0IHdpbGwgZmFpbC4KKyAgICAvLyBUaGlzIGFy
aXNlcyBpbiBvcGVyYXRpb25zIHRoYXQgaGF2ZSBib3RoIGEgQWRkcixUbXAgYW5kIFRtcCxBZGRy
IGZvcm1zLiBUaGUgZm9sbG93aW5nIGNvZGUKKyAgICAvLyBzZWVtcyByaWdodCwgYnV0IHdpbGwg
YWN0dWFsbHkgZmFpbCB0byBldmVyIG1hdGNoIHRoZSBUbXAsQWRkciBmb3JtIGJlY2F1c2UgYnkg
dGhlbiwgdGhlIHJpZ2h0CisgICAgLy8gdmFsdWUgaXMgYWxyZWFkeSBwaW5uZWQuCisgICAgLy8K
KyAgICAvLyAgICAgYXV0byB0cnlUaGluZ3MgPSBbdGhpc10gKGNvbnN0IEFyZyYgbGVmdCwgY29u
c3QgQXJnJiByaWdodCkgeworICAgIC8vICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgbGVm
dC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCisgICAgLy8gICAgICAgICAgICAgcmV0dXJuIEluc3Qo
Rm9vLCBjdXJyZW50VmFsdWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAvLyAgICAgICAgIHJldHVybiBJ
bnN0KCk7CisgICAgLy8gICAgIH07CisgICAgLy8gICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRo
aW5ncyhsb2FkQWRkcihsZWZ0KSwgdG1wKHJpZ2h0KSkpCisgICAgLy8gICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIC8vICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3ModG1wKGxlZnQp
LCBsb2FkQWRkcihyaWdodCkpKSAvLyB0aGlzIG5ldmVyIHN1Y2NlZWRzLgorICAgIC8vICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAvLyAgICAgcmV0dXJuIEluc3QoRm9vLCBjdXJyZW50VmFs
dWUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7CisgICAgLy8KKyAgICAvLyBJZiB5b3UgaW1hZ2lu
ZSB0aGF0IGxvYWRBZGRyKHZhbHVlKSBpcyBqdXN0IGxvYWRQcm9taXNlKHZhbHVlKS5jb25zdW1l
KCp0aGlzKSwgdGhlbiB0aGlzIGNvZGUKKyAgICAvLyB3aWxsIHJ1biBjb3JyZWN0bHkgLSBpdCB3
aWxsIGdlbmVyYXRlIE9LIGNvZGUgLSBidXQgdGhlIHNlY29uZCBmb3JtIGlzIG5ldmVyIG1hdGNo
ZWQuCisgICAgLy8gbG9hZEFkZHIocmlnaHQpIHdpbGwgbmV2ZXIgc3VjY2VlZCBiZWNhdXNlIGl0
IHdpbGwgb2JzZXJ2ZSB0aGF0ICdyaWdodCcgaXMgYWxyZWFkeSBwaW5uZWQuCisgICAgLy8gT2Yg
Y291cnNlLCBpdCdzIGV4YWN0bHkgYmVjYXVzZSBvZiB0aGUgcmlza3kgbmF0dXJlIG9mIHN1Y2gg
Y29kZSB0aGF0IHdlIGRvbid0IGhhdmUgYQorICAgIC8vIGxvYWRBZGRyKCkgaGVscGVyIGFuZCBy
ZXF1aXJlIHlvdSB0byBiYWxhbmNlIEFyZ1Byb21pc2UncyBpbiBjb2RlIGxpa2UgdGhpcy4gU3Vj
aCBjb2RlIHdpbGwKKyAgICAvLyB3b3JrIGZpbmUgaWYgd3JpdHRlbiBhczoKKyAgICAvLworICAg
IC8vICAgICBhdXRvIHRyeVRoaW5ncyA9IFt0aGlzXSAoY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwg
Y29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIHsKKyAgICAvLyAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShGb28sIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQorICAgIC8vICAgICAgICAgICAgIHJl
dHVybiBJbnN0KEZvbywgY3VycmVudFZhbHVlLCBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5j
b25zdW1lKCp0aGlzKSk7CisgICAgLy8gICAgICAgICByZXR1cm4gSW5zdCgpOworICAgIC8vICAg
ICB9OworICAgIC8vICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3MobG9hZFByb21pc2Uo
bGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkKKyAgICAvLyAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgLy8gICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRoaW5ncyh0bXBQcm9taXNlKGxlZnQp
LCBsb2FkUHJvbWlzZShyaWdodCkpKQorICAgIC8vICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAvLyAgICAgcmV0dXJuIEluc3QoRm9vLCBjdXJyZW50VmFsdWUsIHRtcChsZWZ0KSwgdG1wKHJp
Z2h0KSk7CisgICAgLy8KKyAgICAvLyBOb3RpY2UgdGhhdCB3ZSBkaWQgdXNlIHRtcCBpbiB0aGUg
ZmFsbC1iYWNrIGNhc2UgYXQgdGhlIGVuZCwgYmVjYXVzZSBieSB0aGVuLCB3ZSBrbm93IGZvciBz
dXJlCisgICAgLy8gdGhhdCB3ZSB3YW50IGEgdG1wLiBCdXQgdXNpbmcgdG1wUHJvbWlzZSBpbiB0
aGUgdHJ5VGhpbmdzKCkgY2FsbHMgZW5zdXJlcyB0aGF0IGRvaW5nIHNvCisgICAgLy8gZG9lc24n
dCBwcmV2ZW50IHVzIGZyb20gdHJ5aW5nIGxvYWRQcm9taXNlIG9uIHRoZSBzYW1lIHZhbHVlLgog
ICAgIFRtcCB0bXAoVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgVG1wJiB0bXAgPSB2YWx1
ZVRvVG1wW3ZhbHVlXTsKICAgICAgICAgaWYgKCF0bXApIHsKICAgICAgICAgICAgIHdoaWxlIChz
aG91bGRDb3B5UHJvcGFnYXRlKHZhbHVlKSkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
LT5jaGlsZCgwKTsKLSAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1wKGlzSW50KHZhbHVlLT50
eXBlKCkpID8gQXJnOjpHUCA6IEFyZzo6RlApOwotICAgICAgICAgICAgdmFsdWVUb1RtcFt2YWx1
ZV0gPSB0bXA7CisgICAgICAgICAgICBUbXAmIHJlYWxUbXAgPSB2YWx1ZVRvVG1wW3ZhbHVlXTsK
KyAgICAgICAgICAgIGlmICghcmVhbFRtcCkKKyAgICAgICAgICAgICAgICByZWFsVG1wID0gY29k
ZS5uZXdUbXAoQXJnOjp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgICAg
IHRtcCA9IHJlYWxUbXA7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAK
KyAgICBBcmdQcm9taXNlIHRtcFByb21pc2UoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEFyZ1Byb21pc2U6OnRtcCh2YWx1ZSk7CisgICAgfQorCiAgICAgYm9vbCBjYW5CZUlu
dGVybmFsKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50
ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2Fu
dCB0byBjYXVzZQpAQCAtMjUzLDE1ICszOTMsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIHZhbHVlKTsKICAgICB9CiAKLSAgICBB
cmcgbG9hZEFkZHIoVmFsdWUqIGxvYWRWYWx1ZSkKKyAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNl
KFZhbHVlKiBsb2FkVmFsdWUsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKICAgICB7Ci0gICAgICAg
IGlmIChsb2FkVmFsdWUtPm9wY29kZSgpICE9IExvYWQpCisgICAgICAgIGlmIChsb2FkVmFsdWUt
Pm9wY29kZSgpICE9IGxvYWRPcGNvZGUpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAg
ICAgIGlmICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFy
ZygpOwogICAgICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOwotICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOworICAg
ICAgICByZXR1cm4gQXJnUHJvbWlzZShhZGRyKGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7CisgICAg
fQorCisgICAgQXJnUHJvbWlzZSBsb2FkUHJvbWlzZShWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvYWRQcm9taXNlKGxvYWRWYWx1ZSwgTG9hZCk7CiAgICAgfQogCiAg
ICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCkBAIC0zNDAsMjAgKzQ4NSwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIG92ZXIgdGhyZWUgb3BlcmFuZCBmb3Jtcy4KICAgICAgICAgCiAgICAgICAgIGlm
IChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7Ci0gICAgICAgICAgICBBcmcgbGVmdEFk
ZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIEFyZ1Byb21pc2UgbGVmdEFkZHIgPSBs
b2FkUHJvbWlzZShsZWZ0KTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxl
ZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgY29tbWl0SW50ZXJu
YWwobGVmdCk7CiAgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJy
ZW50VmFsdWUtPnR5cGUoKSksIHRtcChyaWdodCksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgQXJnIHJpZ2h0
QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAgICAgQXJnUHJvbWlzZSByaWdodEFkZHIgPSBs
b2FkUHJvbWlzZShyaWdodCk7CiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0
QWRkci5raW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmln
aHQpOwogICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUt
PnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGFwcGVuZChvcGNvZGUs
IHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRk
ci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0zNzgsMTAgKzUyMSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFyZyBzdG9yZUFkZHIg
PSBhZGRyKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCi0gICAg
ICAgIGlmIChsb2FkQWRkcih2YWx1ZSkgIT0gc3RvcmVBZGRyKQorICAgICAgICBBcmdQcm9taXNl
IGxvYWRQcm9taXNlID0gdGhpcy0+bG9hZFByb21pc2UodmFsdWUpOworICAgICAgICBpZiAobG9h
ZFByb21pc2UucGVlaygpICE9IHN0b3JlQWRkcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgIGxvYWRQcm9taXNlLmNv
bnN1bWUoKnRoaXMpOwogICAgICAgICBhcHBlbmQob3Bjb2RlLCBzdG9yZUFkZHIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zOTIsMTkgKzUzNiwyMyBAQCBwdWJsaWM6CiAgICAg
ICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChz
dG9yZUFkZHIpOwogCi0gICAgICAgIFZhbHVlKiBsb2FkVmFsdWU7Ci0gICAgICAgIFZhbHVlKiBv
dGhlclZhbHVlOwotICAgICAgICBpZiAobG9hZEFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKSB7Ci0g
ICAgICAgICAgICBsb2FkVmFsdWUgPSBsZWZ0OworICAgICAgICBBcmdQcm9taXNlIGxvYWRQcm9t
aXNlOworICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIAorICAg
ICAgICBsb2FkUHJvbWlzZSA9IHRoaXMtPmxvYWRQcm9taXNlKGxlZnQpOworICAgICAgICBpZiAo
bG9hZFByb21pc2UucGVlaygpID09IHN0b3JlQWRkcikKICAgICAgICAgICAgIG90aGVyVmFsdWUg
PSByaWdodDsKLSAgICAgICAgfSBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZl
ICYmIGxvYWRBZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpIHsKLSAgICAgICAgICAgIGxvYWRWYWx1
ZSA9IHJpZ2h0OwotICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxz
ZQorICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAg
ICAgICAgICBsb2FkUHJvbWlzZSA9IHRoaXMtPmxvYWRQcm9taXNlKHJpZ2h0KTsKKyAgICAgICAg
ICAgIGlmIChsb2FkUHJvbWlzZS5wZWVrKCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgICAg
IG90aGVyVmFsdWUgPSBsZWZ0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFvdGhlclZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6SW1tLCBzdG9yZUFkZHIua2luZCgpKSAmJiBpbW0ob3RoZXJWYWx1ZSkpIHsK
LSAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxvYWRWYWx1ZSk7CisgICAgICAgICAgICBsb2Fk
UHJvbWlzZS5jb25zdW1lKCp0aGlzKTsKICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShv
dGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC00MTIsNyArNTYwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWlzVmFsaWRGb3Jt
KG9wY29kZSwgQXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGNvbW1pdEludGVybmFsKGxvYWRWYWx1ZSk7CisgICAgICAgIGxv
YWRQcm9taXNlLmNvbnN1bWUoKnRoaXMpOwogICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3Ro
ZXJWYWx1ZSksIHN0b3JlQWRkcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYy
Miw2ICs3NzAsMzk2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIEFkZHJlc3NTZWxlY3RvciBhZGRy
ZXNzU2VsZWN0b3I7CiAKKyAgICAvLyBDcmVhdGUgYW4gSW5zdCB0byBkbyB0aGUgY29tcGFyaXNv
biBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIHZhbHVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bXBhcmVGdW5jdG9yLCB0eXBlbmFtZSBUZXN0RnVuY3RvciwgdHlwZW5hbWUgQ29tcGFyZURvdWJs
ZUZ1bmN0b3I+CisgICAgSW5zdCBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAgICAgICAgVmFsdWUq
IHZhbHVlLAorICAgICAgICBjb25zdCBDb21wYXJlRnVuY3RvciYgY29tcGFyZSwgLy8gU2lnbmF0
dXJlOiAoQXJnOjpXaWR0aCwgQXJnIHJlbENvbmQsIEFyZywgQXJnKSAtPiBJbnN0CisgICAgICAg
IGNvbnN0IFRlc3RGdW5jdG9yJiB0ZXN0LCAvLyBTaWduYXR1cmU6IChBcmc6OldpZHRoLCBBcmcg
cmVzQ29uZCwgQXJnLCBBcmcpIC0+IEluc3QKKyAgICAgICAgY29uc3QgQ29tcGFyZURvdWJsZUZ1
bmN0b3ImIGNvbXBhcmVEb3VibGUsIC8vIFNpZ25hdHVyZTogKEFyZyBkb3VibGVDb25kLCBBcmcs
IEFyZykgLT4gSW5zdAorICAgICAgICBib29sIGludmVydGVkID0gZmFsc2UpCisgICAgeworICAg
ICAgICAvLyBDaGV3IHRocm91Z2ggYW55IG5lZ2F0aW9ucy4gSXQncyBub3Qgc3RyaWN0bHkgbmVj
ZXNzYXJ5IGZvciB0aGlzIHRvIGJlIGEgbG9vcCwgYnV0IHdlIGxpa2UKKyAgICAgICAgLy8gdG8g
Zm9sbG93IHRoZSBydWxlIHRoYXQgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIHJlZHVjZXMgc3Ry
ZW5ndGggd2hlbmV2ZXIgaXQgZG9lc24ndAorICAgICAgICAvLyByZXF1aXJlIG1ha2luZyB0aGlu
Z3MgbW9yZSBjb21wbGljYXRlZC4KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYg
KCFjYW5CZUludGVybmFsKHZhbHVlKSAmJiB2YWx1ZSAhPSBjdXJyZW50VmFsdWUpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHNob3VsZEludmVydCA9CisgICAgICAg
ICAgICAgICAgKHZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3IgJiYgdmFsdWUtPmNoaWxkKDEpLT5p
c0ludCgxKSAmJiB2YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCisgICAgICAgICAgICAg
ICAgfHwgKHZhbHVlLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50
KDApKTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSW52ZXJ0KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBp
bnZlcnRlZCA9ICFpbnZlcnRlZDsKKyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY3JlYXRlUmVsQ29uZCA9IFsmXSAoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiByZWxhdGlvbmFsQ29uZGl0
aW9uLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVD
b25kaXRpb24pIHsKKyAgICAgICAgICAgIEFyZyByZWxDb25kID0gQXJnOjpyZWxDb25kKHJlbGF0
aW9uYWxDb25kaXRpb24pLmludmVydGVkKGludmVydGVkKTsKKyAgICAgICAgICAgIEFyZyBkb3Vi
bGVDb25kID0gQXJnOjpkb3VibGVDb25kKGRvdWJsZUNvbmRpdGlvbikuaW52ZXJ0ZWQoaW52ZXJ0
ZWQpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIGlmIChp
c0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVm
dEltbSA9IGltbShsZWZ0KTsKKyAgICAgICAgICAgICAgICBBcmcgcmlnaHRJbW0gPSBpbW0ocmln
aHQpOworCisgICAgICAgICAgICAgICAgYXV0byB0cnlDb21wYXJlID0gWyZdICgKKyAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29u
c3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0LCByaWdodCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLmZsaXBwZWQoKSwgcmlnaHQs
IGxlZnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgYXV0byB0cnlDb21wYXJlTG9hZEltbSA9IFsmXSAoCisgICAgICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSwgQXJnOjpTaWduZWRu
ZXNzIHNpZ25lZG5lc3MpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJ
bW0gJiYgcmlnaHRJbW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIHNpZ25lZG5lc3MpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRo
LCBsb2FkUHJvbWlzZShsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBs
ZWZ0SW1tLmlzUmVwcmVzZW50YWJsZUFzKHdpZHRoLCBzaWduZWRuZXNzKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbGVmdElt
bSwgbG9hZFByb21pc2UocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlJ3Mg
dGhhdCBpbnZvbHZlIGZld2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGltcG9ydGFudC4gRm9yIGV4YW1wbGUs
IHdlIHdhbnQgdGhpcyB0byBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vICAgICBAMSA9IExvYWQ4UyguLi4pCisgICAgICAgICAg
ICAgICAgLy8gICAgIEAyID0gQ29uc3QzMiguLi4pCisgICAgICAgICAgICAgICAgLy8gICAgIEAz
ID0gTGVzc1RoYW4oQDEsIEAyKQorICAgICAgICAgICAgICAgIC8vICAgICBCcmFuY2goQDMpCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNTaWduZWRDb25k
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxv
YWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4UywgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKHJlbENvbmQuaXNVbnNpZ25lZENvbmQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6
OldpZHRoOCwgTG9hZDhaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KHJlbENvbmQuaXNTaWduZWRDb25kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZTLCBBcmc6OlNp
Z25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5p
c1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WiwgQXJnOjpVbnNpZ25lZCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZSdzIHRoYXQgaW52b2x2
ZSBhIGxvYWQgYW5kIGFuIGltbWVkaWF0ZS4KKworICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
d2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbSh3aWR0aCwg
TG9hZCwgQXJnOjpTaWduZWQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlJ3MgdGhhdCBpbnZvbHZlIGEg
bG9hZC4gSXQncyBub3Qgb2J2aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRvCisgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlIHRoaXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9i
YWJseSBkb2Vzbid0IG1hdHRlci4KKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgs
IHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5k
bGUgY29tcGFyZSdzIHRoYXQgaW52b2x2ZSBhbiBpbW1lZGlhdGUgYW5kIGEgdG1wLgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYmIGxlZnRJbW0uaXNSZXBy
ZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsZWZ0SW1tLCB0bXBQcm9taXNlKHJpZ2h0KSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJ
bW0uaXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCByaWdo
dEltbSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZpbmFsbHksIGhhbmRsZSBjb21wYXJpc29u
IGJldHdlZW4gdG1wcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5Q29tcGFyZSh3aWR0aCwg
dG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBEb3VibGUgY29tcGFyaXNvbnMgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5n
IHNtYXJ0LgorICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVEb3VibGUoZG91YmxlQ29uZCwgdG1w
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpOworICAgICAgICB9OworCisgICAgICAg
IEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpOwor
ICAgICAgICBBcmcgcmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bykuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAgICAKKyAgICAgICAgYXV0byBhdHRlbXB0RnVz
ZWQgPSBbJl0gKCkgLT4gSW5zdCB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgICAgIGNhc2UgRXF1YWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgY2FzZSBMZXNzVGhhbjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbik7CisgICAgICAgICAgICBjYXNl
IEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
KTsKKyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpOworICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkdyZWF0ZXJUaGFuT3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbCk7CisgICAgICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICAgICAgICAgIC8vIFdlIHVz
ZSBhIGJvZ3VzIGRvdWJsZSBjb25kaXRpb24gYmVjYXVzZSB0aGVzZSBpbnRlZ2VyIGNvbXBhcmlz
b25zIHdvbid0IGdvdCBkb3duIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBwYXRoIGFueXdheS4K
KyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEJlbG93
OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIGNhc2UgQWJv
dmVFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAg
ICAgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCk7CisgICAgICAgICAgICBjYXNlIEJpdEFuZDogeworICAgICAgICAgICAgICAgIFZhbHVl
KiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9
IHZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIEFyZyBsZWZ0SW1tID0gaW1tKGxl
ZnQpOworICAgICAgICAgICAgICAgIEFyZyByaWdodEltbSA9IGltbShyaWdodCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byB0cnlUZXN0ID0gWyZdICgKKyAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29u
c3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCBsZWZ0LCByaWdodCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCByaWdodCwgbGVmdCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIHRy
eVRlc3RMb2FkSW1tID0gWyZdIChBcmc6OldpZHRoIHdpZHRoLCBCMzo6T3Bjb2RlIGxvYWRPcGNv
ZGUpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJ
bW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIEFyZzo6VW5zaWduZWQpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2FkUHJvbWlz
ZShsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLmlzUmVw
cmVzZW50YWJsZUFzKHdpZHRoLCBBcmc6OlVuc2lnbmVkKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgbGVmdEltbSwgbG9hZFByb21p
c2UocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGZl
d2VyIGJpdHMgdGhhbiBCMydzIHR5cGUgc3lzdGVtIHN1cHBvcnRzLgorCisgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdExvYWRJbW0oQXJnOjpXaWR0aDgsIExvYWQ4Wikp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBp
ZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhTKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGlmIChJ
bnN0IHJlc3VsdCA9IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2WikpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICBpZiAoSW5z
dCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZCBhbmQgYW4gaW1tZWRpYXRlLiBOb3RlIHRo
YXQgaW1tZWRpYXRlcyBhcmUKKyAgICAgICAgICAgICAgICAvLyAzMi1iaXQsIGFuZCB3ZSB3YW50
IHplcm8tZXh0ZW5zaW9uLiBIZW5jZSwgdGhlIGltbWVkaWF0ZSBmb3JtIGlzIGNvbXBpbGVkIGFz
IGEKKyAgICAgICAgICAgICAgICAvLyAzMi1iaXQgdGVzdC4gTm90ZSB0aGF0IHRoaXMgc3BpdHMg
b24gdGhlIGdyYXZlIG9mIGluZmVyaW9yIGVuZGlhbnMsIHN1Y2ggYXMgdGhlCisgICAgICAgICAg
ICAgICAgLy8gYmlnIG9uZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoMzIsIExvYWQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgLy8gTm93IGhh
bmRsZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGEgbG9hZC4KKworICAgICAgICAgICAgICAgIEFyZzo6
V2lkdGggd2lkdGggPSBBcmc6OndpZHRoRm9yQjNUeXBlKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsb2Fk
UHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeVRlc3Qod2lkdGgsIHRtcFByb21pc2UobGVmdCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgdGVzdCdzIHRoYXQgaW52b2x2ZSBhbiBpbW1lZGlhdGUgYW5kIGEg
dG1wLgorCisgICAgICAgICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVmdEltbS5pc1JlcHJlc2Vu
dGFibGVBczx1aW50MzJfdD4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlUZXN0KEFyZzo6V2lkdGgzMiwgbGVmdEltbSwgdG1wUHJvbWlzZShyaWdodCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJbW0uaXNSZXByZXNlbnRh
YmxlQXM8dWludDMyX3Q+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0
ID0gdHJ5VGVzdChBcmc6OldpZHRoMzIsIHRtcFByb21pc2UobGVmdCksIHJpZ2h0SW1tKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gRmluYWxseSwganVzdCBkbyB0bXAncy4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5VGVzdCh3aWR0aCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShy
aWdodCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2YWx1ZSA9PSBjdXJyZW50VmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IGF0dGVtcHRGdXNlZCgpKSB7CisgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoSW5zdCByZXN1bHQg
PSB0ZXN0KHdpZHRoLCByZXNDb25kLCB0bXBQcm9taXNlKHZhbHVlKSwgQXJnOjppbW0oLTEpKSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICAvLyBTb21ldGlt
ZXMgdGhpcyBpcyB0aGUgb25seSBmb3JtIG9mIHRlc3QgYXZhaWxhYmxlLiBXZSBwcmVmZXIgbm90
IHRvIHVzZSB0aGlzIGJlY2F1c2UKKyAgICAgICAgLy8gaXQncyBsZXNzIGNhbm9uaWNhbC4KKyAg
ICAgICAgcmV0dXJuIHRlc3Qod2lkdGgsIHJlc0NvbmQsIHRtcFByb21pc2UodmFsdWUpLCB0bXBQ
cm9taXNlKHZhbHVlKSk7CisgICAgfQorCisgICAgSW5zdCBjcmVhdGVCcmFuY2goVmFsdWUqIHZh
bHVlLCBib29sIGludmVydGVkID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRl
R2VuZXJpY0NvbXBhcmUoCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIFt0aGlzXSAo
CisgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLAor
ICAgICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2Um
IHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
VmFsaWRGb3JtKEJyYW5jaDgsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJyYW5jaDgsIGN1cnJlbnRWYWx1ZSwgcmVsQ29uZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0
aGlzKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgz
MjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaDMyLCBBcmc6OlJl
bENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2gzMiwg
Y3VycmVudFZhbHVlLCByZWxDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQu
Y29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
QnJhbmNoNjQsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJyYW5jaDY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAo
CisgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAor
ICAgICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2Um
IHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
VmFsaWRGb3JtKEJyYW5jaFRlc3Q4LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5r
aW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0OCwgY3VycmVudFZhbHVlLCByZXNDb25kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNv
bnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpXaWR0aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVz
dDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCcmFuY2hUZXN0MzIsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsK
KyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwg
cmlnaHQua2luZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDY0LCBjdXJyZW50VmFsdWUsIHJl
c0NvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2Um
IGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2lu
ZCgpLCByaWdodC5raW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoRG91YmxlLCBjdXJyZW50VmFsdWUsIGRvdWJs
ZUNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgaW52ZXJ0ZWQpOworICAg
IH0KKworICAgIEluc3QgY3JlYXRlQ29tcGFyZShWYWx1ZSogdmFsdWUsIGJvb2wgaW52ZXJ0ZWQg
PSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAg
ICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgW3RoaXNdICgKKyAgICAgICAgICAgICAgICBB
cmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlbENvbmQsCisgICAgICAgICAgICAgICAgY29u
c3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6V2lkdGg4OgorICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0
aDMyOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTMyLCBBcmc6
OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29tcGFyZTMyLCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChj
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTY0LCBBcmc6OlJlbENvbmQs
IGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFy
ZTY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChjdXJyZW50VmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBb
dGhpc10gKAorICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVz
Q29uZCwKKyAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQ
cm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkg
eworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShUZXN0MzIsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0MzIsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5j
b25zdW1lKCp0aGlzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShUZXN0
NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXN0NjQsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwg
dG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQXJnJiwgY29uc3QgQXJnUHJvbWlzZSYsIGNvbnN0
IEFyZ1Byb21pc2UmKSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDkwMworICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgaW52ZXJ0ZWQpOworICAgIH0KKwogICAgIC8vIEJlbG93
IGlzIHRoZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNz
ICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KICAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29t
cGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hh
cmluZy4gRm9yIGV4YW1wbGUsCiAgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFu
ZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdp
bmFsCkBAIC02NzIsNiArMTIxMCwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlZmZlY3RpdmVB
ZGRyKGFkZHJlc3MsIGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgYm9vbCB0cnlMb2FkOFMoVmFsdWUqIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBlZmZlY3RpdmVB
ZGRyKGFkZHJlc3MsIGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9hZDhaKFZhbHVlKiBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBlZmZlY3RpdmVBZGRyKGFkZHJlc3Ms
IGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9hZDE2UyhWYWx1ZSogYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGFwcGVuZChMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBlZmZlY3RpdmVBZGRyKGFk
ZHJlc3MsIGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5TG9hZDE2WihWYWx1ZSogYWRkcmVzcykK
KyAgICB7CisgICAgICAgIGFwcGVuZChMb2FkMTYsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywgY3Vy
cmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CiAgICAgCiAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKICAg
ICB7CkBAIC04ODYsNiArMTQ0OCw2NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAorICAgIGJvb2wgdHJ5RXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgp
LmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHRyeU5vdEVxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3Rz
Lmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlMZXNzVGhhbigpCisgICAgeworICAgICAg
ICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5R3JlYXRlclRoYW4oKQorICAg
IHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1
ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUxlc3NFcXVh
bCgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3Vy
cmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5
R3JlYXRlckVxdWFsKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRl
Q29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCB0cnlBYm92ZSgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNy
ZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGJvb2wgdHJ5QmVsb3coKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVu
ZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIHRyeUFib3ZlRXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFz
dCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUJlbG93RXF1YWwoKQorICAgIHsKKyAgICAgICAg
aW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBQYXRjaHBvaW50U3BlY2lhbCogcGF0Y2hwb2lu
dFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgYm9vbCB0cnlQYXRjaHBvaW50KCkKICAgICB7CkBA
IC05MDMsMzQgKzE1MjUsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBDaGVja1NwZWNpYWwqIGNoZWNrQnJhbmNoVGVzdDMyU3BlY2lhbCB7IG51bGxwdHIg
fTsKLSAgICBDaGVja1NwZWNpYWwqIGNoZWNrQnJhbmNoVGVzdDY0U3BlY2lhbCB7IG51bGxwdHIg
fTsKKyAgICBIYXNoTWFwPENoZWNrU3BlY2lhbDo6S2V5LCBDaGVja1NwZWNpYWwqPiBjaGVja1Nw
ZWNpYWxzOwogICAgIGJvb2wgdHJ5Q2hlY2soVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAg
aWYgKCFpc0ludCh2YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBkb3VibGUgYnJhbmNoZXMuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzI3Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KKyAgICAgICAgSW5zdCBicmFuY2ggPSBjcmVhdGVCcmFuY2godmFsdWUpOwogCi0g
ICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbDsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBzcGVjaWFsID0gZW5zdXJl
U3BlY2lhbChjaGVja0JyYW5jaFRlc3QzMlNwZWNpYWwsIEJyYW5jaFRlc3QzMiwgMyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHNwZWNpYWwg
PSBlbnN1cmVTcGVjaWFsKGNoZWNrQnJhbmNoVGVzdDY0U3BlY2lhbCwgQnJhbmNoVGVzdDY0LCAz
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIENoZWNrU3BlY2lhbDo6S2V5IGtleShicmFuY2gpOworICAgICAgICBhdXRvIHJl
c3VsdCA9IGNoZWNrU3BlY2lhbHMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgICAgIFNwZWNpYWwq
IHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIGtleSk7CiAK
ICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IGN1cnJlbnRWYWx1ZS0+YXM8Q2hlY2tW
YWx1ZT4oKTsKIAotICAgICAgICBJbnN0IGluc3QoCi0gICAgICAgICAgICBQYXRjaCwgY2hlY2tW
YWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpLAotICAgICAgICAgICAgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsKKyAgICAg
ICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOwor
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kVmVjdG9yKGJyYW5jaC5hcmdzKTsKIAogICAgICAgICBm
aWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMSk7CiAKQEAgLTk1NSw0NiArMTU2Miw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgdHJ5QnJhbmNoKFZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYnJhbmNoIGZ1c2lvbiBieSBkZWxlZ2F0aW5nIHRvIGEg
cGF0dGVybiBtYXRjaGVyIGZvciBjb21wYXJpc29ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcyMQotCi0gICAgICAgIC8vIEluIEIzIGl0
J3MgcG9zc2libGUgdG8gYnJhbmNoIG9uIGFueSB2YWx1ZS4gVGhlIHNlbWFudGljcyBvZjoKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gICAgIEJyYW5jaCh2YWx1ZSkKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gQXJlIGd1YXJhbnRlZWQgdG8gYmUgaWRlbnRpY2FsIHRvOgotICAgICAgICAvLwotICAg
ICAgICAvLyAgICAgQnJhbmNoKE5vdEVxdWFsKHZhbHVlLCAwKSkKLQotICAgICAgICBpZiAoIWlz
SW50KHZhbHVlLT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRv
dWJsZSBicmFuY2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA3MjcKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTsKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBvcGNvZGUgPSBCcmFu
Y2hUZXN0MzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAg
ICAgICAgIG9wY29kZSA9IEJyYW5jaFRlc3Q2NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgQXJnIHJlc0NvbmQgPSBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pOwotCi0gICAgICAgIEFyZyBhZGRyID0g
bG9hZEFkZHIodmFsdWUpOwotICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCByZXNDb25k
LmtpbmQoKSwgYWRkci5raW5kKCksIEFyZzo6SW1tKSkgewotICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwodmFsdWUpOwotICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgYWRkciwg
QXJnOjppbW0oLTEpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsK
KyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFuY2godmFsdWUpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAxOTIwNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDExIEBAIG1hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCiAK
IExvYWQgPSBMb2FkKGFkZHJlc3MpCiAKK0xvYWQ4UyA9IExvYWQ4UyhhZGRyZXNzKQorTG9hZDha
ID0gTG9hZDhaKGFkZHJlc3MpCitMb2FkMTZTID0gTG9hZDE2UyhhZGRyZXNzKQorTG9hZDE2WiA9
IExvYWQxNlooYWRkcmVzcykKKwogQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQogU3ViID0gU3ViKGxl
ZnQsIHJpZ2h0KQogQW5kID0gQml0QW5kKGxlZnQsIHJpZ2h0KQpAQCAtNTcsNiArNjIsMTggQEAg
Q29uc3Q2NCA9IENvbnN0NjQoKQogU3RhY2tTbG90ID0gU3RhY2tTbG90KCkKIEZyYW1lUG9pbnRl
ciA9IEZyYW1lUG9pbnRlcigpCiAKKyMgVGhlc2UgcGF0dGVybnMgZGVsZWdhdGUgdG8gdGhlIGNv
bXBhcmlzb24gbWF0Y2hlci4KK0VxdWFsID0gRXF1YWwoKQorTm90RXF1YWwgPSBOb3RFcXVhbCgp
CitMZXNzVGhhbiA9IExlc3NUaGFuKCkKK0dyZWF0ZXJUaGFuID0gR3JlYXRlclRoYW4oKQorTGVz
c0VxdWFsID0gTGVzc0VxdWFsKCkKK0dyZWF0ZXJFcXVhbCA9IEdyZWF0ZXJFcXVhbCgpCitBYm92
ZSA9IEFib3ZlKCkKK0JlbG93ID0gQmVsb3coKQorQWJvdmVFcXVhbCA9IEFib3ZlRXF1YWwoKQor
QmVsb3dFcXVhbCA9IEJlbG93RXF1YWwoKQorCiBQYXRjaHBvaW50ID0gUGF0Y2hwb2ludCgpCiBD
aGVjayA9IENoZWNrKHZhbHVlKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09w
Y29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDQ2IEBACiAKICNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KIAorbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK09w
dGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21wYXJlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIHJldHVy
biBOb3RFcXVhbDsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICByZXR1cm4gRXF1YWw7Cisg
ICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIEdyZWF0ZXJFcXVhbDsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBH
cmVhdGVyVGhhbjoKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJu
IExlc3NFcXVhbDsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBMZXNzRXF1YWw6
CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhh
bjsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBMZXNzVGhhbjsKKyAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgcmV0dXJuIEJlbG93
RXF1YWw7CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgcmV0dXJuIEFib3ZlRXF1YWw7CisgICAg
Y2FzZSBBYm92ZUVxdWFsOgorICAgICAgICByZXR1cm4gQmVsb3c7CisgICAgY2FzZSBCZWxvd0Vx
dWFsOgorICAgICAgICByZXR1cm4gQWJvdmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwogbmFtZXNw
YWNlIFdURiB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKQEAgLTE3OCw3ICsxODAsNyBAQCBlbnVtIE9wY29kZSA6IGludDE2
X3QgewogICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KICAgICBKdW1w
LAogICAgIAotICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVl
IHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIFBv
bHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IGludGVnZXIgdHlwZS4gQnJhbmNoZXMg
aWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCiAgICAgLy8gQ29udHJvbFZhbHVlIGNsYXNz
LCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCiAg
ICAgQnJhbmNoLAogCkBAIC0yMDUsNiArMjA3LDggQEAgaW5saW5lIGJvb2wgaXNDaGVja01hdGgo
T3Bjb2RlIG9wY29kZSkKICAgICB9CiB9CiAKK09wdGlvbmFsPE9wY29kZT4gaW52ZXJ0ZWRDb21w
YXJlKE9wY29kZSwgVHlwZSk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiBuYW1lc3Bh
Y2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAko
cmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMzggQEAgQmFzaWNCbG9jayogUHJvY2Vk
dXJlOjphZGRCbG9jayhkb3VibGUgZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1ZhbHVlKiBQ
cm9jZWR1cmU6OmFkZEludENvbnN0YW50KFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEludDMyOgorICAgICAgICByZXR1cm4gYWRkPENv
bnN0MzJWYWx1ZT4oT3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7CisgICAg
Y2FzZSBJbnQ2NDoKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDY0VmFsdWU+KE9yaWdpbigpLCB2
YWx1ZSk7CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHJldHVybiBhZGQ8Q29uc3REb3VibGVW
YWx1ZT4oT3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9Cit9CisKK1ZhbHVlKiBQcm9jZWR1cmU6OmFkZEJvb2xDb25zdGFudChU
cmlTdGF0ZSB0cmlTdGF0ZSkKK3sKKyAgICBpbnQzMl90IHZhbHVlID0gMDsKKyAgICBzd2l0Y2gg
KHRyaVN0YXRlKSB7CisgICAgY2FzZSBGYWxzZVRyaVN0YXRlOgorICAgICAgICB2YWx1ZSA9IDA7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJ1ZVRyaVN0YXRlOgorICAgICAgICB2YWx1ZSA9
IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWl4ZWRUcmlTdGF0ZToKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkZEludENvbnN0YW50KEludDMyLCB2
YWx1ZSk7Cit9CisKIHZvaWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJzKCkKIHsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDEzIEBA
CiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAi
UHVyZU5hTi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC01Myw2ICs1NSwxMSBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CiAgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKIAorICAgIFZhbHVlKiBh
ZGRJbnRDb25zdGFudChUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKworICAgIC8vIFJldHVybnMgbnVs
bCBmb3IgTWl4ZWRUcmlTdGF0ZS4KKyAgICBWYWx1ZSogYWRkQm9vbENvbnN0YW50KFRyaVN0YXRl
KTsKKwogICAgIHZvaWQgcmVzZXRWYWx1ZU93bmVycygpOwogICAgIHZvaWQgcmVzZXRSZWFjaGFi
aWxpdHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw0MiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogbmFtZXNwYWNlIHsKIAorLy8gVGhlIGdv
YWwgb2YgdGhpcyBwaGFzZSBpcyB0bzoKKy8vCisvLyAtIFJlcGxhY2Ugb3BlcmF0aW9ucyB3aXRo
IGxlc3MgZXhwZW5zaXZlIHZhcmlhbnRzLiBUaGlzIGluY2x1ZGVzIGNvbnN0YW50IGZvbGRpbmcg
YW5kIGNsYXNzaWMKKy8vICAgc3RyZW5ndGggcmVkdWN0aW9ucyBsaWtlIHR1cm5pbmcgTXVsKHgs
IDEgPDwgaykgaW50byBTaGwoeCwgaykuCisvLworLy8gLSBSZWFzc29jaWF0ZSBjb25zdGFudCBv
cGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgTG9hZChBZGQoeCwgYykpIGlzIHR1cm5lZCBpbnRvIExv
YWQoeCwgb2Zmc2V0ID0gYykKKy8vICAgYW5kIEFkZChBZGQoeCwgYyksIGQpIGlzIHR1cm5lZCBp
bnRvIEFkZCh4LCBjICsgZCkuCisvLworLy8gLSBDYW5vbmljYWxpemUgb3BlcmF0aW9ucy4gVGhl
cmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQncyBub3QgYXQgYWxsIG9idmlvdXMgd2hpY2gga2lu
ZCBvZgorLy8gICBvcGVyYXRpb24gaXMgbGVzcyBleHBlbnNpdmUsIGJ1dCBpdCdzIHVzZWZ1bCBm
b3Igc3Vic2VxdWVudCBwaGFzZXMgLSBwYXJ0aWN1bGFybHkgTG93ZXJUb0FpciAtCisvLyAgIHRv
IGhhdmUgb25seSBvbmUgd2F5IG9mIHJlcHJlc2VudGluZyB0aGluZ3MuCisvLworLy8gVGhpcyBw
aGFzZSBydW5zIHRvIGZpeHBvaW50LiBUaGVyZWZvcmUsIHRoZSBjYW5vbmljYWxpemF0aW9ucyBt
dXN0IGJlIGRlc2lnbmVkIHRvIGJlIG1vbm90b25pYy4KKy8vIEZvciBleGFtcGxlLCBpZiB3ZSBo
YWQgYSBjYW5vbmljYWxpemF0aW9uIHRoYXQgc2FpZCB0aGF0IEFkZCh4LCAtYykgc2hvdWxkIGJl
IFN1Yih4LCBjKSBhbmQKKy8vIGFub3RoZXIgY2Fub25pY2FsaXphdGlvbiB0aGF0IHNhaWQgdGhh
dCBTdWIoeCwgZCkgc2hvdWxkIGJlIEFkZCh4LCAtZCksIHRoZW4gdGhpcyBwaGFzZSB3b3VsZCBl
bmQKKy8vIHVwIHJ1bm5pbmcgZm9yZXZlci4gV2UgZG9uJ3Qgd2FudCB0aGF0LgorLy8KKy8vIFRo
ZXJlZm9yZSwgd2UgbmVlZCB0byBwcmlvcml0aXplIGNlcnRhaW4gY2Fub25pY2FsIGZvcm1zIG92
ZXIgb3RoZXJzLiBOYWl2ZWx5LCB3ZSB3YW50IHN0cmVuZ3RoCisvLyByZWR1Y3Rpb24gdG8gcmVk
dWNlIHRoZSBudW1iZXIgb2YgdmFsdWVzLCBhbmQgc28gYSBmb3JtIGludm9sdmluZyBmZXdlciB0
b3RhbCB2YWx1ZXMgaXMgbW9yZQorLy8gY2Fub25pY2FsLiBCdXQgd2UgbWlnaHQgYnJlYWsgdGhp
cywgZm9yIGV4YW1wbGUgd2hlbiByZWR1Y2luZyBzdHJlbmd0aCBvZiBNdWwoeCwgOSkuIFRoaXMg
Y291bGQgYmUKKy8vIGJldHRlciB3cml0dGVuIGFzIEFkZChTaGwoeCwgMyksIHgpLCB3aGljaCBh
bHNvIGhhcHBlbnMgdG8gYmUgcmVwcmVzZW50YWJsZSB1c2luZyBhIHNpbmdsZQorLy8gaW5zdHJ1
Y3Rpb24gb24geDg2LgorLy8KKy8vIEhlcmUgYXJlIHNvbWUgb2YgdGhlIHJ1bGVzIHdlIGhhdmU6
CisvLworLy8gQ2Fub25pY2FsIGZvcm0gb2YgbG9naWNhbCBub3Q6IEJpdFhvcih2YWx1ZSwgMSku
IFdlIG1heSBoYXZlIHRvIGF2b2lkIHVzaW5nIHRoaXMgZm9ybSBpZiB3ZSBkb24ndAorLy8ga25v
dyBmb3Igc3VyZSB0aGF0ICd2YWx1ZScgaXMgMC1vci0xIChpLmUuIHJldHVybnNCb29sKS4gSW4g
dGhhdCBjYXNlIHdlIGZhbGwgYmFjayBvbgorLy8gRXF1YWwodmFsdWUsIDApLgorLy8KKy8vIENh
bm9uaWNhbCBmb3JtIG9mIGNvbW11dGF0aXZlIG9wZXJhdGlvbnM6IGlmIHRoZSBvcGVyYXRpb24g
aW52b2x2ZXMgYSBjb25zdGFudCwgdGhlIGNvbnN0YW50IG11c3QKKy8vIGNvbWUgc2Vjb25kLiBB
ZGQoeCwgY29uc3RhbnQpIGlzIGNhbm9uaWNhbCwgd2hpbGUgQWRkKGNvbnN0YW50LCB4KSBpcyBu
b3QuIElmIHRoZXJlIGFyZSBubworLy8gY29uc3RhbnRzIHRoZW4gdGhlIGNhbm9uaWNhbCBmb3Jt
IGludm9sdmVzIHRoZSBsb3dlci1pbmRleGVkIHZhbHVlIGZpcnN0LiBHaXZlbiBBZGQoeCwgeSks
IGl0J3MKKy8vIGNhbm9uaWNhbCBpZiB4LT5pbmRleCgpIDw9IHktPmluZGV4KCkuCisKK2Jvb2wg
dmVyYm9zZSA9IGZhbHNlOworCiBjbGFzcyBSZWR1Y2VTdHJlbmd0aCB7CiBwdWJsaWM6CiAgICAg
UmVkdWNlU3RyZW5ndGgoUHJvY2VkdXJlJiBwcm9jKQpAQCAtNTQsMTAgKzkwLDE2IEBAIHB1Ymxp
YzoKICAgICBib29sIHJ1bigpCiAgICAgewogICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwor
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gZmFsc2U7CiAKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVkdWNl
IHN0cmVuZ3RoIElSIGJlZm9yZSBpdGVyYXRpb24gIyIsICsraW5kZXgsICJcbiIpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2cobV9wcm9jKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAg
ICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgICAgICAgICAgICAgCkBAIC0yNTcs
MTkgKzI5OSwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogaW52ZXJ0ZWRDb21wYXJlCisgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIGlu
dmVydGVkQ29tcGFyZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5pbnZlcnRlZENvbXBhcmUobV9wcm9j
KSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGludmVydGVkQ29t
cGFyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2
YWx1ZVgpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQuCiAgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAg
ICAgICAgICAgICBWYWx1ZSogemVyb0NvbnN0YW50OwotICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT50eXBlKCkgPT0gSW50MzIpCi0gICAgICAgICAgICAgICAgICAgIHplcm9Db25zdGFudCA9
IG1fcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgMCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDY0KQotICAgICAgICAgICAg
ICAgICAgICB6ZXJvQ29uc3RhbnQgPSBtX3Byb2MuYWRkPENvbnN0NjRWYWx1ZT4obV92YWx1ZS0+
b3JpZ2luKCksIDApOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlLT50eXBlKCkgPT0gRG91YmxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgemVyb0NvbnN0YW50ID0gbV9wcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihtX3Zh
bHVlLT5vcmlnaW4oKSwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoemVyb0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLT50eXBlKCksIDApKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMzc3LDE2ICs0MTks
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBFcXVhbDoKICAgICAgICAgICAgIGhhbmRsZUNv
bW11dGF0aXZpdHkoKTsKIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChFcXVhbCh4
LCAwKSwgMCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogTm90RXF1YWwoeCwgMCkKLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgbV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSktPmlzTGlrZVplcm8oKSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBFcXVhbChib29sLCAwKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoYm9vbCwg
MSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKSkgewogICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgTm90RXF1YWwsIG1fdmFsdWUtPm9y
aWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIEJpdFhv
ciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAorICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVl
LT5vcmlnaW4oKSwgMSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpcyBFcXVhbChib29sLCAxKQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBib29sCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkp
IHsKQEAgLTM5NSwxMyArNDM2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBIYXZlIGEgY29tcGFyZS1m
bGlwcGluZyBvcHRpbWl6YXRpb24sIGxpa2UgRXF1YWwoTGVzc1RoYW4oYSwgYiksIDApIHR1cm5z
IGludG8KLSAgICAgICAgICAgIC8vIEdyZWF0ZXJFcXVhbChhLCBiKS4KLSAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3MjYKLQogICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogY29uc3QxID09IGNvbnN0MgotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+ZXF1YWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNo
aWxkKDEpKSk7CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAg
ICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3Rh
bnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIE5vdEVxdWFsOgpAQCAtNDI3LDcgKzQ2NSw0OCBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQogICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgIT0gY29uc3QyCi0gICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5ub3RFcXVhbENvbnN0YW50KG1fcHJv
YywgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgw
KS0+bm90RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+
Y2hpbGQoMCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEp
KSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMZXNzRXF1YWw6CisgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NFcXVhbENvbnN0YW50KG1fdmFsdWUt
PmNoaWxkKDEpKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmVhdGVy
RXF1YWw6CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAg
IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVD
b25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQmVsb3c6CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93
Q29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAor
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCkt
PmFib3ZlRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3VmFsdWUoCisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVl
LT5jaGlsZCgwKS0+YmVsb3dFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKQEAgLTQzNSwxNCArNTE0
LDI0IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKE5vdEVx
dWFsKHgsIDApKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goeCkKLSAgICAgICAg
ICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCAmJiBicmFuY2gt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aXNMaWtlWmVybygpKSB7CisgICAgICAgICAgICBpZiAoYnJh
bmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwgJiYgYnJhbmNoLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50KDApKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5jaGlsZCgwKSA9
IGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNo
KEVxdWFsKHgsIDApLCB0aGVuLCBlbHNlKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCcmFu
Y2goeCwgZWxzZSwgdGhlbikKLSAgICAgICAgICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBFcXVhbCAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNMaWtlWmVybygp
KSB7CisgICAgICAgICAgICBpZiAoYnJhbmNoLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwg
JiYgYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgICAgICAg
ICAgYnJhbmNoLT5jaGlsZCgwKSA9IGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgIHN0ZDo6c3dhcChicmFuY2gtPnRha2VuKCksIGJyYW5jaC0+bm90VGFrZW4oKSk7
CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goQml0WG9yKGJvb2wsIDEp
LCB0aGVuLCBlbHNlKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goYm9vbCwgZWxz
ZSwgdGhlbikKKyAgICAgICAgICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBC
aXRYb3IKKyAgICAgICAgICAgICAgICAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJ
bnQzMigxKQorICAgICAgICAgICAgICAgICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDApLT5y
ZXR1cm5zQm9vbCgpKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5jaGlsZCgwKSA9IGJyYW5j
aC0+Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChicmFuY2gt
PnRha2VuKCksIGJyYW5jaC0+bm90VGFrZW4oKSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDExICsyOTEsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwg
KnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJyYW5j
aDoKICAgICAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgICAg
ICBjYXNlIFN3aXRjaDoKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29udHJvbFZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKICNpbmNsdWRlICJCM1Vw
c2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCkBAIC0xNjIsMTMgKzE2
Myw2MiBAQCBWYWx1ZSogVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6ZXF1YWxDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSopIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9
CisKK1RyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAg
ICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29u
c3RhbnQoVmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitU
cmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjpsZXNzRXF1YWxDb25z
dGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1Ry
aVN0YXRlIFZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjphYm92ZUNvbnN0YW50
KFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3Rh
dGUgVmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50KFZhbHVl
KikgY29uc3QKK3sKKyAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUgVmFs
dWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmludmVydGVkQ29tcGFyZShQcm9jZWR1cmUm
IHByb2MpIGNvbnN0CiB7CisgICAgaWYgKCFudW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBpZiAoT3B0aW9uYWw8T3Bjb2RlPiBpbnZlcnRlZE9wY29kZSA9IEIzOjpp
bnZlcnRlZENvbXBhcmUob3Bjb2RlKCksIGNoaWxkKDApLT50eXBlKCkpKQorICAgICAgICByZXR1
cm4gcHJvYy5hZGQ8VmFsdWU+KCppbnZlcnRlZE9wY29kZSwgdHlwZSgpLCBvcmlnaW4oKSwgY2hp
bGRyZW4oKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCwyMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiB6U2hyQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBlcXVhbENvbnN0
YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSog
bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIAor
ICAgIHZpcnR1YWwgVHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Owor
ICAgIHZpcnR1YWwgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgVHJpU3RhdGUgbGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBhYm92ZUVxdWFsQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGJlbG93RXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworCisgICAgLy8gSWYgdGhlIHZhbHVlIGlz
IGEgY29tcGFyaXNvbiB0aGVuIHRoaXMgcmV0dXJucyB0aGUgaW52ZXJ0ZWQgZm9ybSBvZiB0aGF0
IGNvbXBhcmlzb24sIGlmCisgICAgLy8gcG9zc2libGUuIEl0IGNhbiBiZSBpbXBvc3NpYmxlIGZv
ciBkb3VibGUgY29tcGFyaXNvbnMsIHdoZXJlIGZvciBleGFtcGxlIExlc3NUaGFuIGFuZAorICAg
IC8vIEdyZWF0ZXJFcXVhbCBiZWhhdmUgZGlmZmVyZW50bHkuIElmIHRoaXMgcmV0dXJucyBhIHZh
bHVlLCBpdCBpcyBhIG5ldyB2YWx1ZSwgd2hpY2ggbXVzdCBiZQorICAgIC8vIGVpdGhlciBpbnNl
cnRlZCBpbnRvIHNvbWUgYmxvY2sgb3IgZGVsZXRlZC4KKyAgICBWYWx1ZSogaW52ZXJ0ZWRDb21w
YXJlKFByb2NlZHVyZSYpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OwogICAg
IGludDMyX3QgYXNJbnQzMigpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKIC8vIFdlIGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RP
X0VYSVQsIG5vciBzaG91bGQgd2UuIFRoYXQncyByaWRpY3Vsb3VzLgogc3RhdGljIGJvb2wgaGlk
ZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTE3
MDYsNiArMTcwOSwxMDcgQEAgdm9pZCB0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KGludCB2YWx1ZSkK
ICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpID09IHZhbHVlKTsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludDMyX3QgbW9kZWxMb2FkKGludDMyX3QgdmFsdWUp
Cit7CisgICAgdW5pb24geworICAgICAgICBpbnQzMl90IG9yaWdpbmFsOworICAgICAgICBUIGxv
YWRlZDsKKyAgICB9IHU7CisKKyAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgaWYgKHN0ZDo6
aXNfc2lnbmVkPFQ+Ojp2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+
KHUubG9hZGVkKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHUubG9hZGVkKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRl
c3RMb2FkKEIzOjpPcGNvZGUgb3Bjb2RlLCBpbnQzMl90IHZhbHVlKQoreworICAgIC8vIFNpbXBs
ZSBsb2FkIGZyb20gYW4gYWJzb2x1dGUgYWRkcmVzcy4KKyAgICB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBvcGNvZGUsIEludDMyLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksICZ2YWx1ZSkpKTsKKworICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMy
X3Q+KHByb2MpID09IG1vZGVsTG9hZDxUPih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICAvLyBT
aW1wbGUgbG9hZCBmcm9tIGFuIGFkZHJlc3MgaW4gYSByZWdpc3Rlci4KKyAgICB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBvcGNvZGUsIEludDMy
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKworICAgICAg
ICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsICZ2YWx1ZSkgPT0gbW9kZWxMb2Fk
PFQ+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIC8vIFNpbXBsZSBsb2FkIGZyb20gYW4gYWRk
cmVzcyBpbiBhIHJlZ2lzdGVyLCBhdCBhbiBvZmZzZXQuCisgICAgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgb3Bjb2RlLCBJbnQzMiwgT3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHNp
emVvZihpbnQzMl90KSkpOworCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4o
cHJvYywgJnZhbHVlIC0gMSkgPT0gbW9kZWxMb2FkPFQ+KHZhbHVlKSk7CisgICAgfQorCisgICAg
Ly8gTG9hZCBmcm9tIGEgc2ltcGxlIGJhc2UtaW5kZXggd2l0aCB2YXJpb3VzIHNjYWxlcy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGxvZ1NjYWxlID0gMDsgbG9nU2NhbGUgPD0gMzsgKytsb2dTY2FsZSkg
eworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIG9wY29kZSwgSW50
MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG9n
U2NhbGUpKSkpKTsKKworICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2Ms
ICZ2YWx1ZSAtIDIsIChzaXplb2YoaW50MzJfdCkgKiAyKSA+PiBsb2dTY2FsZSkgPT0gbW9kZWxM
b2FkPFQ+KHZhbHVlKSk7CisgICAgfQorCisgICAgLy8gTG9hZCBmcm9tIGEgc2ltcGxlIGJhc2Ut
aW5kZXggd2l0aCB2YXJpb3VzIHNjYWxlcywgYnV0IGNvbW11dGVkLgorICAgIGZvciAodW5zaWdu
ZWQgbG9nU2NhbGUgPSAwOyBsb2dTY2FsZSA8PSAzOyArK2xvZ1NjYWxlKSB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgb3Bjb2RlLCBJbnQzMiwgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbG9nU2NhbGUpKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSkpOwor
CisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgJnZhbHVlIC0gMiwg
KHNpemVvZihpbnQzMl90KSAqIDIpID4+IGxvZ1NjYWxlKSA9PSBtb2RlbExvYWQ8VD4odmFsdWUp
KTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdEJyYW5jaCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7
CkBAIC0yMjQ2LDcgKzIzNTAsNyBAQCB2b2lkIHRlc3RDb21wbGV4KHVuc2lnbmVkIG51bVZhcnMs
IHVuc2lnCiAgICAgY29tcGlsZShwcm9jKTsKIAogICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7Ci0gICAgZGF0YUxvZygiICAgIFRoYXQgdG9vayAiLCBh
ZnRlciAtIGJlZm9yZSwgIiBtcy5cbiIpOworICAgIGRhdGFMb2codG9DU3RyaW5nKCIgICAgVGhh
dCB0b29rICIsIGFmdGVyIC0gYmVmb3JlLCAiIG1zLlxuIikpOwogfQogCiB2b2lkIHRlc3RTaW1w
bGVQYXRjaHBvaW50KCkKQEAgLTIyOTksMTMgKzI0MDMsMjYzIEBAIHZvaWQgdGVzdFNpbXBsZUNo
ZWNrKCkKICAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAxKSA9PSA0Mik7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0eXBlbmFtZSBSaWdodEZ1bmN0b3I+Cit2b2lkIGdl
bmVyaWNUZXN0Q29tcGFyZSgKKyAgICBCMzo6T3Bjb2RlIG9wY29kZSwgY29uc3QgTGVmdEZ1bmN0
b3ImIGxlZnRGdW5jdG9yLCBjb25zdCBSaWdodEZ1bmN0b3ImIHJpZ2h0RnVuY3RvciwKKyAgICBp
bnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgcmVzdWx0KQoreworICAgIC8vIFVzaW5nIGEgY29tcGFy
ZS4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWws
IE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgIHByb2MsIG9wY29kZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3Qs
IHByb2MpLCByaWdodEZ1bmN0b3Iocm9vdCwgcHJvYykpLAorICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSkpOworCisgICAgICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBsZWZ0LCByaWdodCkgPT0gcmVzdWx0KTsK
KyAgICB9CisgICAgCisgICAgLy8gVXNpbmcgYSBicmFuY2guCisgICAgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICAgICAgQmFzaWNCbG9jayogdGhlbkNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBPcmln
aW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwgbGVmdEZ1bmN0b3Iocm9vdCwgcHJvYyksIHJpZ2h0
RnVuY3Rvcihyb290LCBwcm9jKSksCisgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sodGhlbkNh
c2UpLCBGcmVxdWVudGVkQmxvY2soZWxzZUNhc2UpKTsKKworICAgICAgICAvLyBXZSB1c2UgYSBw
YXRjaHBvaW50IG9uIHRoZSB0aGVuIGNhc2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGdl
dCBpZi1jb252ZXJ0ZWQuCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHRo
ZW5DYXNlLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkp
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAxKTsKKyAgICAg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcGFyYW1zLnJlcHNbMF0u
Z3ByKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKworICAgICAg
ICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MsIGxlZnQsIHJpZ2h0KSA9PSByZXN1bHQpOworICAgIH0KK30KKworaW50IG1v
ZGVsQ29tcGFyZShCMzo6T3Bjb2RlIG9wY29kZSwgaW50IGxlZnQsIGludCByaWdodCkKK3sKKyAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIHJldHVybiBsZWZ0
ID09IHJpZ2h0OworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIHJldHVybiBsZWZ0ICE9IHJp
Z2h0OworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7Cisg
ICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIGxlZnQgPiByaWdodDsKKyAgICBj
YXNlIExlc3NFcXVhbDoKKyAgICAgICAgcmV0dXJuIGxlZnQgPD0gcmlnaHQ7CisgICAgY2FzZSBH
cmVhdGVyRXF1YWw6CisgICAgICAgIHJldHVybiBsZWZ0ID49IHJpZ2h0OworICAgIGNhc2UgQWJv
dmU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVmdCkgPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmlnaHQpOworICAgIGNhc2UgQmVsb3c6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGVmdCkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHQp
OworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsZWZ0KSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHQpOworICAgIGNhc2UgQmVs
b3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZWZ0KSA8PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHQpOworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBy
ZXR1cm4gISEobGVmdCAmIHJpZ2h0KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RDb21wYXJlTG9hZChCMzo6T3Bjb2RlIG9wY29kZSwg
QjM6Ok9wY29kZSBsb2FkT3Bjb2RlLCBpbnQgbGVmdCwgaW50IHJpZ2h0KQoreworICAgIGludCBy
ZXN1bHQgPSBtb2RlbENvbXBhcmUob3Bjb2RlLCBtb2RlbExvYWQ8VD4obGVmdCksIHJpZ2h0KTsK
KyAgICAKKyAgICAvLyBUZXN0IGFkZHItdG8tdG1wCisgICAgaW50IHNsb3QgPSBsZWZ0OworICAg
IGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2lj
QmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBsb2FkT3Bj
b2RlLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAg
ICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAg
ICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKworICAgIC8vIFRlc3QgYWRk
ci10by1pbW0KKyAgICBzbG90ID0gbGVmdDsKKyAgICBnZW5lcmljVGVzdENvbXBhcmUoCisgICAg
ICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBw
cm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksICZzbG90KSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ss
IFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcmlnaHQpOworICAgICAgICB9LAorICAgICAg
ICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKworICAgIHJlc3VsdCA9IG1vZGVsQ29tcGFyZShvcGNv
ZGUsIGxlZnQsIG1vZGVsTG9hZDxUPihyaWdodCkpOworICAgIAorICAgIC8vIFRlc3QgdG1wLXRv
LWFkZHIKKyAgICBzbG90ID0gcmlnaHQ7CisgICAgZ2VuZXJpY1Rlc3RDb21wYXJlKAorICAgICAg
ICBvcGNvZGUsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJv
YykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywg
UHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9y
aWdpbigpLAorICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksICZzbG90KSk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0
LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBpbW0tdG8tYWRkcgorICAgIHNsb3QgPSByaWdodDsK
KyAgICBnZW5lcmljVGVzdENvbXBhcmUoCisgICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChC
YXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4g
YmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0KTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9j
KSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
ICZzbG90KSk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworfQor
Cit2b2lkIHRlc3RDb21wYXJlSW1wbChCMzo6T3Bjb2RlIG9wY29kZSwgaW50IGxlZnQsIGludCBy
aWdodCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gbW9kZWxDb21wYXJlKG9wY29kZSwgbGVmdCwgcmln
aHQpOworICAgIAorICAgIC8vIFRlc3QgdG1wLXRvLXRtcC4KKyAgICBnZW5lcmljVGVzdENvbXBh
cmUoCisgICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJv
Y2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxv
Y2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIH0sCisgICAgICAg
IGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBpbW0tdG8tdG1wLgorICAgIGdl
bmVyaWNUZXN0Q29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxv
Y2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxlZnQpOworICAgICAgICB9
LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAg
ICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KSk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8g
VGVzdCB0bXAtdG8taW1tLgorICAgIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAgICAgb3Bjb2Rl
LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAg
ICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVy
ZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgcmlnaHQpOworICAgICAgICB9LAorICAgICAgICBsZWZ0LCBy
aWdodCwgcmVzdWx0KTsKKworICAgIC8vIFRlc3QgaW1tLXRvLWltbS4KKyAgICBnZW5lcmljVGVz
dENvbXBhcmUoCisgICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9j
aywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0KTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAg
ICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBy
aWdodCk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAg
dGVzdENvbXBhcmVMb2FkPGludDMyX3Q+KG9wY29kZSwgTG9hZCwgbGVmdCwgcmlnaHQpOworICAg
IHRlc3RDb21wYXJlTG9hZDxpbnQ4X3Q+KG9wY29kZSwgTG9hZDhTLCBsZWZ0LCByaWdodCk7Cisg
ICAgdGVzdENvbXBhcmVMb2FkPHVpbnQ4X3Q+KG9wY29kZSwgTG9hZDhaLCBsZWZ0LCByaWdodCk7
CisgICAgdGVzdENvbXBhcmVMb2FkPGludDE2X3Q+KG9wY29kZSwgTG9hZDE2UywgbGVmdCwgcmln
aHQpOworICAgIHRlc3RDb21wYXJlTG9hZDx1aW50MTZfdD4ob3Bjb2RlLCBMb2FkMTZaLCBsZWZ0
LCByaWdodCk7Cit9CisKK3ZvaWQgdGVzdENvbXBhcmUoQjM6Ok9wY29kZSBvcGNvZGUsIGludCBs
ZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgYXV0byB2YXJpYW50cyA9IFsmXSAoaW50IGxlZnQsIGlu
dCByaWdodCkgeworICAgICAgICB0ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0LCByaWdodCk7
CisgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQsIHJpZ2h0ICsgMSk7CisgICAg
ICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQsIHJpZ2h0IC0gMSk7CisKKyAgICAgICAg
YXV0byBtdWx0aXBsaWVkVGVzdHMgPSBbJl0gKGludCBmYWN0b3IpIHsKKyAgICAgICAgICAgIHRl
c3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQgKiBmYWN0b3IsIHJpZ2h0KTsKKyAgICAgICAgICAg
IHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQgKiBmYWN0b3IsIHJpZ2h0ICsgMSk7CisgICAg
ICAgICAgICB0ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0ICogZmFjdG9yLCByaWdodCAtIDEp
OworICAgICAgICAKKyAgICAgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQsIHJp
Z2h0ICogZmFjdG9yKTsKKyAgICAgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQs
IChyaWdodCArIDEpICogZmFjdG9yKTsKKyAgICAgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNv
ZGUsIGxlZnQsIChyaWdodCAtIDEpICogZmFjdG9yKTsKKyAgICAgICAgCisgICAgICAgICAgICB0
ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0ICogZmFjdG9yLCByaWdodCAqIGZhY3Rvcik7Cisg
ICAgICAgICAgICB0ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0ICogZmFjdG9yLCAocmlnaHQg
KyAxKSAqIGZhY3Rvcik7CisgICAgICAgICAgICB0ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0
ICogZmFjdG9yLCAocmlnaHQgLSAxKSAqIGZhY3Rvcik7CisgICAgICAgIH07CisKKyAgICAgICAg
bXVsdGlwbGllZFRlc3RzKDEwKTsKKyAgICAgICAgbXVsdGlwbGllZFRlc3RzKDEwMCk7CisgICAg
ICAgIG11bHRpcGxpZWRUZXN0cygxMDAwKTsKKyAgICAgICAgbXVsdGlwbGllZFRlc3RzKDEwMDAw
MCk7CisgICAgfTsKKworICAgIHZhcmlhbnRzKGxlZnQsIHJpZ2h0KTsKKyAgICB2YXJpYW50cygt
bGVmdCwgcmlnaHQpOworICAgIHZhcmlhbnRzKGxlZnQsIC1yaWdodCk7CisgICAgdmFyaWFudHMo
LWxlZnQsIC1yaWdodCk7Cit9CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgZGF0YUxvZygjdGVzdCAiOlxuIik7ICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ZGF0YUxvZygiICAgIE9LIVxuIik7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZGlkUnVu
Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGFza3MuYXBwZW5k
KCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRh
c2s8dm9pZCgpPiggICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeyAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiLi4u
XG4iKTsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIpOyAgIFwK
KyAgICAgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9
IHdoaWxlIChmYWxzZSk7CiAKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKQEAgLTIzMTMs
MTAgKzI2NjcsMTEgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIEpTQzo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwogICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFr
UmVmKCk7CiAKKyAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7CisK
ICAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAoY29uc3QgY2hhciogdGVzdE5hbWUpIC0+IGJvb2wg
ewotICAgICAgICByZXR1cm4gISFzdHJjYXNlc3RyKHRlc3ROYW1lLCBmaWx0ZXIpOworICAgICAg
ICByZXR1cm4gIWZpbHRlciB8fCAhIXN0cmNhc2VzdHIodGVzdE5hbWUsIGZpbHRlcik7CiAgICAg
fTsKLSAgICB1bnNpZ25lZCBkaWRSdW4gPSAwOwogCiAgICAgUlVOKHRlc3Q0MigpKTsKICAgICBS
VU4odGVzdExvYWQ0MigpKTsKQEAgLTI2NzAsNiArMzAyNSw3IEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKICAgICBSVU4odGVzdFN0YWNrU2xvdCgpKTsKICAgICBSVU4odGVzdExvYWRG
cm9tRnJhbWVQb2ludGVyKCkpOwogICAgIFJVTih0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KDUwKSk7
CisgICAgCiAgICAgUlVOKHRlc3RCcmFuY2goKSk7CiAgICAgUlVOKHRlc3RCcmFuY2hQdHIoKSk7
CiAgICAgUlVOKHRlc3REaWFtb25kKCkpOwpAQCAtMjY5OSw4ICszMDU1LDkyIEBAIHZvaWQgcnVu
KGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnQoKSk7CiAg
ICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsKIAotICAgIGlmICghZGlkUnVuKQorICAgIFJVTih0
ZXN0Q29tcGFyZShFcXVhbCwgNDIsIDQyKSk7CisgICAgUlVOKHRlc3RDb21wYXJlKE5vdEVxdWFs
LCA0MiwgNDIpKTsKKyAgICBSVU4odGVzdENvbXBhcmUoTGVzc1RoYW4sIDQyLCA0MikpOworICAg
IFJVTih0ZXN0Q29tcGFyZShHcmVhdGVyVGhhbiwgNDIsIDQyKSk7CisgICAgUlVOKHRlc3RDb21w
YXJlKExlc3NFcXVhbCwgNDIsIDQyKSk7CisgICAgUlVOKHRlc3RDb21wYXJlKEdyZWF0ZXJFcXVh
bCwgNDIsIDQyKSk7CisgICAgUlVOKHRlc3RDb21wYXJlKEJlbG93LCA0MiwgNDIpKTsKKyAgICBS
VU4odGVzdENvbXBhcmUoQWJvdmUsIDQyLCA0MikpOworICAgIFJVTih0ZXN0Q29tcGFyZShCZWxv
d0VxdWFsLCA0MiwgNDIpKTsKKyAgICBSVU4odGVzdENvbXBhcmUoQWJvdmVFcXVhbCwgNDIsIDQy
KSk7CisKKyAgICBSVU4odGVzdENvbXBhcmUoQml0QW5kLCA0MiwgNDIpKTsKKyAgICBSVU4odGVz
dENvbXBhcmUoQml0QW5kLCA0MiwgMCkpOworCisgICAgUlVOKHRlc3RMb2FkPGludDMyX3Q+KExv
YWQsIDYwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDMyX3Q+KExvYWQsIC02MCkpOworICAgIFJV
Tih0ZXN0TG9hZDxpbnQzMl90PihMb2FkLCAxMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDMy
X3Q+KExvYWQsIC0xMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDMyX3Q+KExvYWQsIDEwMDAw
MDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50MzJfdD4oTG9hZCwgLTEwMDAwMDApKTsKKyAgICBS
VU4odGVzdExvYWQ8aW50MzJfdD4oTG9hZCwgMTAwMDAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9h
ZDxpbnQzMl90PihMb2FkLCAtMTAwMDAwMDAwMCkpOworICAgIAorICAgIFJVTih0ZXN0TG9hZDxp
bnQ4X3Q+KExvYWQ4UywgNjApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50OF90PihMb2FkOFMsIC02
MCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQ4X3Q+KExvYWQ4UywgMTAwMCkpOworICAgIFJVTih0
ZXN0TG9hZDxpbnQ4X3Q+KExvYWQ4UywgLTEwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50OF90
PihMb2FkOFMsIDEwMDAwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50OF90PihMb2FkOFMsIC0x
MDAwMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDhfdD4oTG9hZDhTLCAxMDAwMDAwMDAwKSk7
CisgICAgUlVOKHRlc3RMb2FkPGludDhfdD4oTG9hZDhTLCAtMTAwMDAwMDAwMCkpOworICAgIAor
ICAgIFJVTih0ZXN0TG9hZDx1aW50OF90PihMb2FkOFosIDYwKSk7CisgICAgUlVOKHRlc3RMb2Fk
PHVpbnQ4X3Q+KExvYWQ4WiwgLTYwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQ4X3Q+KExvYWQ4
WiwgMTAwMCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50OF90PihMb2FkOFosIC0xMDAwKSk7Cisg
ICAgUlVOKHRlc3RMb2FkPHVpbnQ4X3Q+KExvYWQ4WiwgMTAwMDAwMCkpOworICAgIFJVTih0ZXN0
TG9hZDx1aW50OF90PihMb2FkOFosIC0xMDAwMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQ4
X3Q+KExvYWQ4WiwgMTAwMDAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50OF90PihMb2Fk
OFosIC0xMDAwMDAwMDAwKSk7CisKKyAgICBSVU4odGVzdExvYWQ8aW50MTZfdD4oTG9hZDE2Uywg
NjApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50MTZfdD4oTG9hZDE2UywgLTYwKSk7CisgICAgUlVO
KHRlc3RMb2FkPGludDE2X3Q+KExvYWQxNlMsIDEwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50
MTZfdD4oTG9hZDE2UywgLTEwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50MTZfdD4oTG9hZDE2
UywgMTAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQxNl90PihMb2FkMTZTLCAtMTAwMDAw
MCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQxNl90PihMb2FkMTZTLCAxMDAwMDAwMDAwKSk7Cisg
ICAgUlVOKHRlc3RMb2FkPGludDE2X3Q+KExvYWQxNlMsIC0xMDAwMDAwMDAwKSk7CisgICAgCisg
ICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihMb2FkMTZaLCA2MCkpOworICAgIFJVTih0ZXN0TG9h
ZDx1aW50MTZfdD4oTG9hZDE2WiwgLTYwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihM
b2FkMTZaLCAxMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihMb2FkMTZaLCAtMTAw
MCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50MTZfdD4oTG9hZDE2WiwgMTAwMDAwMCkpOworICAg
IFJVTih0ZXN0TG9hZDx1aW50MTZfdD4oTG9hZDE2WiwgLTEwMDAwMDApKTsKKyAgICBSVU4odGVz
dExvYWQ8dWludDE2X3Q+KExvYWQxNlosIDEwMDAwMDAwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8
dWludDE2X3Q+KExvYWQxNlosIC0xMDAwMDAwMDAwKSk7CisKKyAgICBpZiAodGFza3MuaXNFbXB0
eSgpKQogICAgICAgICB1c2FnZSgpOworCisgICAgTG9jayBsb2NrOworCisgICAgVmVjdG9yPFRo
cmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8g
MSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CisgICAgICAgIHRocmVh
ZHMuYXBwZW5kKAorICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJ0
ZXN0YjMgdGhyZWFkIiwKKyAgICAgICAgICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+PiB0YXNrOworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFz
a3MudGFrZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRhc2stPnJ1bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSkpOworICAgIH0KKworICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQg
OiB0aHJlYWRzKQorICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOwogfQog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKQEAgLTI3MTYsNyArMzE1Niw3IEBAIHN0YXRpYyB2
b2lkIHJ1bihjb25zdCBjaGFyKikKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ewotICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9ICIiOworICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9
IG51bGxwdHI7CiAgICAgc3dpdGNoIChhcmdjKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9u
IDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCitib29sIEFyZzo6aXNSZXByZXNlbnRhYmxlQXMoV2lk
dGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHNp
Z25lZG5lc3MpIHsKKyAgICBjYXNlIFNpZ25lZDoKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgewor
ICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVB
czxpbnQ4X3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgIHJldHVybiBp
c1JlcHJlc2VudGFibGVBczxpbnQxNl90PigpOworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAg
ICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKTsKKyAgICAgICAgY2Fz
ZSBXaWR0aDY0OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPGludDY0X3Q+
KCk7CisgICAgICAgIH0KKyAgICBjYXNlIFVuc2lnbmVkOgorICAgICAgICBzd2l0Y2ggKHdpZHRo
KSB7CisgICAgICAgIGNhc2UgV2lkdGg4OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50
YWJsZUFzPHVpbnQ4X3Q+KCk7CisgICAgICAgIGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgIHJl
dHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50MTZfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDMy
OgorICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQzMl90PigpOworICAg
ICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8
dWludDY0X3Q+KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQXJnOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTkwLDQgKzEx
OCwxMjIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIAogfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcjsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEFyZzo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQXJn
OjpJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIG91dC5wcmludCgiVG1wIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBvdXQucHJpbnQoIkltbSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBvdXQucHJpbnQo
IkltbTY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAg
b3V0LnByaW50KCJBZGRyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6U3RhY2s6
CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QXJnOjpDYWxsQXJnOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxBcmciKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQXJnOjpJbmRleDoKKyAgICAgICAgb3V0LnByaW50KCJJbmRleCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlJlbENvbmQ6CisgICAgICAgIG91dC5wcmlu
dCgiUmVsQ29uZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlJlc0NvbmQ6Cisg
ICAgICAgIG91dC5wcmludCgiUmVzQ29uZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
cmc6OkRvdWJsZUNvbmQ6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlQ29uZCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBcmc6OlNwZWNpYWw6CisgICAgICAgIG91dC5wcmludCgiU3Bl
Y2lhbCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFy
Zzo6Um9sZSByb2xlKQoreworICAgIHN3aXRjaCAocm9sZSkgeworICAgIGNhc2UgQXJnOjpVc2U6
CisgICAgICAgIG91dC5wcmludCgiVXNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Zzo6RGVmOgorICAgICAgICBvdXQucHJpbnQoIkRlZiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBcmc6OlVzZURlZjoKKyAgICAgICAgb3V0LnByaW50KCJVc2VEZWYiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQXJnOjpVc2VBZGRyOgorICAgICAgICBvdXQucHJpbnQoIlVzZUFk
ZHIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6
OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEFyZzo6R1A6Cisg
ICAgICAgIG91dC5wcmludCgiR1AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpG
UDoKKyAgICAgICAgb3V0LnByaW50KCJGUCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEFyZzo6V2lkdGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0
aCkgeworICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAgb3V0LnBy
aW50KCJXaWR0aDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGgzMjoK
KyAgICAgICAgb3V0LnByaW50KCJXaWR0aDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFyZzo6V2lkdGg2NDoKKyAgICAgICAgb3V0LnByaW50KCJXaWR0aDY0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpTaWduZWRuZXNzIHNpZ25l
ZG5lc3MpCit7CisgICAgc3dpdGNoIChzaWduZWRuZXNzKSB7CisgICAgY2FzZSBBcmc6OlNpZ25l
ZDoKKyAgICAgICAgb3V0LnByaW50KCJTaWduZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXJnOjpVbnNpZ25lZDoKKyAgICAgICAgb3V0LnByaW50KCJVbnNpZ25lZCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTIwNjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsNiArMTEwLDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1U
eXBlcyA9IDI7CiAKKyAgICBlbnVtIFdpZHRoIDogaW50OF90IHsKKyAgICAgICAgV2lkdGg4LAor
ICAgICAgICBXaWR0aDE2LAorICAgICAgICBXaWR0aDMyLAorICAgICAgICBXaWR0aDY0CisgICAg
fTsKKworICAgIGVudW0gU2lnbmVkbmVzcyA6IGludDhfdCB7CisgICAgICAgIFNpZ25lZCwKKyAg
ICAgICAgVW5zaWduZWQKKyAgICB9OworCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xl
IGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnLiBJdCdzIGRlbGliZXJhdGVs
eSBmYWxzZSBmb3IKICAgICAvLyBVc2VBZGRyLCBzaW5jZSBpc1VzZSgpIGZvciBhbiBBcmc6OmFk
ZHIgbWVhbnMgdGhhdCB3ZSBhcmUgbG9hZGluZyBmcm9tIHRoZSBhZGRyZXNzLgogICAgIHN0YXRp
YyBib29sIGlzVXNlKFJvbGUgcm9sZSkKQEAgLTE1Myw2ICsxNjUsMjAgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gR1A7CiAgICAgfQogCisgICAgc3RhdGljIFdpZHRoIHdpZHRoRm9yQjNUeXBl
KEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gV2lkdGg4OworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJu
IFdpZHRoMzI7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgIGNhc2UgRG91YmxlOgorICAg
ICAgICAgICAgcmV0dXJuIFdpZHRoNjQ7CisgICAgICAgIH0KKyAgICB9CisKICAgICBBcmcoKQog
ICAgICAgICA6IG1fa2luZChJbnZhbGlkKQogICAgIHsKQEAgLTM3Niw2ICs0MDIsMjAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBib29sIGlzUmVwcmVzZW50YWJsZUFzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxlQXM8VD4odmFsdWUoKSk7CisgICAgfQorCisg
ICAgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhXaWR0aCwgU2lnbmVkbmVzcykgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgYXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKCkpOworICAgIH0KKwogICAgIHZvaWQq
IHBvaW50ZXJWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bTY0KTsKQEAgLTY4NCw2ICs3MjQsNDEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0K
IAorICAgIC8vIFRoaXMgaXMgdmFsaWQgZm9yIGNvbmRpdGlvbiBhcmd1bWVudHMuIEl0IHdpbGwg
aW52ZXJ0IHRoZW0uCisgICAgQXJnIGludmVydGVkKGJvb2wgaW52ZXJ0ZWQgPSB0cnVlKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFpbnZlcnRlZCkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAg
ICAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc1JlbGF0aW9u
YWxDb25kaXRpb24oKSkpOworICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgICAgICByZXR1
cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KGFzUmVzdWx0Q29uZGl0aW9uKCkpKTsK
KyAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICAgICAgcmV0dXJuIGRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0RvdWJsZUNvbmRpdGlvbigpKSk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgQXJnIGZsaXBwZWQo
Ym9vbCBmbGlwcGVkID0gdHJ1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghZmxpcHBlZCkK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OmZsaXAoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpKTsKKyAgICB9CisKKyAgICBi
b29sIGlzU2lnbmVkQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNSZWxDb25k
KCkgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzU2lnbmVkKGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsK
KyAgICB9CisKKyAgICBib29sIGlzVW5zaWduZWRDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1JlbENvbmQoKSAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNVbnNpZ25lZChhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKICAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtNzIx
LDYgKzc5NiwxMiBAQCBzdHJ1Y3QgQXJnSGFzaCB7CiAKIG5hbWVzcGFjZSBXVEYgewogCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7Cit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6Um9sZSk7
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VHlw
ZSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6
V2lkdGgpOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpB
cmc6OlNpZ25lZG5lc3MpOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7CiB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4gewog
ICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpBcmdIYXNoIEhhc2g7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgz
LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9wY29kZSAhPSBOb3AgfHwgYXJncy5zaXplKCk7
IH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNv
bnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CiAgICAgLy8g
ZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJv
dW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQogICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0
IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bj
b2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTIgKzE5Nyw2OCBA
QCBNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgogTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKICAgICBU
bXAsIFRtcAogCitMb2FkOCBVOkcsIEQ6RworICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAK
KworTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6RywgRDpHCisgICAgQWRkciwgVG1wCisgICAgSW5k
ZXgsIFRtcAorCitMb2FkMTYgVTpHLCBEOkcKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1w
CisKK0xvYWQxNlNpZ25lZEV4dGVuZFRvMzIgVTpHLCBEOkcKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bmRleCwgVG1wCisKK0NvbXBhcmUzMiBVOkcsIFU6RywgVTpHLCBEOkcKKyAgICBSZWxDb25kLCBU
bXAsIFRtcCwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAorCitDb21wYXJlNjQgVTpH
LCBVOkcsIFU6RywgRDpHCisgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcAorICAgIFJlbENvbmQs
IFRtcCwgVG1wLCBUbXAKKworVGVzdDMyIFU6RywgVTpHLCBVOkcsIEQ6RworICAgIFJlc0NvbmQs
IEFkZHIsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcAorCitUZXN0NjQgVTpH
LCBVOkcsIFU6RywgRDpHCisgICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcAorICAgIFJlc0NvbmQs
IFRtcCwgVG1wLCBUbXAKKworQnJhbmNoOCBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZWxD
b25kLCBBZGRyLCBJbW0KKyAgICBSZWxDb25kLCBJbmRleCwgSW1tCisKK0JyYW5jaDMyIFU6Rywg
VTpHLCBVOkcgL2JyYW5jaAorICAgIFJlbENvbmQsIEFkZHIsIEltbQorICAgIFJlbENvbmQsIFRt
cCwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBJbW0KKyAgICBSZWxDb25kLCBUbXAsIEFkZHIKKyAg
ICBSZWxDb25kLCBBZGRyLCBUbXAKKyAgICBSZWxDb25kLCBJbmRleCwgSW1tCisKK0JyYW5jaDY0
IFU6RywgVTpHLCBVOkcgL2JyYW5jaAorICAgIFJlbENvbmQsIFRtcCwgVG1wCisgICAgUmVsQ29u
ZCwgVG1wLCBBZGRyCisgICAgUmVsQ29uZCwgQWRkciwgVG1wCisgICAgUmVsQ29uZCwgSW5kZXgs
IFRtcAorCitCcmFuY2hUZXN0OCBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBB
ZGRyLCBJbW0KKyAgICBSZXNDb25kLCBJbmRleCwgSW1tCisKIEJyYW5jaFRlc3QzMiBVOkcsIFU6
RywgVTpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAgIFJlc0NvbmQsIFRtcCwg
SW1tCiAgICAgUmVzQ29uZCwgQWRkciwgSW1tCiAgICAgUmVzQ29uZCwgSW5kZXgsIEltbQogCisj
IFdhcm5pbmc6IGZvcm1zIHRoYXQgdGFrZSBhbiBpbW1lZGlhdGUgd2lsbCBzaWduLWV4dGVuZCB0
aGVpciBpbW1lZGlhdGUuIFlvdSBwcm9iYWJseSB3YW50CisjIEJyYW5jaFRlc3QzMiBpbiBtb3N0
IGNhc2VzIHdoZXJlIHlvdSB1c2UgYW4gaW1tZWRpYXRlLgogQnJhbmNoVGVzdDY0IFU6RywgVTpH
LCBVOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgVG1wCiAgICAgUmVzQ29uZCwgVG1wLCBJ
bW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
Ygo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtNDEwLDcgKzQxMCw3IEBA
IGRlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW0KICAgICBlbmQKIAogICAg
IGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAotICAgICAgICByYWlzZSB1
bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgcmFpc2UgIkRpZCBub3QgcmVkdWNlIHRv
IG9uZSBmb3JtOiAje2Zvcm1zLmluc3BlY3R9IiB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKICAg
ICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCiAgICAgICAgIHJldHVybgogICAgIGVuZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDc0LDcgKzM0NzQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IG5v
ZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBpZiAoZGl2aXNvciA+IDEgJiYg
aGFzT25lQml0U2V0KGRpdmlzb3IpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9nYXJp
dGhtID0gV1RGOjpmYXN0TG9nMihkaXZpc29yKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b2dhcml0aG0gPSBXVEY6OmZhc3RMb2cyKHN0YXRpY19jYXN0PHVpbnQzMl90PihkaXZpc29yKSk7
CiAgICAgICAgICAgICAgICAgR1BSUmVnIGRpdmlkZW5kR1BSID0gb3AxLmdwcigpOwogICAgICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1OCwxMyArMTQ1OCwxMyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5
cGVkQXJyYXlHZXRCCiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAg
IGNhc2UgMToKLSAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQorICAgICAgICBpZiAoSlNDOjpp
c1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihCYXNlSW5k
ZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGlt
ZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAg
ICAgICBpZiAoaXNTaWduZWQodHlwZSkpCisgICAgICAgIGlmIChKU0M6OmlzU2lnbmVkKHR5cGUp
KQogICAgICAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGxvYWQxNihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVz
dWx0UGF5bG9hZCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCCiAgICAgCiAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewogICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVCghaXNT
aWduZWQodHlwZSkpOworICAgICAgICBBU1NFUlQoIUpTQzo6aXNTaWduZWQodHlwZSkpOwogICAg
ICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gs
IFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgeG9y
MzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwo=
</data>
<flag name="review"
          id="289992"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264879</attachid>
            <date>2015-11-05 12:38:15 -0800</date>
            <delta_ts>2015-11-05 13:52:00 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114005</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNS0xMS0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzLT5BaXIgbG93ZXJpbmcgc2hvdWxkIGhhdmUgYSBzdG9yeSBmb3IgY29tcGFyZS1icmFuY2gg
ZnVzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBU
aGlzIGFkZHMgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBjb21wYXJlcyBhbmQgY29tcGFyZS9i
cmFuY2ggZnVzaW9uIHRvIEIzLiBUaGUgZnVzaW9uIGlzCisgICAgICAgIHN1cGVyIGFnZ3Jlc3Np
dmUuIEl0IGNhbiBldmVuIGhhbmRsZSB0aGluZ3MgbGlrZSBCcmFuY2goTGVzc1RoYW4oTG9hZDhT
KC4uLiksIGNvbnN0YW50KSkuIEl0CisgICAgICAgIGNhbiBldmVuIGhhbmRsZSBmbGlwcGluZyB0
aGUgb3BlcmFuZHMgdG8gdGhlIGJyYW5jaCwgYW5kIGZsaXBwaW5nIHRoZSBjb21wYXJpc29uIGNv
bmRpdGlvbiwKKyAgICAgICAgaWYgaXQgZW5hYmxlcyBhIG1vcmUgZWZmaWNpZW50IGluc3RydWN0
aW9uLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGVyZSBpcyBhc3ltbWV0cnkgaW4gdGhlCisgICAgICAg
IGFkbWl0dGVkIGFyZ3VtZW50IGtpbmRzLiBGb3IgZXhhbXBsZSwgQnJhbmNoMzIgd2lsbCBvbmx5
IGFjY2VwdCBhbiBJbW0gYXMgYSBzZWNvbmQgb3BlcmFuZC4KKyAgICAgICAgSWYgd2UgZG8gYSBM
ZXNzVGhhbihjb25zdGFudCwgbG9hZCkgdGhlbiB3ZSB3aWxsIGdlbmVyYXRlIGl0IGFzOgorCisg
ICAgICAgICAgICBCcmFuY2gzMiBHcmVhdGVyVGhhbiwgKGFkZHIpLCAkaW1tCisKKyAgICAgICAg
VGhpcyBhbHNvIHN1cHBvcnRzIGNvbXBpbGluZyBhbmQgZnVzaW5nIHRlc3RzLCBhbmQgdG8gc29t
ZSBleHRlbnQsIGNvbXBpbGluZyBhbmQgZnVzaW5nCisgICAgICAgIGRvdWJsZSBjb21wYXJlcy4g
VGhvdWdoIHdlIGNhbm5vdCB0ZXN0IGRvdWJsZXMgeWV0IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBl
bm91Z2ggc3VwcG9ydCBmb3IKKyAgICAgICAgdGhhdC4KKworICAgICAgICBUaGlzIGFsc28gc3Vw
cG9ydHMgZnVzaW5nIGNvbXBhcmUvYnJhbmNoZXMgaW4gQ2hlY2tzLiBXZSBiYXNpY2FsbHkgZ2V0
IHRoYXQgZm9yIGZyZWUuCisKKyAgICAgICAgQmVjYXVzZSBJIHdhbnRlZCB0byBmdXNlIGNvbXBh
cmlzb25zIHdpdGggc3ViLTMyLWJpdCBsb2FkcywgSSBhZGRlZCBzdXBwb3J0IGZvciB0aG9zZSBs
b2FkcworICAgICAgICBkaXJlY3RseSwgdG9vLgorCisgICAgICAgIFRoZSB0ZXN0cyBhcmUgbm93
IGdldHRpbmcgc3VwZXIgYmlnLCBzbyBJIG1hZGUgdGVzdGIzIHJ1biB0ZXN0cyBpbiBwYXJhbGxl
bC4KKworICAgICAgICBGaW5hbGx5LCB0aGlzIHNsaWdodGx5IGNoYW5nZXMgdGhlIHNlbWFudGlj
cyBvZiBCcmFuY2ggYW5kIENoZWNrLiBQcmV2aW91c2x5IHRoZXkgd291bGQgaGF2ZQorICAgICAg
ICBhY2NlcHRlZCBhIGRvdWJsZSB0byBicmFuY2ggb24uIEkgZm91bmQgdGhhdCB0aGlzIGlzIGF3
a3dhcmQuIEl0J3MgZXNwZWNpYWxseSBhd2t3YXJkIHNpbmNlCisgICAgICAgIHdlIHdhbnQgdG8g
YmUgZXhwbGljaXQgYWJvdXQgd2hlbiBhIGRvdWJsZSB6ZXJvIGNvbnN0YW50IGlzIG1hdGVyaWFs
aXplZC4gU28sIGZyb20gbm93IG9uLCB3ZQorICAgICAgICByZXF1aXJlIHRoYXQgdG8gYnJhbmNo
IG9uIGEgZG91YmxlIGJlaW5nIG5vbi16ZXJvLCB5b3UgaGF2ZSB0byBkbyBCcmFuY2goTm90RXF1
YWwodmFsdWUsIDApKS4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6aW52ZXJ0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpmbGlwKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmlzU2lnbmVkKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmlzVW5zaWduZWQpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6dGVzdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21t
b246OmludmVydCk6CisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OktleSk6CisgICAgICAgIChKU0M6OkIzOjpDaGVj
a1NwZWNpYWw6OktleTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OkNo
ZWNrU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6On5DaGVja1NwZWNp
YWwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6CisgICAgICAgIChKU0M6OkIzOjpD
aGVja1NwZWNpYWw6OktleTo6S2V5KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5Ojpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGNvZGUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om51bUFyZ3MpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrU3BlY2lhbEtleUhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tT
cGVjaWFsS2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJW
YWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFs
dWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6
Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjph
Ym92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBi
My9CM0NvbnN0MzJWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0NjRWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdDY0VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1
ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphYm92
ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0Nv
bnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlclRvQWlyKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6cnVuKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJU
b0Fpcjo6c2hvdWxkQ29weVByb3BhZ2F0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OkFyZ1Byb21pc2U6OkFyZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpBcmdQcm9taXNlOjp0bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpBcmdQcm9taXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6QXJnUHJvbWlzZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OkFyZ1Byb21pc2U6OnBlZWspOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpBcmdQcm9taXNlOjpjb25zdW1lKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dG1w
UHJvbWlzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNhbkJlSW50ZXJu
YWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphZGRyKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG9hZFByb21pc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjppbW0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjphcHBlbmRCaW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRy
eUFwcGVuZFN0b3JlVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRy
eUFwcGVuZFN0b3JlQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpj
cmVhdGVHZW5lcmljQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OmNyZWF0ZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0
ZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlMb2FkKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDhTKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDhaKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDE2Uyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OnRyeUxvYWQxNlopOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
Ojp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdGFja1Ns
b3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlFcXVhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeU5vdEVxdWFsKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TGVzc1RoYW4pOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjp0cnlHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OnRyeUxlc3NFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OnRyeUdyZWF0ZXJFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUFib3ZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QmVs
b3cpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBYm92ZUVxdWFsKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QmVsb3dFcXVhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeVBhdGNocG9pbnQpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlDaGVjayk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OnRyeUJyYW5jaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmxvYWRBZGRyKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hl
ci5wYXR0ZXJuczoKKyAgICAgICAgKiBiMy9CM09wY29kZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjppbnZlcnRlZENvbXBhcmUpOgorICAgICAgICAqIGIzL0IzT3Bjb2RlLmg6CisgICAgICAgIChK
U0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpQ
cm9jZWR1cmU6OmFkZEludENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
YWRkQm9vbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVzZXRWYWx1
ZU93bmVycyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAgKiBiMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp6U2hyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmdyZWF0ZXJUaGFu
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6YWJvdmVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6YmVsb3dDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YWJvdmVFcXVhbENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmludmVydGVkQ29tcGFyZSk6CisgICAgICAgICogYjMv
QjNWYWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzUmVwcmVzZW50YWJsZUFzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMv
YWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjp3aWR0aEZvckIzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp2YWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmFzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpwb2ludGVyVmFs
dWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzRG91YmxlQ29uZGl0aW9uKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbnZlcnRlZCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6ZmxpcHBlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNTaWduZWRD
b25kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Vuc2lnbmVkQ29uZCk6CisgICAg
ICAgICogYjMvYWlyL0Fpckluc3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6SW5z
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9wZXJhdG9yIGJvb2wpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYjoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoaGlkZGVuVHJ1
dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3RvcmVM
b2FkU3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6Om1vZGVsTG9hZCk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0TG9hZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RDb21wbGV4KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVQ
YXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVDaGVjayk6CisgICAgICAg
IChKU0M6OkIzOjpnZW5lcmljVGVzdENvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6bW9kZWxD
b21wYXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDb21wYXJlTG9hZCk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Q29tcGFyZUltcGwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENvbXBhcmUp
OgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKwogMjAxNS0xMS0wNSAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IENsZWFuIHVwIEluamVjdGVkU2NyaXB0IHVzZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MjA2
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY3LDEwICsxNjcsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwogICAgICAgICBjYXNlIERvdWJsZUxlc3NU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkOgogICAgICAgICAgICAgcmV0dXJuIERvdWJsZUdyZWF0ZXJU
aGFuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFrZSBjb21waWxl
ciBoYXBweQogICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBEb3VibGVFcXVhbDsgLy8gbWFrZSBjb21waWxlciBoYXBweQogICAg
IH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBpc0ludmVydGlibGUoUmVzdWx0Q29uZGl0aW9uIGNv
bmQpCkBAIC0xOTYsNiArMTk1LDcyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBaZXJv
OyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5IGZvciByZWxlYXNlIGJ1aWxkcy4KICAgICAgICAgfQog
ICAgIH0KKworICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0aW9uIGZsaXAoUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNh
c2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgICAgICByZXR1cm4gY29u
ZDsKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAgIHJldHVybiBCZWxvdzsKKyAgICAg
ICAgY2FzZSBBYm92ZU9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gQmVsb3dPckVxdWFsOwor
ICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICAgICAgcmV0dXJuIEFib3ZlOworICAgICAgICBj
YXNlIEJlbG93T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiBBYm92ZU9yRXF1YWw7CisgICAg
ICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47CisgICAg
ICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuIExlc3NUaGFu
T3JFcXVhbDsKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgICAgIHJldHVybiBHcmVh
dGVyVGhhbjsKKyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgICAgICByZXR1
cm4gR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVxdWFsOworICAgIH0KKworICAgIC8v
IFRydWUgaWYgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoOChjb25kLCB2YWx1ZSwgdmFsdWUpCisg
ICAgLy8gSXMgdGhlIHNhbWUgYXMgdGhpczoKKyAgICAvLyAgICAgYnJhbmNoMzIoY29uZCwgc2ln
bkV4dDgodmFsdWUpLCBzaWduRXh0OCh2YWx1ZSkpCisgICAgc3RhdGljIGJvb2wgaXNTaWduZWQo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7
CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIGNh
c2UgR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAg
ICBjYXNlIExlc3NUaGFuOgorICAgICAgICBjYXNlIExlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ1ZSBpZiB0aGlzOgorICAgIC8vICAg
ICBicmFuY2g4KGNvbmQsIHZhbHVlLCB2YWx1ZSkKKyAgICAvLyBJcyB0aGUgc2FtZSBhcyB0aGlz
OgorICAgIC8vICAgICBicmFuY2gzMihjb25kLCB6ZXJvRXh0OCh2YWx1ZSksIHplcm9FeHQ4KHZh
bHVlKSkKKyAgICBzdGF0aWMgYm9vbCBpc1Vuc2lnbmVkKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgeworICAgICAgICBjYXNlIEVxdWFsOgor
ICAgICAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICBjYXNl
IEFib3ZlT3JFcXVhbDoKKyAgICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgY2FzZSBCZWxvd09y
RXF1YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KICNlbmRpZgogCiAgICAgLy8g
UGxhdGZvcm0gYWdub3N0aWMgb252ZW5pZW5jZSBmdW5jdGlvbnMsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NzQsNiAr
MTQ3NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVz
dCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7CisgICAgICAgIHNldDMyKHg4NkNv
bmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCiAgICAgLy8gSW52ZXJ0IGEgcmVsYXRpb25h
bCBjb25kaXRpb24sIGUuZy4gPT0gYmVjb21lcyAhPSwgPCBiZWNvbWVzID49LCBldGMuCiAgICAg
c3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gaW52ZXJ0KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lh
bC5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDE3IEBAIHVuc2lnbmVk
IG51bUIzQXJncyhJbnN0JiBpbnN0KQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAorQ2hl
Y2tTcGVjaWFsOjpLZXk6OktleShjb25zdCBJbnN0JiBpbnN0KQoreworICAgIG1fb3Bjb2RlID0g
aW5zdC5vcGNvZGU7CisgICAgbV9udW1BcmdzID0gaW5zdC5hcmdzLnNpemUoKTsKK30KKwordm9p
ZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3MsICIpIik7Cit9CisKIENoZWNrU3Bl
Y2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncykK
ICAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQogICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJn
cykKQEAgLTY0LDYgKzc1LDExIEBAIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bj
b2RlIG8KICAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUpKTsKIH0KIAorQ2hlY2tTcGVjaWFs
OjpDaGVja1NwZWNpYWwoY29uc3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkKKyAgICA6IENoZWNr
U3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCkpCit7Cit9CisKIENoZWNrU3BlY2lh
bDo6fkNoZWNrU3BlY2lhbCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBA
CiAKICNpbmNsdWRlICJBaXJPcGNvZGUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBJbnN0OworfQorCiAvLyBXZSB3YW50IHRv
IGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0
byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKIC8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBv
ZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdp
bGwgcmVtZW1iZXIKIC8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9u
ZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKQEAg
LTQ2LDcgKzUxLDY1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBD
aGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKIHB1YmxpYzoKKyAgICAvLyBT
dXBwb3J0IGZvciBoYXNoIGNvbnNpbmcgdGhlc2UgdGhpbmdzLgorICAgIGNsYXNzIEtleSB7Cisg
ICAgcHVibGljOgorICAgICAgICBLZXkoKQorICAgICAgICAgICAgOiBtX29wY29kZShBaXI6Ok5v
cCkKKyAgICAgICAgICAgICwgbV9udW1BcmdzKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncykK
KyAgICAgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAgICAgLCBtX251bUFyZ3Mo
bnVtQXJncykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgS2V5KGNv
bnN0IEFpcjo6SW5zdCYpOworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkmIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgPT0gb3Ro
ZXIubV9vcGNvZGUKKyAgICAgICAgICAgICAgICAmJiBtX251bUFyZ3MgPT0gb3RoZXIubV9udW1B
cmdzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAqdGhpcyAhPSBLZXkoKTsgfQorCisgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisgICAgICAgIHVuc2lnbmVkIG51bUFyZ3MoKSBj
b25zdCB7IHJldHVybiBtX251bUFyZ3M7IH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CisKKyAgICAgICAgS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKKyAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCisgICAgICAgICAgICAsIG1f
bnVtQXJncygxKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICp0
aGlzID09IEtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgICAgIH0KKworICAg
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2Vy
aW91c2x5LCB3ZSBkb24ndCBuZWVkIHRvIGJlIHNtYXJ0IGhlcmUuIEl0IGp1c3QgZG9lc24ndCBt
YXR0ZXIuCisgICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBtX251bUFyZ3M7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQWlyOjpPcGNvZGUgbV9vcGNvZGU7
CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKKyAgICB9OworICAgIAogICAgIENoZWNrU3Bl
Y2lhbChBaXI6Ok9wY29kZSwgdW5zaWduZWQgbnVtQXJncyk7CisgICAgQ2hlY2tTcGVjaWFsKGNv
bnN0IEtleSYpOwogICAgIH5DaGVja1NwZWNpYWwoKTsKIAogcHJvdGVjdGVkOgpAQCAtNzAsOCAr
MTMzLDI5IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwogCitz
dHJ1Y3QgQ2hlY2tTcGVjaWFsS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQ2hlY2tTcGVjaWFsOjpLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IENoZWNrU3BlY2lhbDo6S2V5JiBhLCBjb25zdCBDaGVja1Nw
ZWNpYWw6OktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIz
OjpDaGVja1NwZWNpYWw6OktleT4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6Q2hlY2tTcGVjaWFs
S2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFp
dHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
S2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleT4g
eworICAgIC8vIEkgZG9uJ3Qgd2FudCB0byB0aGluayBhYm91dCB0aGlzIHZlcnkgaGFyZCwgaXQn
cyBub3Qgd29ydGggaXQuIEknbSBhIGJlIGNvbnNlcnZhdGl2ZS4KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKICNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxOCArMTAzLDc0IEBAIFZhbHVlKiBDb25zdDMy
VmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWQKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZh
bHVlPihvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG1fdmFsdWUpID4+IChvdGhlci0+YXNJbnQzMigpICYgMzEpKSk7CiB9CiAKLVZhbHVlKiBDb25z
dDMyVmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNv
bnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVl
ID09IG90aGVyLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAg
ICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVmFs
dWUqIENvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3Jp
Z2luKCksIG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlICE9IG90aGVyLT5hc0ludDMy
KCkpOworfQorCitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXIt
PmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkK
KyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPiBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNz
RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFz
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0
YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0MzJW
YWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlm
ICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAg
IHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID49IG90aGVyLT5hc0ludDMyKCkpOworfQorCitUcmlT
dGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorewor
ICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkgPiBz
dGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOworfQorCitUcmlTdGF0ZSBD
b25zdDMyVmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlm
ICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAg
IHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkgPCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOworfQorCitUcmlTdGF0ZSBDb25zdDMy
VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAg
cmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+PSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOworfQorCitUcmlTdGF0ZSBDb25zdDMy
VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAg
cmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA8PSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQogCiB2b2lkIENvbnN0MzJWYWx1
ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lv
biAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTcgQEAgcHVibGljOgogICAgIFZhbHVlKiBzaGxD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZh
bHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKICAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogbm90RXF1YWxDb25zdGFudChQcm9j
ZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5v
dEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0
ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJp
U3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUu
Y3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTggKzEwMyw3NCBAQCBWYWx1ZSog
Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkCiAgICAgcmV0dXJuIHByb2MuYWRkPENv
bnN0NjRWYWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PHVp
bnQ2NF90PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYzKSkpOwogfQogCi1WYWx1
ZSogQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90
aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSA9PSBvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPT0gb3RoZXItPmFzSW50NjQoKSk7CiB9
CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
LCBWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Om5vdEVxdWFsQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFs
dWU+KG9yaWdpbigpLCBtX3ZhbHVlICE9IG90aGVyLT5hc0ludDY0KCkpOworICAgICAgICByZXR1
cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhlci0+
YXNJbnQ2NCgpKTsKK30KKworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNzVGhhbkNvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAg
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8
IG90aGVyLT5hc0ludDY0KCkpOworfQorCitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmdyZWF0ZXJU
aGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVybiB0cmlTdGF0
ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0NjRWYWx1
ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3Ro
ZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVy
biB0cmlTdGF0ZShtX3ZhbHVlIDw9IG90aGVyLT5hc0ludDY0KCkpOworfQorCitUcmlTdGF0ZSBD
b25zdDY0VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0
ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNJbnQ2NCgpKTsKK30K
KworVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRU
cmlTdGF0ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFs
dWUpID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKK30KKworVHJp
U3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0
ZTsKKyAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpIDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKK30KKworVHJpU3RhdGUg
Q29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorewor
ICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92YWx1ZSkgPj0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKK30KKworVHJpU3RhdGUg
Q29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorewor
ICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OworICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92YWx1ZSkgPD0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKIH0KIAogdm9pZCBDb25z
dDY0VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAko
cmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDE3IEBAIHB1YmxpYzoKICAgICBWYWx1
ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
ICAgICBWYWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2NlZHVyZSYs
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIG5vdEVxdWFsQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKworICAgIFRyaVN0
YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlT
dGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgbGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYWJvdmVDb25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3Bw
CShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDQ2IEBAIFZhbHVlKiBD
b25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm8KICAgICByZXR1cm4gcHJvYy5hZGQ8Q29u
c3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNEb3VibGUoKSk7CiB9
CiAKLVZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6ZXF1YWxD
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91Ymxl
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMy
VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlID09IG90aGVyLT5hc0RvdWJsZSgpKTsKKyAgICAgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPT0gb3Ro
ZXItPmFzRG91YmxlKCkpOwogfQogCi1WYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6bm90RXF1YWxD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENv
bnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAhPSBvdGhl
ci0+YXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIHJldHVy
biB0cmlTdGF0ZShtX3ZhbHVlICE9IG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKworVHJpU3RhdGUg
Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0
YXRlOworICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzRG91YmxlKCkpOwor
fQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPiBvdGhl
ci0+YXNEb3VibGUoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVh
bENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNEb3Vi
bGUoKSkKKyAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CisgICAgcmV0dXJuIHRyaVN0YXRl
KG1fdmFsdWUgPD0gb3RoZXItPmFzRG91YmxlKCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJs
ZVZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAg
aWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwor
ICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID49IG90aGVyLT5hc0RvdWJsZSgpKTsKIH0KIAog
dm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0
NCwxMyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywg
aW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFBy
b2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSog
c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogbm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUm
IHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVh
bENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90
RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRl
IGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlT
dGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXIm
LCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVzcGFjZSB7CiAKK2NvbnN0IGJvb2wg
dmVyYm9zZSA9IGZhbHNlOworCiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBMb3dl
clRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQpAQCAtODYsNiArODgsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBjdXJyZW50QmxvY2sgPSBibG9jazsKICAgICAgICAgICAg
IC8vIFJlc2V0IHNvbWUgc3RhdGUuCiAgICAgICAgICAgICBpbnN0cy5yZXNpemUoMCk7CisKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5n
IEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBQ
cm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZz
LiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKICAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5z
IGVmZmVjdGl2ZWx5LgpAQCAtOTUsMTEgKzEwMCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgaWYgKGxvY2tlZC5jb250YWlucyhjdXJyZW50VmFsdWUpKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkp
OworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJMb3dlcmluZyAiLCBkZWVwRHVtcChjdXJyZW50VmFsdWUpLCAiOlxuIik7CiAgICAgICAg
ICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCAq
dGhpcyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVtcChjdXJyZW50VmFs
dWUpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHMubGFzdCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGluc3QsICJcbiIpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0
aGUgaW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNv
IHdlIHByb2Nlc3MKQEAgLTE2MiwxOCArMTczLDE0NyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICBjbGFzcyBBcmdQcm9taXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFyZ1By
b21pc2UoKSB7IH0KKworICAgICAgICBBcmdQcm9taXNlKGNvbnN0IEFyZyYgYXJnLCBWYWx1ZSog
dmFsdWVUb0xvY2sgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2FyZyhhcmcpCisgICAgICAg
ICAgICAsIG1fdmFsdWUodmFsdWVUb0xvY2spCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyBBcmdQcm9taXNlIHRtcChWYWx1ZSogdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2
YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9hcmcgfHwgbV92YWx1ZTsg
fQorCisgICAgICAgIEFyZzo6S2luZCBraW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX2FyZyAmJiBtX3ZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OlRt
cDsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZy5raW5kKCk7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBBcmcmIHBlZWsoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9hcmc7CisgICAgICAgIH0KKworICAgICAgICBBcmcgY29uc3VtZShMb3dlclRvQWlyJiBsb3dl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2FyZyAmJiBtX3ZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50bXAobV92YWx1ZSk7CisgICAgICAgICAgICBp
ZiAobV92YWx1ZSkKKyAgICAgICAgICAgICAgICBsb3dlci5jb21taXRJbnRlcm5hbChtX3ZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICAvLyBUaHJlZSBmb3JtczoKKyAgICAgICAgLy8gRXZlcnl0aGluZyBu
dWxsOiBpbnZhbGlkLgorICAgICAgICAvLyBBcmcgbm9uLW51bGwsIHZhbHVlIG51bGw6IGp1c3Qg
dXNlIHRoZSBhcmcsIG5vdGhpbmcgc3BlY2lhbC4KKyAgICAgICAgLy8gQXJnIG51bGwsIHZhbHVl
IG5vbi1udWxsOiBpdCdzIGEgdG1wLCBwaW4gaXQgd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIC8v
IEFyZyBub24tbnVsbCwgdmFsdWUgbm9uLW51bGw6IHVzZSB0aGUgYXJnLCBsb2NrIHRoZSB2YWx1
ZS4KKyAgICAgICAgQXJnIG1fYXJnOworICAgICAgICBWYWx1ZSogbV92YWx1ZTsKKyAgICB9Owor
CisgICAgLy8gQ29uc2lkZXIgdXNpbmcgdG1wUHJvbWlzZSgpIGluIGNhc2VzIHdoZXJlIHlvdSBh
cmVuJ3Qgc3VyZSB0aGF0IHlvdSB3YW50IHRvIHBpbiB0aGUgdmFsdWUgeWV0LgorICAgIC8vIEhl
cmUgYXJlIHRocmVlIGNhbm9uaWNhbCB3YXlzIG9mIHVzaW5nIHRtcCgpIGFuZCB0bXBQcm9taXNl
KCk6CisgICAgLy8KKyAgICAvLyBJZGlvbSAjMTogWW91IGtub3cgdGhhdCB5b3Ugd2FudCBhIHRt
cCgpIGFuZCB5b3Uga25vdyB0aGF0IGl0IHdpbGwgYmUgdmFsaWQgZm9yIHRoZQorICAgIC8vIGlu
c3RydWN0aW9uIHlvdSdyZSBlbWl0dGluZy4KKyAgICAvLworICAgIC8vICAgICBhcHBlbmQoRm9v
LCB0bXAoYmFyKSk7CisgICAgLy8KKyAgICAvLyBJZGlvbSAjMjogWW91IGRvbid0IGtub3cgaWYg
eW91IHdhbnQgdG8gdXNlIGEgdG1wKCkgYmVjYXVzZSB5b3UgaGF2ZW4ndCBkZXRlcm1pbmVkIGlm
IHRoZQorICAgIC8vIGluc3RydWN0aW9uIHdpbGwgYWNjZXB0IGl0LCBzbyB5b3UgcXVlcnkgZmly
c3QuIE5vdGUgdGhhdCB0aGUgY2FsbCB0byB0bXAoKSBoYXBwZW5zIG9ubHkgYWZ0ZXIKKyAgICAv
LyB5b3UgYXJlIHN1cmUgdGhhdCB5b3Ugd2lsbCB1c2UgaXQuCisgICAgLy8KKyAgICAvLyAgICAg
aWYgKGlzVmFsaWRGb3JtKEZvbywgQXJnOjpUbXApKQorICAgIC8vICAgICAgICAgYXBwZW5kKEZv
bywgdG1wKGJhcikpCisgICAgLy8KKyAgICAvLyBJZGlvbSAjMzogU2FtZSBhcyBJZGlvbSAjMiwg
YnV0IHVzaW5nIHRtcFByb21pc2UuIE5vdGljZSB0aGF0IHRoaXMgY2FsbHMgY29uc3VtZSgpIG9u
bHkgYWZ0ZXIKKyAgICAvLyBpdCdzIHN1cmUgaXQgd2lsbCB1c2UgdGhlIHRtcC4gVGhhdCdzIGRl
bGliZXJhdGUuCisgICAgLy8KKyAgICAvLyAgICAgQXJnUHJvbWlzZSBwcm9taXNlID0gdG1wUHJv
bWlzZShiYXIpOworICAgIC8vICAgICBpZiAoaXNWYWxpZEZvcm0oRm9vLCBwcm9taXNlLmtpbmQo
KSkpCisgICAgLy8gICAgICAgICBhcHBlbmQoRm9vLCBwcm9taXNlLmNvbnN1bWUoKnRoaXMpKQor
ICAgIC8vCisgICAgLy8gSW4gYm90aCBpZGlvbSAjMiBhbmQgaWRpb20gIzMsIHdlIGRvbid0IHBp
biB0aGUgdmFsdWUgdG8gYSB0ZW1wb3JhcnkgZXhjZXB0IHdoZW4gd2UgYWN0dWFsbHkKKyAgICAv
LyBlbWl0IHRoZSBpbnN0cnVjdGlvbi4gQm90aCB0bXAoKSBhbmQgdG1wUHJvbWlzZSgpLmNvbnN1
bWUoKnRoaXMpIHdpbGwgcGluIGl0LiBQaW5uaW5nIG1lYW5zCisgICAgLy8gdGhhdCB3ZSB3aWxs
IGhlbmNlZm9ydGggcmVxdWlyZSB0aGF0IHRoZSB2YWx1ZSBvZiAnYmFyJyBpcyBnZW5lcmF0ZWQg
YXMgYSBzZXBhcmF0ZQorICAgIC8vIGluc3RydWN0aW9uLiBXZSBkb24ndCB3YW50IHRvIHBpbiB0
aGUgdmFsdWUgdG8gYSB0ZW1wb3JhcnkgaWYgd2UgbWlnaHQgY2hhbmdlIG91ciBtaW5kcywgYW5k
CisgICAgLy8gcGFzcyBhbiBhZGRyZXNzIG9wZXJhbmQgcmVwcmVzZW50aW5nICdiYXInIHRvIEZv
byBpbnN0ZWFkLgorICAgIC8vCisgICAgLy8gQmVjYXVzZSB0bXAoKSBwaW5zLCB0aGUgZm9sbG93
aW5nIGlzIG5vdCBhbiBpZGlvbSB5b3Ugc2hvdWxkIHVzZToKKyAgICAvLworICAgIC8vICAgICBU
bXAgdG1wID0gdGhpcy0+dG1wKGJhcik7CisgICAgLy8gICAgIGlmIChpc1ZhbGlkRm9ybShGb28s
IHRtcC5raW5kKCkpKQorICAgIC8vICAgICAgICAgYXBwZW5kKEZvbywgdG1wKTsKKyAgICAvLwor
ICAgIC8vIFRoYXQncyBiZWNhdXNlIGlmIGlzVmFsaWRGb3JtKCkgcmV0dXJucyBmYWxzZSwgeW91
IHdpbGwgaGF2ZSBhbHJlYWR5IHBpbm5lZCB0aGUgJ2JhcicgdG8gYQorICAgIC8vIHRlbXBvcmFy
eS4gWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8gdHJ5IHRvIGRvIHNvbWV0aGluZyBsaWtlIGxvYWRQ
cm9taXNlKCksIGFuZCB0aGF0IHdpbGwgZmFpbC4KKyAgICAvLyBUaGlzIGFyaXNlcyBpbiBvcGVy
YXRpb25zIHRoYXQgaGF2ZSBib3RoIGEgQWRkcixUbXAgYW5kIFRtcCxBZGRyIGZvcm1zLiBUaGUg
Zm9sbG93aW5nIGNvZGUKKyAgICAvLyBzZWVtcyByaWdodCwgYnV0IHdpbGwgYWN0dWFsbHkgZmFp
bCB0byBldmVyIG1hdGNoIHRoZSBUbXAsQWRkciBmb3JtIGJlY2F1c2UgYnkgdGhlbiwgdGhlIHJp
Z2h0CisgICAgLy8gdmFsdWUgaXMgYWxyZWFkeSBwaW5uZWQuCisgICAgLy8KKyAgICAvLyAgICAg
YXV0byB0cnlUaGluZ3MgPSBbdGhpc10gKGNvbnN0IEFyZyYgbGVmdCwgY29uc3QgQXJnJiByaWdo
dCkgeworICAgIC8vICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgbGVmdC5raW5kKCksIHJp
Z2h0LmtpbmQoKSkpCisgICAgLy8gICAgICAgICAgICAgcmV0dXJuIEluc3QoRm9vLCBjdXJyZW50
VmFsdWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAvLyAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
Ly8gICAgIH07CisgICAgLy8gICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRoaW5ncyhsb2FkQWRk
cihsZWZ0KSwgdG1wKHJpZ2h0KSkpCisgICAgLy8gICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IC8vICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3ModG1wKGxlZnQpLCBsb2FkQWRkcihy
aWdodCkpKSAvLyB0aGlzIG5ldmVyIHN1Y2NlZWRzLgorICAgIC8vICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAvLyAgICAgcmV0dXJuIEluc3QoRm9vLCBjdXJyZW50VmFsdWUsIHRtcChsZWZ0
KSwgdG1wKHJpZ2h0KSk7CisgICAgLy8KKyAgICAvLyBJZiB5b3UgaW1hZ2luZSB0aGF0IGxvYWRB
ZGRyKHZhbHVlKSBpcyBqdXN0IGxvYWRQcm9taXNlKHZhbHVlKS5jb25zdW1lKCp0aGlzKSwgdGhl
biB0aGlzIGNvZGUKKyAgICAvLyB3aWxsIHJ1biBjb3JyZWN0bHkgLSBpdCB3aWxsIGdlbmVyYXRl
IE9LIGNvZGUgLSBidXQgdGhlIHNlY29uZCBmb3JtIGlzIG5ldmVyIG1hdGNoZWQuCisgICAgLy8g
bG9hZEFkZHIocmlnaHQpIHdpbGwgbmV2ZXIgc3VjY2VlZCBiZWNhdXNlIGl0IHdpbGwgb2JzZXJ2
ZSB0aGF0ICdyaWdodCcgaXMgYWxyZWFkeSBwaW5uZWQuCisgICAgLy8gT2YgY291cnNlLCBpdCdz
IGV4YWN0bHkgYmVjYXVzZSBvZiB0aGUgcmlza3kgbmF0dXJlIG9mIHN1Y2ggY29kZSB0aGF0IHdl
IGRvbid0IGhhdmUgYQorICAgIC8vIGxvYWRBZGRyKCkgaGVscGVyIGFuZCByZXF1aXJlIHlvdSB0
byBiYWxhbmNlIEFyZ1Byb21pc2UncyBpbiBjb2RlIGxpa2UgdGhpcy4gU3VjaCBjb2RlIHdpbGwK
KyAgICAvLyB3b3JrIGZpbmUgaWYgd3JpdHRlbiBhczoKKyAgICAvLworICAgIC8vICAgICBhdXRv
IHRyeVRoaW5ncyA9IFt0aGlzXSAoY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJv
bWlzZSYgcmlnaHQpIHsKKyAgICAvLyAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShGb28sIGxlZnQu
a2luZCgpLCByaWdodC5raW5kKCkpKQorICAgIC8vICAgICAgICAgICAgIHJldHVybiBJbnN0KEZv
bywgY3VycmVudFZhbHVlLCBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlz
KSk7CisgICAgLy8gICAgICAgICByZXR1cm4gSW5zdCgpOworICAgIC8vICAgICB9OworICAgIC8v
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3MobG9hZFByb21pc2UobGVmdCksIHRtcFBy
b21pc2UocmlnaHQpKSkKKyAgICAvLyAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLy8gICAg
IGlmIChJbnN0IHJlc3VsdCA9IHRyeVRoaW5ncyh0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlz
ZShyaWdodCkpKQorICAgIC8vICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAvLyAgICAgcmV0
dXJuIEluc3QoRm9vLCBjdXJyZW50VmFsdWUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7CisgICAg
Ly8KKyAgICAvLyBOb3RpY2UgdGhhdCB3ZSBkaWQgdXNlIHRtcCBpbiB0aGUgZmFsbC1iYWNrIGNh
c2UgYXQgdGhlIGVuZCwgYmVjYXVzZSBieSB0aGVuLCB3ZSBrbm93IGZvciBzdXJlCisgICAgLy8g
dGhhdCB3ZSB3YW50IGEgdG1wLiBCdXQgdXNpbmcgdG1wUHJvbWlzZSBpbiB0aGUgdHJ5VGhpbmdz
KCkgY2FsbHMgZW5zdXJlcyB0aGF0IGRvaW5nIHNvCisgICAgLy8gZG9lc24ndCBwcmV2ZW50IHVz
IGZyb20gdHJ5aW5nIGxvYWRQcm9taXNlIG9uIHRoZSBzYW1lIHZhbHVlLgogICAgIFRtcCB0bXAo
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgVG1wJiB0bXAgPSB2YWx1ZVRvVG1wW3ZhbHVl
XTsKICAgICAgICAgaWYgKCF0bXApIHsKICAgICAgICAgICAgIHdoaWxlIChzaG91bGRDb3B5UHJv
cGFnYXRlKHZhbHVlKSkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLT5jaGlsZCgwKTsK
LSAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1wKGlzSW50KHZhbHVlLT50eXBlKCkpID8gQXJn
OjpHUCA6IEFyZzo6RlApOwotICAgICAgICAgICAgdmFsdWVUb1RtcFt2YWx1ZV0gPSB0bXA7Cisg
ICAgICAgICAgICBUbXAmIHJlYWxUbXAgPSB2YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgICAg
IGlmICghcmVhbFRtcCkKKyAgICAgICAgICAgICAgICByZWFsVG1wID0gY29kZS5uZXdUbXAoQXJn
Ojp0eXBlRm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKKyAgICAgICAgICAgIHRtcCA9IHJlYWxU
bXA7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAKKyAgICBBcmdQcm9t
aXNlIHRtcFByb21pc2UoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyZ1By
b21pc2U6OnRtcCh2YWx1ZSk7CisgICAgfQorCiAgICAgYm9vbCBjYW5CZUludGVybmFsKFZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50ZXJuYWwgdGhpbmdz
IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQpA
QCAtMjUzLDE1ICszOTMsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZWZmZWN0aXZlQWRk
cih2YWx1ZS0+bGFzdENoaWxkKCksIHZhbHVlKTsKICAgICB9CiAKLSAgICBBcmcgbG9hZEFkZHIo
VmFsdWUqIGxvYWRWYWx1ZSkKKyAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlKFZhbHVlKiBsb2Fk
VmFsdWUsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKICAgICB7Ci0gICAgICAgIGlmIChsb2FkVmFs
dWUtPm9wY29kZSgpICE9IExvYWQpCisgICAgICAgIGlmIChsb2FkVmFsdWUtPm9wY29kZSgpICE9
IGxvYWRPcGNvZGUpCiAgICAgICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAgICAgIGlmICghY2Fu
QmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogICAgICAg
ICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IEFyZygpOwotICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOworICAgICAgICByZXR1cm4g
QXJnUHJvbWlzZShhZGRyKGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7CisgICAgfQorCisgICAgQXJn
UHJvbWlzZSBsb2FkUHJvbWlzZShWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvYWRQcm9taXNlKGxvYWRWYWx1ZSwgTG9hZCk7CiAgICAgfQogCiAgICAgQXJnIGltbShW
YWx1ZSogdmFsdWUpCkBAIC0zNDAsMjAgKzQ4NSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIG92
ZXIgdGhyZWUgb3BlcmFuZCBmb3Jtcy4KICAgICAgICAgCiAgICAgICAgIGlmIChjb21tdXRhdGl2
aXR5ID09IENvbW11dGF0aXZlKSB7Ci0gICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRk
cihsZWZ0KTsKKyAgICAgICAgICAgIEFyZ1Byb21pc2UgbGVmdEFkZHIgPSBsb2FkUHJvbWlzZShs
ZWZ0KTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQo
KSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CiAg
ICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5
cGUoKSksIHRtcChyaWdodCksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG9wY29k
ZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVm
dEFkZHIuY29uc3VtZSgqdGhpcyksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRB
ZGRyKHJpZ2h0KTsKKyAgICAgICAgQXJnUHJvbWlzZSByaWdodEFkZHIgPSBsb2FkUHJvbWlzZShy
aWdodCk7CiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCks
IEFyZzo6VG1wKSkgewotICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOwogICAgICAg
ICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksIHRt
cChsZWZ0KSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwg
cmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkci5jb25zdW1lKCp0
aGlzKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zNzgs
MTAgKzUyMSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJl
bnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCi0gICAgICAgIGlmIChsb2Fk
QWRkcih2YWx1ZSkgIT0gc3RvcmVBZGRyKQorICAgICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNl
ID0gdGhpcy0+bG9hZFByb21pc2UodmFsdWUpOworICAgICAgICBpZiAobG9hZFByb21pc2UucGVl
aygpICE9IHN0b3JlQWRkcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBj
b21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgIGxvYWRQcm9taXNlLmNvbnN1bWUoKnRoaXMp
OwogICAgICAgICBhcHBlbmQob3Bjb2RlLCBzdG9yZUFkZHIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC0zOTIsMTkgKzUzNiwyMyBAQCBwdWJsaWM6CiAgICAgICAgIEFyZyBzdG9y
ZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwog
Ci0gICAgICAgIFZhbHVlKiBsb2FkVmFsdWU7Ci0gICAgICAgIFZhbHVlKiBvdGhlclZhbHVlOwot
ICAgICAgICBpZiAobG9hZEFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKSB7Ci0gICAgICAgICAgICBs
b2FkVmFsdWUgPSBsZWZ0OworICAgICAgICBBcmdQcm9taXNlIGxvYWRQcm9taXNlOworICAgICAg
ICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBsb2FkUHJv
bWlzZSA9IHRoaXMtPmxvYWRQcm9taXNlKGxlZnQpOworICAgICAgICBpZiAobG9hZFByb21pc2Uu
cGVlaygpID09IHN0b3JlQWRkcikKICAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKLSAg
ICAgICAgfSBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlICYmIGxvYWRBZGRy
KHJpZ2h0KSA9PSBzdG9yZUFkZHIpIHsKLSAgICAgICAgICAgIGxvYWRWYWx1ZSA9IHJpZ2h0Owot
ICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBl
bHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAgICAgICBsb2Fk
UHJvbWlzZSA9IHRoaXMtPmxvYWRQcm9taXNlKHJpZ2h0KTsKKyAgICAgICAgICAgIGlmIChsb2Fk
UHJvbWlzZS5wZWVrKCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgICAgIG90aGVyVmFsdWUg
PSBsZWZ0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFvdGhlclZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6
SW1tLCBzdG9yZUFkZHIua2luZCgpKSAmJiBpbW0ob3RoZXJWYWx1ZSkpIHsKLSAgICAgICAgICAg
IGNvbW1pdEludGVybmFsKGxvYWRWYWx1ZSk7CisgICAgICAgICAgICBsb2FkUHJvbWlzZS5jb25z
dW1lKCp0aGlzKTsKICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShvdGhlclZhbHVlKSwg
c3RvcmVBZGRyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC00MTIs
NyArNTYwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJn
OjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGNvbW1pdEludGVybmFsKGxvYWRWYWx1ZSk7CisgICAgICAgIGxvYWRQcm9taXNlLmNv
bnN1bWUoKnRoaXMpOwogICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3RoZXJWYWx1ZSksIHN0
b3JlQWRkcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYyMiw2ICs3NzAsMzk2
IEBAIHB1YmxpYzoKICAgICB9OwogICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7
CiAKKyAgICAvLyBDcmVhdGUgYW4gSW5zdCB0byBkbyB0aGUgY29tcGFyaXNvbiBzcGVjaWZpZWQg
YnkgdGhlIGdpdmVuIHZhbHVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVGdW5jdG9y
LCB0eXBlbmFtZSBUZXN0RnVuY3RvciwgdHlwZW5hbWUgQ29tcGFyZURvdWJsZUZ1bmN0b3I+Cisg
ICAgSW5zdCBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAgICAgICAgVmFsdWUqIHZhbHVlLAorICAg
ICAgICBjb25zdCBDb21wYXJlRnVuY3RvciYgY29tcGFyZSwgLy8gU2lnbmF0dXJlOiAoQXJnOjpX
aWR0aCwgQXJnIHJlbENvbmQsIEFyZywgQXJnKSAtPiBJbnN0CisgICAgICAgIGNvbnN0IFRlc3RG
dW5jdG9yJiB0ZXN0LCAvLyBTaWduYXR1cmU6IChBcmc6OldpZHRoLCBBcmcgcmVzQ29uZCwgQXJn
LCBBcmcpIC0+IEluc3QKKyAgICAgICAgY29uc3QgQ29tcGFyZURvdWJsZUZ1bmN0b3ImIGNvbXBh
cmVEb3VibGUsIC8vIFNpZ25hdHVyZTogKEFyZyBkb3VibGVDb25kLCBBcmcsIEFyZykgLT4gSW5z
dAorICAgICAgICBib29sIGludmVydGVkID0gZmFsc2UpCisgICAgeworICAgICAgICAvLyBDaGV3
IHRocm91Z2ggYW55IG5lZ2F0aW9ucy4gSXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0
aGlzIHRvIGJlIGEgbG9vcCwgYnV0IHdlIGxpa2UKKyAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBy
dWxlIHRoYXQgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIHJlZHVjZXMgc3RyZW5ndGggd2hlbmV2
ZXIgaXQgZG9lc24ndAorICAgICAgICAvLyByZXF1aXJlIG1ha2luZyB0aGluZ3MgbW9yZSBjb21w
bGljYXRlZC4KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKCFjYW5CZUludGVy
bmFsKHZhbHVlKSAmJiB2YWx1ZSAhPSBjdXJyZW50VmFsdWUpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBib29sIHNob3VsZEludmVydCA9CisgICAgICAgICAgICAgICAgKHZh
bHVlLT5vcGNvZGUoKSA9PSBCaXRYb3IgJiYgdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgxKSAmJiB2
YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpCisgICAgICAgICAgICAgICAgfHwgKHZhbHVl
LT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKTsKKyAgICAg
ICAgICAgIGlmICghc2hvdWxkSW52ZXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBpbnZlcnRlZCA9ICFp
bnZlcnRlZDsKKyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gY3JlYXRlUmVsQ29uZCA9IFsmXSAoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiByZWxhdGlvbmFsQ29uZGl0aW9uLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24pIHsK
KyAgICAgICAgICAgIEFyZyByZWxDb25kID0gQXJnOjpyZWxDb25kKHJlbGF0aW9uYWxDb25kaXRp
b24pLmludmVydGVkKGludmVydGVkKTsKKyAgICAgICAgICAgIEFyZyBkb3VibGVDb25kID0gQXJn
Ojpkb3VibGVDb25kKGRvdWJsZUNvbmRpdGlvbikuaW52ZXJ0ZWQoaW52ZXJ0ZWQpOworICAgICAg
ICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBWYWx1ZSog
cmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIGlmIChpc0ludCh2YWx1ZS0+
Y2hpbGQoMCktPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBBcmcgbGVmdEltbSA9IGltbShs
ZWZ0KTsKKyAgICAgICAgICAgICAgICBBcmcgcmlnaHRJbW0gPSBpbW0ocmlnaHQpOworCisgICAg
ICAgICAgICAgICAgYXV0byB0cnlDb21wYXJlID0gWyZdICgKKyAgICAgICAgICAgICAgICAgICAg
QXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlz
ZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQg
PSBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSBjb21wYXJlKHdpZHRoLCByZWxDb25kLmZsaXBwZWQoKSwgcmlnaHQsIGxlZnQpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0
byB0cnlDb21wYXJlTG9hZEltbSA9IFsmXSAoCisgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lk
dGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSwgQXJnOjpTaWduZWRuZXNzIHNpZ25lZG5l
c3MpIC0+IEluc3QgeworICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRJbW0gJiYgcmlnaHRJ
bW0uaXNSZXByZXNlbnRhYmxlQXMod2lkdGgsIHNpZ25lZG5lc3MpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlKHdpZHRoLCBsb2FkUHJvbWlz
ZShsZWZ0LCBsb2FkT3Bjb2RlKSwgcmlnaHRJbW0pKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLmlzUmVw
cmVzZW50YWJsZUFzKHdpZHRoLCBzaWduZWRuZXNzKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZSh3aWR0aCwgbGVmdEltbSwgbG9hZFByb21p
c2UocmlnaHQsIGxvYWRPcGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUg
ZmV3ZXIgYml0cyB0aGFuIEIzJ3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBwcmV0dHkgaW1wb3J0YW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0aGlz
IHRvIGJlIGEgc2luZ2xlIGluc3RydWN0aW9uOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gICAgIEAxID0gTG9hZDhTKC4uLikKKyAgICAgICAgICAgICAgICAvLyAgICAg
QDIgPSBDb25zdDMyKC4uLikKKyAgICAgICAgICAgICAgICAvLyAgICAgQDMgPSBMZXNzVGhhbihA
MSwgQDIpCisgICAgICAgICAgICAgICAgLy8gICAgIEJyYW5jaChAMykKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1NpZ25lZENvbmQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlDb21wYXJlTG9hZEltbShBcmc6Oldp
ZHRoOCwgTG9hZDhTLCBBcmc6OlNpZ25lZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAocmVsQ29uZC5pc1Vuc2lnbmVkQ29uZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmVMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2Fk
OFosIEFyZzo6VW5zaWduZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocmVsQ29uZC5pc1Np
Z25lZENvbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlD
b21wYXJlTG9hZEltbShBcmc6OldpZHRoMTYsIExvYWQxNlMsIEFyZzo6U2lnbmVkKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZWxDb25kLmlzVW5zaWduZWRDb25k
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxv
YWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaLCBBcmc6OlVuc2lnbmVkKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gTm93IGhhbmRsZSBjb21wYXJlcyB0aGF0IGludm9sdmUgYSBsb2FkIGFuZCBh
biBpbW1lZGlhdGUuCisKKyAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3
aWR0aEZvckIzVHlwZSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7CisgICAgICAgICAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gdHJ5Q29tcGFyZUxvYWRJbW0od2lkdGgsIExvYWQsIEFyZzo6U2ln
bmVkKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAg
ICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhhdCBpbnZvbHZlIGEgbG9hZC4gSXQncyBub3Qg
b2J2aW91cyB0aGF0IGl0J3MgYmV0dGVyIHRvCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRo
aXMgYmVmb3JlIHRoZSBpbW1lZGlhdGUgY2FzZXMgb3Igbm90LiBQcm9iYWJseSBkb2Vzbid0IG1h
dHRlci4KKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lk
dGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBhcmUod2lkdGgsIHRtcFByb21pc2UobGVm
dCksIGxvYWRQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgY29tcGFyZXMgdGhh
dCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGxlZnRJbW0gJiYgbGVmdEltbS5pc1JlcHJlc2VudGFibGVBczxpbnQz
Ml90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeUNvbXBh
cmUod2lkdGgsIGxlZnRJbW0sIHRtcFByb21pc2UocmlnaHQpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChyaWdodEltbSAmJiByaWdodEltbS5pc1JlcHJlc2VudGFi
bGVBczxpbnQzMl90PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeUNvbXBhcmUod2lkdGgsIHRtcFByb21pc2UobGVmdCksIHJpZ2h0SW1tKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gRmluYWxseSwgaGFuZGxlIGNvbXBhcmlzb24gYmV0d2VlbiB0bXBzLgor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnlDb21wYXJlKHdpZHRoLCB0bXBQcm9taXNlKGxlZnQp
LCB0bXBQcm9taXNlKHJpZ2h0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERv
dWJsZSBjb21wYXJpc29ucyBjYW4ndCByZWFsbHkgZG8gYW55dGhpbmcgc21hcnQuCisgICAgICAg
ICAgICByZXR1cm4gY29tcGFyZURvdWJsZShkb3VibGVDb25kLCB0bXBQcm9taXNlKGxlZnQpLCB0
bXBQcm9taXNlKHJpZ2h0KSk7CisgICAgICAgIH07CisKKyAgICAgICAgQXJnOjpXaWR0aCB3aWR0
aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSk7CisgICAgICAgIEFyZyByZXND
b25kID0gQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKS5pbnZlcnRlZChpbnZl
cnRlZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGF0dGVtcHRGdXNlZCA9IFsmXSAoKSAtPiBJ
bnN0IHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQpOworICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuKTsKKyAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0
ZXJUaGFuLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4pOworICAgICAgICAgICAg
Y2FzZSBMZXNzRXF1YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NU
aGFuT3JFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlUmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICAgICAg
ICAgIGNhc2UgQWJvdmU6CisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgYm9ndXMgZG91Ymxl
IGNvbmRpdGlvbiBiZWNhdXNlIHRoZXNlIGludGVnZXIgY29tcGFyaXNvbnMgd29uJ3QgZ290IGRv
d24gdGhhdAorICAgICAgICAgICAgICAgIC8vIHBhdGggYW55d2F5LgorICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIGNhc2UgQmVsb3c6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVSZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CisgICAgICAgICAgICBjYXNlIEJlbG93
RXF1YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93T3JFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAg
ICAgIGNhc2UgQml0QW5kOiB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+
Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEp
OworCisgICAgICAgICAgICAgICAgQXJnIGxlZnRJbW0gPSBpbW0obGVmdCk7CisgICAgICAgICAg
ICAgICAgQXJnIHJpZ2h0SW1tID0gaW1tKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBhdXRvIHRyeVRlc3QgPSBbJl0gKAorICAgICAgICAgICAgICAgICAgICBBcmc6
OldpZHRoIHdpZHRoLCBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiBy
aWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRl
c3Qod2lkdGgsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRl
c3Qod2lkdGgsIHJlc0NvbmQsIHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gdHJ5VGVzdExvYWRJbW0gPSBb
Jl0gKEFyZzo6V2lkdGggd2lkdGgsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkgLT4gSW5zdCB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChyaWdodEltbSAmJiByaWdodEltbS5pc1JlcHJlc2VudGFi
bGVBcyh3aWR0aCwgQXJnOjpVbnNpZ25lZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQsIGxvYWRPcGNv
ZGUpLCByaWdodEltbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChsZWZ0SW1tICYmIGxlZnRJbW0uaXNSZXByZXNlbnRhYmxlQXMod2lk
dGgsIEFyZzo6VW5zaWduZWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCBy
ZXN1bHQgPSB0cnlUZXN0KHdpZHRoLCBsZWZ0SW1tLCBsb2FkUHJvbWlzZShyaWdodCwgbG9hZE9w
Y29kZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmln
aHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAg
ICAgLy8gRmlyc3QgaGFuZGxlIHRlc3QncyB0aGF0IGludm9sdmUgZmV3ZXIgYml0cyB0aGFuIEIz
J3MgdHlwZSBzeXN0ZW0gc3VwcG9ydHMuCisKKyAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1
bHQgPSB0cnlUZXN0TG9hZEltbShBcmc6OldpZHRoOCwgTG9hZDhaKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRyeVRlc3RMb2FkSW1tKEFyZzo6V2lkdGg4LCBMb2FkOFMpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5
VGVzdExvYWRJbW0oQXJnOjpXaWR0aDE2LCBMb2FkMTZaKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRl
c3RMb2FkSW1tKEFyZzo6V2lkdGgxNiwgTG9hZDE2UykpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0
IGludm9sdmUgYSBsb2FkIGFuZCBhbiBpbW1lZGlhdGUuIE5vdGUgdGhhdCBpbW1lZGlhdGVzIGFy
ZQorICAgICAgICAgICAgICAgIC8vIDMyLWJpdCwgYW5kIHdlIHdhbnQgemVyby1leHRlbnNpb24u
IEhlbmNlLCB0aGUgaW1tZWRpYXRlIGZvcm0gaXMgY29tcGlsZWQgYXMgYQorICAgICAgICAgICAg
ICAgIC8vIDMyLWJpdCB0ZXN0LiBOb3RlIHRoYXQgdGhpcyBzcGl0cyBvbiB0aGUgZ3JhdmUgb2Yg
aW5mZXJpb3IgZW5kaWFucywgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgICAgICAvLyBiaWcgb25l
LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRy
eVRlc3RMb2FkSW1tKEFyZzo6V2lkdGgzMiwgTG9hZCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRlc3QncyB0aGF0
IGludm9sdmUgYSBsb2FkLgorCisgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFy
Zzo6d2lkdGhGb3JCM1R5cGUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpOworICAgICAgICAgICAg
ICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3Qod2lkdGgsIGxvYWRQcm9taXNlKGxlZnQpLCB0
bXBQcm9taXNlKHJpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwo
bGVmdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwg
dG1wUHJvbWlzZShsZWZ0KSwgbG9hZFByb21pc2UocmlnaHQpKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTm93IGhhbmRs
ZSB0ZXN0J3MgdGhhdCBpbnZvbHZlIGFuIGltbWVkaWF0ZSBhbmQgYSB0bXAuCisKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdEltbSAmJiBsZWZ0SW1tLmlzUmVwcmVzZW50YWJsZUFzPHVpbnQzMl90
PigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRyeVRlc3QoQXJn
OjpXaWR0aDMyLCBsZWZ0SW1tLCB0bXBQcm9taXNlKHJpZ2h0KSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChyaWdodEltbSAmJiByaWdodEltbS5pc1JlcHJlc2VudGFibGVBczx1aW50MzJfdD4o
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KEFyZzo6
V2lkdGgzMiwgdG1wUHJvbWlzZShsZWZ0KSwgcmlnaHRJbW0pKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBGaW5hbGx5LCBqdXN0IGRvIHRtcCdzLgorICAgICAgICAgICAgICAgIHJldHVybiB0cnlU
ZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGNhbkJlSW50ZXJu
YWwodmFsdWUpIHx8IHZhbHVlID09IGN1cnJlbnRWYWx1ZSkgeworICAgICAgICAgICAgaWYgKElu
c3QgcmVzdWx0ID0gYXR0ZW1wdEZ1c2VkKCkpIHsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRlc3Qod2lkdGgsIHJl
c0NvbmQsIHRtcFByb21pc2UodmFsdWUpLCBBcmc6OmltbSgtMSkpKQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbWV0aW1lcyB0aGlzIGlzIHRoZSBv
bmx5IGZvcm0gb2YgdGVzdCBhdmFpbGFibGUuIFdlIHByZWZlciBub3QgdG8gdXNlIHRoaXMgYmVj
YXVzZQorICAgICAgICAvLyBpdCdzIGxlc3MgY2Fub25pY2FsLgorICAgICAgICByZXR1cm4gdGVz
dCh3aWR0aCwgcmVzQ29uZCwgdG1wUHJvbWlzZSh2YWx1ZSksIHRtcFByb21pc2UodmFsdWUpKTsK
KyAgICB9CisKKyAgICBJbnN0IGNyZWF0ZUJyYW5jaChWYWx1ZSogdmFsdWUsIGJvb2wgaW52ZXJ0
ZWQgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgK
KyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgW3RoaXNdICgKKyAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlbENvbmQsCisgICAgICAgICAgICAgICAg
Y29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNo
OCwgQXJnOjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QnJhbmNoOCwgY3VycmVudFZhbHVlLCByZWxDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5k
KCksIHJpZ2h0LmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaDMyLCBjdXJyZW50VmFsdWUsIHJl
bENvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRo
NjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2g2NCwgQXJnOjpS
ZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoNjQs
IGN1cnJlbnRWYWx1ZSwgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdICgKKyAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlc0NvbmQsCisgICAgICAgICAgICAgICAg
Y29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNo
VGVzdDgsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJyYW5jaFRlc3Q4LCBjdXJyZW50VmFsdWUsIHJlc0NvbmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2hUZXN0MzIsIEFyZzo6UmVzQ29u
ZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaFRlc3QzMiwg
Y3VycmVudFZhbHVlLCByZXNDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQu
Y29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDY0OgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
QnJhbmNoVGVzdDY0LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCcmFuY2hUZXN0NjQsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0
aGlzKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
W3RoaXNdIChBcmcgZG91YmxlQ29uZCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJn
UHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShCcmFuY2hEb3VibGUsIEFyZzo6RG91YmxlQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICBCcmFuY2hEb3VibGUsIGN1cnJlbnRWYWx1ZSwgZG91YmxlQ29uZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBpbnZlcnRlZCk7CisgICAgfQorCisgICAgSW5zdCBj
cmVhdGVDb21wYXJlKFZhbHVlKiB2YWx1ZSwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUdlbmVyaWNDb21wYXJlKAorICAgICAgICAgICAgdmFsdWUs
CisgICAgICAgICAgICBbdGhpc10gKAorICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgs
IGNvbnN0IEFyZyYgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9taXNlJiBs
ZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAg
c3dpdGNoICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5r
aW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlMzIsIGN1
cnJlbnRWYWx1ZSwgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNv
bnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShDb21wYXJlNjQsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJp
Z2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlNjQsIGN1cnJlbnRWYWx1
ZSwgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRo
aXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAoCisgICAgICAg
ICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAorICAgICAgICAg
ICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAt
PiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFRlc3Qz
MiwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRlc3QzMiwgY3VycmVudFZhbHVlLCByZXNDb25kLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0
bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKFRlc3Q2NCwgQXJnOjpSZXNDb25k
LCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3Q2
NCwgY3VycmVudFZhbHVlLCByZXNDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAoY3VycmVudFZhbHVl
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3Ro
aXNdIChjb25zdCBBcmcmLCBjb25zdCBBcmdQcm9taXNlJiwgY29uc3QgQXJnUHJvbWlzZSYpIC0+
IEluc3QgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
OTAzCisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBpbnZlcnRlZCk7CisgICAgfQorCiAgICAgLy8gQmVsb3cgaXMgdGhlIGNvZGUgZm9y
IGEgbG93ZXJpbmcgc2VsZWN0b3IsIHNvIHRoYXQgd2UgY2FuIHBhc3MgKnRoaXMgdG8gcnVuTG93
ZXJpbmdNYXRjaGVyLgogICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZhbHVl
IGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhhbXBs
ZSwKICAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBnZW5l
cmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKQEAgLTY3Miw2ICsx
MjEwLDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywgY3Vy
cmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CisKKyAgICBib29sIHRyeUxvYWQ4UyhWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAg
IGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywgY3Vy
cmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCB0cnlMb2FkOFooVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBhcHBlbmQoTG9hZDgsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywgY3VycmVudFZhbHVlKSwg
dG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCB0cnlMb2FkMTZTKFZhbHVlKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXBwZW5k
KExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywgY3VycmVudFZh
bHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCB0cnlMb2FkMTZaKFZhbHVlKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
YXBwZW5kKExvYWQxNiwgZWZmZWN0aXZlQWRkcihhZGRyZXNzLCBjdXJyZW50VmFsdWUpLCB0bXAo
Y3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAKICAgICBi
b29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKQEAgLTg4Niw2ICsx
NDQ4LDY2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9v
bCB0cnlFcXVhbCgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNv
bXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGJvb2wgdHJ5Tm90RXF1YWwoKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChj
cmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBib29sIHRyeUxlc3NUaGFuKCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5h
cHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCB0cnlHcmVhdGVyVGhhbigpCisgICAgeworICAgICAgICBpbnN0
cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5TGVzc0VxdWFsKCkKKyAgICB7CisgICAg
ICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlHcmVhdGVyRXF1YWwoKQor
ICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRW
YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUFib3Zl
KCkKKyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJy
ZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlC
ZWxvdygpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUo
Y3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
dHJ5QWJvdmVFcXVhbCgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0
ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGJvb2wgdHJ5QmVsb3dFcXVhbCgpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBw
ZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIFBhdGNocG9pbnRTcGVjaWFsKiBwYXRjaHBvaW50U3BlY2lhbCB7IG51bGxw
dHIgfTsKICAgICBib29sIHRyeVBhdGNocG9pbnQoKQogICAgIHsKQEAgLTkwMywzNCArMTUyNSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIENoZWNrU3Bl
Y2lhbCogY2hlY2tCcmFuY2hUZXN0MzJTcGVjaWFsIHsgbnVsbHB0ciB9OwotICAgIENoZWNrU3Bl
Y2lhbCogY2hlY2tCcmFuY2hUZXN0NjRTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIEhhc2hNYXA8
Q2hlY2tTcGVjaWFsOjpLZXksIENoZWNrU3BlY2lhbCo+IGNoZWNrU3BlY2lhbHM7CiAgICAgYm9v
bCB0cnlDaGVjayhWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIWlzSW50KHZhbHVl
LT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRvdWJsZSBicmFu
Y2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA3MjcKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAg
ICBJbnN0IGJyYW5jaCA9IGNyZWF0ZUJyYW5jaCh2YWx1ZSk7CiAKLSAgICAgICAgQ2hlY2tTcGVj
aWFsKiBzcGVjaWFsOwotICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKGNoZWNrQnJh
bmNoVGVzdDMyU3BlY2lhbCwgQnJhbmNoVGVzdDMyLCAzKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgc3BlY2lhbCA9IGVuc3VyZVNwZWNpYWwo
Y2hlY2tCcmFuY2hUZXN0NjRTcGVjaWFsLCBCcmFuY2hUZXN0NjQsIDMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgQ2hlY2tT
cGVjaWFsOjpLZXkga2V5KGJyYW5jaCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gY2hlY2tTcGVj
aWFscy5hZGQoa2V5LCBudWxscHRyKTsKKyAgICAgICAgU3BlY2lhbCogc3BlY2lhbCA9IGVuc3Vy
ZVNwZWNpYWwocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwga2V5KTsKIAogICAgICAgICBDaGVja1Zh
bHVlKiBjaGVja1ZhbHVlID0gY3VycmVudFZhbHVlLT5hczxDaGVja1ZhbHVlPigpOwogCi0gICAg
ICAgIEluc3QgaW5zdCgKLSAgICAgICAgICAgIFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNp
YWwoc3BlY2lhbCksCi0gICAgICAgICAgICBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8pLCB0bXAodmFsdWUpLCBBcmc6OmltbSgtMSkpOworICAgICAgICBJbnN0IGluc3QoUGF0
Y2gsIGNoZWNrVmFsdWUsIEFyZzo6c3BlY2lhbChzcGVjaWFsKSk7CisgICAgICAgIGluc3QuYXJn
cy5hcHBlbmRWZWN0b3IoYnJhbmNoLmFyZ3MpOwogCiAgICAgICAgIGZpbGxTdGFja21hcChpbnN0
LCBjaGVja1ZhbHVlLCAxKTsKIApAQCAtOTU1LDQ2ICsxNTYyLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCB0cnlCcmFuY2goVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBicmFuY2ggZnVzaW9uIGJ5IGRlbGVnYXRpbmcgdG8gYSBwYXR0ZXJuIG1hdGNoZXIg
Zm9yIGNvbXBhcmlzb25zLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwNzIxCi0KLSAgICAgICAgLy8gSW4gQjMgaXQncyBwb3NzaWJsZSB0byBi
cmFuY2ggb24gYW55IHZhbHVlLiBUaGUgc2VtYW50aWNzIG9mOgotICAgICAgICAvLwotICAgICAg
ICAvLyAgICAgQnJhbmNoKHZhbHVlKQotICAgICAgICAvLwotICAgICAgICAvLyBBcmUgZ3VhcmFu
dGVlZCB0byBiZSBpZGVudGljYWwgdG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBCcmFu
Y2goTm90RXF1YWwodmFsdWUsIDApKQotCi0gICAgICAgIGlmICghaXNJbnQodmFsdWUtPnR5cGUo
KSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZG91YmxlIGJyYW5jaGVzLgot
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDcyNwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlOwotICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKLSAgICAg
ICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIG9wY29kZSA9IEJyYW5jaFRlc3QzMjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgb3Bjb2RlID0g
QnJhbmNoVGVzdDY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBBcmcgcmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybyk7Ci0KLSAgICAgICAgQXJnIGFkZHIgPSBsb2FkQWRkcih2YWx1ZSk7
Ci0gICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJlc0NvbmQua2luZCgpLCBhZGRyLmtp
bmQoKSwgQXJnOjpJbW0pKSB7Ci0gICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7Ci0g
ICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCByZXNDb25kLCBhZGRyLCBBcmc6OmltbSgtMSkpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBhcHBlbmQob3Bj
b2RlLCByZXNDb25kLCB0bXAodmFsdWUpLCBBcmc6OmltbSgtMSkpOworICAgICAgICBpbnN0cy5s
YXN0KCkuYXBwZW5kKGNyZWF0ZUJyYW5jaCh2YWx1ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hl
ci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
cmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsMTEgQEAgbWF0Y2hlciBMb3dlcmluZ01hdGNoZXIKIAogTG9hZCA9IExvYWQoYWRk
cmVzcykKIAorTG9hZDhTID0gTG9hZDhTKGFkZHJlc3MpCitMb2FkOFogPSBMb2FkOFooYWRkcmVz
cykKK0xvYWQxNlMgPSBMb2FkMTZTKGFkZHJlc3MpCitMb2FkMTZaID0gTG9hZDE2WihhZGRyZXNz
KQorCiBBZGQgPSBBZGQobGVmdCwgcmlnaHQpCiBTdWIgPSBTdWIobGVmdCwgcmlnaHQpCiBBbmQg
PSBCaXRBbmQobGVmdCwgcmlnaHQpCkBAIC01Nyw2ICs2MiwxOCBAQCBDb25zdDY0ID0gQ29uc3Q2
NCgpCiBTdGFja1Nsb3QgPSBTdGFja1Nsb3QoKQogRnJhbWVQb2ludGVyID0gRnJhbWVQb2ludGVy
KCkKIAorIyBUaGVzZSBwYXR0ZXJucyBkZWxlZ2F0ZSB0byB0aGUgY29tcGFyaXNvbiBtYXRjaGVy
LgorRXF1YWwgPSBFcXVhbCgpCitOb3RFcXVhbCA9IE5vdEVxdWFsKCkKK0xlc3NUaGFuID0gTGVz
c1RoYW4oKQorR3JlYXRlclRoYW4gPSBHcmVhdGVyVGhhbigpCitMZXNzRXF1YWwgPSBMZXNzRXF1
YWwoKQorR3JlYXRlckVxdWFsID0gR3JlYXRlckVxdWFsKCkKK0Fib3ZlID0gQWJvdmUoKQorQmVs
b3cgPSBCZWxvdygpCitBYm92ZUVxdWFsID0gQWJvdmVFcXVhbCgpCitCZWxvd0VxdWFsID0gQmVs
b3dFcXVhbCgpCisKIFBhdGNocG9pbnQgPSBQYXRjaHBvaW50KCkKIENoZWNrID0gQ2hlY2sodmFs
dWUpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24g
MTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNDYgQEAKIAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgogCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworT3B0aW9uYWw8T3Bjb2RlPiBp
bnZlcnRlZENvbXBhcmUoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgcmV0dXJuIE5vdEVxdWFsOworICAg
IGNhc2UgTm90RXF1YWw6CisgICAgICAgIHJldHVybiBFcXVhbDsKKyAgICBjYXNlIExlc3NUaGFu
OgorICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gR3JlYXRlckVx
dWFsOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAg
ICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gTGVzc0VxdWFsOworICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgaWYgKGlz
SW50KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIEdyZWF0ZXJUaGFuOworICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIExlc3NUaGFuOworICAgICAgICByZXR1cm4gTnVsbG9w
dDsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICByZXR1cm4gQmVsb3dFcXVhbDsKKyAgICBjYXNl
IEJlbG93OgorICAgICAgICByZXR1cm4gQWJvdmVFcXVhbDsKKyAgICBjYXNlIEFib3ZlRXF1YWw6
CisgICAgICAgIHJldHVybiBCZWxvdzsKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJl
dHVybiBBYm92ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCiBuYW1lc3BhY2UgV1RGIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzo6QjM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShCM19KSVQp
CiAKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
ewpAQCAtMTY2LDcgKzE2OCw3IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgQ2hlY2tN
dWwsCiAKICAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1ZSBj
bGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQotICAgIC8vIHN0YWNr
bWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIEludDMyIGFyZ3Vt
ZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBn
ZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIGludCBhcmd1bWVudCB0aGF0IHRoaXMg
YnJhbmNoZXMgb24sIHdpdGgKICAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3Ry
dWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNs
b3cKICAgICAvLyBwYXRoLgogICAgIENoZWNrLApAQCAtMTc4LDcgKzE4MCw3IEBAIGVudW0gT3Bj
b2RlIDogaW50MTZfdCB7CiAgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNz
LgogICAgIEp1bXAsCiAgICAgCi0gICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0
aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhl
CisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgaW50ZWdlciB0eXBl
LiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKICAgICAvLyBDb250cm9s
VmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1
Y2Nlc3Nvci4KICAgICBCcmFuY2gsCiAKQEAgLTIwNSw2ICsyMDcsOCBAQCBpbmxpbmUgYm9vbCBp
c0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQogICAgIH0KIH0KIAorT3B0aW9uYWw8T3Bjb2RlPiBp
bnZlcnRlZENvbXBhcmUoT3Bjb2RlLCBUeXBlKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwzOCBAQCBCYXNpY0Js
b2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorVmFsdWUqIFByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZh
bHVlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJl
dHVybiBhZGQ8Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFs
dWUpKTsKKyAgICBjYXNlIEludDY0OgorICAgICAgICByZXR1cm4gYWRkPENvbnN0NjRWYWx1ZT4o
T3JpZ2luKCksIHZhbHVlKTsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgcmV0dXJuIGFkZDxD
b25zdERvdWJsZVZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworVmFsdWUqIFByb2NlZHVyZTo6YWRkQm9v
bENvbnN0YW50KFRyaVN0YXRlIHRyaVN0YXRlKQoreworICAgIGludDMyX3QgdmFsdWUgPSAwOwor
ICAgIHN3aXRjaCAodHJpU3RhdGUpIHsKKyAgICBjYXNlIEZhbHNlVHJpU3RhdGU6CisgICAgICAg
IHZhbHVlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcnVlVHJpU3RhdGU6CisgICAg
ICAgIHZhbHVlID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNaXhlZFRyaVN0YXRlOgor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gYWRkSW50Q29uc3Rh
bnQoSW50MzIsIHZhbHVlKTsKK30KKwogdm9pZCBQcm9jZWR1cmU6OnJlc2V0VmFsdWVPd25lcnMo
KQogewogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
MSArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM1R5cGUuaCIK
ICNpbmNsdWRlICJQdXJlTmFOLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgogI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTUzLDYg
KzU1LDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOwogCisg
ICAgVmFsdWUqIGFkZEludENvbnN0YW50KFR5cGUsIGludDY0X3QgdmFsdWUpOworCisgICAgLy8g
UmV0dXJucyBudWxsIGZvciBNaXhlZFRyaVN0YXRlLgorICAgIFZhbHVlKiBhZGRCb29sQ29uc3Rh
bnQoVHJpU3RhdGUpOworCiAgICAgdm9pZCByZXNldFZhbHVlT3duZXJzKCk7CiAgICAgdm9pZCBy
ZXNldFJlYWNoYWJpbGl0eSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDQyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBuYW1lc3BhY2Ugewog
CisvLyBUaGUgZ29hbCBvZiB0aGlzIHBoYXNlIGlzIHRvOgorLy8KKy8vIC0gUmVwbGFjZSBvcGVy
YXRpb25zIHdpdGggbGVzcyBleHBlbnNpdmUgdmFyaWFudHMuIFRoaXMgaW5jbHVkZXMgY29uc3Rh
bnQgZm9sZGluZyBhbmQgY2xhc3NpYworLy8gICBzdHJlbmd0aCByZWR1Y3Rpb25zIGxpa2UgdHVy
bmluZyBNdWwoeCwgMSA8PCBrKSBpbnRvIFNobCh4LCBrKS4KKy8vCisvLyAtIFJlYXNzb2NpYXRl
IGNvbnN0YW50IG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBMb2FkKEFkZCh4LCBjKSkgaXMgdHVy
bmVkIGludG8gTG9hZCh4LCBvZmZzZXQgPSBjKQorLy8gICBhbmQgQWRkKEFkZCh4LCBjKSwgZCkg
aXMgdHVybmVkIGludG8gQWRkKHgsIGMgKyBkKS4KKy8vCisvLyAtIENhbm9uaWNhbGl6ZSBvcGVy
YXRpb25zLiBUaGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSBpdCdzIG5vdCBhdCBhbGwgb2J2aW91
cyB3aGljaCBraW5kIG9mCisvLyAgIG9wZXJhdGlvbiBpcyBsZXNzIGV4cGVuc2l2ZSwgYnV0IGl0
J3MgdXNlZnVsIGZvciBzdWJzZXF1ZW50IHBoYXNlcyAtIHBhcnRpY3VsYXJseSBMb3dlclRvQWly
IC0KKy8vICAgdG8gaGF2ZSBvbmx5IG9uZSB3YXkgb2YgcmVwcmVzZW50aW5nIHRoaW5ncy4KKy8v
CisvLyBUaGlzIHBoYXNlIHJ1bnMgdG8gZml4cG9pbnQuIFRoZXJlZm9yZSwgdGhlIGNhbm9uaWNh
bGl6YXRpb25zIG11c3QgYmUgZGVzaWduZWQgdG8gYmUgbW9ub3RvbmljLgorLy8gRm9yIGV4YW1w
bGUsIGlmIHdlIGhhZCBhIGNhbm9uaWNhbGl6YXRpb24gdGhhdCBzYWlkIHRoYXQgQWRkKHgsIC1j
KSBzaG91bGQgYmUgU3ViKHgsIGMpIGFuZAorLy8gYW5vdGhlciBjYW5vbmljYWxpemF0aW9uIHRo
YXQgc2FpZCB0aGF0IFN1Yih4LCBkKSBzaG91bGQgYmUgQWRkKHgsIC1kKSwgdGhlbiB0aGlzIHBo
YXNlIHdvdWxkIGVuZAorLy8gdXAgcnVubmluZyBmb3JldmVyLiBXZSBkb24ndCB3YW50IHRoYXQu
CisvLworLy8gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIHByaW9yaXRpemUgY2VydGFpbiBjYW5vbmlj
YWwgZm9ybXMgb3ZlciBvdGhlcnMuIE5haXZlbHksIHdlIHdhbnQgc3RyZW5ndGgKKy8vIHJlZHVj
dGlvbiB0byByZWR1Y2UgdGhlIG51bWJlciBvZiB2YWx1ZXMsIGFuZCBzbyBhIGZvcm0gaW52b2x2
aW5nIGZld2VyIHRvdGFsIHZhbHVlcyBpcyBtb3JlCisvLyBjYW5vbmljYWwuIEJ1dCB3ZSBtaWdo
dCBicmVhayB0aGlzLCBmb3IgZXhhbXBsZSB3aGVuIHJlZHVjaW5nIHN0cmVuZ3RoIG9mIE11bCh4
LCA5KS4gVGhpcyBjb3VsZCBiZQorLy8gYmV0dGVyIHdyaXR0ZW4gYXMgQWRkKFNobCh4LCAzKSwg
eCksIHdoaWNoIGFsc28gaGFwcGVucyB0byBiZSByZXByZXNlbnRhYmxlIHVzaW5nIGEgc2luZ2xl
CisvLyBpbnN0cnVjdGlvbiBvbiB4ODYuCisvLworLy8gSGVyZSBhcmUgc29tZSBvZiB0aGUgcnVs
ZXMgd2UgaGF2ZToKKy8vCisvLyBDYW5vbmljYWwgZm9ybSBvZiBsb2dpY2FsIG5vdDogQml0WG9y
KHZhbHVlLCAxKS4gV2UgbWF5IGhhdmUgdG8gYXZvaWQgdXNpbmcgdGhpcyBmb3JtIGlmIHdlIGRv
bid0CisvLyBrbm93IGZvciBzdXJlIHRoYXQgJ3ZhbHVlJyBpcyAwLW9yLTEgKGkuZS4gcmV0dXJu
c0Jvb2wpLiBJbiB0aGF0IGNhc2Ugd2UgZmFsbCBiYWNrIG9uCisvLyBFcXVhbCh2YWx1ZSwgMCku
CisvLworLy8gQ2Fub25pY2FsIGZvcm0gb2YgY29tbXV0YXRpdmUgb3BlcmF0aW9uczogaWYgdGhl
IG9wZXJhdGlvbiBpbnZvbHZlcyBhIGNvbnN0YW50LCB0aGUgY29uc3RhbnQgbXVzdAorLy8gY29t
ZSBzZWNvbmQuIEFkZCh4LCBjb25zdGFudCkgaXMgY2Fub25pY2FsLCB3aGlsZSBBZGQoY29uc3Rh
bnQsIHgpIGlzIG5vdC4gSWYgdGhlcmUgYXJlIG5vCisvLyBjb25zdGFudHMgdGhlbiB0aGUgY2Fu
b25pY2FsIGZvcm0gaW52b2x2ZXMgdGhlIGxvd2VyLWluZGV4ZWQgdmFsdWUgZmlyc3QuIEdpdmVu
IEFkZCh4LCB5KSwgaXQncworLy8gY2Fub25pY2FsIGlmIHgtPmluZGV4KCkgPD0geS0+aW5kZXgo
KS4KKworYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKIGNsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKIHB1
YmxpYzoKICAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCkBAIC01NCwxMCArOTAs
MTYgQEAgcHVibGljOgogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgZG8gewogICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBm
YWxzZTsKIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCJSZWR1Y2Ugc3RyZW5ndGggSVIgYmVmb3JlIGl0ZXJhdGlvbiAjIiwgKytpbmRleCwgIlxu
Iik7CisgICAgICAgICAgICAgICAgZGF0YUxvZyhtX3Byb2MpOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jLmJsb2Nrc0luUHJlT3Jk
ZXIoKSkgewogICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgICAg
ICAKQEAgLTI1NywxOSArMjk5LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihjb21wYXJlLCAx
KQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBpbnZlcnRlZENvbXBhcmUKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgeworICAgICAgICAgICAgICAgIGlm
IChWYWx1ZSogaW52ZXJ0ZWRDb21wYXJlID0gbV92YWx1ZS0+Y2hpbGQoMCktPmludmVydGVkQ29t
cGFyZShtX3Byb2MpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
aW52ZXJ0ZWRDb21wYXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhv
cih2YWx1ZVgsIHZhbHVlWCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogemVyby1jb25zdGFu
dC4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgx
KSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiB6ZXJvQ29uc3RhbnQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKLSAgICAgICAgICAgICAgICAgICAgemVy
b0NvbnN0YW50ID0gbV9wcm9jLmFkZDxDb25zdDMyVmFsdWU+KG1fdmFsdWUtPm9yaWdpbigpLCAw
KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQpCi0g
ICAgICAgICAgICAgICAgICAgIHplcm9Db25zdGFudCA9IG1fcHJvYy5hZGQ8Q29uc3Q2NFZhbHVl
PihtX3ZhbHVlLT5vcmlnaW4oKSwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWUtPnR5cGUoKSA9PSBEb3VibGUpOwot
ICAgICAgICAgICAgICAgICAgICB6ZXJvQ29uc3RhbnQgPSBtX3Byb2MuYWRkPENvbnN0RG91Ymxl
VmFsdWU+KG1fdmFsdWUtPm9yaWdpbigpLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSh6ZXJvQ29uc3RhbnQpOworICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUtPnR5
cGUoKSwgMCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0z
NzcsMTYgKzQxOSwxNSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEVxdWFsOgogICAgICAgICAg
ICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVx
dWFsKEVxdWFsKHgsIDApLCAwKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBOb3RFcXVhbCh4
LCAwKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBFcXVh
bCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKQotICAgICAgICAgICAgICAgICYmIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNMaWtlWmVybygpKSB7CisgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEVxdWFsKGJvb2wsIDApCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJp
dFhvcihib29sLCAxKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5z
Qm9vbCgpICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDApKSB7CiAgICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICBOb3RFcXVhbCwg
bV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCisgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5k
ZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzIEVxdWFs
KGJvb2wsIDEpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGJvb2wKICAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQzMigxKSkgewpAQCAtMzk1LDEzICs0MzYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gRklYTUU6IEhhdmUg
YSBjb21wYXJlLWZsaXBwaW5nIG9wdGltaXphdGlvbiwgbGlrZSBFcXVhbChMZXNzVGhhbihhLCBi
KSwgMCkgdHVybnMgaW50bwotICAgICAgICAgICAgLy8gR3JlYXRlckVxdWFsKGEsIGIpLgotICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcy
NgotCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGNvbnN0MSwgY29uc3QyKQogICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29uc3QyCi0gICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fcHJvYywg
bV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisg
ICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+
ZXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTm90RXF1YWw6CkBAIC00MjcsNyArNDY1LDQ4IEBA
IHByaXZhdGU6CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoY29uc3QxLCBj
b25zdDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSAhPSBjb25zdDIKLSAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPm5vdEVxdWFsQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFs
dWUtPmNoaWxkKDApLT5ub3RFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFu
dChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc1RoYW5Db25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJUaGFuQ29uc3RhbnQobV92YWx1
ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExlc3NF
cXVhbDoKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAgICAgICAgICAgICAg
bV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc0VxdWFsQ29uc3Rh
bnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCisgICAg
ICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3Jl
YXRlckVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEFib3ZlOgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDApLT5hYm92ZUNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUoCisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGls
ZCgwKS0+YmVsb3dDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3VmFsdWUoCisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVl
LT5jaGlsZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG1fdmFsdWUtPmNoaWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQo
MSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJyYW5jaDogewpAQCAt
NDM1LDE0ICs1MTQsMjQgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
cmFuY2goTm90RXF1YWwoeCwgMCkpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4
KQotICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFs
ICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0xpa2VaZXJvKCkpIHsKKyAgICAgICAg
ICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCAmJiBicmFuY2gt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKICAgICAgICAgICAgICAgICBicmFuY2gt
PmNoaWxkKDApID0gYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBCcmFuY2goRXF1YWwoeCwgMCksIHRoZW4sIGVsc2UpCiAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEJyYW5jaCh4LCBlbHNlLCB0aGVuKQotICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hp
bGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNoaWxkKDEpLT5p
c0xpa2VaZXJvKCkpIHsKKyAgICAgICAgICAgIGlmIChicmFuY2gtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBFcXVhbCAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAg
ICAgICAgICAgICAgICBicmFuY2gtPmNoaWxkKDApID0gYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQo
MCk7CisgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGJyYW5jaC0+dGFrZW4oKSwgYnJhbmNoLT5u
b3RUYWtlbigpKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChCaXRY
b3IoYm9vbCwgMSksIHRoZW4sIGVsc2UpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5j
aChib29sLCBlbHNlLCB0aGVuKQorICAgICAgICAgICAgaWYgKGJyYW5jaC0+Y2hpbGQoMCktPm9w
Y29kZSgpID09IEJpdFhvcgorICAgICAgICAgICAgICAgICYmIGJyYW5jaC0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5pc0ludDMyKDEpCisgICAgICAgICAgICAgICAgJiYgYnJhbmNoLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKICAgICAgICAgICAgICAgICBicmFuY2gtPmNoaWxk
KDApID0gYnJhbmNoLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAgc3RkOjpz
d2FwKGJyYW5jaC0+dGFrZW4oKSwgYnJhbmNoLT5ub3RUYWtlbigpKTsKICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAkocmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8U3RhY2ttYXBWYWx1
ZT4oKS0+Y29uc3RyYWluZWRDaGlsZCgwKS5yZXAoKSA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpAQCAtMjkxLDEx
ICsyOTQsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgICAgIGNhc2UgUmV0dXJu
OgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgICAgICBjYXNlIFN3aXRjaDoKICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgp
KSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkIzQ0NhbGxW
YWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzU3Rh
Y2tTbG90VmFsdWUuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIz
VmFsdWVJbmxpbmVzLmgiCkBAIC0xNjIsMTMgKzE2Myw2MiBAQCBWYWx1ZSogVmFsdWU6OnpTaHJD
b25zdGFudChQcm9jZWR1cmUmLCBWCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBW
YWx1ZTo6ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBW
YWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjpub3RFcXVh
bENvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30K
KworVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqKSBjb25zdAoreworICAg
IHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlclRoYW5D
b25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisK
K1RyaVN0YXRlIFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjpncmVhdGVyRXF1YWxD
b25zdGFudChWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7Cit9CisK
K1RyaVN0YXRlIFZhbHVlOjphYm92ZUNvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1
cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUgVmFsdWU6OmJlbG93Q29uc3RhbnQoVmFs
dWUqKSBjb25zdAoreworICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworfQorCitUcmlTdGF0ZSBW
YWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKK30KKworVHJpU3RhdGUgVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1
ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVZhbHVlKiBWYWx1
ZTo6bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFs
dWU6OmludmVydGVkQ29tcGFyZShQcm9jZWR1cmUmIHByb2MpIGNvbnN0CiB7CisgICAgaWYgKCFu
dW1DaGlsZHJlbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoT3B0aW9uYWw8
T3Bjb2RlPiBpbnZlcnRlZE9wY29kZSA9IEIzOjppbnZlcnRlZENvbXBhcmUob3Bjb2RlKCksIGNo
aWxkKDApLT50eXBlKCkpKQorICAgICAgICByZXR1cm4gcHJvYy5hZGQ8VmFsdWU+KCppbnZlcnRl
ZE9wY29kZSwgdHlwZSgpLCBvcmlnaW4oKSwgY2hpbGRyZW4oKSk7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMTky
MDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDggKzExOCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWYWx1ZSogc2hsQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVl
KiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0
dWFsIFZhbHVlKiB6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogbm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHJpU3RhdGUgZXF1YWxD
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgbm90RXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgbGVz
c1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUg
Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJp
U3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBUcmlTdGF0ZSBhYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0OworCisgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB0aGVuIHRoaXMgcmV0
dXJucyB0aGUgaW52ZXJ0ZWQgZm9ybSBvZiB0aGF0IGNvbXBhcmlzb24sIGlmCisgICAgLy8gcG9z
c2libGUuIEl0IGNhbiBiZSBpbXBvc3NpYmxlIGZvciBkb3VibGUgY29tcGFyaXNvbnMsIHdoZXJl
IGZvciBleGFtcGxlIExlc3NUaGFuIGFuZAorICAgIC8vIEdyZWF0ZXJFcXVhbCBiZWhhdmUgZGlm
ZmVyZW50bHkuIElmIHRoaXMgcmV0dXJucyBhIHZhbHVlLCBpdCBpcyBhIG5ldyB2YWx1ZSwgd2hp
Y2ggbXVzdCBiZQorICAgIC8vIGVpdGhlciBpbnNlcnRlZCBpbnRvIHNvbWUgYmxvY2sgb3IgZGVs
ZXRlZC4KKyAgICBWYWx1ZSogaW52ZXJ0ZWRDb21wYXJlKFByb2NlZHVyZSYpIGNvbnN0OwogCiAg
ICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OwogICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL051bWJlck9mQ29yZXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIC8vIFdl
IGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RPX0VYSVQsIG5vciBzaG91bGQgd2UuIFRoYXQn
cyByaWRpY3Vsb3VzLgogc3RhdGljIGJvb2wgaGlkZGVuVHJ1dGhCZWNhdXNlTm9SZXR1cm5Jc1N0
dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTE3MDYsNiArMTcwOSwxMDcgQEAgdm9pZCB0ZXN0
U3RvcmVMb2FkU3RhY2tTbG90KGludCB2YWx1ZSkKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dD4ocHJvYywgdmFsdWUpID09IHZhbHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lu
dDMyX3QgbW9kZWxMb2FkKGludDMyX3QgdmFsdWUpCit7CisgICAgdW5pb24geworICAgICAgICBp
bnQzMl90IG9yaWdpbmFsOworICAgICAgICBUIGxvYWRlZDsKKyAgICB9IHU7CisKKyAgICB1Lm9y
aWdpbmFsID0gdmFsdWU7CisgICAgaWYgKHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHUubG9hZGVkKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHUubG9hZGVkKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RMb2FkKEIzOjpPcGNvZGUgb3Bjb2RlLCBp
bnQzMl90IHZhbHVlKQoreworICAgIC8vIFNpbXBsZSBsb2FkIGZyb20gYW4gYWJzb2x1dGUgYWRk
cmVzcy4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBvcGNvZGUsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2YWx1ZSkpKTsKKworICAg
ICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MpID09IG1vZGVsTG9hZDxUPih2
YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICAvLyBTaW1wbGUgbG9hZCBmcm9tIGFuIGFkZHJlc3Mg
aW4gYSByZWdpc3Rlci4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBvcGNvZGUsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCkpKTsKKworICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMy
X3Q+KHByb2MsICZ2YWx1ZSkgPT0gbW9kZWxMb2FkPFQ+KHZhbHVlKSk7CisgICAgfQorICAgIAor
ICAgIC8vIFNpbXBsZSBsb2FkIGZyb20gYW4gYWRkcmVzcyBpbiBhIHJlZ2lzdGVyLCBhdCBhbiBv
ZmZzZXQuCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgb3Bjb2RlLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHNpemVvZihpbnQzMl90KSkpOworCisgICAgICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgJnZhbHVlIC0gMSkgPT0gbW9kZWxM
b2FkPFQ+KHZhbHVlKSk7CisgICAgfQorCisgICAgLy8gTG9hZCBmcm9tIGEgc2ltcGxlIGJhc2Ut
aW5kZXggd2l0aCB2YXJpb3VzIHNjYWxlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGxvZ1NjYWxlID0g
MDsgbG9nU2NhbGUgPD0gMzsgKytsb2dTY2FsZSkgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAg
ICAgICAgICAgICAgIHByb2MsIG9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG9nU2NhbGUpKSkpKTsKKworICAgICAgICBDSEVD
Syhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsICZ2YWx1ZSAtIDIsIChzaXplb2YoaW50MzJf
dCkgKiAyKSA+PiBsb2dTY2FsZSkgPT0gbW9kZWxMb2FkPFQ+KHZhbHVlKSk7CisgICAgfQorCisg
ICAgLy8gTG9hZCBmcm9tIGEgc2ltcGxlIGJhc2UtaW5kZXggd2l0aCB2YXJpb3VzIHNjYWxlcywg
YnV0IGNvbW11dGVkLgorICAgIGZvciAodW5zaWduZWQgbG9nU2NhbGUgPSAwOyBsb2dTY2FsZSA8
PSAzOyArK2xvZ1NjYWxlKSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgb3Bjb2RlLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG9nU2NhbGUpKSwKKyAgICAgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSkpOworCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50MzJfdD4ocHJvYywgJnZhbHVlIC0gMiwgKHNpemVvZihpbnQzMl90KSAqIDIpID4+IGxv
Z1NjYWxlKSA9PSBtb2RlbExvYWQ8VD4odmFsdWUpKTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdEJy
YW5jaCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0yMjQ2LDcgKzIzNTAsNyBAQCB2b2lk
IHRlc3RDb21wbGV4KHVuc2lnbmVkIG51bVZhcnMsIHVuc2lnCiAgICAgY29tcGlsZShwcm9jKTsK
IAogICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7Ci0g
ICAgZGF0YUxvZygiICAgIFRoYXQgdG9vayAiLCBhZnRlciAtIGJlZm9yZSwgIiBtcy5cbiIpOwor
ICAgIGRhdGFMb2codG9DU3RyaW5nKCIgICAgVGhhdCB0b29rICIsIGFmdGVyIC0gYmVmb3JlLCAi
IG1zLlxuIikpOwogfQogCiB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50KCkKQEAgLTIyOTksMTMg
KzI0MDMsMjYzIEBAIHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICBDSEVDSyhpbnZva2U8aW50
Pihjb2RlLCAxKSA9PSA0Mik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0
eXBlbmFtZSBSaWdodEZ1bmN0b3I+Cit2b2lkIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICBCMzo6
T3Bjb2RlIG9wY29kZSwgY29uc3QgTGVmdEZ1bmN0b3ImIGxlZnRGdW5jdG9yLCBjb25zdCBSaWdo
dEZ1bmN0b3ImIHJpZ2h0RnVuY3RvciwKKyAgICBpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgcmVz
dWx0KQoreworICAgIC8vIFVzaW5nIGEgY29tcGFyZS4KKyAgICB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIG9wY29k
ZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdodEZ1bmN0b3Iocm9vdCwg
cHJvYykpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAwKSkpOworCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihw
cm9jLCBsZWZ0LCByaWdodCkgPT0gcmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgLy8gVXNpbmcg
YSBicmFuY2guCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogdGhlbkNh
c2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwg
bGVmdEZ1bmN0b3Iocm9vdCwgcHJvYyksIHJpZ2h0RnVuY3Rvcihyb290LCBwcm9jKSksCisgICAg
ICAgICAgICBGcmVxdWVudGVkQmxvY2sodGhlbkNhc2UpLCBGcmVxdWVudGVkQmxvY2soZWxzZUNh
c2UpKTsKKworICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IG9uIHRoZSB0aGVuIGNhc2Ug
dG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGdldCBpZi1jb252ZXJ0ZWQuCisgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHRoZW5DYXNlLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwYXRjaHBvaW50KTsKKworICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAg
ICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7
CisKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGxlZnQsIHJpZ2h0KSA9
PSByZXN1bHQpOworICAgIH0KK30KKworaW50IG1vZGVsQ29tcGFyZShCMzo6T3Bjb2RlIG9wY29k
ZSwgaW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgRXF1YWw6CisgICAgICAgIHJldHVybiBsZWZ0ID09IHJpZ2h0OworICAgIGNhc2UgTm90RXF1
YWw6CisgICAgICAgIHJldHVybiBsZWZ0ICE9IHJpZ2h0OworICAgIGNhc2UgTGVzc1RoYW46Cisg
ICAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAg
ICAgcmV0dXJuIGxlZnQgPiByaWdodDsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgcmV0
dXJuIGxlZnQgPD0gcmlnaHQ7CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIHJldHVy
biBsZWZ0ID49IHJpZ2h0OworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obGVmdCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHQpOworICAg
IGNhc2UgQmVsb3c6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVmdCkg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHQpOworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZWZ0KSA+PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmlnaHQpOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihsZWZ0KSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHQp
OworICAgIGNhc2UgQml0QW5kOgorICAgICAgICByZXR1cm4gISEobGVmdCAmIHJpZ2h0KTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RD
b21wYXJlTG9hZChCMzo6T3Bjb2RlIG9wY29kZSwgQjM6Ok9wY29kZSBsb2FkT3Bjb2RlLCBpbnQg
bGVmdCwgaW50IHJpZ2h0KQoreworICAgIGludCByZXN1bHQgPSBtb2RlbENvbXBhcmUob3Bjb2Rl
LCBtb2RlbExvYWQ8VD4obGVmdCksIHJpZ2h0KTsKKyAgICAKKyAgICAvLyBUZXN0IGFkZHItdG8t
dG1wCisgICAgaW50IHNsb3QgPSBsZWZ0OworICAgIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAg
ICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHBy
b2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigK
KyAgICAgICAgICAgICAgICBwcm9jLCBsb2FkT3Bjb2RlLCBJbnQzMiwgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgJnNsb3QpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywg
UHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICB9LAorICAgICAgICBsZWZ0LCByaWdo
dCwgcmVzdWx0KTsKKworICAgIC8vIFRlc3QgYWRkci10by1pbW0KKyAgICBzbG90ID0gbGVmdDsK
KyAgICBnZW5lcmljVGVzdENvbXBhcmUoCisgICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChC
YXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4g
YmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgbG9h
ZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KSk7CisgICAgICAgIH0sCisg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAg
ICAgICAgcmV0dXJuIGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgcmlnaHQpOworICAgICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKwor
ICAgIHJlc3VsdCA9IG1vZGVsQ29tcGFyZShvcGNvZGUsIGxlZnQsIG1vZGVsTG9hZDxUPihyaWdo
dCkpOworICAgIAorICAgIC8vIFRlc3QgdG1wLXRvLWFkZHIKKyAgICBzbG90ID0gcmlnaHQ7Cisg
ICAgZ2VuZXJpY1Rlc3RDb21wYXJlKAorICAgICAgICBvcGNvZGUsCisgICAgICAgIFsmXSAoQmFz
aWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0dXJuIGJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAg
ICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KSk7Cisg
ICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCBp
bW0tdG8tYWRkcgorICAgIHNsb3QgPSByaWdodDsKKyAgICBnZW5lcmljVGVzdENvbXBhcmUoCisg
ICAgICAgIG9wY29kZSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJl
JiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBsZWZ0KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgbG9hZE9w
Y29kZSwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KSk7CisgICAgICAgIH0sCisgICAg
ICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworfQorCit2b2lkIHRlc3RDb21wYXJlSW1wbChCMzo6
T3Bjb2RlIG9wY29kZSwgaW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBpbnQgcmVzdWx0ID0g
bW9kZWxDb21wYXJlKG9wY29kZSwgbGVmdCwgcmlnaHQpOworICAgIAorICAgIC8vIFRlc3QgdG1w
LXRvLXRtcC4KKyAgICBnZW5lcmljVGVzdENvbXBhcmUoCisgICAgICAgIG9wY29kZSwKKyAgICAg
ICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAg
ICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAg
ICAgICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2Mp
IHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSk7CisgICAgICAgIH0sCisgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisg
ICAgLy8gVGVzdCBpbW0tdG8tdG1wLgorICAgIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAgICAg
b3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHByb2Mp
IHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGxlZnQpOworICAgICAgICB9LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIH0sCisgICAgICAgIGxl
ZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgLy8gVGVzdCB0bXAtdG8taW1tLgorICAgIGdlbmVy
aWNUZXN0Q29tcGFyZSgKKyAgICAgICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrLCBQcm9jZWR1cmUmIHByb2MpIHsKKyAgICAgICAgICAgIHJldHVybiBibG9jay0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0sCisgICAgICAgIFsm
XSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVyZSYgcHJvYykgeworICAgICAgICAgICAgcmV0
dXJuIGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcmlnaHQp
OworICAgICAgICB9LAorICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKworICAgIC8vIFRl
c3QgaW1tLXRvLWltbS4KKyAgICBnZW5lcmljVGVzdENvbXBhcmUoCisgICAgICAgIG9wY29kZSwK
KyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7CisgICAg
ICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBsZWZ0KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywg
UHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICByZXR1cm4gYmxvY2stPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCByaWdodCk7CisgICAgICAgIH0sCisgICAgICAg
IGxlZnQsIHJpZ2h0LCByZXN1bHQpOworCisgICAgdGVzdENvbXBhcmVMb2FkPGludDMyX3Q+KG9w
Y29kZSwgTG9hZCwgbGVmdCwgcmlnaHQpOworICAgIHRlc3RDb21wYXJlTG9hZDxpbnQ4X3Q+KG9w
Y29kZSwgTG9hZDhTLCBsZWZ0LCByaWdodCk7CisgICAgdGVzdENvbXBhcmVMb2FkPHVpbnQ4X3Q+
KG9wY29kZSwgTG9hZDhaLCBsZWZ0LCByaWdodCk7CisgICAgdGVzdENvbXBhcmVMb2FkPGludDE2
X3Q+KG9wY29kZSwgTG9hZDE2UywgbGVmdCwgcmlnaHQpOworICAgIHRlc3RDb21wYXJlTG9hZDx1
aW50MTZfdD4ob3Bjb2RlLCBMb2FkMTZaLCBsZWZ0LCByaWdodCk7Cit9CisKK3ZvaWQgdGVzdENv
bXBhcmUoQjM6Ok9wY29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgYXV0
byB2YXJpYW50cyA9IFsmXSAoaW50IGxlZnQsIGludCByaWdodCkgeworICAgICAgICB0ZXN0Q29t
cGFyZUltcGwob3Bjb2RlLCBsZWZ0LCByaWdodCk7CisgICAgICAgIHRlc3RDb21wYXJlSW1wbChv
cGNvZGUsIGxlZnQsIHJpZ2h0ICsgMSk7CisgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUs
IGxlZnQsIHJpZ2h0IC0gMSk7CisKKyAgICAgICAgYXV0byBtdWx0aXBsaWVkVGVzdHMgPSBbJl0g
KGludCBmYWN0b3IpIHsKKyAgICAgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQg
KiBmYWN0b3IsIHJpZ2h0KTsKKyAgICAgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxl
ZnQgKiBmYWN0b3IsIHJpZ2h0ICsgMSk7CisgICAgICAgICAgICB0ZXN0Q29tcGFyZUltcGwob3Bj
b2RlLCBsZWZ0ICogZmFjdG9yLCByaWdodCAtIDEpOworICAgICAgICAKKyAgICAgICAgICAgIHRl
c3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQsIHJpZ2h0ICogZmFjdG9yKTsKKyAgICAgICAgICAg
IHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQsIChyaWdodCArIDEpICogZmFjdG9yKTsKKyAg
ICAgICAgICAgIHRlc3RDb21wYXJlSW1wbChvcGNvZGUsIGxlZnQsIChyaWdodCAtIDEpICogZmFj
dG9yKTsKKyAgICAgICAgCisgICAgICAgICAgICB0ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0
ICogZmFjdG9yLCByaWdodCAqIGZhY3Rvcik7CisgICAgICAgICAgICB0ZXN0Q29tcGFyZUltcGwo
b3Bjb2RlLCBsZWZ0ICogZmFjdG9yLCAocmlnaHQgKyAxKSAqIGZhY3Rvcik7CisgICAgICAgICAg
ICB0ZXN0Q29tcGFyZUltcGwob3Bjb2RlLCBsZWZ0ICogZmFjdG9yLCAocmlnaHQgLSAxKSAqIGZh
Y3Rvcik7CisgICAgICAgIH07CisKKyAgICAgICAgbXVsdGlwbGllZFRlc3RzKDEwKTsKKyAgICAg
ICAgbXVsdGlwbGllZFRlc3RzKDEwMCk7CisgICAgICAgIG11bHRpcGxpZWRUZXN0cygxMDAwKTsK
KyAgICAgICAgbXVsdGlwbGllZFRlc3RzKDEwMDAwMCk7CisgICAgfTsKKworICAgIHZhcmlhbnRz
KGxlZnQsIHJpZ2h0KTsKKyAgICB2YXJpYW50cygtbGVmdCwgcmlnaHQpOworICAgIHZhcmlhbnRz
KGxlZnQsIC1yaWdodCk7CisgICAgdmFyaWFudHMoLWxlZnQsIC1yaWdodCk7Cit9CisKICNkZWZp
bmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYg
KCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZGF0YUxvZygjdGVzdCAi
OlxuIik7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZGF0YUxvZygiICAgIE9LIVxuIik7ICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgZGlkUnVuKys7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgdGFza3MuYXBwZW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICBbJl0gKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygjdGVzdCAiLi4uXG4iKTsgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygjdGVzdCAiOiBPSyFcbiIpOyAgIFwKKyAgICAgICAgICAgICAgICB9KSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSk7CiAKIHZvaWQgcnVu
KGNvbnN0IGNoYXIqIGZpbHRlcikKQEAgLTIzMTMsMTAgKzI2NjcsMTEgQEAgdm9pZCBydW4oY29u
c3QgY2hhciogZmlsdGVyKQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIHZt
ID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CiAKKyAgICBEZXF1ZTxSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7CisKICAgICBhdXRvIHNob3VsZFJ1biA9IFsmXSAo
Y29uc3QgY2hhciogdGVzdE5hbWUpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4gISFzdHJjYXNl
c3RyKHRlc3ROYW1lLCBmaWx0ZXIpOworICAgICAgICByZXR1cm4gIWZpbHRlciB8fCAhIXN0cmNh
c2VzdHIodGVzdE5hbWUsIGZpbHRlcik7CiAgICAgfTsKLSAgICB1bnNpZ25lZCBkaWRSdW4gPSAw
OwogCiAgICAgUlVOKHRlc3Q0MigpKTsKICAgICBSVU4odGVzdExvYWQ0MigpKTsKQEAgLTI2NzAs
NiArMzAyNSw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFN0
YWNrU2xvdCgpKTsKICAgICBSVU4odGVzdExvYWRGcm9tRnJhbWVQb2ludGVyKCkpOwogICAgIFJV
Tih0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KDUwKSk7CisgICAgCiAgICAgUlVOKHRlc3RCcmFuY2go
KSk7CiAgICAgUlVOKHRlc3RCcmFuY2hQdHIoKSk7CiAgICAgUlVOKHRlc3REaWFtb25kKCkpOwpA
QCAtMjY5OSw4ICszMDU1LDkyIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBS
VU4odGVzdFNpbXBsZVBhdGNocG9pbnQoKSk7CiAgICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsK
IAotICAgIGlmICghZGlkUnVuKQorICAgIFJVTih0ZXN0Q29tcGFyZShFcXVhbCwgNDIsIDQyKSk7
CisgICAgUlVOKHRlc3RDb21wYXJlKE5vdEVxdWFsLCA0MiwgNDIpKTsKKyAgICBSVU4odGVzdENv
bXBhcmUoTGVzc1RoYW4sIDQyLCA0MikpOworICAgIFJVTih0ZXN0Q29tcGFyZShHcmVhdGVyVGhh
biwgNDIsIDQyKSk7CisgICAgUlVOKHRlc3RDb21wYXJlKExlc3NFcXVhbCwgNDIsIDQyKSk7Cisg
ICAgUlVOKHRlc3RDb21wYXJlKEdyZWF0ZXJFcXVhbCwgNDIsIDQyKSk7CisgICAgUlVOKHRlc3RD
b21wYXJlKEJlbG93LCA0MiwgNDIpKTsKKyAgICBSVU4odGVzdENvbXBhcmUoQWJvdmUsIDQyLCA0
MikpOworICAgIFJVTih0ZXN0Q29tcGFyZShCZWxvd0VxdWFsLCA0MiwgNDIpKTsKKyAgICBSVU4o
dGVzdENvbXBhcmUoQWJvdmVFcXVhbCwgNDIsIDQyKSk7CisKKyAgICBSVU4odGVzdENvbXBhcmUo
Qml0QW5kLCA0MiwgNDIpKTsKKyAgICBSVU4odGVzdENvbXBhcmUoQml0QW5kLCA0MiwgMCkpOwor
CisgICAgUlVOKHRlc3RMb2FkPGludDMyX3Q+KExvYWQsIDYwKSk7CisgICAgUlVOKHRlc3RMb2Fk
PGludDMyX3Q+KExvYWQsIC02MCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQzMl90PihMb2FkLCAx
MDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDMyX3Q+KExvYWQsIC0xMDAwKSk7CisgICAgUlVO
KHRlc3RMb2FkPGludDMyX3Q+KExvYWQsIDEwMDAwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50
MzJfdD4oTG9hZCwgLTEwMDAwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50MzJfdD4oTG9hZCwg
MTAwMDAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQzMl90PihMb2FkLCAtMTAwMDAwMDAw
MCkpOworICAgIAorICAgIFJVTih0ZXN0TG9hZDxpbnQ4X3Q+KExvYWQ4UywgNjApKTsKKyAgICBS
VU4odGVzdExvYWQ8aW50OF90PihMb2FkOFMsIC02MCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQ4
X3Q+KExvYWQ4UywgMTAwMCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQ4X3Q+KExvYWQ4UywgLTEw
MDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50OF90PihMb2FkOFMsIDEwMDAwMDApKTsKKyAgICBS
VU4odGVzdExvYWQ8aW50OF90PihMb2FkOFMsIC0xMDAwMDAwKSk7CisgICAgUlVOKHRlc3RMb2Fk
PGludDhfdD4oTG9hZDhTLCAxMDAwMDAwMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDhfdD4o
TG9hZDhTLCAtMTAwMDAwMDAwMCkpOworICAgIAorICAgIFJVTih0ZXN0TG9hZDx1aW50OF90PihM
b2FkOFosIDYwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQ4X3Q+KExvYWQ4WiwgLTYwKSk7Cisg
ICAgUlVOKHRlc3RMb2FkPHVpbnQ4X3Q+KExvYWQ4WiwgMTAwMCkpOworICAgIFJVTih0ZXN0TG9h
ZDx1aW50OF90PihMb2FkOFosIC0xMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQ4X3Q+KExv
YWQ4WiwgMTAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50OF90PihMb2FkOFosIC0xMDAw
MDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPHVpbnQ4X3Q+KExvYWQ4WiwgMTAwMDAwMDAwMCkpOwor
ICAgIFJVTih0ZXN0TG9hZDx1aW50OF90PihMb2FkOFosIC0xMDAwMDAwMDAwKSk7CisKKyAgICBS
VU4odGVzdExvYWQ8aW50MTZfdD4oTG9hZDE2UywgNjApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50
MTZfdD4oTG9hZDE2UywgLTYwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDE2X3Q+KExvYWQxNlMs
IDEwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8aW50MTZfdD4oTG9hZDE2UywgLTEwMDApKTsKKyAg
ICBSVU4odGVzdExvYWQ8aW50MTZfdD4oTG9hZDE2UywgMTAwMDAwMCkpOworICAgIFJVTih0ZXN0
TG9hZDxpbnQxNl90PihMb2FkMTZTLCAtMTAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9hZDxpbnQx
Nl90PihMb2FkMTZTLCAxMDAwMDAwMDAwKSk7CisgICAgUlVOKHRlc3RMb2FkPGludDE2X3Q+KExv
YWQxNlMsIC0xMDAwMDAwMDAwKSk7CisgICAgCisgICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihM
b2FkMTZaLCA2MCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50MTZfdD4oTG9hZDE2WiwgLTYwKSk7
CisgICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihMb2FkMTZaLCAxMDAwKSk7CisgICAgUlVOKHRl
c3RMb2FkPHVpbnQxNl90PihMb2FkMTZaLCAtMTAwMCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50
MTZfdD4oTG9hZDE2WiwgMTAwMDAwMCkpOworICAgIFJVTih0ZXN0TG9hZDx1aW50MTZfdD4oTG9h
ZDE2WiwgLTEwMDAwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8dWludDE2X3Q+KExvYWQxNlosIDEw
MDAwMDAwMDApKTsKKyAgICBSVU4odGVzdExvYWQ8dWludDE2X3Q+KExvYWQxNlosIC0xMDAwMDAw
MDAwKSk7CisKKyAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOworCisg
ICAgTG9jayBsb2NrOworCisgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JD
b3JlcygpOyBpLS07KSB7CisgICAgICAgIHRocmVhZHMuYXBwZW5kKAorICAgICAgICAgICAgY3Jl
YXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKKyAgICAgICAgICAg
ICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOworICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrcy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFza3MudGFrZUZpcnN0KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2stPnJ1bigpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkpOworICAgIH0KKworICAg
IGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOwogfQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
QEAgLTI3MTYsNyArMzE1Niw3IEBAIHN0YXRpYyB2b2lkIHJ1bihjb25zdCBjaGFyKikKIAogaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9
ICIiOworICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IG51bGxwdHI7CiAgICAgc3dpdGNoIChhcmdj
KSB7CiAgICAgY2FzZSAxOgogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMzQg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCiti
b29sIEFyZzo6aXNSZXByZXNlbnRhYmxlQXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVk
bmVzcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHNpZ25lZG5lc3MpIHsKKyAgICBjYXNlIFNpZ25l
ZDoKKyAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICBjYXNlIFdpZHRoODoKKyAgICAg
ICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxpbnQ4X3Q+KCk7CisgICAgICAgIGNhc2Ug
V2lkdGgxNjoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxpbnQxNl90Pigp
OworICAgICAgICBjYXNlIFdpZHRoMzI6CisgICAgICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRh
YmxlQXM8aW50MzJfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDY0OgorICAgICAgICAgICAgcmV0
dXJuIGlzUmVwcmVzZW50YWJsZUFzPGludDY0X3Q+KCk7CisgICAgICAgIH0KKyAgICBjYXNlIFVu
c2lnbmVkOgorICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgIGNhc2UgV2lkdGg4Ogor
ICAgICAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPHVpbnQ4X3Q+KCk7CisgICAgICAg
IGNhc2UgV2lkdGgxNjoKKyAgICAgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczx1aW50
MTZfdD4oKTsKKyAgICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgcmV0dXJuIGlzUmVw
cmVzZW50YWJsZUFzPHVpbnQzMl90PigpOworICAgICAgICBjYXNlIFdpZHRoNjQ6CisgICAgICAg
ICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8dWludDY0X3Q+KCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChtX2tpbmQpIHsKQEAgLTkwLDQgKzExOCwxMjIgQEAgdm9pZCBBcmc6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgog
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6S2luZCBraW5kKQoreworICAg
IHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQXJnOjpJbnZhbGlkOgorICAgICAgICBvdXQucHJp
bnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAg
ICAgIG91dC5wcmludCgiVG1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6SW1t
OgorICAgICAgICBvdXQucHJpbnQoIkltbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
cmc6OkltbTY0OgorICAgICAgICBvdXQucHJpbnQoIkltbTY0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgb3V0LnByaW50KCJBZGRyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2si
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBvdXQu
cHJpbnQoIkNhbGxBcmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpJbmRleDoK
KyAgICAgICAgb3V0LnByaW50KCJJbmRleCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
cmc6OlJlbENvbmQ6CisgICAgICAgIG91dC5wcmludCgiUmVsQ29uZCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBcmc6OlJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludCgiUmVzQ29uZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkRvdWJsZUNvbmQ6CisgICAgICAgIG91
dC5wcmludCgiRG91YmxlQ29uZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlNw
ZWNpYWw6CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6Um9sZSByb2xlKQoreworICAgIHN3aXRj
aCAocm9sZSkgeworICAgIGNhc2UgQXJnOjpVc2U6CisgICAgICAgIG91dC5wcmludCgiVXNlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6RGVmOgorICAgICAgICBvdXQucHJpbnQo
IkRlZiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAgICAg
b3V0LnByaW50KCJVc2VEZWYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpVc2VB
ZGRyOgorICAgICAgICBvdXQucHJpbnQoIlVzZUFkZHIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgIG91dC5wcmludCgiR1AiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgb3V0LnByaW50KCJGUCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6V2lk
dGggd2lkdGgpCit7CisgICAgc3dpdGNoICh3aWR0aCkgeworICAgIGNhc2UgQXJnOjpXaWR0aDg6
CisgICAgICAgIG91dC5wcmludCgiV2lkdGg4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFyZzo6V2lkdGgxNjoKKyAgICAgICAgb3V0LnByaW50KCJXaWR0aDE2Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgb3V0LnByaW50KCJXaWR0aDMy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgb3V0
LnByaW50KCJXaWR0aDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQXJnOjpTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit7CisgICAgc3dpdGNoIChzaWdu
ZWRuZXNzKSB7CisgICAgY2FzZSBBcmc6OlNpZ25lZDoKKyAgICAgICAgb3V0LnByaW50KCJTaWdu
ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpVbnNpZ25lZDoKKyAgICAgICAg
b3V0LnByaW50KCJVbnNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDE4IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CiAKKyAgICBlbnVtIFdpZHRo
IDogaW50OF90IHsKKyAgICAgICAgV2lkdGg4LAorICAgICAgICBXaWR0aDE2LAorICAgICAgICBX
aWR0aDMyLAorICAgICAgICBXaWR0aDY0CisgICAgfTsKKworICAgIGVudW0gU2lnbmVkbmVzcyA6
IGludDhfdCB7CisgICAgICAgIFNpZ25lZCwKKyAgICAgICAgVW5zaWduZWQKKyAgICB9OworCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxs
IFVzZSB0aGUgQXJnLiBJdCdzIGRlbGliZXJhdGVseSBmYWxzZSBmb3IKICAgICAvLyBVc2VBZGRy
LCBzaW5jZSBpc1VzZSgpIGZvciBhbiBBcmc6OmFkZHIgbWVhbnMgdGhhdCB3ZSBhcmUgbG9hZGlu
ZyBmcm9tIHRoZSBhZGRyZXNzLgogICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKQEAg
LTE1Myw2ICsxNjUsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR1A7CiAgICAgfQogCisg
ICAgc3RhdGljIFdpZHRoIHdpZHRoRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gV2lkdGg4OworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIFdpZHRoMzI7CisgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIFdpZHRoNjQ7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBBcmcoKQogICAgICAgICA6IG1fa2luZChJbnZhbGlkKQog
ICAgIHsKQEAgLTM3Niw2ICs0MDIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vZmZz
ZXQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzUmVwcmVz
ZW50YWJsZUFzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRh
YmxlQXM8VD4odmFsdWUoKSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhX
aWR0aCwgU2lnbmVkbmVzcykgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQgYXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KHZhbHVlKCkpOworICAgIH0KKwogICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKQEAgLTY4NCw2ICs3MjQsNDEgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbj4obV9vZmZzZXQpOwogICAgIH0KIAorICAgIC8vIFRoaXMgaXMgdmFsaWQgZm9y
IGNvbmRpdGlvbiBhcmd1bWVudHMuIEl0IHdpbGwgaW52ZXJ0IHRoZW0uCisgICAgQXJnIGludmVy
dGVkKGJvb2wgaW52ZXJ0ZWQgPSB0cnVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpbnZl
cnRlZCkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OmludmVydChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSkpOworICAgICAgICBj
YXNlIFJlc0NvbmQ6CisgICAgICAgICAgICByZXR1cm4gcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
aW52ZXJ0KGFzUmVzdWx0Q29uZGl0aW9uKCkpKTsKKyAgICAgICAgY2FzZSBEb3VibGVDb25kOgor
ICAgICAgICAgICAgcmV0dXJuIGRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OmludmVydChhc0Rv
dWJsZUNvbmRpdGlvbigpKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgQXJnIGZsaXBwZWQoYm9vbCBmbGlwcGVkID0gdHJ1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghZmxpcHBlZCkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsK
KyAgICAgICAgcmV0dXJuIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OmZsaXAoYXNSZWxhdGlvbmFs
Q29uZGl0aW9uKCkpKTsKKyAgICB9CisKKyAgICBib29sIGlzU2lnbmVkQ29uZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNSZWxDb25kKCkgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzU2ln
bmVkKGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICB9CisKKyAgICBib29sIGlzVW5zaWdu
ZWRDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1JlbENvbmQoKSAmJiBNYWNy
b0Fzc2VtYmxlcjo6aXNVbnNpZ25lZChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgfQor
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBBcmcoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtNzIxLDYgKzc5NiwxMiBAQCBzdHJ1Y3QgQXJnSGFz
aCB7CiAKIG5hbWVzcGFjZSBXVEYgewogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkIzOjpBaXI6OkFyZzo6S2luZCk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6Um9sZSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6VHlwZSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6OkFyZzo6V2lkdGgpOwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpBcmc6OlNpZ25lZG5lc3MpOworCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CiB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4gewogICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpB
cmdIYXNoIEhhc2g7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAko
cmV2aXNpb24gMTkyMDYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luIHx8
IG9wY29kZSAhPSBOb3AgfHwgYXJncy5zaXplKCk7IH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNl
IHRoZW0gZm9yIHRoaW5ncyB0aGF0CiAgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUg
ZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlv
dSdyZQogICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTIwNjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTcsMTIgKzE5Nyw2OCBAQCBNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6Rgog
TW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKICAgICBUbXAsIFRtcAogCitMb2FkOCBVOkcsIEQ6Rwor
ICAgIEFkZHIsIFRtcAorICAgIEluZGV4LCBUbXAKKworTG9hZDhTaWduZWRFeHRlbmRUbzMyIFU6
RywgRDpHCisgICAgQWRkciwgVG1wCisgICAgSW5kZXgsIFRtcAorCitMb2FkMTYgVTpHLCBEOkcK
KyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK0xvYWQxNlNpZ25lZEV4dGVuZFRvMzIg
VTpHLCBEOkcKKyAgICBBZGRyLCBUbXAKKyAgICBJbmRleCwgVG1wCisKK0NvbXBhcmUzMiBVOkcs
IFU6RywgVTpHLCBEOkcKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wCisgICAgUmVsQ29uZCwg
VG1wLCBJbW0sIFRtcAorCitDb21wYXJlNjQgVTpHLCBVOkcsIFU6RywgRDpHCisgICAgUmVsQ29u
ZCwgVG1wLCBJbW0sIFRtcAorICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAKKworVGVzdDMyIFU6
RywgVTpHLCBVOkcsIEQ6RworICAgIFJlc0NvbmQsIEFkZHIsIEltbSwgVG1wCisgICAgUmVzQ29u
ZCwgVG1wLCBUbXAsIFRtcAorCitUZXN0NjQgVTpHLCBVOkcsIFU6RywgRDpHCisgICAgUmVzQ29u
ZCwgVG1wLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIFRtcCwgVG1wLCBUbXAKKworQnJhbmNoOCBV
OkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZWxDb25kLCBBZGRyLCBJbW0KKyAgICBSZWxDb25k
LCBJbmRleCwgSW1tCisKK0JyYW5jaDMyIFU6RywgVTpHLCBVOkcgL2JyYW5jaAorICAgIFJlbENv
bmQsIEFkZHIsIEltbQorICAgIFJlbENvbmQsIFRtcCwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBJ
bW0KKyAgICBSZWxDb25kLCBUbXAsIEFkZHIKKyAgICBSZWxDb25kLCBBZGRyLCBUbXAKKyAgICBS
ZWxDb25kLCBJbmRleCwgSW1tCisKK0JyYW5jaDY0IFU6RywgVTpHLCBVOkcgL2JyYW5jaAorICAg
IFJlbENvbmQsIFRtcCwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBBZGRyCisgICAgUmVsQ29uZCwg
QWRkciwgVG1wCisgICAgUmVsQ29uZCwgSW5kZXgsIFRtcAorCitCcmFuY2hUZXN0OCBVOkcsIFU6
RywgVTpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBBZGRyLCBJbW0KKyAgICBSZXNDb25kLCBJbmRl
eCwgSW1tCisKIEJyYW5jaFRlc3QzMiBVOkcsIFU6RywgVTpHIC9icmFuY2gKICAgICBSZXNDb25k
LCBUbXAsIFRtcAogICAgIFJlc0NvbmQsIFRtcCwgSW1tCiAgICAgUmVzQ29uZCwgQWRkciwgSW1t
CiAgICAgUmVzQ29uZCwgSW5kZXgsIEltbQogCisjIFdhcm5pbmc6IGZvcm1zIHRoYXQgdGFrZSBh
biBpbW1lZGlhdGUgd2lsbCBzaWduLWV4dGVuZCB0aGVpciBpbW1lZGlhdGUuIFlvdSBwcm9iYWJs
eSB3YW50CisjIEJyYW5jaFRlc3QzMiBpbiBtb3N0IGNhc2VzIHdoZXJlIHlvdSB1c2UgYW4gaW1t
ZWRpYXRlLgogQnJhbmNoVGVzdDY0IFU6RywgVTpHLCBVOkcgL2JyYW5jaAogICAgIFJlc0NvbmQs
IFRtcCwgVG1wCiAgICAgUmVzQ29uZCwgVG1wLCBJbW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDE5MjA2MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29y
a2luZyBjb3B5KQpAQCAtNDEwLDcgKzQxMCw3IEBAIGRlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVk
LCBmb3JtcywgY29sdW0KICAgICBlbmQKIAogICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBd
LmtpbmRzLmxlbmd0aAotICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAg
ICAgICAgcmFpc2UgIkRpZCBub3QgcmVkdWNlIHRvIG9uZSBmb3JtOiAje2Zvcm1zLmluc3BlY3R9
IiB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKICAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCiAg
ICAgICAgIHJldHVybgogICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5MjA2MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDc0LDcgKzM0NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2Qo
Tm9kCiAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAg
ICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAg
ICAgICAgICAgICBpZiAoZGl2aXNvciA+IDEgJiYgaGFzT25lQml0U2V0KGRpdmlzb3IpKSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9nYXJpdGhtID0gV1RGOjpmYXN0TG9nMihkaXZpc29y
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2dhcml0aG0gPSBXVEY6OmZhc3RMb2cyKHN0
YXRpY19jYXN0PHVpbnQzMl90PihkaXZpc29yKSk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGRp
dmlkZW5kR1BSID0gb3AxLmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiAxOTIwNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1OCwxMyArMTQ1OCwxMyBA
QCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgCiAgICAgc3dp
dGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKGlzU2ln
bmVkKHR5cGUpKQorICAgICAgICBpZiAoSlNDOjppc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAg
IGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVz
T25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQ4KEJh
c2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCisg
ICAgICAgIGlmIChKU0M6OmlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9hZDE2U2lnbmVk
RXh0ZW5kVG8zMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0
UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoc2Ny
YXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CkBAIC0xNTk2LDcgKzE1
OTYsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgCiAg
ICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewogICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlw
ZSkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVCghaXNTaWduZWQodHlwZSkpOworICAgICAgICBBU1NF
UlQoIUpTQzo6aXNTaWduZWQodHlwZSkpOwogICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAg
ICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1
c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0
Y2gpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>