<?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>150762</bug_id>
          
          <creation_ts>2015-10-31 16:50:24 -0700</creation_ts>
          <short_desc>B3 should have a Select opcode</short_desc>
          <delta_ts>2015-11-26 04:15:45 -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>150761</dependson>
    
    <dependson>151616</dependson>
          <blocked>151504</blocked>
    
    <blocked>150279</blocked>
    
    <blocked>151428</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>keith_miller</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>1138241</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 16:50:24 -0700</bug_when>
    <thetext>Because conditional moves are pretty neat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143722</commentid>
    <comment_count>1</comment_count>
      <attachid>265976</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-20 11:50:26 -0800</bug_when>
    <thetext>Created attachment 265976
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143781</commentid>
    <comment_count>2</comment_count>
      <attachid>265988</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-20 13:28:21 -0800</bug_when>
    <thetext>Created attachment 265988
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143783</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-20 13:30:37 -0800</bug_when>
    <thetext>Attachment 265988 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:847:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/B3ValueKey.h:65:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4751:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4752:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4753:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4754:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4770:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4771:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4772:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4773:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4792:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4793:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4794:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4795:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4796:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/B3Value.h:238:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:248:  Missing space before {  [whitespace/braces] [5]
Total errors found: 17 in 19 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>1143801</commentid>
    <comment_count>4</comment_count>
      <attachid>265995</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-20 13:58:19 -0800</bug_when>
    <thetext>Created attachment 265995
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143804</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-20 14:00:47 -0800</bug_when>
    <thetext>Attachment 265995 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3Value.h:238:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:248:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3ValueKey.h:65:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4751:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4752:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4753:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4754:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4770:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4771:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4772:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4773:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4792:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4793:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4794:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4795:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4796:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4902:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4903:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4904:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4905:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:847:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 21 in 22 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>1143809</commentid>
    <comment_count>6</comment_count>
      <attachid>265995</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-20 14:10:21 -0800</bug_when>
    <thetext>Comment on attachment 265995
the patch

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

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:555
&gt; +                &amp;&amp; m_value-&gt;child(0)-&gt;child(1)-&gt;isInt32(1)

Should be -&gt;asInt() &amp; 1

&gt; Source/JavaScriptCore/dfg/DFGCommon.h:41
&gt; -#define FTL_USES_B3 0
&gt; +#define FTL_USES_B3 1

Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143830</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-20 14:31:57 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192699</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143833</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-20 14:35:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 265995 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265995&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:555
&gt; &gt; +                &amp;&amp; m_value-&gt;child(0)-&gt;child(1)-&gt;isInt32(1)
&gt; 
&gt; Should be -&gt;asInt() &amp; 1

I think that would be wrong.  If you take a boolean value - i.e. 0 or 1 - and xor it with a value that is not 1 but has the 1 bit set, like say 41, then you&apos;re not actually doing a logical not.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCommon.h:41
&gt; &gt; -#define FTL_USES_B3 0
&gt; &gt; +#define FTL_USES_B3 1
&gt; 
&gt; Oops

Fixed!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265976</attachid>
            <date>2015-11-20 11:50:26 -0800</date>
            <delta_ts>2015-11-20 13:28:21 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22898</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwMSw2ICsxMzAxLDM3IEBA
IHB1YmxpYzoKIAogI2VuZGlmIC8vICFDUFUoWDg2XzY0KQogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGVmdFR5cGUsIHR5cGVuYW1lIFJpZ2h0VHlwZT4KKyAgICB2b2lkIG1vdmVEb3VibGVDb25k
aXRpb25hbGx5KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgTGVmdFR5cGUgbGVmdCwgUmlnaHRU
eXBlIHJpZ2h0LCBGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIEp1bXAgZmFsc2VDYXNlID0gYnJhbmNoKGludmVydChjb25kKSwgbGVmdCwgcmlnaHQp
OworICAgICAgICBtb3ZlRG91YmxlKHNyYywgZGVzdCk7CisgICAgICAgIGZhbHNlQ2FzZS5saW5r
KHRoaXMpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlLCB0eXBlbmFt
ZSBNYXNrVHlwZT4KKyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdChSZXN1bHRD
b25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5cGUgbWFzaywgRlBSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbnZlcnRpYmxl
KGNvbmQpKSB7CisgICAgICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaFRlc3QoaW52ZXJ0
KGNvbmQpLCB0ZXN0LCBtYXNrKTsKKyAgICAgICAgICAgIG1vdmVEb3VibGUoc3JjLCBkZXN0KTsK
KyAgICAgICAgICAgIGZhbHNlQ2FzZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
SnVtcCB0cnVlQ2FzZSA9IGJyYW5jaFRlc3QoY29uZCwgdGVzdCwgbWFzayk7CisgICAgICAgIEp1
bXAgZmFsc2VDYXNlID0ganVtcCgpOworICAgICAgICB0cnVlQ2FzZS5saW5rKHRoaXMpOworICAg
ICAgICBtb3ZlRG91YmxlKHNyYywgZGVzdCk7CisgICAgICAgIGZhbHNlQ2FzZS5saW5rKHRoaXMp
OworICAgIH0KKworICAgIHZvaWQgbW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUoRG91Ymxl
Q29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQsIEZQ
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgSnVtcCBm
YWxzZUNhc2UgPSBicmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBtb3Zl
RG91YmxlKHNyYywgZGVzdCk7CisgICAgICAgIGZhbHNlQ2FzZS5saW5rKHRoaXMpOworICAgIH0K
KwogICAgIHZvaWQgbGVhKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJlc3MuYmFz
ZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTI2ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwODEsMTggKzEwODEsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdnFfaTY0cihpbW0ubV92YWx1ZSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBtb3ZlQ29uZGl0aW9uYWxseShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
LSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQsIGxlZnQpOwotICAgICAg
ICBtX2Fzc2VtYmxlci5jbW92cV9ycih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3QoUmVzdWx0Q29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgdGVzdFJlZywgUmVnaXN0ZXJJRCBtYXNrLCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIodGVz
dFJlZywgbWFzayk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZxX3JyKHg4NkNvbmRpdGlvbihj
b25kKSwgc3JjLCBkZXN0KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxs
eURvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0
ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc1NTRTJQcmVzZW50KCkpOwpAQCAtMTE2MSwxOCArMTE0OSw2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9pMzJyKGltbS5hc0ludHB0cigpLCBkZXN0KTsK
ICAgICB9CiAKLSAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyaWdo
dCwgbGVmdCk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3JyKHg4NkNvbmRpdGlvbihjb25k
KSwgc3JjLCBkZXN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5VGVzdChS
ZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCB0ZXN0UmVnLCBSZWdpc3RlcklEIG1hc2ss
IFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21vdmxf
cnIoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOwotICAgIH0KLQogICAgIHZvaWQgbW92
ZUNvbmRpdGlvbmFsbHlEb3VibGUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBs
ZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNTU0UyUHJlc2VudCgpKTsKQEAgLTEyMjYsNiArMTIw
MiwyNCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2b2lkIG1vdmVDb25kaXRpb25h
bGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgY21vdih4ODZDb25k
aXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlQ29uZGl0aW9u
YWxseVRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCB0ZXN0UmVnLCBSZWdp
c3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsKKyAgICAgICAgY21vdih4
ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92
ZUNvbmRpdGlvbmFsbHlUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGVz
dFJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICB0ZXN0MzIoY29uZCwgdGVzdFJlZywgbWFzayk7CisgICAgICAgIGNt
b3YoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOworICAgIH0KKyAgICAKIAogICAgIC8v
IEZvcndhcmRzIC8gZXh0ZXJuYWwgY29udHJvbCBmbG93IG9wZXJhdGlvbnM6CiAgICAgLy8KQEAg
LTE2NzQsNiArMTY2OCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnpi
bF9ycihkZXN0LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGNtb3YoWDg2QXNzZW1ibGVyOjpD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbV9hc3NlbWJsZXIuY21vdnFfcnIoY29uZCwgc3JjLCBk
ZXN0KTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3JyKGNvbmQsIHNyYywgZGVz
dCk7CisjZW5kaWYKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIC8vIE9ubHkgTWFjcm9Bc3Nl
bWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kOyBTU0UyIGlzIGFs
d2F5cyBhdmFpbGFibGUgb24KICAgICAvLyB4ODZfNjQsIGFuZCBjbGllbnRzICYgc3ViY2xhc3Nl
cyBvZiBNYWNyb0Fzc2VtYmxlciBzaG91bGQgYmUgdXNpbmcgJ3N1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpJy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5
KQpAQCAtODI3LDYgKzgyNywzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKKyAgICB2b2lkIG1vdmVD
b25kaXRpb25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgY21v
dih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtb3Zl
Q29uZGl0aW9uYWxseVRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCB0ZXN0
UmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycih0ZXN0UmVnLCBtYXNrKTsKKyAgICAg
ICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgdGVzdFJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICAvLyBpZiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGlu
IHRoZSBsb3cgc2V2ZW4gYml0cywgdGhpcyBjYW4gYmUgdGVzdGVkIHdpdGggYSB0ZXN0YgorICAg
ICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVz
dHFfcnIodGVzdFJlZywgdGVzdFJlZyk7CisgICAgICAgIGVsc2UgaWYgKChtYXNrLm1fdmFsdWUg
JiB+MHg3ZikgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RiX2k4cihtYXNrLm1f
dmFsdWUsIHRlc3RSZWcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50
ZXN0cV9pMzJyKG1hc2subV92YWx1ZSwgdGVzdFJlZyk7CisgICAgICAgIGNtb3YoeDg2Q29uZGl0
aW9uKGNvbmQpLCBzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIGFib3J0V2l0aFJl
YXNvbihBYm9ydFJlYXNvbiByZWFzb24pCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihyZWFzb24pLCBYODZSZWdpc3RlcnM6OnIxMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODUsNiAr
MTE4NSw4MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW52ZXJ0ZWQpOwogICAgIH0KIAorICAg
IHN0cnVjdCBNb3ZlQ29uZGl0aW9uYWxseUNvbmZpZyB7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1v
dmVDb25kaXRpb25hbGx5MzI7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVDb25kaXRpb25hbGx5
NjQ7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVDb25kaXRpb25hbGx5VGVzdDMyOworICAgICAg
ICBBaXI6Ok9wY29kZSBtb3ZlQ29uZGl0aW9uYWxseVRlc3Q2NDsKKyAgICAgICAgQWlyOjpPcGNv
ZGUgbW92ZUNvbmRpdGlvbmFsbHlEb3VibGU7CisgICAgICAgIFRtcCBzb3VyY2U7CisgICAgICAg
IFRtcCBkZXN0aW5hdGlvbjsKKyAgICB9OworICAgIEluc3QgY3JlYXRlU2VsZWN0KFZhbHVlKiB2
YWx1ZSwgY29uc3QgTW92ZUNvbmRpdGlvbmFsbHlDb25maWcmIGNvbmZpZywgYm9vbCBpbnZlcnRl
ZCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUdlbmVyaWNDb21wYXJlKAor
ICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBbdGhpc10gKAorICAgICAgICAgICAgICAg
IEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0IEFyZyYgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICBj
b25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7
CisgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpXaWR0aDg6CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZXNl
IHRoaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MTUwNAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgp
OworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oY29uZmlnLm1vdmVDb25kaXRpb25hbGx5
MzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVDb25kaXRpb25hbGx5MzIsIG1fdmFsdWUs
IHJlbENvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlz
KSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIGNvbmZpZy5zb3VyY2UsIGNvbmZpZy5kZXN0aW5hdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseTY0LCBBcmc6OlJl
bENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseTY0LCBtX3ZhbHVlLCByZWxDb25kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNv
bnN1bWUoKnRoaXMpLCBjb25maWcuc291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXSAoCisgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAorICAgICAg
ICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0
KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoODoKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFN1
cHBvcnQgbW9yZSB0aGluZ3MuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MDQKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGgxNjoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lk
dGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKGNvbmZpZy5tb3ZlQ29u
ZGl0aW9uYWxseVRlc3QzMiwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgp
LCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFs
bHlUZXN0MzIsIG1fdmFsdWUsIHJlc0NvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIGNvbmZpZy5zb3VyY2Us
IGNvbmZpZy5kZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2
NDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKGNvbmZpZy5tb3ZlQ29uZGl0
aW9uYWxseVRlc3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5z
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHlU
ZXN0NjQsIG1fdmFsdWUsIHJlc0NvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIGNvbmZpZy5zb3VyY2UsIGNv
bmZpZy5kZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgW3RoaXNdIChBcmcgZG91YmxlQ29uZCwgY29uc3QgQXJnUHJvbWlzZSYgbGVm
dCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShjb25maWcubW92ZUNvbmRpdGlvbmFsbHlEb3VibGUsIEFyZzo6RG91Ymxl
Q29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseURvdWJsZSwgbV92YWx1ZSwgZG91YmxlQ29uZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUo
KnRoaXMpLCBjb25maWcuc291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIGludmVydGVkKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5r
SW5mbz4KICAgICBBcmcgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KHVuc2lnbmVkJiBhcmd1bWVudENv
dW50LCB1bnNpZ25lZCYgc3RhY2tDb3VudCwgVmFsdWUqIGNoaWxkKQogICAgIHsKQEAgLTE0NTgs
NiArMTUzNCwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
KyAgICAgICAgY2FzZSBTZWxlY3Q6IHsKKyAgICAgICAgICAgIFRtcCByZXN1bHQgPSB0bXAobV92
YWx1ZSk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKG1fdmFsdWUtPmNoaWxkKDIpKSwg
cmVzdWx0KTsKKworICAgICAgICAgICAgTW92ZUNvbmRpdGlvbmFsbHlDb25maWcgY29uZmlnOwor
ICAgICAgICAgICAgY29uZmlnLnNvdXJjZSA9IHRtcChtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAg
ICAgICAgICBjb25maWcuZGVzdGluYXRpb24gPSByZXN1bHQ7CisKKyAgICAgICAgICAgIGlmIChp
c0ludChtX3ZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVDb25k
aXRpb25hbGx5MzIgPSBNb3ZlQ29uZGl0aW9uYWxseTMyOworICAgICAgICAgICAgICAgIGNvbmZp
Zy5tb3ZlQ29uZGl0aW9uYWxseTY0ID0gTW92ZUNvbmRpdGlvbmFsbHk2NDsKKyAgICAgICAgICAg
ICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0MzIgPSBNb3ZlQ29uZGl0aW9uYWxseVRl
c3QzMjsKKyAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQgPSBN
b3ZlQ29uZGl0aW9uYWxseVRlc3Q2NDsKKyAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRp
dGlvbmFsbHlEb3VibGUgPSBNb3ZlQ29uZGl0aW9uYWxseURvdWJsZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGl0J3Mgbm90IG9idmlvdXMgdGhhdCB0
aGVzZSBhcmUgcGFydGljdWxhcmx5IGVmZmljaWVudC4KKyAgICAgICAgICAgICAgICBjb25maWcu
bW92ZUNvbmRpdGlvbmFsbHkzMiA9IE1vdmVEb3VibGVDb25kaXRpb25hbGx5MzI7CisgICAgICAg
ICAgICAgICAgY29uZmlnLm1vdmVDb25kaXRpb25hbGx5NjQgPSBNb3ZlRG91YmxlQ29uZGl0aW9u
YWxseTY0OworICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseVRlc3QzMiA9
IE1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdDMyOworICAgICAgICAgICAgICAgIGNvbmZpZy5t
b3ZlQ29uZGl0aW9uYWxseVRlc3Q2NCA9IE1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdDY0Owor
ICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseURvdWJsZSA9IE1vdmVEb3Vi
bGVDb25kaXRpb25hbGx5RG91YmxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlU2VsZWN0KG1fdmFsdWUtPmNoaWxk
KDApLCBjb25maWcpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAg
IGNhc2UgSVRvRDogewogICAgICAgICAgICAgYXBwZW5kVW5PcDxDb252ZXJ0SW50MzJUb0RvdWJs
ZSwgQ29udmVydEludDY0VG9Eb3VibGUsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92
ZUNvbnN0YW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TW92ZUNvbnN0YW50cy5jcHAJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBydW4oKQogICAgIHsKICAgICAgICAgLy8gRXZlbnR1YWxs
eSB0aGlzIHBoYXNlIHdpbGwgZG8gc21hcnQgdGhpbmdzLiBGb3Igbm93LCBpdCB1c2VzIGEgc3Vw
ZXIgc2ltcGxlIGhldXJpc3RpYzogaXQKLSAgICAgICAgLy8gcGxhY2VzIGxhcmdlIGNvbnN0YW50
cyBpbiB0aGUgYmxvY2sgdGhhdCB1c2VzIHRoZW0sIGFuZCBtYWtlcyBzdXJlIHRoYXQgZWFjaCBi
bG9jayBoYXMKLSAgICAgICAgLy8gb25seSBvbmUgbWF0ZXJpYWxpemF0aW9uIGZvciBlYWNoIGxh
cmdlIGNvbnN0YW50LgorICAgICAgICAvLyBwbGFjZXMgY29uc3RhbnRzIGluIHRoZSBibG9jayB0
aGF0IHVzZXMgdGhlbSwgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIGJsb2NrIGhhcyBvbmx5IG9u
ZQorICAgICAgICAvLyBtYXRlcmlhbGl6YXRpb24gZm9yIGVhY2ggY29uc3RhbnQuIE5vdGUgdGhh
dCB0aGlzIG1vc3RseSBvbmx5IG1hdHRlcnMgZm9yIGxhcmdlIGNvbnN0YW50cywgc2luY2UKKyAg
ICAgICAgLy8gc21hbGwgY29uc3RhbnRzIGdldCBmdXNlZCBpbnRvIHRoZSBpbnN0cnVjdGlvbnMg
dGhhdCB1c2UgdGhlbS4gQnV0IGl0IG1pZ2h0IG1hdHRlciBmb3Igc21hbGwKKyAgICAgICAgLy8g
Y29uc3RhbnRzIGlmIHRoZXkgYXJlIHVzZWQgaW4gaW5zdHJ1Y3Rpb25zIHRoYXQgZG9uJ3QgZG8g
aW1tZWRpYXRlcywgbGlrZSBjb25kaXRpb25hbCBtb3Zlcy4KIAogICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGEgYmV0dGVyIHN0b3J5IGZvciBjb25zdGFudHMuIEF0IGEgbWluaW11bSB0aGlz
IHNob3VsZCBhbGxvdyB0aGUgQjMKICAgICAgICAgLy8gY2xpZW50IHRvIHNwZWNpZnkgaW1wb3J0
YW50IGNvbnN0YW50cyB0aGF0IGFsd2F5cyBnZXQgaG9pc3RlZC4gQWxzbywgdGhlIHRhYmxlIHVz
ZWQgdG8KQEAgLTE0NywxNiArMTQ5LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbmVlZHNNb3Rp
b24oY29uc3QgVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8g
V2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IDMyLWJpdCBpbnQgY29uc3RhbnRzIGFyZSBhbHdheXMg
Y2hlYXAgdG8gbWF0ZXJpYWxpemUuCi0gICAgICAgIC8vIFRoaXMgaXMgd3JvbmcgZm9yIEFSTS4g
V2UgbmVlZCBzb21lIGFic3RyYWN0IHF1ZXJ5IGxpa2UgImlzSW1tZWRpYXRlKGludDY0X3QpIi4g
T24KLSAgICAgICAgLy8gQVJNNjQgdGhpcyB3b3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgd2F5
IHRoYXQgQVJNNjQgY2FuIGVuY29kZSBsYXJnZSBjb25zdGFudHMuCi0gICAgICAgIGlmICh2YWx1
ZS0+aGFzSW50KCkgJiYgdmFsdWUtPnJlcHJlc2VudGFibGVBczxpbnQzMl90PigpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gdmFsdWUtPmlzQ29uc3RhbnQoKTsKICAgICB9CiAKICAgICBzdGF0aWMgVmFsdWVLZXkgZG91
YmxlWmVybygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24g
MTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw2ICsxMTQsMTAgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBB
Ym92ZUVxdWFsLAogICAgIEJlbG93RXF1YWwsCiAKKyAgICAvLyBTU0EgZm9ybSBvZiBjb25kaXRp
b25hbCBtb3ZlLiBUaGUgZmlyc3QgY2hpbGQgaXMgZXZhbHVhdGVkIGZvciB0cnV0aGluZXNzLiBJ
ZiB0cnVlLCB0aGUgc2Vjb25kIGNoaWxkCisgICAgLy8gaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwg
dGhlIHRoaXJkIGNoaWxkIGlzIHJldHVybmVkLgorICAgIFNlbGVjdCwKKwogICAgIC8vIE1lbW9y
eSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBl
LiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCiAgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgogICAg
IExvYWQ4WiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDYgKzUzMCwyNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2Fz
ZSBTZWxlY3Q6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChjb25zdGFudCwgYSwg
YikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQgPyBhIDogYgorICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAg
bV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCktPmFzSW50MzIoKSA/IG1fdmFsdWUtPmNoaWxkKDEpIDogbV92YWx1ZS0+Y2hp
bGQoMikpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2Vs
ZWN0KGNvbnN0YW50LCB4LCB4KQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB4CisgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMikpIHsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEp
KTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBM
b2FkOFo6CiAgICAgICAgIGNhc2UgTG9hZDhTOgogICAgICAgICBjYXNlIExvYWQxNlo6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTI2ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
NCw2ICszNDQsNyBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJl
bG93OgogICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgY2Fz
ZSBTZWxlY3Q6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGl2OgogICAgICAgICByZXN1bHQu
Y29udHJvbERlcGVuZGVudCA9IHRydWU7CkBAIC00MzMsNiArNDM0LDggQEAgVmFsdWVLZXkgVmFs
dWU6OmtleSgpIGNvbnN0CiAgICAgY2FzZSBDaGVja1N1YjoKICAgICBjYXNlIENoZWNrTXVsOgog
ICAgICAgICByZXR1cm4gVmFsdWVLZXkob3Bjb2RlKCksIHR5cGUoKSwgY2hpbGQoMCksIGNoaWxk
KDEpKTsKKyAgICBjYXNlIFNlbGVjdDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KG9wY29kZSgp
LCB0eXBlKCksIGNoaWxkKDApLCBjaGlsZCgxKSwgY2hpbGQoMikpOwogICAgIGNhc2UgQ29uc3Qz
MjoKICAgICAgICAgcmV0dXJuIFZhbHVlS2V5KENvbnN0MzIsIHR5cGUoKSwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oYXNJbnQzMigpKSk7CiAgICAgY2FzZSBDb25zdDY0OgpAQCAtNTI5LDYgKzUzMiw5
IEBAIFR5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUKICAgICAgICAgcmV0
dXJuIFZvaWQ7CiAgICAgY2FzZSBOb3A6CiAgICAgICAgIHJldHVybiBWb2lkOworICAgIGNhc2Ug
U2VsZWN0OgorICAgICAgICBBU1NFUlQoc2Vjb25kQ2hpbGQpOworICAgICAgICByZXR1cm4gc2Vj
b25kQ2hpbGQtPnR5cGUoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
cmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMwLDEyICsyMzAsMjIgQEAgcHJvdGVjdGVkOgogICAgIH0KICAg
ICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIg
dHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hl
Y2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0
Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgZXhwbGljaXQgVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkKQogICAgICAgICA6IG1faW5kZXgoaW5kZXgpCiAgICAgICAgICwg
bV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RD
aGlsZCkpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQotICAgICAgICAsIG1fY2hpbGRyZW57
IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RD
aGlsZCB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29k
ZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGFu
ZCBzZWNvbmQgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUqIHNlY29uZENo
aWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29k
ZSwgZmlyc3RDaGlsZCwgc2Vjb25kQ2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBzZWNvbmRDaGlsZCwgYXJndW1lbnRz
Li4uIH0KICAgICB7CiAgICAgfQogICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2Rl
cyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRo
YXQgZG9uJ3QKQEAgLTI3Nyw3ICsyODcsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBDaGVja1ZhbHVlOyAvLyBDaGVja1ZhbHVlOjpjb252ZXJ0VG9BZGQoKSBtb2Rp
ZmllcyBtX29wY29kZS4KICAgICAKLSAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFs
dWUqIGZpcnN0Q2hpbGQpOworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSog
Zmlyc3RDaGlsZCwgVmFsdWUqIHNlY29uZENoaWxkID0gbnVsbHB0cik7CiAKICAgICAvLyBUaGlz
IGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KICAgICB1bnNp
Z25lZCBtX2luZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNw
cAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVL
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgewogCiB2b2lkIFZhbHVlS2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCBtX29wY29kZSwgIigiLCB1LmluZGlj
ZXNbMF0sICIsICIsIHUuaW5kaWNlc1sxXSwgIikiKTsKKyAgICBvdXQucHJpbnQobV90eXBlLCAi
ICIsIG1fb3Bjb2RlLCAiKCIsIHUuaW5kaWNlc1swXSwgIiwgIiwgdS5pbmRpY2VzWzFdLCAiLCAi
LCB1LmluZGljZXNbMl0sICIpIik7CiB9CiAKIFZhbHVlKiBWYWx1ZUtleTo6bWF0ZXJpYWxpemUo
UHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luKSBjb25zdApAQCAtNzcsNiArNzcsOCBAQCBW
YWx1ZSogVmFsdWVLZXk6Om1hdGVyaWFsaXplKFByb2NlZHVyZSYgCiAgICAgY2FzZSBCZWxvd0Vx
dWFsOgogICAgIGNhc2UgRGl2OgogICAgICAgICByZXR1cm4gcHJvYy5hZGQ8VmFsdWU+KG9wY29k
ZSgpLCB0eXBlKCksIG9yaWdpbiwgY2hpbGQocHJvYywgMCksIGNoaWxkKHByb2MsIDEpKTsKKyAg
ICBjYXNlIFNlbGVjdDoKKyAgICAgICAgcmV0dXJuIHByb2MuYWRkPFZhbHVlPihvcGNvZGUoKSwg
dHlwZSgpLCBvcmlnaW4sIGNoaWxkKHByb2MsIDApLCBjaGlsZChwcm9jLCAxKSwgY2hpbGQocHJv
YywgMikpOwogICAgIGNhc2UgQ29uc3QzMjoKICAgICAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSgpKSk7CiAgICAgY2Fz
ZSBDb25zdDY0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCShyZXZp
c2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIHB1YmxpYzoKIAogICAgIFZhbHVlS2V5KE9w
Y29kZSwgVHlwZSwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CiAKKyAgICBWYWx1ZUtleShP
cGNvZGUsIFR5cGUsIFZhbHVlKiBhLCBWYWx1ZSogYiwgVmFsdWUqIGMpOworCiAgICAgVmFsdWVL
ZXkoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQogICAgICAgICA6IG1f
b3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKQEAgLTk3LDcgKzk5LDcgQEAg
cHVibGljOgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9vcGNvZGUgKyBtX3R5cGUgKyBXVEY6OkludEhhc2g8aW50NjRfdD46Omhhc2godS52YWx1
ZSk7CisgICAgICAgIHJldHVybiBtX29wY29kZSArIG1fdHlwZSArIFdURjo6SW50SGFzaDxpbnQz
Ml90Pjo6aGFzaCh1LmluZGljZXNbMF0pICsgdS5pbmRpY2VzWzFdICsgdS5pbmRpY2VzWzJdOwog
ICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhp
cyAhPSBWYWx1ZUtleSgpOyB9CkBAIC0xMzcsMTggKzEzOSwyMiBAQCBwcml2YXRlOgogICAgIE9w
Y29kZSBtX29wY29kZSB7IE9vcHMgfTsKICAgICBUeXBlIG1fdHlwZSB7IFZvaWQgfTsKICAgICB1
bmlvbiBVIHsKLSAgICAgICAgdW5zaWduZWQgaW5kaWNlc1syXTsKKyAgICAgICAgdW5zaWduZWQg
aW5kaWNlc1szXTsKICAgICAgICAgaW50NjRfdCB2YWx1ZTsKICAgICAgICAgZG91YmxlIGRvdWJs
ZVZhbHVlOwogCiAgICAgICAgIFUoKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7
CisgICAgICAgICAgICBpbmRpY2VzWzBdID0gMDsKKyAgICAgICAgICAgIGluZGljZXNbMV0gPSAw
OworICAgICAgICAgICAgaW5kaWNlc1syXSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVSYgb3RoZXIpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBpbmRpY2Vz
WzBdID09IG90aGVyLmluZGljZXNbMF0KKyAgICAgICAgICAgICAgICAmJiBpbmRpY2VzWzFdID09
IG90aGVyLmluZGljZXNbMV0KKyAgICAgICAgICAgICAgICAmJiBpbmRpY2VzWzJdID09IG90aGVy
LmluZGljZXNbMl07CiAgICAgICAgIH0KICAgICB9IHU7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXlJbmxpbmVzLmgJKHJldmlzaW9uIDE5MjY4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSwxNSBAQCBpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KE9wY29kZSBv
cGNvZGUsCiAgICAgdS5pbmRpY2VzWzFdID0gcmlnaHQtPmluZGV4KCk7CiB9CiAKK2lubGluZSBW
YWx1ZUtleTo6VmFsdWVLZXkoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBWYWx1ZSogYSwgVmFs
dWUqIGIsIFZhbHVlKiBjKQorICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICwgbV90eXBlKHR5
cGUpCit7CisgICAgdS5pbmRpY2VzWzBdID0gYTsKKyAgICB1LmluZGljZXNbMV0gPSBiOworICAg
IHUuaW5kaWNlc1syXSA9IGM7Cit9CisKIGlubGluZSBWYWx1ZSogVmFsdWVLZXk6OmNoaWxkKFBy
b2NlZHVyZSYgcHJvYywgdW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2Mu
dmFsdWVzKClbaW5kZXhdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0zNTYsNiAr
MzU2LDQwIEBAIEJyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCiBCcmFuY2hOZWc2NCBVOkcs
IFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcAogCitNb3ZlQ29uZGl0aW9uYWxseTMyIFU6
RywgVTpHLCBVOkcsIFU6RywgVUQ6RworICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAor
CitNb3ZlQ29uZGl0aW9uYWxseTY0IFU6RywgVTpHLCBVOkcsIFU6RywgVUQ6RworICAgIFJlbENv
bmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorCitNb3ZlQ29uZGl0aW9uYWxseVRlc3QzMiBVOkcsIFU6
RywgVTpHLCBVOkcsIFVEOkcKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKyAgICBS
ZXNDb25kLCBUbXAsIEltbSwgVG1wLCBUbXAKKworTW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQgVTpH
LCBVOkcsIFU6RywgVTpHLCBVRDpHCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wCisg
ICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisKK01vdmVDb25kaXRpb25hbGx5RG91Ymxl
IFU6RywgVTpGLCBVOkYsIFU6RywgVUQ6RworICAgIERvdWJsZUNvbmQsIFRtcCwgVG1wLCBUbXAs
IFRtcAorCitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseTMyIFU6RywgVTpHLCBVOkcsIFU6RiwgVUQ6
RgorICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorCitNb3ZlRG91YmxlQ29uZGl0aW9u
YWxseTY0IFU6RywgVTpHLCBVOkcsIFU6RiwgVUQ6RgorICAgIFJlbENvbmQsIFRtcCwgVG1wLCBU
bXAsIFRtcAorCitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRlc3QzMiBVOkcsIFU6RywgVTpHLCBV
OkYsIFVEOkYKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBU
bXAsIEltbSwgVG1wLCBUbXAKKworTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQgVTpHLCBV
OkcsIFU6RywgVTpGLCBVRDpGCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wCisgICAg
UmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisKK01vdmVEb3VibGVDb25kaXRpb25hbGx5RG91
YmxlIFU6RywgVTpGLCBVOkYsIFU6RiwgVUQ6RgorICAgIERvdWJsZUNvbmQsIFRtcCwgVG1wLCBU
bXAsIFRtcAorCiBKdW1wIC9icmFuY2gKIAogUmV0IC90ZXJtaW5hbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265988</attachid>
            <date>2015-11-20 13:28:21 -0800</date>
            <delta_ts>2015-11-20 13:58:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40581</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE1LTExLTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgYSBTZWxlY3Qgb3Bjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsZWFucyB1cCBvdXIgY29uZGl0aW9uYWwgbW92
ZSBpbXBsZW1lbnRhdGlvbiAtIHNwZWNpZmljYWxseSBzbyB0aGF0IGl0IGRpc3Rpbmd1aXNoZXMg
YmV0d2VlbgorICAgICAgICBjb21wYXJpbmcgdGhlIGxvdyAzMiBiaXRzIG9mIGEgR1BSIGFuZCBh
bGwgYml0cyBvZiBhIEdQUiAtIGFuZCBmaXhlcyBidWdzIHdpdGggb3BlcmFuZCBvcmRlcmluZy4g
SXQKKyAgICAgICAgdGhlbiBhZGRzIGEgU2VsZWN0IG9wY29kZSB0byBCMyBhbmQgYWRkcyBhbGwg
b2YgdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiBhbmQgbG93ZXJpbmcgbWFnaWMgdGhhdCBpdAorICAg
ICAgICBuZWVkcy4gRmluYWxseSB0aGlzIGNoYW5nZSBpbXBsZW1lbnRzIEZUTDo6T3V0cHV0Ojpz
ZWxlY3QoKSBpbiB0ZXJtcyBvZiBCMzo6U2VsZWN0LgorCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjptb3ZlRG91Ymxl
Q29uZGl0aW9uYWxseTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3Vi
bGVDb25kaXRpb25hbGx5NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bW92ZURv
dWJsZUNvbmRpdGlvbmFsbHlUZXN0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6
bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlcjo6bGVhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1vdmUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZUNvbmRpdGlvbmFsbHlE
b3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVu
ZDMyVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZUNv
bmRpdGlvbmFsbHkzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpt
b3ZlQ29uZGl0aW9uYWxseVRlc3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpzZXQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpj
bW92KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1vdmVDb25kaXRp
b25hbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246
Om1vdmVDb25kaXRpb25hbGx5VGVzdCk6IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2hOZWc2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3Zl
Q29uZGl0aW9uYWxseTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1v
dmVDb25kaXRpb25hbGx5VGVzdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OmFib3J0V2l0aFJlYXNvbik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNtb3ZsX3JyKToKKyAgICAgICAgKEpTQzo6
WDg2QXNzZW1ibGVyOjpjbW92bF9tcik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y21v
dmVsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92bmVsX3JyKToKKyAgICAg
ICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92cGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3Nl
bWJsZXI6OmNtb3ZucGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNtb3ZxX3Jy
KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92cV9tcik6CisgICAgICAgIChKU0M6
Olg4NkFzc2VtYmxlcjo6Y21vdmVxX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpj
bW92bmVxX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92cHFfcnIpOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNtb3ZucHFfcnIpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUNv
bXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpjcmVhdGVTZWxlY3Qp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptYXJzaGFsbENDYWxsQXJndW1l
bnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAg
ICogYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcDoKKyAgICAgICAgKiBiMy9CM09wY29kZS5jcHA6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzT3Bjb2RlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvQjNWYWxpZGF0
ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6a2V5KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6dHlw
ZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXku
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmR1bXApOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVLZXk6Om1hdGVyaWFsaXplKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5Lmg6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmNoaWxk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RUcnVuY1NFeHQzMik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QmFzaWNTZWxlY3QpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdFRl
c3QpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdENvbXBhcmVEb3VibGUpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFNlbGVjdERvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2Vs
ZWN0RG91YmxlVGVzdCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2VsZWN0RG91YmxlQ29tcGFy
ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp6ZXJvKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgICogZnRsL0ZUTEIzT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojp0ZXN0SXNaZXJvUHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnRlc3ROb25a
ZXJvUHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNlbGVjdCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjpleHRyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6ZmVuY2UpOgorCiAyMDE1LTExLTIwICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFN1cGVyIHVzZSBzaG91bGQgYmUgcmVjb3JkZWQgaW4gcGVyLWZ1
bmN0aW9uIHNjb3BlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMDEs
NiArMTMwMSw2MSBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyAhQ1BVKFg4Nl82NCkKIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExlZnRUeXBlLCB0eXBlbmFtZSBSaWdodFR5cGU+CisgICAgdm9pZCBt
b3ZlRG91YmxlQ29uZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgTGVmdFR5
cGUgbGVmdCwgUmlnaHRUeXBlIHJpZ2h0LCBGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEp1bXAgZmFsc2VDYXNlID0gYnJhbmNoMzIoaW52ZXJ0KGNv
bmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIG1vdmVEb3VibGUoc3JjLCBkZXN0KTsKKyAgICAg
ICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGVmdFR5cGUsIHR5cGVuYW1lIFJpZ2h0VHlwZT4KKyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRp
b25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBMZWZ0VHlwZSBsZWZ0LCBSaWdodFR5
cGUgcmlnaHQsIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgSnVtcCBmYWxzZUNhc2UgPSBicmFuY2g2NChpbnZlcnQoY29uZCksIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworICAgICAgICBmYWxzZUNhc2UubGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZSwgdHlwZW5h
bWUgTWFza1R5cGU+CisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRlc3QzMihSZXN1
bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5cGUgbWFzaywgRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbnZlcnRp
YmxlKGNvbmQpKSB7CisgICAgICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaFRlc3QzMihp
bnZlcnQoY29uZCksIHRlc3QsIG1hc2spOworICAgICAgICAgICAgbW92ZURvdWJsZShzcmMsIGRl
c3QpOworICAgICAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDMyKGNvbmQsIHRlc3QsIG1hc2spOworICAg
ICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsKKyAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworICAgICAgICBmYWxzZUNhc2UubGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZSwgdHlwZW5h
bWUgTWFza1R5cGU+CisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRlc3Q2NChSZXN1
bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5cGUgbWFzaywgRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbnZlcnRp
YmxlKGNvbmQpKSB7CisgICAgICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaFRlc3Q2NChp
bnZlcnQoY29uZCksIHRlc3QsIG1hc2spOworICAgICAgICAgICAgbW92ZURvdWJsZShzcmMsIGRl
c3QpOworICAgICAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDY0KGNvbmQsIHRlc3QsIG1hc2spOworICAg
ICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsKKyAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworICAgICAgICBmYWxzZUNhc2UubGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRpb25hbGx5RG91Ymxl
KERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJp
Z2h0LCBGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEp1bXAgZmFsc2VDYXNlID0gYnJhbmNoRG91YmxlKGludmVydChjb25kKSwgbGVmdCwgcmlnaHQp
OworICAgICAgICBtb3ZlRG91YmxlKHNyYywgZGVzdCk7CisgICAgICAgIGZhbHNlQ2FzZS5saW5r
KHRoaXMpOworICAgIH0KKwogICAgIHZvaWQgbGVhKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNl
dCksIGFkZHJlc3MuYmFzZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lv
biAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwODEsMTggKzEwODEsNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTY0cihpbW0ubV92YWx1ZSwgZGVzdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseShSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQs
IGxlZnQpOwotICAgICAgICBtX2Fzc2VtYmxlci5jbW92cV9ycih4ODZDb25kaXRpb24oY29uZCks
IHNyYywgZGVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3QoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGVzdFJlZywgUmVnaXN0ZXJJRCBtYXNrLCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdHFfcnIodGVzdFJlZywgbWFzayk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZxX3Jy
KHg4NkNvbmRpdGlvbihjb25kKSwgc3JjLCBkZXN0KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBt
b3ZlQ29uZGl0aW9uYWxseURvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklE
IGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1NTRTJQcmVzZW50KCkpOwpAQCAtMTE2MSwxOCAr
MTE0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9pMzJyKGltbS5hc0lu
dHB0cigpLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5KFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9ycihyaWdodCwgbGVmdCk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3JyKHg4
NkNvbmRpdGlvbihjb25kKSwgc3JjLCBkZXN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIG1vdmVDb25k
aXRpb25hbGx5VGVzdChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCB0ZXN0UmVnLCBS
ZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCi0gICAgewot
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsKLSAgICAgICAgbV9h
c3NlbWJsZXIuY21vdmxfcnIoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOwotICAgIH0K
LQogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlEb3VibGUoRG91YmxlQ29uZGl0aW9uIGNvbmQs
IEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNTU0UyUHJlc2VudCgpKTsK
QEAgLTEyMjYsNiArMTIwMiwyNCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2b2lk
IG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0KTsKKyAgICAg
ICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCB0ZXN0UmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsK
KyAgICAgICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgdGVzdFJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB0ZXN0MzIoY29uZCwgdGVzdFJlZywgbWFz
ayk7CisgICAgICAgIGNtb3YoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKIAogICAgIC8vIEZvcndhcmRzIC8gZXh0ZXJuYWwgY29udHJvbCBmbG93IG9wZXJhdGlv
bnM6CiAgICAgLy8KQEAgLTE2NzQsNiArMTY2OCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGNtb3Yo
WDg2QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbV9hc3NlbWJsZXIuY21vdnFf
cnIoY29uZCwgc3JjLCBkZXN0KTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3Jy
KGNvbmQsIHNyYywgZGVzdCk7CisjZW5kaWYKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIC8v
IE9ubHkgTWFjcm9Bc3NlbWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0
aG9kOyBTU0UyIGlzIGFsd2F5cyBhdmFpbGFibGUgb24KICAgICAvLyB4ODZfNjQsIGFuZCBjbGll
bnRzICYgc3ViY2xhc3NlcyBvZiBNYWNyb0Fzc2VtYmxlciBzaG91bGQgYmUgdXNpbmcgJ3N1cHBv
cnRzRmxvYXRpbmdQb2ludCgpJy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5MjY4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkod29ya2luZyBjb3B5KQpAQCAtODI3LDYgKzgyNywzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAK
KyAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCB0ZXN0UmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycih0ZXN0UmVn
LCBtYXNrKTsKKyAgICAgICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQoUmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGVzdFJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICAvLyBpZiB3ZSBhcmUgb25s
eSBpbnRlcmVzdGVkIGluIHRoZSBsb3cgc2V2ZW4gYml0cywgdGhpcyBjYW4gYmUgdGVzdGVkIHdp
dGggYSB0ZXN0YgorICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIudGVzdHFfcnIodGVzdFJlZywgdGVzdFJlZyk7CisgICAgICAgIGVsc2UgaWYg
KChtYXNrLm1fdmFsdWUgJiB+MHg3ZikgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRl
c3RiX2k4cihtYXNrLm1fdmFsdWUsIHRlc3RSZWcpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci50ZXN0cV9pMzJyKG1hc2subV92YWx1ZSwgdGVzdFJlZyk7CisgICAgICAg
IGNtb3YoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2
b2lkIGFib3J0V2l0aFJlYXNvbihBYm9ydFJlYXNvbiByZWFzb24pCiAgICAgewogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihyZWFzb24pLCBYODZSZWdpc3RlcnM6OnIxMSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9u
IDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MzgsNyArMTYzOCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY21vdmxfcnIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChjbW92Y2MoY29uZCksIHNy
YywgZHN0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0
LCBzcmMpOwogICAgIH0KIAogICAgIHZvaWQgY21vdmxfbXIoQ29uZGl0aW9uIGNvbmQsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xNjUzLDI4ICsxNjUz
LDI4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY21vdmVsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChjbW92Y2Mo
Q29uZGl0aW9uRSksIHNyYywgZHN0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNt
b3ZjYyhDb25kaXRpb25FKSwgZHN0LCBzcmMpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNtb3Zu
ZWxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9m
b3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhDb25kaXRpb25ORSksIHNyYywgZHN0KTsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhDb25kaXRpb25ORSksIGRzdCwgc3JjKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjbW92cGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhDb25k
aXRpb25QKSwgc3JjLCBkc3QpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoY21vdmNj
KENvbmRpdGlvblApLCBkc3QsIHNyYyk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY21vdm5wbF9y
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBtX2Zvcm1h
dHRlci50d29CeXRlT3AoY21vdmNjKENvbmRpdGlvbk5QKSwgc3JjLCBkc3QpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoY21vdmNjKENvbmRpdGlvbk5QKSwgZHN0LCBzcmMpOwogICAg
IH0KIAogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBjbW92cV9ycihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0
ZXIudHdvQnl0ZU9wNjQoY21vdmNjKGNvbmQpLCBzcmMsIGRzdCk7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcDY0KGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwogICAgIH0KIAogICAgIHZv
aWQgY21vdnFfbXIoQ29uZGl0aW9uIGNvbmQsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBkc3QpCkBAIC0xNjg5LDIyICsxNjg5LDIyIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY21vdmVxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KGNtb3ZjYyhDb25kaXRpb25FKSwgc3JjLCBkc3Qp
OworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChjbW92Y2MoQ29uZGl0aW9uRSksIGRz
dCwgc3JjKTsKICAgICB9CiAKICAgICB2b2lkIGNtb3ZuZXFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoY21v
dmNjKENvbmRpdGlvbk5FKSwgc3JjLCBkc3QpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3A2NChjbW92Y2MoQ29uZGl0aW9uTkUpLCBkc3QsIHNyYyk7CiAgICAgfQogCiAgICAgdm9pZCBj
bW92cHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAg
bV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoY21vdmNjKENvbmRpdGlvblApLCBzcmMsIGRzdCk7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KGNtb3ZjYyhDb25kaXRpb25QKSwgZHN0LCBz
cmMpOwogICAgIH0KIAogICAgIHZvaWQgY21vdm5wcV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChjbW92Y2Mo
Q29uZGl0aW9uTlApLCBzcmMsIGRzdCk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0
KGNtb3ZjYyhDb25kaXRpb25OUCksIGRzdCwgc3JjKTsKICAgICB9CiAjZWxzZQogICAgIHZvaWQg
Y21vdmxfbXIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IHZvaWQqIGFkZHIsIFJlZ2lzdGVySUQgZHN0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlz
aW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTg1LDYgKzExODUsODIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGludmVydGVkKTsKICAgICB9CiAKKyAgICBzdHJ1Y3QgTW92ZUNvbmRpdGlvbmFsbHlDb25m
aWcgeworICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlQ29uZGl0aW9uYWxseTMyOworICAgICAgICBB
aXI6Ok9wY29kZSBtb3ZlQ29uZGl0aW9uYWxseTY0OworICAgICAgICBBaXI6Ok9wY29kZSBtb3Zl
Q29uZGl0aW9uYWxseVRlc3QzMjsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92ZUNvbmRpdGlvbmFs
bHlUZXN0NjQ7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVDb25kaXRpb25hbGx5RG91YmxlOwor
ICAgICAgICBUbXAgc291cmNlOworICAgICAgICBUbXAgZGVzdGluYXRpb247CisgICAgfTsKKyAg
ICBJbnN0IGNyZWF0ZVNlbGVjdChWYWx1ZSogdmFsdWUsIGNvbnN0IE1vdmVDb25kaXRpb25hbGx5
Q29uZmlnJiBjb25maWcsIGJvb2wgaW52ZXJ0ZWQgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAg
ICAgWyZdICgKKyAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJl
bENvbmQsCisgICAgICAgICAgICAgICAgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJn
UHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCB0aGVzZSB0aGluZ3MuCisgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MDQKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lk
dGgxNjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseTMyLCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCBy
aWdodC5raW5kKCksIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tb3Zl
Q29uZGl0aW9uYWxseTMyLCBtX3ZhbHVlLCByZWxDb25kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCBjb25maWcu
c291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShjb25maWcubW92
ZUNvbmRpdGlvbmFsbHk2NCwgQXJnOjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgp
LCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFs
bHk2NCwgbV92YWx1ZSwgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgY29uZmlnLnNvdXJjZSwgY29u
ZmlnLmRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBbJl0gKAorICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0
IEFyZyYgcmVzQ29uZCwKKyAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBj
b25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgc3dpdGNo
ICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUgdGhpbmdzLgorICAgICAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTA0Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShjb25maWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0MzIsIEFyZzo6UmVzQ29uZCwgbGVm
dC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnLm1vdmVDb25kaXRpb25hbGx5VGVzdDMyLCBtX3ZhbHVlLCByZXNDb25kLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUo
KnRoaXMpLCBjb25maWcuc291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlk
Rm9ybShjb25maWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5r
aW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlnLm1vdmVDb25kaXRpb25hbGx5VGVzdDY0LCBtX3ZhbHVlLCByZXNDb25kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRo
aXMpLCBjb25maWcuc291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoQXJnIGRvdWJsZUNvbmQsIGNv
bnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oY29uZmlnLm1vdmVDb25kaXRpb25hbGx5
RG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6
VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHlEb3VibGUsIG1fdmFs
dWUsIGRvdWJsZUNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRo
aXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgY29uZmlnLnNvdXJjZSwgY29uZmlnLmRlc3RpbmF0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpbnZlcnRlZCk7CisgICAgfQorCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudCh1
bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrQ291bnQsIFZhbHVlKiBjaGls
ZCkKICAgICB7CkBAIC0xNDU4LDYgKzE1MzQsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgU2VsZWN0OiB7CisgICAgICAgICAgICBU
bXAgcmVzdWx0ID0gdG1wKG1fdmFsdWUpOworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3Zl
Rm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobV92YWx1ZS0+Y2hpbGQoMikpLCByZXN1bHQp
OworCisgICAgICAgICAgICBNb3ZlQ29uZGl0aW9uYWxseUNvbmZpZyBjb25maWc7CisgICAgICAg
ICAgICBjb25maWcuc291cmNlID0gdG1wKG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAg
IGNvbmZpZy5kZXN0aW5hdGlvbiA9IHJlc3VsdDsKKworICAgICAgICAgICAgaWYgKGlzSW50KG1f
dmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFs
bHkzMiA9IE1vdmVDb25kaXRpb25hbGx5MzI7CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVD
b25kaXRpb25hbGx5NjQgPSBNb3ZlQ29uZGl0aW9uYWxseTY0OworICAgICAgICAgICAgICAgIGNv
bmZpZy5tb3ZlQ29uZGl0aW9uYWxseVRlc3QzMiA9IE1vdmVDb25kaXRpb25hbGx5VGVzdDMyOwor
ICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseVRlc3Q2NCA9IE1vdmVDb25k
aXRpb25hbGx5VGVzdDY0OworICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxs
eURvdWJsZSA9IE1vdmVDb25kaXRpb25hbGx5RG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaXQncyBub3Qgb2J2aW91cyB0aGF0IHRoZXNlIGFy
ZSBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LgorICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29u
ZGl0aW9uYWxseTMyID0gTW92ZURvdWJsZUNvbmRpdGlvbmFsbHkzMjsKKyAgICAgICAgICAgICAg
ICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHk2NCA9IE1vdmVEb3VibGVDb25kaXRpb25hbGx5NjQ7
CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVDb25kaXRpb25hbGx5VGVzdDMyID0gTW92ZURv
dWJsZUNvbmRpdGlvbmFsbHlUZXN0MzI7CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVDb25k
aXRpb25hbGx5VGVzdDY0ID0gTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQ7CisgICAgICAg
ICAgICAgICAgY29uZmlnLm1vdmVDb25kaXRpb25hbGx5RG91YmxlID0gTW92ZURvdWJsZUNvbmRp
dGlvbmFsbHlEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVTZWxlY3QobV92YWx1ZS0+Y2hpbGQoMCksIGNv
bmZpZykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBJ
VG9EOiB7CiAgICAgICAgICAgICBhcHBlbmRVbk9wPENvbnZlcnRJbnQzMlRvRG91YmxlLCBDb252
ZXJ0SW50NjRUb0RvdWJsZSwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29u
c3RhbnRzLmNwcAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTW92ZUNvbnN0YW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIHJ1bigpCiAgICAgewogICAgICAgICAvLyBFdmVudHVhbGx5IHRoaXMg
cGhhc2Ugd2lsbCBkbyBzbWFydCB0aGluZ3MuIEZvciBub3csIGl0IHVzZXMgYSBzdXBlciBzaW1w
bGUgaGV1cmlzdGljOiBpdAotICAgICAgICAvLyBwbGFjZXMgbGFyZ2UgY29uc3RhbnRzIGluIHRo
ZSBibG9jayB0aGF0IHVzZXMgdGhlbSwgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIGJsb2NrIGhh
cwotICAgICAgICAvLyBvbmx5IG9uZSBtYXRlcmlhbGl6YXRpb24gZm9yIGVhY2ggbGFyZ2UgY29u
c3RhbnQuCisgICAgICAgIC8vIHBsYWNlcyBjb25zdGFudHMgaW4gdGhlIGJsb2NrIHRoYXQgdXNl
cyB0aGVtLCBhbmQgbWFrZXMgc3VyZSB0aGF0IGVhY2ggYmxvY2sgaGFzIG9ubHkgb25lCisgICAg
ICAgIC8vIG1hdGVyaWFsaXphdGlvbiBmb3IgZWFjaCBjb25zdGFudC4gTm90ZSB0aGF0IHRoaXMg
bW9zdGx5IG9ubHkgbWF0dGVycyBmb3IgbGFyZ2UgY29uc3RhbnRzLCBzaW5jZQorICAgICAgICAv
LyBzbWFsbCBjb25zdGFudHMgZ2V0IGZ1c2VkIGludG8gdGhlIGluc3RydWN0aW9ucyB0aGF0IHVz
ZSB0aGVtLiBCdXQgaXQgbWlnaHQgbWF0dGVyIGZvciBzbWFsbAorICAgICAgICAvLyBjb25zdGFu
dHMgaWYgdGhleSBhcmUgdXNlZCBpbiBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCBkbyBpbW1lZGlh
dGVzLCBsaWtlIGNvbmRpdGlvbmFsIG1vdmVzLgogCiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgYSBiZXR0ZXIgc3RvcnkgZm9yIGNvbnN0YW50cy4gQXQgYSBtaW5pbXVtIHRoaXMgc2hvdWxk
IGFsbG93IHRoZSBCMwogICAgICAgICAvLyBjbGllbnQgdG8gc3BlY2lmeSBpbXBvcnRhbnQgY29u
c3RhbnRzIHRoYXQgYWx3YXlzIGdldCBob2lzdGVkLiBBbHNvLCB0aGUgdGFibGUgdXNlZCB0bwpA
QCAtMTQ3LDE2ICsxNDksNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBuZWVkc01vdGlvbihjb25z
dCBWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc0NvbnN0YW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBjdXJy
ZW50bHkgYXNzdW1lIHRoYXQgMzItYml0IGludCBjb25zdGFudHMgYXJlIGFsd2F5cyBjaGVhcCB0
byBtYXRlcmlhbGl6ZS4KLSAgICAgICAgLy8gVGhpcyBpcyB3cm9uZyBmb3IgQVJNLiBXZSBuZWVk
IHNvbWUgYWJzdHJhY3QgcXVlcnkgbGlrZSAiaXNJbW1lZGlhdGUoaW50NjRfdCkiLiBPbgotICAg
ICAgICAvLyBBUk02NCB0aGlzIHdvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSB3YXkgdGhhdCBB
Uk02NCBjYW4gZW5jb2RlIGxhcmdlIGNvbnN0YW50cy4KLSAgICAgICAgaWYgKHZhbHVlLT5oYXNJ
bnQoKSAmJiB2YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB2YWx1
ZS0+aXNDb25zdGFudCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZUtleSBkb3VibGVaZXJv
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMTky
Njg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk0LDYgKzE5NCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBPcGMKICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAgICAgIG91dC5wcmludCgiQmVsb3dF
cXVhbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAgIG91dC5w
cmludCgiU2VsZWN0Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIExvYWQ4WjoKICAgICAg
ICAgb3V0LnByaW50KCJMb2FkOFoiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDEwIEBA
IGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgQWJvdmVFcXVhbCwKICAgICBCZWxvd0VxdWFs
LAogCisgICAgLy8gU1NBIGZvcm0gb2YgY29uZGl0aW9uYWwgbW92ZS4gVGhlIGZpcnN0IGNoaWxk
IGlzIGV2YWx1YXRlZCBmb3IgdHJ1dGhpbmVzcy4gSWYgdHJ1ZSwgdGhlIHNlY29uZCBjaGlsZAor
ICAgIC8vIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSB0aGlyZCBjaGlsZCBpcyByZXR1cm5l
ZC4KKyAgICBTZWxlY3QsCisKICAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMg
aG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgog
ICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKICAgICBMb2FkOFosCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTI2ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzMCw2ICs1MzAsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgU2VsZWN0OgorICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBTZWxlY3QoY29uc3RhbnQsIGEsIGIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50ID8gYSA6IGIKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRp
dHkoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkgPyBt
X3ZhbHVlLT5jaGlsZCgxKSA6IG1fdmFsdWUtPmNoaWxkKDIpKTsKKyAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChFcXVhbCh4LCAwKSwgYSwgYikKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU2VsZWN0KHgsIGIsIGEpCisgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpKTsKKyAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEs
IGIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29sLCBiLCBhKQorICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50MzIoMSkKKyAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkp
IHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSks
IG1fdmFsdWUtPmNoaWxkKDIpKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFNlbGVjdChzdHVmZiwgeCwgeCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczog
eAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDIp
KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVl
LT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgIGNhc2UgTG9hZDhaOgogICAgICAgICBjYXNlIExvYWQ4UzoKICAgICAgICAgY2FzZSBMb2Fk
MTZaOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNp
b24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
U2VsZWN0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2
YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDhaOgogICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CiAgICAgICAgICAgICBjYXNlIExvYWQxNlo6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBFZmZlY3Rz
IFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93OgogICAgIGNhc2UgQWJvdmVF
cXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgY2FzZSBTZWxlY3Q6CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRGl2OgogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRy
dWU7CkBAIC00MzMsNiArNDM0LDggQEAgVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0CiAgICAg
Y2FzZSBDaGVja1N1YjoKICAgICBjYXNlIENoZWNrTXVsOgogICAgICAgICByZXR1cm4gVmFsdWVL
ZXkob3Bjb2RlKCksIHR5cGUoKSwgY2hpbGQoMCksIGNoaWxkKDEpKTsKKyAgICBjYXNlIFNlbGVj
dDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KG9wY29kZSgpLCB0eXBlKCksIGNoaWxkKDApLCBj
aGlsZCgxKSwgY2hpbGQoMikpOwogICAgIGNhc2UgQ29uc3QzMjoKICAgICAgICAgcmV0dXJuIFZh
bHVlS2V5KENvbnN0MzIsIHR5cGUoKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oYXNJbnQzMigpKSk7
CiAgICAgY2FzZSBDb25zdDY0OgpAQCAtNDc3LDcgKzQ4MCw3IEBAIHZvaWQgVmFsdWU6OmNoZWNr
T3Bjb2RlKE9wY29kZSBvcGNvZGUpCiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCi1U
eXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQorVHlw
ZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUq
IHNlY29uZENoaWxkKQogewogICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgY2FzZSBJZGVudGl0
eToKQEAgLTUyOSw2ICs1MzIsOSBAQCBUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUs
IFZhbHVlCiAgICAgICAgIHJldHVybiBWb2lkOwogICAgIGNhc2UgTm9wOgogICAgICAgICByZXR1
cm4gVm9pZDsKKyAgICBjYXNlIFNlbGVjdDoKKyAgICAgICAgQVNTRVJUKHNlY29uZENoaWxkKTsK
KyAgICAgICAgcmV0dXJuIHNlY29uZENoaWxkLT50eXBlKCk7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMiArMjMwLDIyIEBAIHBy
b3RlY3RlZDoKICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRo
YXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCkKICAgICAgICAgOiBtX2luZGV4
KGluZGV4KQogICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlw
ZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKLSAg
ICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAs
IG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQgfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3Jt
IGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUg
b3Bjb2RlIGFuZCBmaXJzdCBhbmQgc2Vjb25kIGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQsIFZhbHVlKiBzZWNvbmRDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBt
X3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQsIHNlY29uZENoaWxkKSkKKyAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgc2Vj
b25kQ2hpbGQsIGFyZ3VtZW50cy4uLiB9CiAgICAgewogICAgIH0KICAgICAvLyBUaGlzIGZvcm0g
aXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBv
cGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CkBAIC0yNzcsNyArMjg3LDcgQEAgcHJvdGVjdGVk
OgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hlY2tWYWx1ZTsgLy8gQ2hlY2tWYWx1ZTo6
Y29udmVydFRvQWRkKCkgbW9kaWZpZXMgbV9vcGNvZGUuCiAgICAgCi0gICAgc3RhdGljIFR5cGUg
dHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKyAgICBzdGF0aWMgVHlwZSB0eXBl
Rm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGlsZCA9IG51bGxw
dHIpOwogCiAgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGlu
IDY0IGJpdHMuCiAgICAgdW5zaWduZWQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUtleS5jcHAJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogdm9pZCBWYWx1ZUtleTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgbV9v
cGNvZGUsICIoIiwgdS5pbmRpY2VzWzBdLCAiLCAiLCB1LmluZGljZXNbMV0sICIpIik7CisgICAg
b3V0LnByaW50KG1fdHlwZSwgIiAiLCBtX29wY29kZSwgIigiLCB1LmluZGljZXNbMF0sICIsICIs
IHUuaW5kaWNlc1sxXSwgIiwgIiwgdS5pbmRpY2VzWzJdLCAiKSIpOwogfQogCiBWYWx1ZSogVmFs
dWVLZXk6Om1hdGVyaWFsaXplKFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbikgY29uc3QK
QEAgLTc3LDYgKzc3LDggQEAgVmFsdWUqIFZhbHVlS2V5OjptYXRlcmlhbGl6ZShQcm9jZWR1cmUm
IAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIERpdjoKICAgICAgICAgcmV0dXJuIHBy
b2MuYWRkPFZhbHVlPihvcGNvZGUoKSwgdHlwZSgpLCBvcmlnaW4sIGNoaWxkKHByb2MsIDApLCBj
aGlsZChwcm9jLCAxKSk7CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAgIHJldHVybiBwcm9jLmFk
ZDxWYWx1ZT4ob3Bjb2RlKCksIHR5cGUoKSwgb3JpZ2luLCBjaGlsZChwcm9jLCAwKSwgY2hpbGQo
cHJvYywgMSksIGNoaWxkKHByb2MsIDIpKTsKICAgICBjYXNlIENvbnN0MzI6CiAgICAgICAgIHJl
dHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dmFsdWUoKSkpOwogICAgIGNhc2UgQ29uc3Q2NDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVLZXkuaAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJsaWM6
CiAKICAgICBWYWx1ZUtleShPcGNvZGUsIFR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
OwogCisgICAgVmFsdWVLZXkoT3Bjb2RlLCBUeXBlLCBWYWx1ZSogYSwgVmFsdWUqIGIsIFZhbHVl
KiBjKTsKKwogICAgIFZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgaW50NjRfdCB2
YWx1ZSkKICAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUp
CkBAIC05Nyw3ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3Bjb2RlICsgbV90eXBlICsgV1RGOjpJbnRIYXNoPGlu
dDY0X3Q+OjpoYXNoKHUudmFsdWUpOworICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBtX3R5cGUg
KyBXVEY6OkludEhhc2g8aW50MzJfdD46Omhhc2godS5pbmRpY2VzWzBdKSArIHUuaW5kaWNlc1sx
XSArIHUuaW5kaWNlc1syXTsKICAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gKnRoaXMgIT0gVmFsdWVLZXkoKTsgfQpAQCAtMTM3LDE4ICsxMzksMjIg
QEAgcHJpdmF0ZToKICAgICBPcGNvZGUgbV9vcGNvZGUgeyBPb3BzIH07CiAgICAgVHlwZSBtX3R5
cGUgeyBWb2lkIH07CiAgICAgdW5pb24gVSB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGljZXNbMl07
CisgICAgICAgIHVuc2lnbmVkIGluZGljZXNbM107CiAgICAgICAgIGludDY0X3QgdmFsdWU7CiAg
ICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKIAogICAgICAgICBVKCkKICAgICAgICAgewotICAg
ICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAgaW5kaWNlc1swXSA9IDA7CisgICAgICAg
ICAgICBpbmRpY2VzWzFdID0gMDsKKyAgICAgICAgICAgIGluZGljZXNbMl0gPSAwOwogICAgICAg
ICB9CiAKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFUmIG90aGVyKSBjb25zdAogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7CisgICAgICAg
ICAgICByZXR1cm4gaW5kaWNlc1swXSA9PSBvdGhlci5pbmRpY2VzWzBdCisgICAgICAgICAgICAg
ICAgJiYgaW5kaWNlc1sxXSA9PSBvdGhlci5pbmRpY2VzWzFdCisgICAgICAgICAgICAgICAgJiYg
aW5kaWNlc1syXSA9PSBvdGhlci5pbmRpY2VzWzJdOwogICAgICAgICB9CiAgICAgfSB1OwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCShy
ZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTUgQEAgaW5saW5lIFZhbHVlS2V5
OjpWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLAogICAgIHUuaW5kaWNlc1sxXSA9IHJpZ2h0LT5pbmRl
eCgpOwogfQogCitpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgVmFsdWUqIGEsIFZhbHVlKiBiLCBWYWx1ZSogYykKKyAgICA6IG1fb3Bjb2RlKG9wY29k
ZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworICAgIHUuaW5kaWNlc1swXSA9IGEtPmluZGV4KCk7
CisgICAgdS5pbmRpY2VzWzFdID0gYi0+aW5kZXgoKTsKKyAgICB1LmluZGljZXNbMl0gPSBjLT5p
bmRleCgpOworfQorCiBpbmxpbmUgVmFsdWUqIFZhbHVlS2V5OjpjaGlsZChQcm9jZWR1cmUmIHBy
b2MsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIHJldHVybiBwcm9jLnZhbHVlcygpW2lu
ZGV4XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTI2
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDczMiw2ICs0NzMyLDEzNCBAQCB2b2lkIHRlc3RUcnVuY1NFeHQzMihpbnQzMl90IHZh
bHVlKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09IHZh
bHVlKTsKIH0KIAordm9pZCB0ZXN0QmFzaWNTZWxlY3QoKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTZWxlY3Qs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgNDIpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7Cisg
ICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0
MjQ2Mik7CisgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDMsIDEsIDIpID09IDIp
OworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDQzLCA2NDI0NjIsIDMyNTMzKSA9
PSAzMjUzMyk7Cit9CisKK3ZvaWQgdGVzdFNlbGVjdFRlc3QoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTZWxl
Y3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLCAxLCAyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0
MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCAwLCAxLCAyKSA9PSAyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCAwLCA2NDI0NjIsIDMyNTMzKSA9PSAzMjUzMyk7Cit9CisKK3ZvaWQgdGVzdFNlbGVjdENvbXBh
cmVEb3VibGUoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBS
SW5mbzo6YXJndW1lbnRGUFIxKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgLTEuMCwgMS4wLCAxLCAyKSA9
PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQy
NDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCBQTmFOLCAwLjAsIDEsIDIpID09IDIpOworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLjUxLCA0Mi41LCA2NDI0NjIsIDMyNTMzKSA9PSAzMjUzMyk7CisgICAgQ0hFQ0soaW52
b2tlPGludHB0cl90PigqY29kZSwgNDIuNTIsIDQyLjUyLCA1MjQ5NzgyNDUsIDM1MikgPT0gMzUy
KTsKK30KKwordm9pZCB0ZXN0U2VsZWN0RG91YmxlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2VsZWN0LCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDQyKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQ
UkluZm86OmFyZ3VtZW50RlBSMSkpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCAxLjUsIDIuNikgPT0gMS41KTsK
KyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDY0MjQ2Mi43LCAzMjUzMy44KSA9
PSA2NDI0NjIuNyk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQzLCAxLjksIDIu
MCkgPT0gMi4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDMsIDY0MjQ2Mi4x
LCAzMjUzMy4yKSA9PSAzMjUzMy4yKTsKK30KKwordm9pZCB0ZXN0U2VsZWN0RG91YmxlVGVzdCgp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFNlbGVjdCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3Vt
ZW50RlBSMSkpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCAxLjUsIDIuNikgPT0gMS41KTsKKyAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDY0MjQ2Mi43LCAzMjUzMy44KSA9PSA2NDI0NjIuNyk7
CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAsIDEuOSwgMi4wKSA9PSAyLjApOwor
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCA2NDI0NjIuMSwgMzI1MzMuMikgPT0g
MzI1MzMuMik7Cit9CisKK3ZvaWQgdGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGUoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRG
UFIxKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMiksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3Vt
ZW50RlBSMykpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIC0xLjAsIDEuMCwgMS4xLCAyLjIpID09IDEuMSk7CisgICAg
Q0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLjUsIDQyLjUxLCA2NDI0NjIuMywgMzI1MzMu
NCkgPT0gNjQyNDYyLjMpOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCBQTmFOLCAw
LCAxLjUsIDIuNikgPT0gMi42KTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIu
NTEsIDQyLjUsIDY0MjQ2Mi43LCAzMjUzMy44KSA9PSAzMjUzMy44KTsKKyAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgNDIuNTIsIDQyLjUyLCA1MjQ5NzgyNDUuOSwgMzUyLjApID09IDM1
Mi4wKTsKK30KKwogLy8gTWFrZSBzdXJlIHRoZSBjb21waWxlciBkb2VzIG5vdCB0cnkgdG8gb3B0
aW1pemUgYW55dGhpbmcgb3V0LgogTkVWRVJfSU5MSU5FIGRvdWJsZSB6ZXJvKCkKIHsKQEAgLTU1
MjUsNiArNTY1MywxMyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRl
c3RUcnVuY1NFeHQzMigxMDAwMDAwMDAwbGwpKTsKICAgICBSVU4odGVzdFRydW5jU0V4dDMyKC0x
MDAwMDAwMDAwbGwpKTsKIAorICAgIFJVTih0ZXN0QmFzaWNTZWxlY3QoKSk7CisgICAgUlVOKHRl
c3RTZWxlY3RUZXN0KCkpOworICAgIFJVTih0ZXN0U2VsZWN0Q29tcGFyZURvdWJsZSgpKTsKKyAg
ICBSVU4odGVzdFNlbGVjdERvdWJsZSgpKTsKKyAgICBSVU4odGVzdFNlbGVjdERvdWJsZVRlc3Qo
KSk7CisgICAgUlVOKHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKCkpOworCiAgICAgaWYg
KHRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTI2ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTYsNiArMzU2LDQwIEBAIEJyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJh
bmNoCiBCcmFuY2hOZWc2NCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcAogCitN
b3ZlQ29uZGl0aW9uYWxseTMyIFU6RywgVTpHLCBVOkcsIFU6RywgVUQ6RworICAgIFJlbENvbmQs
IFRtcCwgVG1wLCBUbXAsIFRtcAorCitNb3ZlQ29uZGl0aW9uYWxseTY0IFU6RywgVTpHLCBVOkcs
IFU6RywgVUQ6RworICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorCitNb3ZlQ29uZGl0
aW9uYWxseVRlc3QzMiBVOkcsIFU6RywgVTpHLCBVOkcsIFVEOkcKKyAgICBSZXNDb25kLCBUbXAs
IFRtcCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIEltbSwgVG1wLCBUbXAKKworTW92ZUNv
bmRpdGlvbmFsbHlUZXN0NjQgVTpHLCBVOkcsIFU6RywgVTpHLCBVRDpHCisgICAgUmVzQ29uZCwg
VG1wLCBUbXAsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisKK01v
dmVDb25kaXRpb25hbGx5RG91YmxlIFU6RywgVTpGLCBVOkYsIFU6RywgVUQ6RworICAgIERvdWJs
ZUNvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorCitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseTMyIFU6
RywgVTpHLCBVOkcsIFU6RiwgVUQ6RgorICAgIFJlbENvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAor
CitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseTY0IFU6RywgVTpHLCBVOkcsIFU6RiwgVUQ6RgorICAg
IFJlbENvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorCitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRl
c3QzMiBVOkcsIFU6RywgVTpHLCBVOkYsIFVEOkYKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1w
LCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIEltbSwgVG1wLCBUbXAKKworTW92ZURvdWJsZUNvbmRp
dGlvbmFsbHlUZXN0NjQgVTpHLCBVOkcsIFU6RywgVTpGLCBVRDpGCisgICAgUmVzQ29uZCwgVG1w
LCBUbXAsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisKK01vdmVE
b3VibGVDb25kaXRpb25hbGx5RG91YmxlIFU6RywgVTpGLCBVOkYsIFU6RiwgVUQ6RgorICAgIERv
dWJsZUNvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorCiBKdW1wIC9icmFuY2gKIAogUmV0IC90ZXJt
aW5hbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAkocmV2aXNp
b24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgIExWYWx1ZSB0ZXN0
SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzTnVsbChiaXRB
bmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFs
dWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9
CiAKLSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUg
bm90VGFrZW4pIHsgQ1JBU0goKTsgfQorICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBM
VmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIHRha2VuLCBu
b3RUYWtlbik7IH0KICAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2ln
bmVkIGluZGV4KSB7IENSQVNIKCk7IH0KIAogICAgIExWYWx1ZSBmZW5jZShMQXRvbWljT3JkZXJp
bmcgb3JkZXJpbmcgPSBMTFZNQXRvbWljT3JkZXJpbmdTZXF1ZW50aWFsbHlDb25zaXN0ZW50LCBT
eW5jaHJvbml6YXRpb25TY29wZSBzY29wZSA9IENyb3NzVGhyZWFkKSB7IENSQVNIKCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265995</attachid>
            <date>2015-11-20 13:58:19 -0800</date>
            <delta_ts>2015-11-20 14:10:21 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45619</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE1LTExLTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgYSBTZWxlY3Qgb3Bjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsZWFucyB1cCBvdXIgY29uZGl0aW9uYWwgbW92
ZSBpbXBsZW1lbnRhdGlvbiAtIHNwZWNpZmljYWxseSBzbyB0aGF0IGl0IGRpc3Rpbmd1aXNoZXMg
YmV0d2VlbgorICAgICAgICBjb21wYXJpbmcgdGhlIGxvdyAzMiBiaXRzIG9mIGEgR1BSIGFuZCBh
bGwgYml0cyBvZiBhIEdQUiAtIGFuZCBmaXhlcyBidWdzIHdpdGggb3BlcmFuZCBvcmRlcmluZy4g
SXQKKyAgICAgICAgdGhlbiBhZGRzIGEgU2VsZWN0IG9wY29kZSB0byBCMyBhbmQgYWRkcyBhbGwg
b2YgdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiBhbmQgbG93ZXJpbmcgbWFnaWMgdGhhdCBpdAorICAg
ICAgICBuZWVkcy4gRmluYWxseSB0aGlzIGNoYW5nZSBpbXBsZW1lbnRzIEZUTDo6T3V0cHV0Ojpz
ZWxlY3QoKSBpbiB0ZXJtcyBvZiBCMzo6U2VsZWN0LgorCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjptb3ZlRG91Ymxl
Q29uZGl0aW9uYWxseTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3Vi
bGVDb25kaXRpb25hbGx5NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bW92ZURv
dWJsZUNvbmRpdGlvbmFsbHlUZXN0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6
bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlcjo6bGVhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1vdmUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZUNvbmRpdGlvbmFsbHlE
b3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6emVyb0V4dGVu
ZDMyVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZUNv
bmRpdGlvbmFsbHkzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpt
b3ZlQ29uZGl0aW9uYWxseVRlc3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpzZXQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpj
bW92KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1vdmVDb25kaXRp
b25hbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246
Om1vdmVDb25kaXRpb25hbGx5VGVzdCk6IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2hOZWc2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3Zl
Q29uZGl0aW9uYWxseTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1v
dmVDb25kaXRpb25hbGx5VGVzdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OmFib3J0V2l0aFJlYXNvbik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNtb3ZsX3JyKToKKyAgICAgICAgKEpTQzo6
WDg2QXNzZW1ibGVyOjpjbW92bF9tcik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y21v
dmVsX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92bmVsX3JyKToKKyAgICAg
ICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92cGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3Nl
bWJsZXI6OmNtb3ZucGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNtb3ZxX3Jy
KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92cV9tcik6CisgICAgICAgIChKU0M6
Olg4NkFzc2VtYmxlcjo6Y21vdmVxX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpj
bW92bmVxX3JyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpjbW92cHFfcnIpOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNtb3ZucHFfcnIpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUNv
bXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpjcmVhdGVTZWxlY3Qp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptYXJzaGFsbENDYWxsQXJndW1l
bnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAg
ICogYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcDoKKyAgICAgICAgKiBiMy9CM09wY29kZS5jcHA6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzT3Bjb2RlLmg6Cisg
ICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvQjNWYWxpZGF0
ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6a2V5KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6dHlw
ZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXku
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmR1bXApOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVLZXk6Om1hdGVyaWFsaXplKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlS2V5Lmg6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAqIGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZUtleTo6VmFsdWVLZXkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVLZXk6OmNoaWxk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RUcnVuY1NFeHQzMik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QmFzaWNTZWxlY3QpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdFRl
c3QpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdENvbXBhcmVEb3VibGUpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFNlbGVjdERvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2Vs
ZWN0RG91YmxlVGVzdCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2VsZWN0RG91YmxlQ29tcGFy
ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp6ZXJvKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgICogZnRsL0ZUTEIzT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojp0ZXN0SXNaZXJvUHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnRlc3ROb25a
ZXJvUHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNlbGVjdCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjpleHRyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6ZmVuY2UpOgorCiAyMDE1LTExLTIwICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFN1cGVyIHVzZSBzaG91bGQgYmUgcmVjb3JkZWQgaW4gcGVyLWZ1
bmN0aW9uIHNjb3BlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMDEs
NiArMTMwMSw2MSBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyAhQ1BVKFg4Nl82NCkKIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExlZnRUeXBlLCB0eXBlbmFtZSBSaWdodFR5cGU+CisgICAgdm9pZCBt
b3ZlRG91YmxlQ29uZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgTGVmdFR5
cGUgbGVmdCwgUmlnaHRUeXBlIHJpZ2h0LCBGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEp1bXAgZmFsc2VDYXNlID0gYnJhbmNoMzIoaW52ZXJ0KGNv
bmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIG1vdmVEb3VibGUoc3JjLCBkZXN0KTsKKyAgICAg
ICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGVmdFR5cGUsIHR5cGVuYW1lIFJpZ2h0VHlwZT4KKyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRp
b25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBMZWZ0VHlwZSBsZWZ0LCBSaWdodFR5
cGUgcmlnaHQsIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgSnVtcCBmYWxzZUNhc2UgPSBicmFuY2g2NChpbnZlcnQoY29uZCksIGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworICAgICAgICBmYWxzZUNhc2UubGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZSwgdHlwZW5h
bWUgTWFza1R5cGU+CisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRlc3QzMihSZXN1
bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5cGUgbWFzaywgRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbnZlcnRp
YmxlKGNvbmQpKSB7CisgICAgICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaFRlc3QzMihp
bnZlcnQoY29uZCksIHRlc3QsIG1hc2spOworICAgICAgICAgICAgbW92ZURvdWJsZShzcmMsIGRl
c3QpOworICAgICAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDMyKGNvbmQsIHRlc3QsIG1hc2spOworICAg
ICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsKKyAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworICAgICAgICBmYWxzZUNhc2UubGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZSwgdHlwZW5h
bWUgTWFza1R5cGU+CisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRlc3Q2NChSZXN1
bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5cGUgbWFzaywgRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbnZlcnRp
YmxlKGNvbmQpKSB7CisgICAgICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaFRlc3Q2NChp
bnZlcnQoY29uZCksIHRlc3QsIG1hc2spOworICAgICAgICAgICAgbW92ZURvdWJsZShzcmMsIGRl
c3QpOworICAgICAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDY0KGNvbmQsIHRlc3QsIG1hc2spOworICAg
ICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsKKyAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlz
KTsKKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworICAgICAgICBmYWxzZUNhc2UubGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRpb25hbGx5RG91Ymxl
KERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJp
Z2h0LCBGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEp1bXAgZmFsc2VDYXNlID0gYnJhbmNoRG91YmxlKGludmVydChjb25kKSwgbGVmdCwgcmlnaHQp
OworICAgICAgICBtb3ZlRG91YmxlKHNyYywgZGVzdCk7CisgICAgICAgIGZhbHNlQ2FzZS5saW5r
KHRoaXMpOworICAgIH0KKwogICAgIHZvaWQgbGVhKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNl
dCksIGFkZHJlc3MuYmFzZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lv
biAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwODEsMTggKzEwODEsNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTY0cihpbW0ubV92YWx1ZSwgZGVzdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseShSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQs
IGxlZnQpOwotICAgICAgICBtX2Fzc2VtYmxlci5jbW92cV9ycih4ODZDb25kaXRpb24oY29uZCks
IHNyYywgZGVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3QoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGVzdFJlZywgUmVnaXN0ZXJJRCBtYXNrLCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdHFfcnIodGVzdFJlZywgbWFzayk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZxX3Jy
KHg4NkNvbmRpdGlvbihjb25kKSwgc3JjLCBkZXN0KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBt
b3ZlQ29uZGl0aW9uYWxseURvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklE
IGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1NTRTJQcmVzZW50KCkpOwpAQCAtMTE2MSwxOCAr
MTE0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9pMzJyKGltbS5hc0lu
dHB0cigpLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5KFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9ycihyaWdodCwgbGVmdCk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3JyKHg4
NkNvbmRpdGlvbihjb25kKSwgc3JjLCBkZXN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIG1vdmVDb25k
aXRpb25hbGx5VGVzdChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCB0ZXN0UmVnLCBS
ZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCi0gICAgewot
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsKLSAgICAgICAgbV9h
c3NlbWJsZXIuY21vdmxfcnIoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOwotICAgIH0K
LQogICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlEb3VibGUoRG91YmxlQ29uZGl0aW9uIGNvbmQs
IEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNTU0UyUHJlc2VudCgpKTsK
QEAgLTEyMjYsNiArMTIwMiwyNCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2b2lk
IG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0KTsKKyAgICAg
ICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCB0ZXN0UmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsK
KyAgICAgICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgdGVzdFJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB0ZXN0MzIoY29uZCwgdGVzdFJlZywgbWFz
ayk7CisgICAgICAgIGNtb3YoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOworICAgIH0K
KyAgICAKIAogICAgIC8vIEZvcndhcmRzIC8gZXh0ZXJuYWwgY29udHJvbCBmbG93IG9wZXJhdGlv
bnM6CiAgICAgLy8KQEAgLTE2NzQsNiArMTY2OCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGNtb3Yo
WDg2QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbV9hc3NlbWJsZXIuY21vdnFf
cnIoY29uZCwgc3JjLCBkZXN0KTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmNtb3ZsX3Jy
KGNvbmQsIHNyYywgZGVzdCk7CisjZW5kaWYKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIC8v
IE9ubHkgTWFjcm9Bc3NlbWJsZXJYODYgc2hvdWxkIGJlIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0
aG9kOyBTU0UyIGlzIGFsd2F5cyBhdmFpbGFibGUgb24KICAgICAvLyB4ODZfNjQsIGFuZCBjbGll
bnRzICYgc3ViY2xhc3NlcyBvZiBNYWNyb0Fzc2VtYmxlciBzaG91bGQgYmUgdXNpbmcgJ3N1cHBv
cnRzRmxvYXRpbmdQb2ludCgpJy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5MjY4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkod29ya2luZyBjb3B5KQpAQCAtODI3LDYgKzgyNywzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAK
KyAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCB0ZXN0UmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycih0ZXN0UmVn
LCBtYXNrKTsKKyAgICAgICAgY21vdih4ODZDb25kaXRpb24oY29uZCksIHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQoUmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGVzdFJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICAvLyBpZiB3ZSBhcmUgb25s
eSBpbnRlcmVzdGVkIGluIHRoZSBsb3cgc2V2ZW4gYml0cywgdGhpcyBjYW4gYmUgdGVzdGVkIHdp
dGggYSB0ZXN0YgorICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIudGVzdHFfcnIodGVzdFJlZywgdGVzdFJlZyk7CisgICAgICAgIGVsc2UgaWYg
KChtYXNrLm1fdmFsdWUgJiB+MHg3ZikgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRl
c3RiX2k4cihtYXNrLm1fdmFsdWUsIHRlc3RSZWcpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci50ZXN0cV9pMzJyKG1hc2subV92YWx1ZSwgdGVzdFJlZyk7CisgICAgICAg
IGNtb3YoeDg2Q29uZGl0aW9uKGNvbmQpLCBzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2
b2lkIGFib3J0V2l0aFJlYXNvbihBYm9ydFJlYXNvbiByZWFzb24pCiAgICAgewogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihyZWFzb24pLCBYODZSZWdpc3RlcnM6OnIxMSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9u
IDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MzgsNyArMTYzOCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY21vdmxfcnIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChjbW92Y2MoY29uZCksIHNy
YywgZHN0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhjb25kKSwgZHN0
LCBzcmMpOwogICAgIH0KIAogICAgIHZvaWQgY21vdmxfbXIoQ29uZGl0aW9uIGNvbmQsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xNjUzLDI4ICsxNjUz
LDI4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY21vdmVsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChjbW92Y2Mo
Q29uZGl0aW9uRSksIHNyYywgZHN0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNt
b3ZjYyhDb25kaXRpb25FKSwgZHN0LCBzcmMpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNtb3Zu
ZWxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9m
b3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhDb25kaXRpb25ORSksIHNyYywgZHN0KTsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhDb25kaXRpb25ORSksIGRzdCwgc3JjKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjbW92cGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGNtb3ZjYyhDb25k
aXRpb25QKSwgc3JjLCBkc3QpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoY21vdmNj
KENvbmRpdGlvblApLCBkc3QsIHNyYyk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY21vdm5wbF9y
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBtX2Zvcm1h
dHRlci50d29CeXRlT3AoY21vdmNjKENvbmRpdGlvbk5QKSwgc3JjLCBkc3QpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoY21vdmNjKENvbmRpdGlvbk5QKSwgZHN0LCBzcmMpOwogICAg
IH0KIAogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBjbW92cV9ycihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0
ZXIudHdvQnl0ZU9wNjQoY21vdmNjKGNvbmQpLCBzcmMsIGRzdCk7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcDY0KGNtb3ZjYyhjb25kKSwgZHN0LCBzcmMpOwogICAgIH0KIAogICAgIHZv
aWQgY21vdnFfbXIoQ29uZGl0aW9uIGNvbmQsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBkc3QpCkBAIC0xNjg5LDIyICsxNjg5LDIyIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY21vdmVxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KGNtb3ZjYyhDb25kaXRpb25FKSwgc3JjLCBkc3Qp
OworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChjbW92Y2MoQ29uZGl0aW9uRSksIGRz
dCwgc3JjKTsKICAgICB9CiAKICAgICB2b2lkIGNtb3ZuZXFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoY21v
dmNjKENvbmRpdGlvbk5FKSwgc3JjLCBkc3QpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3A2NChjbW92Y2MoQ29uZGl0aW9uTkUpLCBkc3QsIHNyYyk7CiAgICAgfQogCiAgICAgdm9pZCBj
bW92cHFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAg
bV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoY21vdmNjKENvbmRpdGlvblApLCBzcmMsIGRzdCk7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KGNtb3ZjYyhDb25kaXRpb25QKSwgZHN0LCBz
cmMpOwogICAgIH0KIAogICAgIHZvaWQgY21vdm5wcV9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChjbW92Y2Mo
Q29uZGl0aW9uTlApLCBzcmMsIGRzdCk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0
KGNtb3ZjYyhDb25kaXRpb25OUCksIGRzdCwgc3JjKTsKICAgICB9CiAjZWxzZQogICAgIHZvaWQg
Y21vdmxfbXIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IHZvaWQqIGFkZHIsIFJlZ2lzdGVySUQgZHN0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlz
aW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTg1LDYgKzExODUsODIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGludmVydGVkKTsKICAgICB9CiAKKyAgICBzdHJ1Y3QgTW92ZUNvbmRpdGlvbmFsbHlDb25m
aWcgeworICAgICAgICBBaXI6Ok9wY29kZSBtb3ZlQ29uZGl0aW9uYWxseTMyOworICAgICAgICBB
aXI6Ok9wY29kZSBtb3ZlQ29uZGl0aW9uYWxseTY0OworICAgICAgICBBaXI6Ok9wY29kZSBtb3Zl
Q29uZGl0aW9uYWxseVRlc3QzMjsKKyAgICAgICAgQWlyOjpPcGNvZGUgbW92ZUNvbmRpdGlvbmFs
bHlUZXN0NjQ7CisgICAgICAgIEFpcjo6T3Bjb2RlIG1vdmVDb25kaXRpb25hbGx5RG91YmxlOwor
ICAgICAgICBUbXAgc291cmNlOworICAgICAgICBUbXAgZGVzdGluYXRpb247CisgICAgfTsKKyAg
ICBJbnN0IGNyZWF0ZVNlbGVjdChWYWx1ZSogdmFsdWUsIGNvbnN0IE1vdmVDb25kaXRpb25hbGx5
Q29uZmlnJiBjb25maWcsIGJvb2wgaW52ZXJ0ZWQgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBjcmVhdGVHZW5lcmljQ29tcGFyZSgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAg
ICAgWyZdICgKKyAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJl
bENvbmQsCisgICAgICAgICAgICAgICAgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJn
UHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg4OgorICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCB0aGVzZSB0aGluZ3MuCisgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MDQKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lk
dGgxNjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6V2lkdGgzMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseTMyLCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCBy
aWdodC5raW5kKCksIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tb3Zl
Q29uZGl0aW9uYWxseTMyLCBtX3ZhbHVlLCByZWxDb25kLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCBjb25maWcu
c291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShjb25maWcubW92
ZUNvbmRpdGlvbmFsbHk2NCwgQXJnOjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgp
LCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFs
bHk2NCwgbV92YWx1ZSwgcmVsQ29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgY29uZmlnLnNvdXJjZSwgY29u
ZmlnLmRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBbJl0gKAorICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0
IEFyZyYgcmVzQ29uZCwKKyAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBj
b25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgc3dpdGNo
ICh3aWR0aCkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUgdGhpbmdzLgorICAgICAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTA0Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OldpZHRoMTY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShjb25maWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0MzIsIEFyZzo6UmVzQ29uZCwgbGVm
dC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnLm1vdmVDb25kaXRpb25hbGx5VGVzdDMyLCBtX3ZhbHVlLCByZXNDb25kLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUo
KnRoaXMpLCBjb25maWcuc291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlk
Rm9ybShjb25maWcubW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5r
aW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlnLm1vdmVDb25kaXRpb25hbGx5VGVzdDY0LCBtX3ZhbHVlLCByZXNDb25kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRo
aXMpLCBjb25maWcuc291cmNlLCBjb25maWcuZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoQXJnIGRvdWJsZUNvbmQsIGNv
bnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oY29uZmlnLm1vdmVDb25kaXRpb25hbGx5
RG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6
VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHlEb3VibGUsIG1fdmFs
dWUsIGRvdWJsZUNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRo
aXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgY29uZmlnLnNvdXJjZSwgY29uZmlnLmRlc3RpbmF0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBpbnZlcnRlZCk7CisgICAgfQorCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudCh1
bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrQ291bnQsIFZhbHVlKiBjaGls
ZCkKICAgICB7CkBAIC0xNDU4LDYgKzE1MzQsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgU2VsZWN0OiB7CisgICAgICAgICAgICBU
bXAgcmVzdWx0ID0gdG1wKG1fdmFsdWUpOworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3Zl
Rm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobV92YWx1ZS0+Y2hpbGQoMikpLCByZXN1bHQp
OworCisgICAgICAgICAgICBNb3ZlQ29uZGl0aW9uYWxseUNvbmZpZyBjb25maWc7CisgICAgICAg
ICAgICBjb25maWcuc291cmNlID0gdG1wKG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAg
IGNvbmZpZy5kZXN0aW5hdGlvbiA9IHJlc3VsdDsKKworICAgICAgICAgICAgaWYgKGlzSW50KG1f
dmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25maWcubW92ZUNvbmRpdGlvbmFs
bHkzMiA9IE1vdmVDb25kaXRpb25hbGx5MzI7CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVD
b25kaXRpb25hbGx5NjQgPSBNb3ZlQ29uZGl0aW9uYWxseTY0OworICAgICAgICAgICAgICAgIGNv
bmZpZy5tb3ZlQ29uZGl0aW9uYWxseVRlc3QzMiA9IE1vdmVDb25kaXRpb25hbGx5VGVzdDMyOwor
ICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxseVRlc3Q2NCA9IE1vdmVDb25k
aXRpb25hbGx5VGVzdDY0OworICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29uZGl0aW9uYWxs
eURvdWJsZSA9IE1vdmVDb25kaXRpb25hbGx5RG91YmxlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaXQncyBub3Qgb2J2aW91cyB0aGF0IHRoZXNlIGFy
ZSBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LgorICAgICAgICAgICAgICAgIGNvbmZpZy5tb3ZlQ29u
ZGl0aW9uYWxseTMyID0gTW92ZURvdWJsZUNvbmRpdGlvbmFsbHkzMjsKKyAgICAgICAgICAgICAg
ICBjb25maWcubW92ZUNvbmRpdGlvbmFsbHk2NCA9IE1vdmVEb3VibGVDb25kaXRpb25hbGx5NjQ7
CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVDb25kaXRpb25hbGx5VGVzdDMyID0gTW92ZURv
dWJsZUNvbmRpdGlvbmFsbHlUZXN0MzI7CisgICAgICAgICAgICAgICAgY29uZmlnLm1vdmVDb25k
aXRpb25hbGx5VGVzdDY0ID0gTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQ7CisgICAgICAg
ICAgICAgICAgY29uZmlnLm1vdmVDb25kaXRpb25hbGx5RG91YmxlID0gTW92ZURvdWJsZUNvbmRp
dGlvbmFsbHlEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVTZWxlY3QobV92YWx1ZS0+Y2hpbGQoMCksIGNv
bmZpZykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBJ
VG9EOiB7CiAgICAgICAgICAgICBhcHBlbmRVbk9wPENvbnZlcnRJbnQzMlRvRG91YmxlLCBDb252
ZXJ0SW50NjRUb0RvdWJsZSwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29u
c3RhbnRzLmNwcAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTW92ZUNvbnN0YW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIHJ1bigpCiAgICAgewogICAgICAgICAvLyBFdmVudHVhbGx5IHRoaXMg
cGhhc2Ugd2lsbCBkbyBzbWFydCB0aGluZ3MuIEZvciBub3csIGl0IHVzZXMgYSBzdXBlciBzaW1w
bGUgaGV1cmlzdGljOiBpdAotICAgICAgICAvLyBwbGFjZXMgbGFyZ2UgY29uc3RhbnRzIGluIHRo
ZSBibG9jayB0aGF0IHVzZXMgdGhlbSwgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIGJsb2NrIGhh
cwotICAgICAgICAvLyBvbmx5IG9uZSBtYXRlcmlhbGl6YXRpb24gZm9yIGVhY2ggbGFyZ2UgY29u
c3RhbnQuCisgICAgICAgIC8vIHBsYWNlcyBjb25zdGFudHMgaW4gdGhlIGJsb2NrIHRoYXQgdXNl
cyB0aGVtLCBhbmQgbWFrZXMgc3VyZSB0aGF0IGVhY2ggYmxvY2sgaGFzIG9ubHkgb25lCisgICAg
ICAgIC8vIG1hdGVyaWFsaXphdGlvbiBmb3IgZWFjaCBjb25zdGFudC4gTm90ZSB0aGF0IHRoaXMg
bW9zdGx5IG9ubHkgbWF0dGVycyBmb3IgbGFyZ2UgY29uc3RhbnRzLCBzaW5jZQorICAgICAgICAv
LyBzbWFsbCBjb25zdGFudHMgZ2V0IGZ1c2VkIGludG8gdGhlIGluc3RydWN0aW9ucyB0aGF0IHVz
ZSB0aGVtLiBCdXQgaXQgbWlnaHQgbWF0dGVyIGZvciBzbWFsbAorICAgICAgICAvLyBjb25zdGFu
dHMgaWYgdGhleSBhcmUgdXNlZCBpbiBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCBkbyBpbW1lZGlh
dGVzLCBsaWtlIGNvbmRpdGlvbmFsIG1vdmVzLgogCiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgYSBiZXR0ZXIgc3RvcnkgZm9yIGNvbnN0YW50cy4gQXQgYSBtaW5pbXVtIHRoaXMgc2hvdWxk
IGFsbG93IHRoZSBCMwogICAgICAgICAvLyBjbGllbnQgdG8gc3BlY2lmeSBpbXBvcnRhbnQgY29u
c3RhbnRzIHRoYXQgYWx3YXlzIGdldCBob2lzdGVkLiBBbHNvLCB0aGUgdGFibGUgdXNlZCB0bwpA
QCAtMTQ3LDE2ICsxNDksNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBuZWVkc01vdGlvbihjb25z
dCBWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc0NvbnN0YW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBjdXJy
ZW50bHkgYXNzdW1lIHRoYXQgMzItYml0IGludCBjb25zdGFudHMgYXJlIGFsd2F5cyBjaGVhcCB0
byBtYXRlcmlhbGl6ZS4KLSAgICAgICAgLy8gVGhpcyBpcyB3cm9uZyBmb3IgQVJNLiBXZSBuZWVk
IHNvbWUgYWJzdHJhY3QgcXVlcnkgbGlrZSAiaXNJbW1lZGlhdGUoaW50NjRfdCkiLiBPbgotICAg
ICAgICAvLyBBUk02NCB0aGlzIHdvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSB3YXkgdGhhdCBB
Uk02NCBjYW4gZW5jb2RlIGxhcmdlIGNvbnN0YW50cy4KLSAgICAgICAgaWYgKHZhbHVlLT5oYXNJ
bnQoKSAmJiB2YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB2YWx1
ZS0+aXNDb25zdGFudCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZUtleSBkb3VibGVaZXJv
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMTky
Njg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk0LDYgKzE5NCw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBPcGMKICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAgICAgIG91dC5wcmludCgiQmVsb3dF
cXVhbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAgIG91dC5w
cmludCgiU2VsZWN0Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIExvYWQ4WjoKICAgICAg
ICAgb3V0LnByaW50KCJMb2FkOFoiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDEwIEBA
IGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgQWJvdmVFcXVhbCwKICAgICBCZWxvd0VxdWFs
LAogCisgICAgLy8gU1NBIGZvcm0gb2YgY29uZGl0aW9uYWwgbW92ZS4gVGhlIGZpcnN0IGNoaWxk
IGlzIGV2YWx1YXRlZCBmb3IgdHJ1dGhpbmVzcy4gSWYgdHJ1ZSwgdGhlIHNlY29uZCBjaGlsZAor
ICAgIC8vIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSB0aGlyZCBjaGlsZCBpcyByZXR1cm5l
ZC4KKyAgICBTZWxlY3QsCisKICAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMg
aG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgog
ICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKICAgICBMb2FkOFosCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTI2ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzMCw2ICs1MzAsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgU2VsZWN0OgorICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBTZWxlY3QoY29uc3RhbnQsIGEsIGIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50ID8gYSA6IGIKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRp
dHkoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkgPyBt
X3ZhbHVlLT5jaGlsZCgxKSA6IG1fdmFsdWUtPmNoaWxkKDIpKTsKKyAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChFcXVhbCh4LCAwKSwgYSwgYikKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU2VsZWN0KHgsIGIsIGEpCisgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpKTsKKyAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEs
IGIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29sLCBiLCBhKQorICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50MzIoMSkKKyAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkp
IHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSks
IG1fdmFsdWUtPmNoaWxkKDIpKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFNlbGVjdChzdHVmZiwgeCwgeCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczog
eAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDIp
KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVl
LT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgIGNhc2UgTG9hZDhaOgogICAgICAgICBjYXNlIExvYWQ4UzoKICAgICAgICAgY2FzZSBMb2Fk
MTZaOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNp
b24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJB
dCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
U2VsZWN0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDMsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDEpLT50eXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2
YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTG9hZDhaOgogICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CiAgICAgICAgICAgICBjYXNlIExvYWQxNlo6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBFZmZlY3Rz
IFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICBjYXNlIEJlbG93OgogICAgIGNhc2UgQWJvdmVF
cXVhbDoKICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgY2FzZSBTZWxlY3Q6CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRGl2OgogICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRy
dWU7CkBAIC00MzMsNiArNDM0LDggQEAgVmFsdWVLZXkgVmFsdWU6OmtleSgpIGNvbnN0CiAgICAg
Y2FzZSBDaGVja1N1YjoKICAgICBjYXNlIENoZWNrTXVsOgogICAgICAgICByZXR1cm4gVmFsdWVL
ZXkob3Bjb2RlKCksIHR5cGUoKSwgY2hpbGQoMCksIGNoaWxkKDEpKTsKKyAgICBjYXNlIFNlbGVj
dDoKKyAgICAgICAgcmV0dXJuIFZhbHVlS2V5KG9wY29kZSgpLCB0eXBlKCksIGNoaWxkKDApLCBj
aGlsZCgxKSwgY2hpbGQoMikpOwogICAgIGNhc2UgQ29uc3QzMjoKICAgICAgICAgcmV0dXJuIFZh
bHVlS2V5KENvbnN0MzIsIHR5cGUoKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oYXNJbnQzMigpKSk7
CiAgICAgY2FzZSBDb25zdDY0OgpAQCAtNDc3LDcgKzQ4MCw3IEBAIHZvaWQgVmFsdWU6OmNoZWNr
T3Bjb2RlKE9wY29kZSBvcGNvZGUpCiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCi1U
eXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQorVHlw
ZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUq
IHNlY29uZENoaWxkKQogewogICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgY2FzZSBJZGVudGl0
eToKQEAgLTUyOSw2ICs1MzIsOSBAQCBUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUs
IFZhbHVlCiAgICAgICAgIHJldHVybiBWb2lkOwogICAgIGNhc2UgTm9wOgogICAgICAgICByZXR1
cm4gVm9pZDsKKyAgICBjYXNlIFNlbGVjdDoKKyAgICAgICAgQVNTRVJUKHNlY29uZENoaWxkKTsK
KyAgICAgICAgcmV0dXJuIHNlY29uZENoaWxkLT50eXBlKCk7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMiArMjMwLDIyIEBAIHBy
b3RlY3RlZDoKICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRo
YXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCkKICAgICAgICAgOiBtX2luZGV4
KGluZGV4KQogICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlw
ZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKLSAg
ICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAs
IG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQgfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3Jt
IGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUg
b3Bjb2RlIGFuZCBmaXJzdCBhbmQgc2Vjb25kIGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQsIFZhbHVlKiBzZWNvbmRDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBt
X3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQsIHNlY29uZENoaWxkKSkKKyAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgc2Vj
b25kQ2hpbGQsIGFyZ3VtZW50cy4uLiB9CiAgICAgewogICAgIH0KICAgICAvLyBUaGlzIGZvcm0g
aXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBv
cGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CkBAIC0yNzcsNyArMjg3LDcgQEAgcHJvdGVjdGVk
OgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hlY2tWYWx1ZTsgLy8gQ2hlY2tWYWx1ZTo6
Y29udmVydFRvQWRkKCkgbW9kaWZpZXMgbV9vcGNvZGUuCiAgICAgCi0gICAgc3RhdGljIFR5cGUg
dHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKyAgICBzdGF0aWMgVHlwZSB0eXBl
Rm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGlsZCA9IG51bGxw
dHIpOwogCiAgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGlu
IDY0IGJpdHMuCiAgICAgdW5zaWduZWQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUtleS5jcHAJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogdm9pZCBWYWx1ZUtleTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgbV9v
cGNvZGUsICIoIiwgdS5pbmRpY2VzWzBdLCAiLCAiLCB1LmluZGljZXNbMV0sICIpIik7CisgICAg
b3V0LnByaW50KG1fdHlwZSwgIiAiLCBtX29wY29kZSwgIigiLCB1LmluZGljZXNbMF0sICIsICIs
IHUuaW5kaWNlc1sxXSwgIiwgIiwgdS5pbmRpY2VzWzJdLCAiKSIpOwogfQogCiBWYWx1ZSogVmFs
dWVLZXk6Om1hdGVyaWFsaXplKFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbikgY29uc3QK
QEAgLTc3LDYgKzc3LDggQEAgVmFsdWUqIFZhbHVlS2V5OjptYXRlcmlhbGl6ZShQcm9jZWR1cmUm
IAogICAgIGNhc2UgQmVsb3dFcXVhbDoKICAgICBjYXNlIERpdjoKICAgICAgICAgcmV0dXJuIHBy
b2MuYWRkPFZhbHVlPihvcGNvZGUoKSwgdHlwZSgpLCBvcmlnaW4sIGNoaWxkKHByb2MsIDApLCBj
aGlsZChwcm9jLCAxKSk7CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAgIHJldHVybiBwcm9jLmFk
ZDxWYWx1ZT4ob3Bjb2RlKCksIHR5cGUoKSwgb3JpZ2luLCBjaGlsZChwcm9jLCAwKSwgY2hpbGQo
cHJvYywgMSksIGNoaWxkKHByb2MsIDIpKTsKICAgICBjYXNlIENvbnN0MzI6CiAgICAgICAgIHJl
dHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dmFsdWUoKSkpOwogICAgIGNhc2UgQ29uc3Q2NDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVLZXkuaAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJsaWM6
CiAKICAgICBWYWx1ZUtleShPcGNvZGUsIFR5cGUsIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
OwogCisgICAgVmFsdWVLZXkoT3Bjb2RlLCBUeXBlLCBWYWx1ZSogYSwgVmFsdWUqIGIsIFZhbHVl
KiBjKTsKKwogICAgIFZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgaW50NjRfdCB2
YWx1ZSkKICAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUp
CkBAIC05Nyw3ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3Bjb2RlICsgbV90eXBlICsgV1RGOjpJbnRIYXNoPGlu
dDY0X3Q+OjpoYXNoKHUudmFsdWUpOworICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBtX3R5cGUg
KyBXVEY6OkludEhhc2g8aW50MzJfdD46Omhhc2godS5pbmRpY2VzWzBdKSArIHUuaW5kaWNlc1sx
XSArIHUuaW5kaWNlc1syXTsKICAgICB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gKnRoaXMgIT0gVmFsdWVLZXkoKTsgfQpAQCAtMTM3LDE4ICsxMzksMjIg
QEAgcHJpdmF0ZToKICAgICBPcGNvZGUgbV9vcGNvZGUgeyBPb3BzIH07CiAgICAgVHlwZSBtX3R5
cGUgeyBWb2lkIH07CiAgICAgdW5pb24gVSB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGljZXNbMl07
CisgICAgICAgIHVuc2lnbmVkIGluZGljZXNbM107CiAgICAgICAgIGludDY0X3QgdmFsdWU7CiAg
ICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKIAogICAgICAgICBVKCkKICAgICAgICAgewotICAg
ICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAgaW5kaWNlc1swXSA9IDA7CisgICAgICAg
ICAgICBpbmRpY2VzWzFdID0gMDsKKyAgICAgICAgICAgIGluZGljZXNbMl0gPSAwOwogICAgICAg
ICB9CiAKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFUmIG90aGVyKSBjb25zdAogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7CisgICAgICAg
ICAgICByZXR1cm4gaW5kaWNlc1swXSA9PSBvdGhlci5pbmRpY2VzWzBdCisgICAgICAgICAgICAg
ICAgJiYgaW5kaWNlc1sxXSA9PSBvdGhlci5pbmRpY2VzWzFdCisgICAgICAgICAgICAgICAgJiYg
aW5kaWNlc1syXSA9PSBvdGhlci5pbmRpY2VzWzJdOwogICAgICAgICB9CiAgICAgfSB1OwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5SW5saW5lcy5oCShy
ZXZpc2lvbiAxOTI2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUtleUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTUgQEAgaW5saW5lIFZhbHVlS2V5
OjpWYWx1ZUtleShPcGNvZGUgb3Bjb2RlLAogICAgIHUuaW5kaWNlc1sxXSA9IHJpZ2h0LT5pbmRl
eCgpOwogfQogCitpbmxpbmUgVmFsdWVLZXk6OlZhbHVlS2V5KE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgVmFsdWUqIGEsIFZhbHVlKiBiLCBWYWx1ZSogYykKKyAgICA6IG1fb3Bjb2RlKG9wY29k
ZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworICAgIHUuaW5kaWNlc1swXSA9IGEtPmluZGV4KCk7
CisgICAgdS5pbmRpY2VzWzFdID0gYi0+aW5kZXgoKTsKKyAgICB1LmluZGljZXNbMl0gPSBjLT5p
bmRleCgpOworfQorCiBpbmxpbmUgVmFsdWUqIFZhbHVlS2V5OjpjaGlsZChQcm9jZWR1cmUmIHBy
b2MsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIHJldHVybiBwcm9jLnZhbHVlcygpW2lu
ZGV4XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTI2
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDczMiw2ICs0NzMyLDE3OSBAQCB2b2lkIHRlc3RUcnVuY1NFeHQzMihpbnQzMl90IHZh
bHVlKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgdmFsdWUpID09IHZh
bHVlKTsKIH0KIAordm9pZCB0ZXN0QmFzaWNTZWxlY3QoKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTZWxlY3Qs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgNDIpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7Cisg
ICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0
MjQ2Mik7CisgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDMsIDEsIDIpID09IDIp
OworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDQzLCA2NDI0NjIsIDMyNTMzKSA9
PSAzMjUzMyk7Cit9CisKK3ZvaWQgdGVzdFNlbGVjdFRlc3QoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTZWxl
Y3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLCAxLCAyKSA9PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0
MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCAwLCAxLCAyKSA9PSAyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCAwLCA2NDI0NjIsIDMyNTMzKSA9PSAzMjUzMyk7Cit9CisKK3ZvaWQgdGVzdFNlbGVjdENvbXBh
cmVEb3VibGUoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBS
SW5mbzo6YXJndW1lbnRGUFIxKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgLTEuMCwgMS4wLCAxLCAyKSA9
PSAxKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQy
NDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCBQTmFOLCAwLjAsIDEsIDIpID09IDIpOworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLjUxLCA0Mi41LCA2NDI0NjIsIDMyNTMzKSA9PSAzMjUzMyk7CisgICAgQ0hFQ0soaW52
b2tlPGludHB0cl90PigqY29kZSwgNDIuNTIsIDQyLjUyLCA1MjQ5NzgyNDUsIDM1MikgPT0gMzUy
KTsKK30KKwordm9pZCB0ZXN0U2VsZWN0RG91YmxlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2VsZWN0LCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDQyKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQ
UkluZm86OmFyZ3VtZW50RlBSMSkpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCAxLjUsIDIuNikgPT0gMS41KTsK
KyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDY0MjQ2Mi43LCAzMjUzMy44KSA9
PSA2NDI0NjIuNyk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQzLCAxLjksIDIu
MCkgPT0gMi4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDMsIDY0MjQ2Mi4x
LCAzMjUzMy4yKSA9PSAzMjUzMy4yKTsKK30KKwordm9pZCB0ZXN0U2VsZWN0RG91YmxlVGVzdCgp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFNlbGVjdCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3Vt
ZW50RlBSMSkpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCAxLjUsIDIuNikgPT0gMS41KTsKKyAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDY0MjQ2Mi43LCAzMjUzMy44KSA9PSA2NDI0NjIuNyk7
CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAsIDEuOSwgMi4wKSA9PSAyLjApOwor
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCA2NDI0NjIuMSwgMzI1MzMuMikgPT0g
MzI1MzMuMik7Cit9CisKK3ZvaWQgdGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGUoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRG
UFIxKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMiksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3Vt
ZW50RlBSMykpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIC0xLjAsIDEuMCwgMS4xLCAyLjIpID09IDEuMSk7CisgICAg
Q0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLjUsIDQyLjUxLCA2NDI0NjIuMywgMzI1MzMu
NCkgPT0gNjQyNDYyLjMpOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCBQTmFOLCAw
LjAsIDEuNSwgMi42KSA9PSAyLjYpOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0
Mi41MSwgNDIuNSwgNjQyNDYyLjcsIDMyNTMzLjgpID09IDMyNTMzLjgpOworICAgIENIRUNLKGlu
dm9rZTxkb3VibGU+KCpjb2RlLCA0Mi41MiwgNDIuNTIsIDUyNDk3ODI0NS45LCAzNTIuMCkgPT0g
MzUyLjApOworfQorCit2b2lkIHRlc3RTZWxlY3RGb2xkKGludHB0cl90IHZhbHVlKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBFcXVhbCwgT3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB2YWx1
ZSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCA0MikpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpID09ICh2YWx1ZSA9PSA0MiA/
IDEgOiAyKSk7CisgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNjQyNDYyLCAzMjUz
MykgPT0gKHZhbHVlID09IDQyID8gNjQyNDYyIDogMzI1MzMpKTsKK30KKwordm9pZCB0ZXN0U2Vs
ZWN0SW52ZXJ0KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2VsZWN0LCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgRXF1YWwsIE9y
aWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgICAgIHByb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKSksCisgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOworCisg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29k
ZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0MjQ2Mik7CisgICAgQ0hFQ0soaW52b2tlPGludHB0
cl90PigqY29kZSwgNDMsIDEsIDIpID09IDIpOworICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4o
KmNvZGUsIDQzLCA2NDI0NjIsIDMyNTMzKSA9PSAzMjUzMyk7Cit9CisKIC8vIE1ha2Ugc3VyZSB0
aGUgY29tcGlsZXIgZG9lcyBub3QgdHJ5IHRvIG9wdGltaXplIGFueXRoaW5nIG91dC4KIE5FVkVS
X0lOTElORSBkb3VibGUgemVybygpCiB7CkBAIC01NTI1LDYgKzU2OTgsMTYgQEAgdm9pZCBydW4o
Y29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0VHJ1bmNTRXh0MzIoMTAwMDAwMDAwMGxs
KSk7CiAgICAgUlVOKHRlc3RUcnVuY1NFeHQzMigtMTAwMDAwMDAwMGxsKSk7CiAKKyAgICBSVU4o
dGVzdEJhc2ljU2VsZWN0KCkpOworICAgIFJVTih0ZXN0U2VsZWN0VGVzdCgpKTsKKyAgICBSVU4o
dGVzdFNlbGVjdENvbXBhcmVEb3VibGUoKSk7CisgICAgUlVOKHRlc3RTZWxlY3REb3VibGUoKSk7
CisgICAgUlVOKHRlc3RTZWxlY3REb3VibGVUZXN0KCkpOworICAgIFJVTih0ZXN0U2VsZWN0RG91
YmxlQ29tcGFyZURvdWJsZSgpKTsKKyAgICBSVU4odGVzdFNlbGVjdEZvbGQoNDIpKTsKKyAgICBS
VU4odGVzdFNlbGVjdEZvbGQoNDMpKTsKKyAgICBSVU4odGVzdFNlbGVjdEludmVydCgpKTsKKwog
ICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHVzYWdlKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24g
MTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cwkod29ya2luZyBjb3B5KQpAQCAtMzU2LDYgKzM1Niw0MCBAQCBCcmFuY2hOZWczMiBVOkcsIFVE
OkcgL2JyYW5jaAogQnJhbmNoTmVnNjQgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBU
bXAKIAorTW92ZUNvbmRpdGlvbmFsbHkzMiBVOkcsIFU6RywgVTpHLCBVOkcsIFVEOkcKKyAgICBS
ZWxDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKworTW92ZUNvbmRpdGlvbmFsbHk2NCBVOkcsIFU6
RywgVTpHLCBVOkcsIFVEOkcKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKworTW92
ZUNvbmRpdGlvbmFsbHlUZXN0MzIgVTpHLCBVOkcsIFU6RywgVTpHLCBVRDpHCisgICAgUmVzQ29u
ZCwgVG1wLCBUbXAsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisK
K01vdmVDb25kaXRpb25hbGx5VGVzdDY0IFU6RywgVTpHLCBVOkcsIFU6RywgVUQ6RworICAgIFJl
c0NvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIFRtcCwgSW1tLCBUbXAsIFRt
cAorCitNb3ZlQ29uZGl0aW9uYWxseURvdWJsZSBVOkcsIFU6RiwgVTpGLCBVOkcsIFVEOkcKKyAg
ICBEb3VibGVDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKworTW92ZURvdWJsZUNvbmRpdGlvbmFs
bHkzMiBVOkcsIFU6RywgVTpHLCBVOkYsIFVEOkYKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1w
LCBUbXAKKworTW92ZURvdWJsZUNvbmRpdGlvbmFsbHk2NCBVOkcsIFU6RywgVTpHLCBVOkYsIFVE
OkYKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKworTW92ZURvdWJsZUNvbmRpdGlv
bmFsbHlUZXN0MzIgVTpHLCBVOkcsIFU6RywgVTpGLCBVRDpGCisgICAgUmVzQ29uZCwgVG1wLCBU
bXAsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisKK01vdmVEb3Vi
bGVDb25kaXRpb25hbGx5VGVzdDY0IFU6RywgVTpHLCBVOkcsIFU6RiwgVUQ6RgorICAgIFJlc0Nv
bmQsIFRtcCwgVG1wLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIFRtcCwgSW1tLCBUbXAsIFRtcAor
CitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZSBVOkcsIFU6RiwgVTpGLCBVOkYsIFVEOkYK
KyAgICBEb3VibGVDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAKKwogSnVtcCAvYnJhbmNoCiAKIFJl
dCAvdGVybWluYWwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2
aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50YWwgdHJhbnNp
dGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFdlIGRvbid0
CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhpcyBmbGFnIHdp
bGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQgdGhpcwogLy8g
dG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMAorI2RlZmluZSBG
VExfVVNFU19CMyAxCiAKIHN0cnVjdCBOb2RlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCShyZXZpc2lvbiAxOTI2ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDggKzgyLDEwIEBAIEluZGV4ZWRBYnN0cmFjdEhlYXA6OkluZGV4ZWRBYnN0cmFjdEhl
YXAKICAgICAsIG1faGVhcE5hbWVMZW5ndGgoc3RybGVuKGhlYXBOYW1lKSkKICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKICAgICAsIG1fZWxlbWVudFNpemUoZWxlbWVudFNpemUpCisjaWYgIUZUTF9V
U0VTX0IzCiAgICAgLCBtX3NjYWxlVGVybSgwKQogICAgICwgbV9jYW5TaGlmdChmYWxzZSkKKyNl
bmRpZgogewogI2lmIEZUTF9VU0VTX0IzCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwpAQCAt
MTEyLDcgKzExNCwxMCBAQCBUeXBlZFBvaW50ZXIgSW5kZXhlZEFic3RyYWN0SGVhcDo6YmFzZUlu
CiB7CiAgICAgaWYgKGluZGV4QXNDb25zdGFudC5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBv
dXQuYWRkcmVzcyhiYXNlLCBhdChpbmRleEFzQ29uc3RhbnQuYXNJbnQzMigpKSwgb2Zmc2V0KTsK
LSAgICAKKworI2lmIEZUTF9VU0VTX0IzCisgICAgTFZhbHVlIHJlc3VsdCA9IG91dC5hZGQoYmFz
ZSwgb3V0Lm11bChpbmRleCwgb3V0LmNvbnN0SW50UHRyKG1fZWxlbWVudFNpemUpKSk7CisjZWxz
ZQogICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKG1fY2FuU2hpZnQpIHsKICAgICAgICAgaWYg
KCFtX3NjYWxlVGVybSkKQEAgLTEyMSw2ICsxMjYsNyBAQCBUeXBlZFBvaW50ZXIgSW5kZXhlZEFi
c3RyYWN0SGVhcDo6YmFzZUluCiAgICAgICAgICAgICByZXN1bHQgPSBvdXQuYWRkKGJhc2UsIG91
dC5zaGwoaW5kZXgsIG1fc2NhbGVUZXJtKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9
IG91dC5hZGQoYmFzZSwgb3V0Lm11bChpbmRleCwgbV9zY2FsZVRlcm0pKTsKKyNlbmRpZgogICAg
IAogICAgIHJldHVybiBUeXBlZFBvaW50ZXIoYXRBbnlJbmRleCgpLCBvdXQuYWRkUHRyKHJlc3Vs
dCwgbV9vZmZzZXQgKyBvZmZzZXQpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTkyNjg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDgg
KzE4OCwxMCBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2hlYXBOYW1lTGVuZ3RoOwogICAgIHB0
cmRpZmZfdCBtX29mZnNldDsKICAgICBzaXplX3QgbV9lbGVtZW50U2l6ZTsKKyNpZiAhRlRMX1VT
RVNfQjMKICAgICBMVmFsdWUgbV9zY2FsZVRlcm07CiAgICAgYm9vbCBtX2NhblNoaWZ0OworI2Vu
ZGlmCiAgICAgc3RkOjphcnJheTxBYnN0cmFjdEZpZWxkLCAxNj4gbV9zbWFsbEluZGljZXM7CiAg
ICAgCiAgICAgc3RydWN0IFdpdGhvdXRaZXJvT3JPbmVIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmlj
SGFzaFRyYWl0czxwdHJkaWZmX3Q+IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQjNPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzT3V0cHV0LmgJKHJldmlzaW9uIDE5MjY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQjNPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSwxMSBAQCBwdWJs
aWM6CiAgICAgTFZhbHVlIHVuc2lnbmVkVG9GUChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
Q1JBU0goKTsgfQogICAgIExWYWx1ZSB1bnNpZ25lZFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkgeyBD
UkFTSCgpOyB9CiAgICAgTFZhbHVlIGludENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7
IENSQVNIKCk7IH0KLSAgICBMVmFsdWUgY2FzdFRvSW50MzIoTFZhbHVlIHZhbHVlKSB7IHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpUcnVuYywgb3JpZ2lu
KCksIHZhbHVlKTsgfQorICAgIExWYWx1ZSBjYXN0VG9JbnQzMihMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUtPnR5cGUoKSA9PSBCMzo6SW50MzIgPyB2YWx1ZSA6Cisg
ICAgICAgICAgICBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpUcnVu
Yywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICB9CiAgICAgTFZhbHVlIGZwQ2FzdChMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgQ1JBU0goKTsgfQogICAgIExWYWx1ZSBpbnRUb1B0cihMVmFsdWUg
dmFsdWUsIExUeXBlIHR5cGUpIHsgQ1JBU0goKTsgfQogICAgIExWYWx1ZSBwdHJUb0ludChMVmFs
dWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgQ1JBU0goKTsgfQpAQCAtMzQ0LDcgKzM0OCw3IEBAIHB1
YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNr
KSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVz
dE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChi
aXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUs
IExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IENSQVNIKCk7IH0KKyAgICBMVmFsdWUg
c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3Jp
Z2luKCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgTFZhbHVlIGV4dHJhY3RWYWx1
ZShMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyBDUkFTSCgpOyB9CiAKICAgICBMVmFs
dWUgZmVuY2UoTEF0b21pY09yZGVyaW5nIG9yZGVyaW5nID0gTExWTUF0b21pY09yZGVyaW5nU2Vx
dWVudGlhbGx5Q29uc2lzdGVudCwgU3luY2hyb25pemF0aW9uU2NvcGUgc2NvcGUgPSBDcm9zc1Ro
cmVhZCkgeyBDUkFTSCgpOyB9Cg==
</data>
<flag name="review"
          id="291020"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>