<?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>160638</bug_id>
          
          <creation_ts>2016-08-06 15:20:37 -0700</creation_ts>
          <short_desc>Replace NodeOrString with Variant&lt;RefPtr&lt;Node&gt;, String&gt;</short_desc>
          <delta_ts>2016-08-17 13:52:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218283</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-06 15:20:37 -0700</bug_when>
    <thetext>Replace NodeOrString with Variant&lt;Ref&lt;Node&gt;, String&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218285</commentid>
    <comment_count>1</comment_count>
      <attachid>285502</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-06 15:28:40 -0700</bug_when>
    <thetext>Created attachment 285502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218286</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-06 15:30:32 -0700</bug_when>
    <thetext>Attachment 285502 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:67:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1173:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1176:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1942:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1942:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1942:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 27 in 12 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>1218306</commentid>
    <comment_count>3</comment_count>
      <attachid>285512</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-06 18:35:51 -0700</bug_when>
    <thetext>Created attachment 285512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218308</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-06 18:36:41 -0700</bug_when>
    <thetext>Attachment 285512 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:75:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:75:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1181:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1181:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1181:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1184:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1184:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1950:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1950:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1950:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 27 in 12 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>1218311</commentid>
    <comment_count>5</comment_count>
      <attachid>285512</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-06 18:41:37 -0700</bug_when>
    <thetext>Comment on attachment 285512
Patch

Looks good. But seems that Variant.h does not yet compile with the compiler the gtk-wk2 bot is using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218366</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-07 09:38:21 -0700</bug_when>
    <thetext>GTK:

Variant.h:553:29: error: &apos;constexpr const _Type&amp;&amp; std::experimental::__variant_data&lt;_Type&gt;::__get_rref(std::experimental::in_place_index_t&lt;0ul&gt;) const&apos; cannot be overloaded
Variant.h:547:23: error: with &apos;constexpr _Type&amp;&amp; std::experimental::__variant_data&lt;_Type&gt;::__get_rref(std::experimental::in_place_index_t&lt;0ul&gt;) const&apos;
Variant.h:646:29: error: &apos;constexpr const _Head&amp;&amp; std::experimental::__variant_data&lt;_Head, _Rest ...&gt;::__get_rref(std::experimental::in_place_index_t&lt;0ul&gt;) const&apos; cannot be overloaded
Variant.h:638:23: error: with &apos;constexpr _Head&amp;&amp; std::experimental::__variant_data&lt;_Head, _Rest ...&gt;::__get_rref(std::experimental::in_place_index_t&lt;0ul&gt;) const&apos;

Can&apos;t figure out what the Windows error is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218401</commentid>
    <comment_count>7</comment_count>
      <attachid>285536</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-07 15:33:45 -0700</bug_when>
    <thetext>Created attachment 285536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218402</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-07 15:36:04 -0700</bug_when>
    <thetext>Attachment 285536 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:87:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:87:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1193:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1193:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1193:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1193:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1196:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1196:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1962:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1962:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1962:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 27 in 12 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>1218403</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-07 15:36:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; GTK:
&gt; 
&gt; Variant.h:553:29: error: &apos;constexpr const _Type&amp;&amp;
&gt; std::experimental::__variant_data&lt;_Type&gt;::__get_rref(std::experimental::
&gt; in_place_index_t&lt;0ul&gt;) const&apos; cannot be overloaded
&gt; Variant.h:547:23: error: with &apos;constexpr _Type&amp;&amp;
&gt; std::experimental::__variant_data&lt;_Type&gt;::__get_rref(std::experimental::
&gt; in_place_index_t&lt;0ul&gt;) const&apos;
&gt; Variant.h:646:29: error: &apos;constexpr const _Head&amp;&amp;
&gt; std::experimental::__variant_data&lt;_Head, _Rest
&gt; ...&gt;::__get_rref(std::experimental::in_place_index_t&lt;0ul&gt;) const&apos; cannot be
&gt; overloaded
&gt; Variant.h:638:23: error: with &apos;constexpr _Head&amp;&amp;
&gt; std::experimental::__variant_data&lt;_Head, _Rest
&gt; ...&gt;::__get_rref(std::experimental::in_place_index_t&lt;0ul&gt;) const&apos;
&gt; 

This seems to be due to the GCC version in use making all constexpr functions implicitly const, and therefore failing because it thinks the functions above are essentially the same.  I need to figure out what GCC is being used, since I am pretty sure this works in the latest GCC.

&gt; Can&apos;t figure out what the Windows error is.

Yeah, me either. That MSVC output is a mystery to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218404</commentid>
    <comment_count>10</comment_count>
      <attachid>285537</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-07 15:38:40 -0700</bug_when>
    <thetext>Created attachment 285537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218406</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-07 15:40:56 -0700</bug_when>
    <thetext>Attachment 285537 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:87:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:87:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1193:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1193:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1193:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1193:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1196:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1196:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1962:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1962:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1962:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 27 in 12 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>1218410</commentid>
    <comment_count>12</comment_count>
      <attachid>285541</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-07 15:51:52 -0700</bug_when>
    <thetext>Created attachment 285541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218411</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-07 15:53:04 -0700</bug_when>
    <thetext>Attachment 285541 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:75:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:75:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:547:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:547:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:547:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:547:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:638:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:638:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:638:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:638:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:657:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1181:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1181:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1181:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1184:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1184:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1950:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1950:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1950:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 37 in 12 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>1218426</commentid>
    <comment_count>14</comment_count>
      <attachid>285547</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-07 17:52:09 -0700</bug_when>
    <thetext>Created attachment 285547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218427</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-07 17:53:43 -0700</bug_when>
    <thetext>Attachment 285547 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:113:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:227:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:534:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:534:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:534:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:534:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:625:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:625:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:625:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:625:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:644:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1168:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1168:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1168:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1171:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1171:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1783:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1784:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1792:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1793:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1800:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1801:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1803:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1807:  Wrong number of spaces before statement. (expected: 28)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1807:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1814:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1815:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1817:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1821:  Wrong number of spaces before statement. (expected: 28)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1821:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1890:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1891:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1960:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1960:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1960:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1961:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 59 in 12 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>1218429</commentid>
    <comment_count>16</comment_count>
      <attachid>285548</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-07 18:02:21 -0700</bug_when>
    <thetext>Created attachment 285548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218430</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-07 18:04:21 -0700</bug_when>
    <thetext>Attachment 285548 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:113:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:227:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:534:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:534:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:534:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:534:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:625:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:625:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:625:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:625:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:644:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1168:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1168:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1168:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1171:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1171:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1783:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1784:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1792:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1793:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1800:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1801:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1803:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1807:  Wrong number of spaces before statement. (expected: 28)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1807:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1814:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1815:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1817:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1821:  Wrong number of spaces before statement. (expected: 28)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1821:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1890:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1891:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1960:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1960:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1960:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1961:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 59 in 12 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>1218546</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-08-08 12:03:57 -0700</bug_when>
    <thetext>I see the following errors in a local Windows build. It seems like 

24&gt;  WebSocketExtensionDispatcher.cpp
24&gt;C:\Projects\WebKit\OpenSource\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/Variant.h(1540): error C2039: &apos;value&apos;: is not a member of &apos;std::experimental::__noexcept_variant_non_const_copy_construct&lt;WTF::Ref&lt;WebCore::Node&gt;,WTF::String&gt;&apos; (compiling source file C:\Projects\WebKit\OpenSource\Source\WebCore\bindings\js\JSBindingsAllInOne.cpp)
24&gt;  C:\Projects\WebKit\OpenSource\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/Variant.h(1541): note: see declaration of &apos;std::experimental::__noexcept_variant_non_const_copy_construct&lt;WTF::Ref&lt;WebCore::Node&gt;,WTF::String&gt;&apos; (compiling source file C:\Projects\WebKit\OpenSource\Source\WebCore\bindings\js\JSBindingsAllInOne.cpp)
24&gt;  c:\projects\webkit\opensource\source\webcore\bindings\js\JSNodeOrString.cpp(46): note: see reference to class template instantiation &apos;std::experimental::variant&lt;WTF::Ref&lt;WebCore::Node&gt;,WTF::String&gt;&apos; being compiled (compiling source file C:\Projects\WebKit\OpenSource\Source\WebCore\bindings\js\JSBindingsAllInOne.cpp)
24&gt;C:\Projects\WebKit\OpenSource\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/Variant.h(1547): error C2039: &apos;value&apos;: is not a member of &apos;std::experimental::__noexcept_variant_const_copy_construct&lt;WTF::Ref&lt;WebCore::Node&gt;,WTF::String&gt;&apos; (compiling source file C:\Projects\WebKit\OpenSource\Source\WebCore\bindings\js\JSBindingsAllInOne.cpp)
24&gt;  C:\Projects\WebKit\OpenSource\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/Variant.h(1548): note: see declaration of &apos;std::experimental::__noexcept_variant_const_copy_construct&lt;WTF::Ref&lt;WebCore::Node&gt;,WTF::String&gt;&apos; (compiling source file C:\Projects\WebKit\OpenSource\Source\WebCore\bindings\js\JSBindingsAllInOne.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218547</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-08-08 12:04:37 -0700</bug_when>
    <thetext>It seems like this might indicate the VS2015 C++ implementation isn&apos;t fully baked for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218549</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-08-08 12:11:05 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; It seems like this might indicate the VS2015 C++ implementation isn&apos;t fully
&gt; baked for this.

Actually, it seems to be resolving to some weird “std::experimental” namespace, rather than using the implementation in Variant.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218568</commentid>
    <comment_count>21</comment_count>
      <attachid>285584</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-08 13:33:59 -0700</bug_when>
    <thetext>Created attachment 285584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218571</commentid>
    <comment_count>22</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-08 13:36:17 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; It seems like this might indicate the VS2015 C++ implementation isn&apos;t fully
&gt; &gt; baked for this.
&gt; 
&gt; Actually, it seems to be resolving to some weird “std::experimental”
&gt; namespace, rather than using the implementation in Variant.h.

No, I used a type alias to rename std::experimental::variant to WTF::Variant, which is why we are seeing this.  It looks like maybe non-copyable types (e.g. Ref) aren&apos;t working in it. For now, I am going to see if RefPtr works and figure out later how to make Ref work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218572</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-08 13:36:37 -0700</bug_when>
    <thetext>Attachment 285584 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:113:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:535:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:535:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:626:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:626:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:645:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1169:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1172:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1784:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1793:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1801:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1802:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1802:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1808:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1809:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1809:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1877:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1878:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1948:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:322:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 54 in 12 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>1218605</commentid>
    <comment_count>24</comment_count>
      <attachid>285597</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-08 16:04:20 -0700</bug_when>
    <thetext>Created attachment 285597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218607</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-08 16:05:30 -0700</bug_when>
    <thetext>Attachment 285597 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:113:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:535:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:535:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:626:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:626:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:645:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1169:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1172:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1784:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1793:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1801:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1802:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1802:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1808:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1809:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1809:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1877:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1878:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1948:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 59 in 12 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>1218613</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-08-08 16:13:30 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; No, I used a type alias to rename std::experimental::variant to
&gt; WTF::Variant, which is why we are seeing this.  It looks like maybe
&gt; non-copyable types (e.g. Ref) aren&apos;t working in it. For now, I am going to
&gt; see if RefPtr works and figure out later how to make Ref work.

For what it&apos;s worth, I tried VS 2015 Update 3 and it was not successful building either. :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218654</commentid>
    <comment_count>27</comment_count>
      <attachid>285597</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-08 17:32:38 -0700</bug_when>
    <thetext>Comment on attachment 285597
Patch

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

&gt; Source/WebCore/dom/Node.cpp:497
&gt; +    return WTFMove(nodeToReturn);

No need for move here (it&apos;ll actually pessimism the NVRO).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218689</commentid>
    <comment_count>28</comment_count>
      <attachid>285628</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-08 21:02:39 -0700</bug_when>
    <thetext>Created attachment 285628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218690</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-08 21:03:37 -0700</bug_when>
    <thetext>Attachment 285628 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:113:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:535:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:535:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:626:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:626:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:645:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1169:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1172:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1784:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1793:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1801:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1802:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1802:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1808:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1809:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1809:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1877:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1878:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1948:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 59 in 13 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>1218729</commentid>
    <comment_count>30</comment_count>
      <attachid>285637</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-09 07:17:25 -0700</bug_when>
    <thetext>Created attachment 285637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218730</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-09 07:18:19 -0700</bug_when>
    <thetext>Attachment 285637 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:113:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:535:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:535:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:535:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:626:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:626:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:626:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:645:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1169:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1169:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1172:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1172:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1784:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1785:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1786:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1793:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1794:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1795:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1801:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1802:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1802:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1808:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1809:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1809:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1877:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1878:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1947:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1948:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:144:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:145:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:158:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:179:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:180:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:188:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 65 in 13 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>1218764</commentid>
    <comment_count>32</comment_count>
      <attachid>285648</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-09 10:44:59 -0700</bug_when>
    <thetext>Created attachment 285648
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218765</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-09 10:46:46 -0700</bug_when>
    <thetext>Attachment 285648 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:117:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:539:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:539:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:630:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:630:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:649:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:649:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1173:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1176:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1533:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1533:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1539:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1546:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1553:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1698:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1701:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1728:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1731:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1788:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1789:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1797:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1798:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1806:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1806:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1813:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1813:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1841:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1881:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1882:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1952:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2053:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 70 in 13 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>1218767</commentid>
    <comment_count>34</comment_count>
      <attachid>285649</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-09 10:56:53 -0700</bug_when>
    <thetext>Created attachment 285649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218768</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-09 10:59:31 -0700</bug_when>
    <thetext>Attachment 285649 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:117:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:539:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:539:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:630:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:630:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:649:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:649:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1173:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1176:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1533:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1533:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1539:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1546:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1553:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1698:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1701:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1728:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1731:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1788:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1789:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1797:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1798:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1806:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1806:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1813:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1813:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1841:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1881:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1882:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1952:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2053:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 70 in 13 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>1218770</commentid>
    <comment_count>36</comment_count>
      <attachid>285650</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-09 11:08:30 -0700</bug_when>
    <thetext>Created attachment 285650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218772</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-09 11:10:35 -0700</bug_when>
    <thetext>Attachment 285650 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:117:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:539:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:539:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:630:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:630:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:649:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:649:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1173:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1176:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1533:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1533:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1539:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1546:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1553:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1698:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1701:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1728:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1731:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1788:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1789:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1797:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1798:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1806:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1806:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1813:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1813:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1841:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1881:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1882:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1952:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2053:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 70 in 13 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>1218777</commentid>
    <comment_count>38</comment_count>
      <attachid>285653</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-09 11:32:48 -0700</bug_when>
    <thetext>Created attachment 285653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218779</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-09 11:34:46 -0700</bug_when>
    <thetext>Attachment 285653 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:117:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:117:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:539:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:539:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:539:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:630:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:630:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:630:  __get_rref is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:649:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:649:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1173:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1173:  __move_construct_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1176:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1176:  __destroy_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1533:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1533:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1539:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1546:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1553:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1698:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1701:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1728:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1731:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1788:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1789:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1790:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1797:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1798:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1799:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1806:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1806:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1813:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1813:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1841:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1881:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1882:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1951:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1952:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2053:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:41:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:45:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/StdLibExtras.h:323:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:324:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/StdLibExtras.h:409:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:410:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::get_if;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:411:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::holds_alternative;&apos;.  [build/using_std] [4]
ERROR: Source/WTF/wtf/StdLibExtras.h:412:  Use &apos;using namespace std;&apos; instead of &apos;using std::experimental::visit;&apos;.  [build/using_std] [4]
Total errors found: 70 in 13 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>1218872</commentid>
    <comment_count>40</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-09 15:38:58 -0700</bug_when>
    <thetext>Landed with:
https://trac.webkit.org/changeset/204291
https://trac.webkit.org/changeset/204302</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219824</commentid>
    <comment_count>41</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-12 18:39:14 -0700</bug_when>
    <thetext>r204291 made WebKit build 1 to 2 minutes slower (on Mac Pro hardware).

I think that that is a sufficient reason for rolling out, please let me know soon if you disagree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219939</commentid>
    <comment_count>42</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-14 13:15:34 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; r204291 made WebKit build 1 to 2 minutes slower (on Mac Pro hardware).
&gt; 
&gt; I think that that is a sufficient reason for rolling out, please let me know
&gt; soon if you disagree.

I disagree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219954</commentid>
    <comment_count>43</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-14 14:45:36 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #41)
&gt; &gt; r204291 made WebKit build 1 to 2 minutes slower (on Mac Pro hardware).
&gt; &gt; 
&gt; &gt; I think that that is a sufficient reason for rolling out, please let me know
&gt; &gt; soon if you disagree.
&gt; 
&gt; I disagree.

I filed https://bugs.webkit.org/show_bug.cgi?id=160847 to track fixing the compile time regression and am working on a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219958</commentid>
    <comment_count>44</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-14 15:33:14 -0700</bug_when>
    <thetext>Thanks. If the regression remains, I will roll out - build performance is a lot more important than this refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219989</commentid>
    <comment_count>45</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-14 17:46:51 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Thanks. If the regression remains, I will roll out - build performance is a
&gt; lot more important than this refactoring.

I don&apos;t think that is your decision to make alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219994</commentid>
    <comment_count>46</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-14 18:10:04 -0700</bug_when>
    <thetext>Sam, I understand that you&apos;ve put a lot of effort into this patch, and into fixing fallout from it.

You can certainly start a discussion about value of build performance on webkit-dev if you feel that it is appropriate. To me, the case seems so exceedingly obvious that discussing it would not be a good use of everyone&apos;s time.

It will also be unnecessary to debate this specific instance if bug 160847 brings build performance back to original level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220546</commentid>
    <comment_count>47</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-16 13:17:30 -0700</bug_when>
    <thetext>The changes in bug 160847 were an improvement, but we are still 30-40 seconds worse than before the refactoring. Since that&apos;s on a Mac Pro, the cost would be higher on a laptop computer.

Sam, do you have ideas for further improvement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220951</commentid>
    <comment_count>48</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-17 13:52:21 -0700</bug_when>
    <thetext>Sam and I looked at the graphs, and there is not enough data to believe that this patch is responsible for the remaining regression. Sadly, it won&apos;t be easy to pinpoint.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285502</attachid>
            <date>2016-08-06 15:28:40 -0700</date>
            <delta_ts>2016-08-06 18:35:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160806152711.patch</filename>
            <type>text/plain</type>
            <size>33642</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjI3KQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIyNykKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNjMsNyArNjQsNyBAQCBu
YW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2Vsc2UKIAotc3RhdGljIGlubGluZSB2b2lkIF9f
Y3Jhc2hfaGVscGVyKGJvb2wpeworTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgaW5saW5l
IHZvaWQgX19jcmFzaF9oZWxwZXIoYm9vbCl7CiAgICAgQ1JBU0goKTsKIH0KIHN0YXRpYyBpbmxp
bmUgY29uc3RleHByIGJvb2wgX19jb25zdGV4cHJfY3Jhc2hfaWYoYm9vbCB0ZXN0KXsKQEAgLTEx
NjksMTAgKzExNzAsMTAgQEAgc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzewogCiB0ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgogc3RydWN0IF9fYmFja3VwX3N0
b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAgIHN0YXRpYyB2b2lkIF9fbW92
ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2Upewor
ICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdl
Jil7CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwogICAgIH07
Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7CisgICAg
c3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7CiAgICAgICAgIF9fVEhST1df
RVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwogICAgIH07CiB9OwpAQCAtMTkzOCw3ICsxOTM5
LDcgQEAgdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IAogc3RydWN0IF9f
dmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgogICAgIHN0YXRpYyBj
b25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9W
YXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFy
aWFudHMmJiAuLi4gX192KXsKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFyaWFudHMmJiAuLi4p
ewogICAgICAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKHRydWUsIGJhZF92YXJp
YW50X2FjY2VzcygiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKICAgICB9CiB9OwpAQCAt
MjA1NCwzICsyMDU1LDEyIEBAIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlw
ZXMKIH07CiAKIH0gLy8gbmFtZXNwYWNlIHN0ZAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit1c2luZyBWYXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6
OnZhcmlhbnQ8VHlwZXMuLi4+OworCit9CisKK3VzaW5nIFdURjo6VmFyaWFudDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
IFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9jcHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVw
ZW5kKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90
SW5Ob2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjphZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0
aCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcg
d2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPiBhbmQgbW92ZSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZQorICAgICAgICBpbnRvIE5vZGUuCisKKyAgICAgICAgKiBkb20vTm9kZU9y
U3RyaW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZU9yU3RyaW5nLmg6IFJlbW92
ZWQuCisKIDIwMTYtMDgtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsaWZ5IHZhbHVlVG9VU1ZTdHJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMDQyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRv
bS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAogICAgIGRvbS9Ob2Rl
SXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmluZy5jcHAKICAgICBkb20vTm9kZVJhcmVE
YXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA0MjI3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODQzLDggKzI4NDMs
NiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkExODdGMzcw
NzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovOyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5
MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRD
b252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi87IH07Ci0JCTdDRUFD
MTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8q
IE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRDNTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBD
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50
RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RDRD
OTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAgLTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJ
N0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNC
RkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIg
LyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVP
clN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwODFCNDgzRDdG
MDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkVycm9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0
QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTQyLDggKzI0MTM4LDYgQEAKIAkJCQkxQTc1
MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJhdG9yLmlkbCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4
MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAv
KiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9k
ZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJh
cmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJT
dHlsZS5oICovLApAQCAtMjY5MDQsNyArMjY4OTgsNiBAQAogCQkJCTg1NEZFNzMzMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRG
RTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJCMTY3NTBGMTYwMERCMkZCOCAvKiBOb2Rl
VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzA2LDcgKzMwNjk5LDYgQEAKIAkJCQlB
OEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZGQzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8q
IE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDMxMDVCODE2NzUwRjBDMDBE
QjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEw
MTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNp
b24gMjA0MjI3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVP
clN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQorVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+
LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCi0gICAgVmVj
dG9yPE5vZGVPclN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4gcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3Vt
ZW50Q291bnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkp
OwogICAgICAgICBpZiAoYXV0byogbm9kZSA9IGpzRHluYW1pY0Nhc3Q8SlNOb2RlKj4odmFsdWUp
KQotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgmbm9kZS0+d3JhcHBlZCgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobm9kZS0+d3JhcHBlZCgpKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoJnN0YXRlKTsKICAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkocmV2aXNpb24g
MjA0MjI3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBKU05vZGVPclN0cmluZ19o
CiAjZGVmaW5lIEpTTm9kZU9yU3RyaW5nX2gKIAotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzUsNyArMzYsOSBAQCBj
bGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVPclN0
cmluZz4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUmKTsKK2NsYXNzIE5vZGU7
CisKK1ZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0
b3IoSlNDOjpFeGVjU3RhdGUmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyMjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAi
Tm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4
NzIsMTggQEAgdW5zaWduZWQgQ29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJl
dHVybiBzdGQ6OmRpc3RhbmNlKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0K
IAotdm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjph
cHBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1Zl
Y3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252
ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0
b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJ
bnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwg
IW5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGVuZENoaWxkKCpub2RlLCBlYyk7CiB9
CiAKLXZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6
OnByZXBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmlu
Z1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdW
ZWN0b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmlu
Z3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMg
fHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCShyZXZpc2lvbiAyMDQyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHB1YmxpYzoKICAgICBFbGVt
ZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIEVsZW1lbnQqIGxhc3RFbGVtZW50
Q2hpbGQoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0Owot
ICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgZW5zdXJlUHJlSW5z
ZXJ0aW9uVmFsaWRpdHkoTm9kZSYgbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25D
b2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkocmV2aXNpb24gMjA0
MjI3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEyLDcgKzExMiw2IEBACiAjaW5jbHVkZSAiTm9kZS5jcHAiCiAjaW5jbHVkZSAiTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmNwcCIKLSNpbmNs
dWRlICJOb2RlT3JTdHJpbmcuY3BwIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5jcHAiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5jcHAiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5jcHAiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDQyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbi5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgog
I2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKQEAgLTQzOCwxOCArNDM3LDE3IEBAIGJvb2wgTm9k
ZTo6YXBwZW5kQ2hpbGQoTm9kZSYgbmV3Q2hpbGQsIEUKICAgICByZXR1cm4gZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4oKnRoaXMpLmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYyk7CiB9CiAKLXN0YXRp
YyBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0
cmluZ1ZlY3Rvcihjb25zdCBWZWN0b3I8Tm9kZU9yU3RyaW5nPiYgbm9kZU9yU3RyaW5nVmVjdG9y
KQorc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9t
Tm9kZU9yU3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mIHZlY3RvcikKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldDsKLSAgICBm
b3IgKGF1dG8mIG5vZGVPclN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKG5vZGVPclN0cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6
OlR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0
cmluZzo6VHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG5vZGVTZXQuYWRkKCZub2RlT3JTdHJpbmcu
bm9kZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCisgICAgYXV0
byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxO
b2RlPiYgbm9kZSkgeyBub2RlU2V0LmFkZChjb25zdF9jYXN0PE5vZGUqPihub2RlLnB0cigpKSk7
IH0sCisgICAgICAgIFtdKGNvbnN0IFN0cmluZyYpIHsgfQorICAgICk7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDcy
LDcgKzQ3MCwzNCBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGluCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxO
b2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAgICBub2Rlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOworCisgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKFJlZjxOb2Rl
PiYgbm9kZSkgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZS5jb3B5UmVmKCkpOyB9LAorICAg
ICAgICBbJl0oU3RyaW5nJiBzdHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBzdHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBub2RlT3JTdHJpbmdWZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1Jl
dHVybiA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1
dG8mIG5vZGUgOiBub2RlcykgeworICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hp
bGQobm9kZSwgZWMpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJl
dHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3Rv
cjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2Rl
OjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVT
ZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9y
KTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3VzU2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGlu
Z05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0
Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3Ip
LCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RG
TW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJs
ZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3Rv
cjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRh
aW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUw
MiwxNCArNTI3LDE0IEBAIHZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiAK
ICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5n
VmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9
IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92
ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZSgqbm9kZSwgdmlhYmxlTmV4dFNpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2Rl
OjpyZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3Rvciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CiAgICAgaWYgKCFwYXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBOb2RlOjpyZXBsYWNl
V2l0aChWZWN0b3I8Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFu
c2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBh
dXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0
KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBh
dXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0
cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDQyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBuZWVkcyB0byBiZSBo
ZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAjZGVmaW5lIERVTVBf
Tk9ERV9TVEFUSVNUSUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0aE1MUXVhbGlmaWVk
TmFtZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgTm9kZUxp
c3RzTm9kZURhdGE7Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2RlUmFyZURhdGE7CiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4LDkgKzIwOCw5IEBA
IHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdDsKIAogICAg
IC8vIEZyb20gdGhlIENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY2hp
bGRub2RlCi0gICAgdm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPFZhcmlh
bnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZXBs
YWNlV2l0aChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDgg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNo
YW5nZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNr
KSB8IGNoYW5nZVR5cGU7IH0KICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxj
KCk7CiAKKyAgICBSZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVj
dG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDIyNykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNs
dWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9y
U3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3Ry
aW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRv
Y3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMu
dW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4g
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5k
Q2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDIyNykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBO
b2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsK
LXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAg
IE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAg
fQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6
Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0
YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3Ry
aW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAg
ICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1f
ZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0g
ICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAg
ICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2Rh
dGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVm
RGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJp
bmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToK
LSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAg
ICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9y
PShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQot
ICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5v
ZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQot
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBu
b2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRh
Lm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkg
Y29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3Ry
aW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQg
ZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAg
ICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAg
U3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwot
fTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNv
bnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDIz
MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFj
ZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIHRo
ZSBpbml0aWFsIHN0YXRlIG9mIFZhcmlhbnQgYW5kIHVzaW5nCisgICAgICAgIG1ha2VPdmVybG9h
ZGVyIGZvciB2aXNpdGluZy4KKwogMjAxNi0wOC0wNiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRVdTIFN0eWxlIFF1ZXVlIGZhaWxzIHRvIHByb2Nlc3Mg
cGF0Y2hlcyB3aGljaCBmYWlscyB2YWxpZGF0aW9uCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0MjMwKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsy
Niw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQ291bnRlcnMuaCIKLSNp
bmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAorVEVTVChXVEZfVmFyaWFu
dCwgSW5pdGlhbCkKK3sKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2MTsKKyAgICBFWFBFQ1Rf
VFJVRSh2MS5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFs
OjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAgIFQoKSA6IHZh
bHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBWYXJpYW50PFQs
IGludD4gdjI7CisgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1Rf
VFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2YXJp
YW50ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMCk7CiAgICAgRVhQ
RUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOworICAg
IEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0g
MSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldF9pZjxkb3VibGU+KHZh
cmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpo
b2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpl
eHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworCisgICAg
dmFyaWFudCA9IDEuMDsKKyAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7Cisg
ICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxkb3VibGU+KHZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJsZT4o
dmFyaWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0
X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBl
cmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVD
VF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50
KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIHsKLSAgICB0eXBlZGVm
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gVmFyaWFudDsK
LQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIEludCwKQEAg
LTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgICAgICBT
dHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3IgewogICAgICAgICBWaXNpdG9y
KFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDcgKzk0LDcgQEAgVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsK
IAotICAgIFZhcmlhbnQgdmFyaWFudCA9IDg7CisgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJp
bmc+IHZhcmlhbnQgPSA4OwogICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5
cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKQEAg
LTg0LDE1ICsxMDksNDUgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAorVEVTVChXVEZfVmFyaWFudCwg
VmlzaXRvclVzaW5nTWFrZU92ZXJsb2FkZXIpCit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAg
ICAgICAgTm9uZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwKKyAgICAgICAgU3RyaW5n
LAorICAgIH07CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOworCisgICAgYXV0byB2aXNp
dG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGludCkgeyB0eXBlID0gVHlw
ZTo6SW50OyB9LAorICAgICAgICBbJl0oZmxvYXQpIHsgdHlwZSA9IFR5cGU6OkZsb2F0OyB9LAor
ICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KKyAgICApOworCisg
ICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBl
OjpJbnQgPT0gdHlwZSk7CisKKworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpG
bG9hdCA9PSB0eXBlKTsKKworCisgICAgdmFyaWFudCA9ICJoZWxsbyI7CisgICAgc3RkOjpleHBl
cmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6
OlN0cmluZyA9PSB0eXBlKTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IFZhcmlhbnQ7Ci0g
CiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwog
CiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFudCB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworICAgICAgICBWYXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVTVChXVEZfVmFy
aWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRFU1QoV1RGX1Zh
cmlhbnQsIFJlZkNvdW50aW5nKQorVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQogewotICAgIHR5
cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4g
VmFyaWFudDsKLQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVmOworICAgICAg
ICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKQEAgLTExNyw3ICsxNzAsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgUmVm
Q291bnRpbmcpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSBXVEZNb3ZlKHJlZik7
CisgICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVm
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1ZhcmlhbnQsIFJlZikKK3sKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgVmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285512</attachid>
            <date>2016-08-06 18:35:51 -0700</date>
            <delta_ts>2016-08-07 15:33:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160806183422.patch</filename>
            <type>text/plain</type>
            <size>33984</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsNiArNDksMTQgQEAK
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgogCisjaWYgQ09N
UElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDI0NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MjEpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTo0NTIyKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDgxNCkKKyNlbmRpZgorCiBu
YW1lc3BhY2Ugc3RkIHsKIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCkBAIC02Myw3ICs3Miw3
IEBAIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCiAjZWxzZQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgX19jcmFzaF9oZWxwZXIoYm9vbCl7CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyBp
bmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKICAgICBDUkFTSCgpOwogfQogc3RhdGlj
IGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFzaF9pZihib29sIHRlc3QpewpA
QCAtMTE2OSwxMCArMTE3OCwxMCBAQCBzdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHN7CiAKIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CiBzdHJ1Y3QgX19iYWNr
dXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQg
X19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJj
ZSl7CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICosX1N0
b3JhZ2UmKXsKICAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAg
ICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqIF9fb2JqKXsK
KyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsKICAgICAgICAgX19U
SFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAgICAgfTsKIH07CkBAIC0xOTM4LDcg
KzE5NDcsNyBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgCiBzdHJ1
Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+ewogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9y
LF9WYXJpYW50cyYmIC4uLiBfX3YpeworICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYm
IC4uLil7CiAgICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOwogICAgIH0KIH07
CkBAIC0yMDU0LDMgKzIwNjMsMTYgQEAgc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50
PF9UeXBlcwogfTsKIAogfSAvLyBuYW1lc3BhY2Ugc3RkCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3VzaW5nIFZhcmlhbnQgPSBzdGQ6OmV4cGVyaW1l
bnRhbDo6dmFyaWFudDxUeXBlcy4uLj47CisKK30KKwordXNpbmcgV1RGOjpWYXJpYW50OworCisj
aWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
IFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9jcHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVw
ZW5kKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90
SW5Ob2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjphZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0
aCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcg
d2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPiBhbmQgbW92ZSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZQorICAgICAgICBpbnRvIE5vZGUuCisKKyAgICAgICAgKiBkb20vTm9kZU9y
U3RyaW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZU9yU3RyaW5nLmg6IFJlbW92
ZWQuCisKIDIwMTYtMDgtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsaWZ5IHZhbHVlVG9VU1ZTdHJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRv
bS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAogICAgIGRvbS9Ob2Rl
SXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmluZy5jcHAKICAgICBkb20vTm9kZVJhcmVE
YXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODQzLDggKzI4NDMs
NiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkExODdGMzcw
NzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovOyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5
MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRD
b252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi87IH07Ci0JCTdDRUFD
MTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8q
IE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRDNTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBD
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50
RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RDRD
OTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAgLTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJ
N0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNC
RkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIg
LyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVP
clN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwODFCNDgzRDdG
MDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkVycm9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0
QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTQyLDggKzI0MTM4LDYgQEAKIAkJCQkxQTc1
MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJhdG9yLmlkbCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4
MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAv
KiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9k
ZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJh
cmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJT
dHlsZS5oICovLApAQCAtMjY5MDQsNyArMjY4OTgsNiBAQAogCQkJCTg1NEZFNzMzMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRG
RTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJCMTY3NTBGMTYwMERCMkZCOCAvKiBOb2Rl
VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzA2LDcgKzMwNjk5LDYgQEAKIAkJCQlB
OEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZGQzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8q
IE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDMxMDVCODE2NzUwRjBDMDBE
QjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEw
MTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNp
b24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVP
clN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQorVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+
LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCi0gICAgVmVj
dG9yPE5vZGVPclN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4gcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3Vt
ZW50Q291bnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkp
OwogICAgICAgICBpZiAoYXV0byogbm9kZSA9IGpzRHluYW1pY0Nhc3Q8SlNOb2RlKj4odmFsdWUp
KQotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgmbm9kZS0+d3JhcHBlZCgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobm9kZS0+d3JhcHBlZCgpKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoJnN0YXRlKTsKICAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkocmV2aXNpb24g
MjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBKU05vZGVPclN0cmluZ19o
CiAjZGVmaW5lIEpTTm9kZU9yU3RyaW5nX2gKIAotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzUsNyArMzYsOSBAQCBj
bGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVPclN0
cmluZz4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUmKTsKK2NsYXNzIE5vZGU7
CisKK1ZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0
b3IoSlNDOjpFeGVjU3RhdGUmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAi
Tm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4
NzIsMTggQEAgdW5zaWduZWQgQ29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJl
dHVybiBzdGQ6OmRpc3RhbmNlKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0K
IAotdm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjph
cHBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1Zl
Y3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252
ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0
b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJ
bnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwg
IW5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGVuZENoaWxkKCpub2RlLCBlYyk7CiB9
CiAKLXZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6
OnByZXBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmlu
Z1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdW
ZWN0b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmlu
Z3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMg
fHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHB1YmxpYzoKICAgICBFbGVt
ZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIEVsZW1lbnQqIGxhc3RFbGVtZW50
Q2hpbGQoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0Owot
ICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgZW5zdXJlUHJlSW5z
ZXJ0aW9uVmFsaWRpdHkoTm9kZSYgbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25D
b2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkocmV2aXNpb24gMjA0
MjMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEyLDcgKzExMiw2IEBACiAjaW5jbHVkZSAiTm9kZS5jcHAiCiAjaW5jbHVkZSAiTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmNwcCIKLSNpbmNs
dWRlICJOb2RlT3JTdHJpbmcuY3BwIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5jcHAiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5jcHAiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5jcHAiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbi5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgog
I2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKQEAgLTQzOCwxOCArNDM3LDE3IEBAIGJvb2wgTm9k
ZTo6YXBwZW5kQ2hpbGQoTm9kZSYgbmV3Q2hpbGQsIEUKICAgICByZXR1cm4gZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4oKnRoaXMpLmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYyk7CiB9CiAKLXN0YXRp
YyBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0
cmluZ1ZlY3Rvcihjb25zdCBWZWN0b3I8Tm9kZU9yU3RyaW5nPiYgbm9kZU9yU3RyaW5nVmVjdG9y
KQorc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9t
Tm9kZU9yU3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mIHZlY3RvcikKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldDsKLSAgICBm
b3IgKGF1dG8mIG5vZGVPclN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKG5vZGVPclN0cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6
OlR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0
cmluZzo6VHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG5vZGVTZXQuYWRkKCZub2RlT3JTdHJpbmcu
bm9kZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCisgICAgYXV0
byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxO
b2RlPiYgbm9kZSkgeyBub2RlU2V0LmFkZChjb25zdF9jYXN0PE5vZGUqPihub2RlLnB0cigpKSk7
IH0sCisgICAgICAgIFtdKGNvbnN0IFN0cmluZyYpIHsgfQorICAgICk7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDcy
LDcgKzQ3MCwzNCBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGluCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxO
b2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAgICBub2Rlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOworCisgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKFJlZjxOb2Rl
PiYgbm9kZSkgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZS5jb3B5UmVmKCkpOyB9LAorICAg
ICAgICBbJl0oU3RyaW5nJiBzdHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBzdHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBub2RlT3JTdHJpbmdWZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1Jl
dHVybiA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1
dG8mIG5vZGUgOiBub2RlcykgeworICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hp
bGQobm9kZSwgZWMpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJl
dHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3Rv
cjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2Rl
OjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVT
ZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9y
KTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3VzU2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGlu
Z05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0
Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3Ip
LCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RG
TW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJs
ZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3Rv
cjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRh
aW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUw
MiwxNCArNTI3LDE0IEBAIHZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiAK
ICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5n
VmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9
IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92
ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZSgqbm9kZSwgdmlhYmxlTmV4dFNpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2Rl
OjpyZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3Rvciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CiAgICAgaWYgKCFwYXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBOb2RlOjpyZXBsYWNl
V2l0aChWZWN0b3I8Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFu
c2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBh
dXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0
KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBh
dXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0
cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBuZWVkcyB0byBiZSBo
ZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAjZGVmaW5lIERVTVBf
Tk9ERV9TVEFUSVNUSUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0aE1MUXVhbGlmaWVk
TmFtZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgTm9kZUxp
c3RzTm9kZURhdGE7Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2RlUmFyZURhdGE7CiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4LDkgKzIwOCw5IEBA
IHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdDsKIAogICAg
IC8vIEZyb20gdGhlIENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY2hp
bGRub2RlCi0gICAgdm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPFZhcmlh
bnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZXBs
YWNlV2l0aChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDgg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNo
YW5nZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNr
KSB8IGNoYW5nZVR5cGU7IH0KICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxj
KCk7CiAKKyAgICBSZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVj
dG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDIzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNs
dWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9y
U3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3Ry
aW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRv
Y3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMu
dW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4g
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5k
Q2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDIzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBO
b2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsK
LXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAg
IE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAg
fQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6
Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0
YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3Ry
aW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAg
ICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1f
ZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0g
ICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAg
ICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2Rh
dGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVm
RGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJp
bmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToK
LSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAg
ICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9y
PShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQot
ICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5v
ZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQot
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBu
b2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRh
Lm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkg
Y29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3Ry
aW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQg
ZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAg
ICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAg
U3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwot
fTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNv
bnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDIz
MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFj
ZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIHRo
ZSBpbml0aWFsIHN0YXRlIG9mIFZhcmlhbnQgYW5kIHVzaW5nCisgICAgICAgIG1ha2VPdmVybG9h
ZGVyIGZvciB2aXNpdGluZy4KKwogMjAxNi0wOC0wNiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRVdTIFN0eWxlIFF1ZXVlIGZhaWxzIHRvIHByb2Nlc3Mg
cGF0Y2hlcyB3aGljaCBmYWlscyB2YWxpZGF0aW9uCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0MjMxKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsy
Niw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQ291bnRlcnMuaCIKLSNp
bmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAorVEVTVChXVEZfVmFyaWFu
dCwgSW5pdGlhbCkKK3sKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2MTsKKyAgICBFWFBFQ1Rf
VFJVRSh2MS5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFs
OjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAgIFQoKSA6IHZh
bHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBWYXJpYW50PFQs
IGludD4gdjI7CisgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1Rf
VFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2YXJp
YW50ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMCk7CiAgICAgRVhQ
RUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOworICAg
IEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0g
MSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldF9pZjxkb3VibGU+KHZh
cmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpo
b2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpl
eHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworCisgICAg
dmFyaWFudCA9IDEuMDsKKyAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7Cisg
ICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxkb3VibGU+KHZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJsZT4o
dmFyaWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0
X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBl
cmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVD
VF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50
KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIHsKLSAgICB0eXBlZGVm
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gVmFyaWFudDsK
LQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIEludCwKQEAg
LTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgICAgICBT
dHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3IgewogICAgICAgICBWaXNpdG9y
KFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDcgKzk0LDcgQEAgVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsK
IAotICAgIFZhcmlhbnQgdmFyaWFudCA9IDg7CisgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJp
bmc+IHZhcmlhbnQgPSA4OwogICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5
cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKQEAg
LTg0LDE1ICsxMDksNDUgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAorVEVTVChXVEZfVmFyaWFudCwg
VmlzaXRvclVzaW5nTWFrZU92ZXJsb2FkZXIpCit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAg
ICAgICAgTm9uZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwKKyAgICAgICAgU3RyaW5n
LAorICAgIH07CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOworCisgICAgYXV0byB2aXNp
dG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGludCkgeyB0eXBlID0gVHlw
ZTo6SW50OyB9LAorICAgICAgICBbJl0oZmxvYXQpIHsgdHlwZSA9IFR5cGU6OkZsb2F0OyB9LAor
ICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KKyAgICApOworCisg
ICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBl
OjpJbnQgPT0gdHlwZSk7CisKKworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpG
bG9hdCA9PSB0eXBlKTsKKworCisgICAgdmFyaWFudCA9ICJoZWxsbyI7CisgICAgc3RkOjpleHBl
cmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6
OlN0cmluZyA9PSB0eXBlKTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IFZhcmlhbnQ7Ci0g
CiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwog
CiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFudCB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworICAgICAgICBWYXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVTVChXVEZfVmFy
aWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRFU1QoV1RGX1Zh
cmlhbnQsIFJlZkNvdW50aW5nKQorVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQogewotICAgIHR5
cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4g
VmFyaWFudDsKLQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVmOworICAgICAg
ICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKQEAgLTExNyw3ICsxNzAsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgUmVm
Q291bnRpbmcpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSBXVEZNb3ZlKHJlZik7
CisgICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVm
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1ZhcmlhbnQsIFJlZikKK3sKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgVmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285536</attachid>
            <date>2016-08-07 15:33:45 -0700</date>
            <delta_ts>2016-08-07 15:38:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160807153214.patch</filename>
            <type>text/plain</type>
            <size>34155</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsNiArNDksMjYgQEAK
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgogCisjaWYgQ09N
UElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDI0NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MjEpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTo0NTIyKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDgxNCkKKyNlbmRpZgorCisj
aWYgQ09NUElMRVIoR0NDKQorCisjaWYgIUdDQ19WRVJTSU9OX0FUX0xFQVNUKDUsIDUsIDApCisj
ZXJyb3IgIlVzaW5nIDwgNS40LjAiCisjZW5kaWYKKworI2lmICFHQ0NfVkVSU0lPTl9BVF9MRUFT
VCg2LCAxLCAwKQorI2Vycm9yICJVc2luZyA8IDYuMS4wIgorI2VuZGlmCisKKyNlbmRpZgorCiBu
YW1lc3BhY2Ugc3RkIHsKIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCkBAIC02Myw3ICs4NCw3
IEBAIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCiAjZWxzZQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgX19jcmFzaF9oZWxwZXIoYm9vbCl7CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyBp
bmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKICAgICBDUkFTSCgpOwogfQogc3RhdGlj
IGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFzaF9pZihib29sIHRlc3QpewpA
QCAtMTE2OSwxMCArMTE5MCwxMCBAQCBzdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHN7CiAKIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CiBzdHJ1Y3QgX19iYWNr
dXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQg
X19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJj
ZSl7CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICosX1N0
b3JhZ2UmKXsKICAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAg
ICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqIF9fb2JqKXsK
KyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsKICAgICAgICAgX19U
SFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAgICAgfTsKIH07CkBAIC0xOTM4LDcg
KzE5NTksNyBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgCiBzdHJ1
Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+ewogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9y
LF9WYXJpYW50cyYmIC4uLiBfX3YpeworICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYm
IC4uLil7CiAgICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOwogICAgIH0KIH07
CkBAIC0yMDU0LDMgKzIwNzUsMTYgQEAgc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50
PF9UeXBlcwogfTsKIAogfSAvLyBuYW1lc3BhY2Ugc3RkCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3VzaW5nIFZhcmlhbnQgPSBzdGQ6OmV4cGVyaW1l
bnRhbDo6dmFyaWFudDxUeXBlcy4uLj47CisKK30KKwordXNpbmcgV1RGOjpWYXJpYW50OworCisj
aWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
IFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9jcHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVw
ZW5kKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90
SW5Ob2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjphZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0
aCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcg
d2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPiBhbmQgbW92ZSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZQorICAgICAgICBpbnRvIE5vZGUuCisKKyAgICAgICAgKiBkb20vTm9kZU9y
U3RyaW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZU9yU3RyaW5nLmg6IFJlbW92
ZWQuCisKIDIwMTYtMDgtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsaWZ5IHZhbHVlVG9VU1ZTdHJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRv
bS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAogICAgIGRvbS9Ob2Rl
SXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmluZy5jcHAKICAgICBkb20vTm9kZVJhcmVE
YXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODQzLDggKzI4NDMs
NiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkExODdGMzcw
NzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovOyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5
MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRD
b252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi87IH07Ci0JCTdDRUFD
MTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8q
IE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRDNTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBD
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50
RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RDRD
OTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAgLTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJ
N0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNC
RkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIg
LyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVP
clN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwODFCNDgzRDdG
MDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkVycm9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0
QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTQyLDggKzI0MTM4LDYgQEAKIAkJCQkxQTc1
MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJhdG9yLmlkbCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4
MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAv
KiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9k
ZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJh
cmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJT
dHlsZS5oICovLApAQCAtMjY5MDQsNyArMjY4OTgsNiBAQAogCQkJCTg1NEZFNzMzMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRG
RTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJCMTY3NTBGMTYwMERCMkZCOCAvKiBOb2Rl
VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzA2LDcgKzMwNjk5LDYgQEAKIAkJCQlB
OEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZGQzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8q
IE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDMxMDVCODE2NzUwRjBDMDBE
QjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEw
MTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNp
b24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVP
clN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQorVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+
LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCi0gICAgVmVj
dG9yPE5vZGVPclN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4gcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3Vt
ZW50Q291bnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkp
OwogICAgICAgICBpZiAoYXV0byogbm9kZSA9IGpzRHluYW1pY0Nhc3Q8SlNOb2RlKj4odmFsdWUp
KQotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgmbm9kZS0+d3JhcHBlZCgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobm9kZS0+d3JhcHBlZCgpKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoJnN0YXRlKTsKICAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkocmV2aXNpb24g
MjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBKU05vZGVPclN0cmluZ19o
CiAjZGVmaW5lIEpTTm9kZU9yU3RyaW5nX2gKIAotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzUsNyArMzYsOSBAQCBj
bGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVPclN0
cmluZz4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUmKTsKK2NsYXNzIE5vZGU7
CisKK1ZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0
b3IoSlNDOjpFeGVjU3RhdGUmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAi
Tm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4
NzIsMTggQEAgdW5zaWduZWQgQ29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJl
dHVybiBzdGQ6OmRpc3RhbmNlKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0K
IAotdm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjph
cHBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1Zl
Y3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252
ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0
b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJ
bnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwg
IW5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGVuZENoaWxkKCpub2RlLCBlYyk7CiB9
CiAKLXZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6
OnByZXBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmlu
Z1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdW
ZWN0b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmlu
Z3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMg
fHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHB1YmxpYzoKICAgICBFbGVt
ZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIEVsZW1lbnQqIGxhc3RFbGVtZW50
Q2hpbGQoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0Owot
ICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgZW5zdXJlUHJlSW5z
ZXJ0aW9uVmFsaWRpdHkoTm9kZSYgbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25D
b2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkocmV2aXNpb24gMjA0
MjMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEyLDcgKzExMiw2IEBACiAjaW5jbHVkZSAiTm9kZS5jcHAiCiAjaW5jbHVkZSAiTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmNwcCIKLSNpbmNs
dWRlICJOb2RlT3JTdHJpbmcuY3BwIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5jcHAiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5jcHAiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5jcHAiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbi5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgog
I2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKQEAgLTQzOCwxOCArNDM3LDE3IEBAIGJvb2wgTm9k
ZTo6YXBwZW5kQ2hpbGQoTm9kZSYgbmV3Q2hpbGQsIEUKICAgICByZXR1cm4gZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4oKnRoaXMpLmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYyk7CiB9CiAKLXN0YXRp
YyBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0
cmluZ1ZlY3Rvcihjb25zdCBWZWN0b3I8Tm9kZU9yU3RyaW5nPiYgbm9kZU9yU3RyaW5nVmVjdG9y
KQorc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9t
Tm9kZU9yU3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mIHZlY3RvcikKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldDsKLSAgICBm
b3IgKGF1dG8mIG5vZGVPclN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKG5vZGVPclN0cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6
OlR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0
cmluZzo6VHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG5vZGVTZXQuYWRkKCZub2RlT3JTdHJpbmcu
bm9kZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCisgICAgYXV0
byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxO
b2RlPiYgbm9kZSkgeyBub2RlU2V0LmFkZChjb25zdF9jYXN0PE5vZGUqPihub2RlLnB0cigpKSk7
IH0sCisgICAgICAgIFtdKGNvbnN0IFN0cmluZyYpIHsgfQorICAgICk7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDcy
LDcgKzQ3MCwzNCBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGluCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxO
b2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAgICBub2Rlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOworCisgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKFJlZjxOb2Rl
PiYgbm9kZSkgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZS5jb3B5UmVmKCkpOyB9LAorICAg
ICAgICBbJl0oU3RyaW5nJiBzdHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBzdHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBub2RlT3JTdHJpbmdWZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1Jl
dHVybiA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1
dG8mIG5vZGUgOiBub2RlcykgeworICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hp
bGQobm9kZSwgZWMpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJl
dHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3Rv
cjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2Rl
OjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVT
ZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9y
KTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3VzU2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGlu
Z05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0
Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3Ip
LCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RG
TW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJs
ZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3Rv
cjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRh
aW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUw
MiwxNCArNTI3LDE0IEBAIHZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiAK
ICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5n
VmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9
IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92
ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZSgqbm9kZSwgdmlhYmxlTmV4dFNpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2Rl
OjpyZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3Rvciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CiAgICAgaWYgKCFwYXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBOb2RlOjpyZXBsYWNl
V2l0aChWZWN0b3I8Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFu
c2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBh
dXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0
KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBh
dXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0
cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBuZWVkcyB0byBiZSBo
ZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAjZGVmaW5lIERVTVBf
Tk9ERV9TVEFUSVNUSUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0aE1MUXVhbGlmaWVk
TmFtZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgTm9kZUxp
c3RzTm9kZURhdGE7Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2RlUmFyZURhdGE7CiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4LDkgKzIwOCw5IEBA
IHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdDsKIAogICAg
IC8vIEZyb20gdGhlIENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY2hp
bGRub2RlCi0gICAgdm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPFZhcmlh
bnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZXBs
YWNlV2l0aChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDgg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNo
YW5nZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNr
KSB8IGNoYW5nZVR5cGU7IH0KICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxj
KCk7CiAKKyAgICBSZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVj
dG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDIzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNs
dWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9y
U3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3Ry
aW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRv
Y3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMu
dW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4g
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5k
Q2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDIzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBO
b2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsK
LXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAg
IE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAg
fQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6
Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0
YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3Ry
aW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAg
ICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1f
ZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0g
ICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAg
ICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2Rh
dGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVm
RGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJp
bmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToK
LSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAg
ICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9y
PShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQot
ICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5v
ZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQot
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBu
b2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRh
Lm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkg
Y29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3Ry
aW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQg
ZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAg
ICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAg
U3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwot
fTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNv
bnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDIz
MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFj
ZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIHRo
ZSBpbml0aWFsIHN0YXRlIG9mIFZhcmlhbnQgYW5kIHVzaW5nCisgICAgICAgIG1ha2VPdmVybG9h
ZGVyIGZvciB2aXNpdGluZy4KKwogMjAxNi0wOC0wNiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRVdTIFN0eWxlIFF1ZXVlIGZhaWxzIHRvIHByb2Nlc3Mg
cGF0Y2hlcyB3aGljaCBmYWlscyB2YWxpZGF0aW9uCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0MjMxKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsy
Niw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQ291bnRlcnMuaCIKLSNp
bmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAorVEVTVChXVEZfVmFyaWFu
dCwgSW5pdGlhbCkKK3sKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2MTsKKyAgICBFWFBFQ1Rf
VFJVRSh2MS5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFs
OjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAgIFQoKSA6IHZh
bHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBWYXJpYW50PFQs
IGludD4gdjI7CisgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1Rf
VFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2YXJp
YW50ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMCk7CiAgICAgRVhQ
RUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOworICAg
IEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0g
MSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldF9pZjxkb3VibGU+KHZh
cmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpo
b2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpl
eHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworCisgICAg
dmFyaWFudCA9IDEuMDsKKyAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7Cisg
ICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxkb3VibGU+KHZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJsZT4o
dmFyaWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0
X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBl
cmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVD
VF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50
KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIHsKLSAgICB0eXBlZGVm
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gVmFyaWFudDsK
LQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIEludCwKQEAg
LTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgICAgICBT
dHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3IgewogICAgICAgICBWaXNpdG9y
KFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDcgKzk0LDcgQEAgVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsK
IAotICAgIFZhcmlhbnQgdmFyaWFudCA9IDg7CisgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJp
bmc+IHZhcmlhbnQgPSA4OwogICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5
cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKQEAg
LTg0LDE1ICsxMDksNDUgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAorVEVTVChXVEZfVmFyaWFudCwg
VmlzaXRvclVzaW5nTWFrZU92ZXJsb2FkZXIpCit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAg
ICAgICAgTm9uZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwKKyAgICAgICAgU3RyaW5n
LAorICAgIH07CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOworCisgICAgYXV0byB2aXNp
dG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGludCkgeyB0eXBlID0gVHlw
ZTo6SW50OyB9LAorICAgICAgICBbJl0oZmxvYXQpIHsgdHlwZSA9IFR5cGU6OkZsb2F0OyB9LAor
ICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KKyAgICApOworCisg
ICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBl
OjpJbnQgPT0gdHlwZSk7CisKKworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpG
bG9hdCA9PSB0eXBlKTsKKworCisgICAgdmFyaWFudCA9ICJoZWxsbyI7CisgICAgc3RkOjpleHBl
cmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6
OlN0cmluZyA9PSB0eXBlKTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IFZhcmlhbnQ7Ci0g
CiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwog
CiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFudCB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworICAgICAgICBWYXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVTVChXVEZfVmFy
aWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRFU1QoV1RGX1Zh
cmlhbnQsIFJlZkNvdW50aW5nKQorVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQogewotICAgIHR5
cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4g
VmFyaWFudDsKLQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVmOworICAgICAg
ICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKQEAgLTExNyw3ICsxNzAsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgUmVm
Q291bnRpbmcpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSBXVEZNb3ZlKHJlZik7
CisgICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVm
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1ZhcmlhbnQsIFJlZikKK3sKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgVmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285537</attachid>
            <date>2016-08-07 15:38:40 -0700</date>
            <delta_ts>2016-08-07 15:51:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160807153709.patch</filename>
            <type>text/plain</type>
            <size>34155</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsNiArNDksMjYgQEAK
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgogCisjaWYgQ09N
UElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDI0NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MjEpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTo0NTIyKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDgxNCkKKyNlbmRpZgorCisj
aWYgQ09NUElMRVIoR0NDKQorCisjaWYgIUdDQ19WRVJTSU9OX0FUX0xFQVNUKDUsIDAsIDApCisj
ZXJyb3IgIlVzaW5nIDwgNS4wLjAiCisjZW5kaWYKKworI2lmICFHQ0NfVkVSU0lPTl9BVF9MRUFT
VCg2LCAxLCAwKQorI2Vycm9yICJVc2luZyA8IDYuMS4wIgorI2VuZGlmCisKKyNlbmRpZgorCiBu
YW1lc3BhY2Ugc3RkIHsKIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCkBAIC02Myw3ICs4NCw3
IEBAIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCiAjZWxzZQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgX19jcmFzaF9oZWxwZXIoYm9vbCl7CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyBp
bmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKICAgICBDUkFTSCgpOwogfQogc3RhdGlj
IGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFzaF9pZihib29sIHRlc3QpewpA
QCAtMTE2OSwxMCArMTE5MCwxMCBAQCBzdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHN7CiAKIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CiBzdHJ1Y3QgX19iYWNr
dXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQg
X19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJj
ZSl7CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICosX1N0
b3JhZ2UmKXsKICAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAg
ICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqIF9fb2JqKXsK
KyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsKICAgICAgICAgX19U
SFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAgICAgfTsKIH07CkBAIC0xOTM4LDcg
KzE5NTksNyBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgCiBzdHJ1
Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+ewogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9y
LF9WYXJpYW50cyYmIC4uLiBfX3YpeworICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYm
IC4uLil7CiAgICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOwogICAgIH0KIH07
CkBAIC0yMDU0LDMgKzIwNzUsMTYgQEAgc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50
PF9UeXBlcwogfTsKIAogfSAvLyBuYW1lc3BhY2Ugc3RkCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3VzaW5nIFZhcmlhbnQgPSBzdGQ6OmV4cGVyaW1l
bnRhbDo6dmFyaWFudDxUeXBlcy4uLj47CisKK30KKwordXNpbmcgV1RGOjpWYXJpYW50OworCisj
aWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
IFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9jcHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVw
ZW5kKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90
SW5Ob2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjphZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0
aCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcg
d2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPiBhbmQgbW92ZSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZQorICAgICAgICBpbnRvIE5vZGUuCisKKyAgICAgICAgKiBkb20vTm9kZU9y
U3RyaW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZU9yU3RyaW5nLmg6IFJlbW92
ZWQuCisKIDIwMTYtMDgtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsaWZ5IHZhbHVlVG9VU1ZTdHJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRv
bS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNwcAogICAgIGRvbS9Ob2Rl
SXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmluZy5jcHAKICAgICBkb20vTm9kZVJhcmVE
YXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODQzLDggKzI4NDMs
NiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkExODdGMzcw
NzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovOyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5
MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRD
b252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi87IH07Ci0JCTdDRUFD
MTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8q
IE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRDNTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBD
b250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50
RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RDRD
OTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAgLTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJ
N0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRs
ZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNC
RkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIg
LyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVP
clN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwODFCNDgzRDdG
MDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkVycm9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0
QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTQyLDggKzI0MTM4LDYgQEAKIAkJCQkxQTc1
MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJhdG9yLmlkbCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4
MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAv
KiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9k
ZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJh
cmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJT
dHlsZS5oICovLApAQCAtMjY5MDQsNyArMjY4OTgsNiBAQAogCQkJCTg1NEZFNzMzMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRG
RTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJCMTY3NTBGMTYwMERCMkZCOCAvKiBOb2Rl
VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzA2LDcgKzMwNjk5LDYgQEAKIAkJCQlB
OEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZGQzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8q
IE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDMxMDVCODE2NzUwRjBDMDBE
QjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEw
MTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNp
b24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVP
clN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQorVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+
LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCi0gICAgVmVj
dG9yPE5vZGVPclN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4gcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3Vt
ZW50Q291bnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkp
OwogICAgICAgICBpZiAoYXV0byogbm9kZSA9IGpzRHluYW1pY0Nhc3Q8SlNOb2RlKj4odmFsdWUp
KQotICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgmbm9kZS0+d3JhcHBlZCgpKTsK
KyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobm9kZS0+d3JhcHBlZCgpKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoJnN0YXRlKTsKICAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkocmV2aXNpb24g
MjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBKU05vZGVPclN0cmluZ19o
CiAjZGVmaW5lIEpTTm9kZU9yU3RyaW5nX2gKIAotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzUsNyArMzYsOSBAQCBj
bGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVPclN0
cmluZz4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUmKTsKK2NsYXNzIE5vZGU7
CisKK1ZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0
b3IoSlNDOjpFeGVjU3RhdGUmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDYgQEAKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAi
Tm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4
NzIsMTggQEAgdW5zaWduZWQgQ29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJl
dHVybiBzdGQ6OmRpc3RhbmNlKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0K
IAotdm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjph
cHBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1Zl
Y3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252
ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0
b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJ
bnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwg
IW5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGVuZENoaWxkKCpub2RlLCBlYyk7CiB9
CiAKLXZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6
OnByZXBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmlu
Z1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdW
ZWN0b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmlu
Z3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMg
fHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHB1YmxpYzoKICAgICBFbGVt
ZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIEVsZW1lbnQqIGxhc3RFbGVtZW50
Q2hpbGQoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0Owot
ICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgZW5zdXJlUHJlSW5z
ZXJ0aW9uVmFsaWRpdHkoTm9kZSYgbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25D
b2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkocmV2aXNpb24gMjA0
MjMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEyLDcgKzExMiw2IEBACiAjaW5jbHVkZSAiTm9kZS5jcHAiCiAjaW5jbHVkZSAiTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHAiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmNwcCIKLSNpbmNs
dWRlICJOb2RlT3JTdHJpbmcuY3BwIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5jcHAiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5jcHAiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5jcHAiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbi5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgog
I2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKQEAgLTQzOCwxOCArNDM3LDE3IEBAIGJvb2wgTm9k
ZTo6YXBwZW5kQ2hpbGQoTm9kZSYgbmV3Q2hpbGQsIEUKICAgICByZXR1cm4gZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4oKnRoaXMpLmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYyk7CiB9CiAKLXN0YXRp
YyBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0
cmluZ1ZlY3Rvcihjb25zdCBWZWN0b3I8Tm9kZU9yU3RyaW5nPiYgbm9kZU9yU3RyaW5nVmVjdG9y
KQorc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9t
Tm9kZU9yU3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mIHZlY3RvcikKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldDsKLSAgICBm
b3IgKGF1dG8mIG5vZGVPclN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKG5vZGVPclN0cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6
OlR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0
cmluZzo6VHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG5vZGVTZXQuYWRkKCZub2RlT3JTdHJpbmcu
bm9kZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCisgICAgYXV0
byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxO
b2RlPiYgbm9kZSkgeyBub2RlU2V0LmFkZChjb25zdF9jYXN0PE5vZGUqPihub2RlLnB0cigpKSk7
IH0sCisgICAgICAgIFtdKGNvbnN0IFN0cmluZyYpIHsgfQorICAgICk7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDcy
LDcgKzQ3MCwzNCBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGluCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxO
b2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAgICBub2Rlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOworCisgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKFJlZjxOb2Rl
PiYgbm9kZSkgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZS5jb3B5UmVmKCkpOyB9LAorICAg
ICAgICBbJl0oU3RyaW5nJiBzdHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBzdHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZh
cmlhbnQgOiBub2RlT3JTdHJpbmdWZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1Jl
dHVybiA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1
dG8mIG5vZGUgOiBub2RlcykgeworICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hp
bGQobm9kZSwgZWMpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJl
dHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3Rv
cjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2Rl
OjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVT
ZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9y
KTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3VzU2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGlu
Z05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0
Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3Ip
LCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RG
TW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJs
ZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3Rv
cjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRh
aW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUw
MiwxNCArNTI3LDE0IEBAIHZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiAK
ICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5n
VmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9
IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92
ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZSgqbm9kZSwgdmlhYmxlTmV4dFNpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2Rl
OjpyZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3Rvciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxWYXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CiAgICAgaWYgKCFwYXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBOb2RlOjpyZXBsYWNl
V2l0aChWZWN0b3I8Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFu
c2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBh
dXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0
KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBh
dXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0
cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBuZWVkcyB0byBiZSBo
ZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAjZGVmaW5lIERVTVBf
Tk9ERV9TVEFUSVNUSUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0aE1MUXVhbGlmaWVk
TmFtZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgTm9kZUxp
c3RzTm9kZURhdGE7Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2RlUmFyZURhdGE7CiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4LDkgKzIwOCw5IEBA
IHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdDsKIAogICAg
IC8vIEZyb20gdGhlIENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY2hp
bGRub2RlCi0gICAgdm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwg
U3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPFZhcmlh
bnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZXBs
YWNlV2l0aChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDgg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNo
YW5nZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNr
KSB8IGNoYW5nZVR5cGU7IH0KICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxj
KCk7CiAKKyAgICBSZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVj
dG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDIzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNs
dWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9y
U3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3Ry
aW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRv
Y3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMu
dW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4g
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5k
Q2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDIzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBO
b2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsK
LXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAg
IE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAg
fQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6
Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0
YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3Ry
aW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAg
ICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1f
ZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0g
ICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAg
ICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2Rh
dGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVm
RGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJp
bmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToK
LSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAg
ICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9y
PShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQot
ICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5v
ZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQot
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBu
b2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRh
Lm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkg
Y29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3Ry
aW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQg
ZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAg
ICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAg
U3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwot
fTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNv
bnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDIz
MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFj
ZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIHRo
ZSBpbml0aWFsIHN0YXRlIG9mIFZhcmlhbnQgYW5kIHVzaW5nCisgICAgICAgIG1ha2VPdmVybG9h
ZGVyIGZvciB2aXNpdGluZy4KKwogMjAxNi0wOC0wNiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRVdTIFN0eWxlIFF1ZXVlIGZhaWxzIHRvIHByb2Nlc3Mg
cGF0Y2hlcyB3aGljaCBmYWlscyB2YWxpZGF0aW9uCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0MjMxKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsy
Niw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQ291bnRlcnMuaCIKLSNp
bmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAorVEVTVChXVEZfVmFyaWFu
dCwgSW5pdGlhbCkKK3sKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2MTsKKyAgICBFWFBFQ1Rf
VFJVRSh2MS5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFs
OjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAgIFQoKSA6IHZh
bHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBWYXJpYW50PFQs
IGludD4gdjI7CisgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1Rf
VFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2YXJp
YW50ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMCk7CiAgICAgRVhQ
RUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOworICAg
IEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0g
MSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldF9pZjxkb3VibGU+KHZh
cmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpo
b2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpl
eHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworCisgICAg
dmFyaWFudCA9IDEuMDsKKyAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7Cisg
ICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxkb3VibGU+KHZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJsZT4o
dmFyaWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0
X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBl
cmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVD
VF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50
KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIHsKLSAgICB0eXBlZGVm
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gVmFyaWFudDsK
LQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIEludCwKQEAg
LTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgICAgICBT
dHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3IgewogICAgICAgICBWaXNpdG9y
KFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDcgKzk0LDcgQEAgVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsK
IAotICAgIFZhcmlhbnQgdmFyaWFudCA9IDg7CisgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJp
bmc+IHZhcmlhbnQgPSA4OwogICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5
cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKQEAg
LTg0LDE1ICsxMDksNDUgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAorVEVTVChXVEZfVmFyaWFudCwg
VmlzaXRvclVzaW5nTWFrZU92ZXJsb2FkZXIpCit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAg
ICAgICAgTm9uZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwKKyAgICAgICAgU3RyaW5n
LAorICAgIH07CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOworCisgICAgYXV0byB2aXNp
dG9yID0gV1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKGludCkgeyB0eXBlID0gVHlw
ZTo6SW50OyB9LAorICAgICAgICBbJl0oZmxvYXQpIHsgdHlwZSA9IFR5cGU6OkZsb2F0OyB9LAor
ICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KKyAgICApOworCisg
ICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBl
OjpJbnQgPT0gdHlwZSk7CisKKworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpG
bG9hdCA9PSB0eXBlKTsKKworCisgICAgdmFyaWFudCA9ICJoZWxsbyI7CisgICAgc3RkOjpleHBl
cmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6
OlN0cmluZyA9PSB0eXBlKTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IFZhcmlhbnQ7Ci0g
CiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwog
CiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFudCB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworICAgICAgICBWYXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVTVChXVEZfVmFy
aWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRFU1QoV1RGX1Zh
cmlhbnQsIFJlZkNvdW50aW5nKQorVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQogewotICAgIHR5
cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4g
VmFyaWFudDsKLQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVmOworICAgICAg
ICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKQEAgLTExNyw3ICsxNzAsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgUmVm
Q291bnRpbmcpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSBXVEZNb3ZlKHJlZik7
CisgICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVm
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1ZhcmlhbnQsIFJlZikKK3sKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgVmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285541</attachid>
            <date>2016-08-07 15:51:52 -0700</date>
            <delta_ts>2016-08-07 17:52:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160807155021.patch</filename>
            <type>text/plain</type>
            <size>35027</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsNiArNDksMTQgQEAK
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgogCisjaWYgQ09N
UElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDI0NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MjEpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTo0NTIyKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDgxNCkKKyNlbmRpZgorCiBu
YW1lc3BhY2Ugc3RkIHsKIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCkBAIC02Myw3ICs3Miw3
IEBAIG5hbWVzcGFjZSBleHBlcmltZW50YWwgewogCiAjZWxzZQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgX19jcmFzaF9oZWxwZXIoYm9vbCl7CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyBp
bmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKICAgICBDUkFTSCgpOwogfQogc3RhdGlj
IGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFzaF9pZihib29sIHRlc3QpewpA
QCAtNTM1LDcgKzU0NCw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsKICAgICBfVHlw
ZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAgIHJldHVybiBfX3ZhcmlhbnRf
c3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKICAgICB9Ci0gICAgY29uc3RleHByIF9UeXBl
JiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAvKmNvbnN0ZXhwciovIF9U
eXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAgcmV0dXJuIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CiAgICAgfQogICAgIGNv
bnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7CkBA
IC02MjYsNyArNjM1LDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+ewog
ICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKICAgICB9CiAKLSAgICBj
b25zdGV4cHIgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAgIC8q
Y29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewogICAg
ICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwogICAgIH0KICAgICAK
QEAgLTY0NSw3ICs2NTQsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25zdGV4cHIgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9y
cmVmKAorICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEs
X1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAogICAgICAgICBpbl9wbGFjZV9pbmRleF90
PF9JbmRleD4pewogICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5fcGxhY2U8X0lu
ZGV4LTE+KTsKICAgICB9CkBAIC0xMTY5LDEwICsxMTc4LDEwIEBAIHN0cnVjdCBfX2JhY2t1cF9z
dG9yYWdlX29wc3sKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfU3RvcmFn
ZT4KIHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9TdG9yYWdlPnsK
LSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2UgKiBfX2Rlc3Qs
X1N0b3JhZ2UmIF9fc291cmNlKXsKKyAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1
bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6
OmJhZF9hbGxvYygpKTsKICAgICB9OwotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKF9T
dG9yYWdlICogX19vYmopeworICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdl
ICopewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygpKTsKICAgICB9
OwogfTsKQEAgLTE5MzgsNyArMTk0Nyw3IEBAIHRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4
LHB0cmRpZmZfdCAKIHN0cnVjdCBfX3Zpc2l0X2hlbHBlcjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5k
aWNlcy4uLj57CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KICAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9W
aXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7CisgICAgX192aXNpdChfVmlz
aXRvciYsX1ZhcmlhbnRzJiYgLi4uKXsKICAgICAgICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BF
VElPTl9JRih0cnVlLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlh
bnQiKSk7CiAgICAgfQogfTsKQEAgLTIwNTQsMyArMjA2MywxNiBAQCBzdHJ1Y3QgaGFzaDxleHBl
cmltZW50YWw6OnZhcmlhbnQ8X1R5cGVzCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKKworbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgordXNpbmcgVmFyaWFu
dCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFR5cGVzLi4uPjsKKworfQorCit1c2luZyBX
VEY6OlZhcmlhbnQ7CisKKyNpZiBDT01QSUxFUihNU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTYtMDgtMDYg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXBsYWNlIE5vZGVPclN0
cmluZyB3aXRoIFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIE5vZGVPclN0cmluZy5oL2NwcAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmg6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGU6OnByZXBlbmQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6Cisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9kZVNldFByZVRyYW5z
Zm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZv
bGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29u
dmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICBSZXBs
YWNlIE5vZGVPclN0cmluZyB3aXRoIFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+IGFuZCBtb3Zl
IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlCisgICAgICAgIGludG8gTm9kZS4KKworICAg
ICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2Rl
T3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAxNi0wOC0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgU2ltcGxpZnkgdmFsdWVUb1VTVlN0cmluZwpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDg3LDcgKzE0ODcsNiBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgZG9tL05vZGUuY3BwCiAgICAgZG9tL05vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwCiAgICAgZG9tL05vZGVJdGVyYXRvci5jcHAKLSAgICBkb20vTm9kZU9yU3RyaW5nLmNwcAog
ICAgIGRvbS9Ob2RlUmFyZURhdGEuY3BwCiAgICAgZG9tL05vZGVUcmF2ZXJzYWwuY3BwCiAgICAg
ZG9tL092ZXJmbG93RXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTI4NDMsOCArMjg0Myw2IEBACiAJCTdDRTY4MzQ3MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTY4MzQ2MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0U2Q0JGQjE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0
Q29udmVydGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmggKi87IH07CiAJ
CTdDRTZDQkZEMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkMxODdGMzk0OTAw
RDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi87IH07Ci0JCTdDRUFDMTA3MUI0ODNEMUQw
MDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcu
aCAqLzsgfTsKLQkJN0NFQUMxMDkxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VBQzEwODFC
NDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLzsgfTsKIAkJN0NGREM1N0MxQUMx
RDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcg
LyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcCAqLzsgfTsKIAkJN0NGREM1N0QxQUMxRDgwNTAw
RTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRl
bnRFeHRlbnNpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdENEM5NkRDMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoSGVhZGVycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RDRDOTZE
ODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwICovOyB9OwpAQCAtMTAyNjUs
OCArMTAyNjMsNiBAQAogCQk3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1hdENvbnZlcnRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U2Q0JGQzE4N0YzOTQ5MDBENDZCRjUgLyogRm9y
bWF0Q29udmVydGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
cm1hdENvbnZlcnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDRUFDMTA2
MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9kZU9yU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZU9yU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRl
bnNpb25FcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250
ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0ZE
QzU3QjFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25FcnJvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3RDRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRj
aEhlYWRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRj
aEhlYWRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQxNDIsOCArMjQx
MzgsNiBAQAogCQkJCTFBNzUwRDg3MEE5MEUzOTQwMDBGRjIxNSAvKiBOb2RlSXRlcmF0b3IuaWRs
ICovLAogCQkJCUE4MTg3MjEwMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5oICovLAogCQkJ
CTg1QUNBOUZBMEE5QjYzMTAwMDY3MUU5MCAvKiBOb2RlTGlzdC5pZGwgKi8sCi0JCQkJN0NFQUMx
MDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi8sCi0JCQkJN0NFQUMxMDYx
QjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oICovLAogCQkJCTRGQUI0ODY2MTY0M0E2
N0UwMEY3MEMwNyAvKiBOb2RlUmFyZURhdGEuY3BwICovLAogCQkJCTYzMTg5QUUyMEU4M0EzMzMw
MDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLywKIAkJCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYx
N0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8sCkBAIC0yNjkwNCw3ICsyNjg5OCw2IEBACiAJCQkJ
ODU0RkU3MzMwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1NEZFNzM1MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MTg3MjFCMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJN0NFQUMxMDcxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0
cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQxIC8qIE5v
ZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjNEN0IzMkQwRTc4Q0QzRjAwRjc2MTdD
IC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzMTA1QkIxNjc1MEYx
NjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzA3MDYsNyAr
MzA2OTksNiBAQAogCQkJCUE4QzRBODAwMDlENTYzMjcwMDAzQUM4RCAvKiBOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg1NEZFNzMyMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM0MEEyMjk3QkUwMDU4RDdBRCAv
KiBOb2RlSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NFQUMxMDkxQjQ4M0Q3RjAw
MzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RkZDMDIyQjE2
NDNCNzEwMDA0RTE2MzggLyogTm9kZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMzNTAzQ0M3MTAxN0ExQjEwMDNCNDdFMSAvKiBOb3RpZmljYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JT
dHJpbmcuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVPclN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNyBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2Rl
T3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCitWZWN0b3I8
VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzdGF0ZS5hcmd1bWVudENv
dW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3RyaW5nPiByZXN1bHQ7CisgICAgVmVjdG9yPFZh
cmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoYXJndW1lbnRDb3VudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ3VtZW50Q291bnQ7ICsraSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoaSk7CiAgICAgICAgIGlmIChhdXRvKiBub2RlID0ganNEeW5hbWljQ2Fz
dDxKU05vZGUqPih2YWx1ZSkpCi0gICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKCZu
b2RlLT53cmFwcGVkKCkpOworICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChub2Rl
LT53cmFwcGVkKCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcg
PSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0
cmluZy5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVPclN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBACiAjaWZuZGVm
IEpTTm9kZU9yU3RyaW5nX2gKICNkZWZpbmUgSlNOb2RlT3JTdHJpbmdfaAogCi0jaW5jbHVkZSAi
Tm9kZU9yU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0zNSw3ICszNiw5IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1WZWN0b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVPclN0cmluZ1ZlY3RvcihKU0M6OkV4ZWNTdGF0
ZSYpOworY2xhc3MgTm9kZTsKKworVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiB0
b05vZGVPclN0cmluZ1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9u
IDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNp
bmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b24uaCIKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEu
aCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSYWRpb05vZGVMaXN0
LmgiCkBAIC04NzMsMTggKzg3MiwxOCBAQCB1bnNpZ25lZCBDb250YWluZXJOb2RlOjpjaGlsZEVs
ZW1lbnRDb3VuCiAgICAgcmV0dXJuIHN0ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hp
bGRyZW4uZW5kKCkpOwogfQogCi12b2lkIENvbnRhaW5lck5vZGU6OmFwcGVuZChWZWN0b3I8Tm9k
ZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IENvbnRhaW5lck5vZGU6OmFwcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+
JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3Zl
KG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMp
OwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hp
bGQoKm5vZGUsIGVjKTsKIH0KIAotdm9pZCBDb250YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmlu
Zz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQ
dHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZN
b3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwg
ZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDggKzk5LDggQEAg
cHVibGljOgogICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudENoaWxkKCkgY29uc3Q7CiAgICAgRWxl
bWVudCogbGFzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGNoaWxkRWxlbWVu
dENvdW50KCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYm
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhcHBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBwcmVwZW5kKFZlY3Rv
cjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
Ym9vbCBlbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVm
Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFs
bEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUu
Y3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRlICJOb2RlLmNw
cCIKICNpbmNsdWRlICJOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCIKICNpbmNsdWRlICJOb2RlSXRl
cmF0b3IuY3BwIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5jcHAiCiAjaW5jbHVkZSAiTm9kZVJh
cmVEYXRhLmNwcCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmNwcCIKICNpbmNsdWRlICJPdmVy
Zmxvd0V2ZW50LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwNDIzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAj
aW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgpAQCAtNDM4LDE4ICs0
MzcsMTcgQEAgYm9vbCBOb2RlOjphcHBlbmRDaGlsZChOb2RlJiBuZXdDaGlsZCwgRQogICAgIHJl
dHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcykuYXBwZW5kQ2hpbGQobmV3Q2hpbGQs
IGVjKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNm
b3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiBu
b2RlT3JTdHJpbmdWZWN0b3IpCitzdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQ
cmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPFZhcmlhbnQ8
UmVmPE5vZGU+LCBTdHJpbmc+PiYgdmVjdG9yKQogewogICAgIEhhc2hTZXQ8UmVmUHRyPE5vZGU+
PiBub2RlU2V0OwotICAgIGZvciAoYXV0byYgbm9kZU9yU3RyaW5nIDogbm9kZU9yU3RyaW5nVmVj
dG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3RyaW5nLnR5cGUoKSkgewotICAgICAgICBj
YXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZVNldC5h
ZGQoJm5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VPdmVybG9hZGVyKAorICAgICAg
ICBbJl0oY29uc3QgUmVmPE5vZGU+JiBub2RlKSB7IG5vZGVTZXQuYWRkKGNvbnN0X2Nhc3Q8Tm9k
ZSo+KG5vZGUucHRyKCkpKTsgfSwKKyAgICAgICAgW10oY29uc3QgU3RyaW5nJikgeyB9CisgICAg
KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgdmFyaWFudCA6IHZlY3RvcikKKyAgICAgICAgc3Rk
OjpleHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogCiAgICAgcmV0dXJuIG5v
ZGVTZXQ7CiB9CkBAIC00NzIsNyArNDcwLDM0IEBAIHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RG
b2xsb3dpbmdTaWJsaW4KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBOb2RlOjpiZWZv
cmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUmVmUHRyPE5vZGU+IE5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2Rl
KFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChub2RlT3JTdHJpbmdWZWN0b3IuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5v
ZGVzOworICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9yU3RyaW5nVmVjdG9y
LnNpemUoKSk7CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VPdmVybG9hZGVyKAorICAg
ICAgICBbJl0oUmVmPE5vZGU+JiBub2RlKSB7IG5vZGVzLnVuY2hlY2tlZEFwcGVuZChub2RlLmNv
cHlSZWYoKSk7IH0sCisgICAgICAgIFsmXShTdHJpbmcmIHN0cmluZykgeyBub2Rlcy51bmNoZWNr
ZWRBcHBlbmQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHN0cmluZykpOyB9CisgICAgKTsKKwor
ICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG5vZGVPclN0cmluZ1ZlY3RvcikKKyAgICAgICAgc3Rk
OjpleHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworCisgICAgaWYgKG5vZGVz
LnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGTW92ZShub2Rlcy5maXJzdCgpKTsKKwor
ICAgIGF1dG8gbm9kZVRvUmV0dXJuID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50
KCkpOworICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7CisgICAgICAgIGlmICghbm9kZVRv
UmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBlYykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgcmV0dXJuIFdURk1vdmUobm9kZVRvUmV0dXJuKTsKK30KKwordm9pZCBO
b2RlOjpiZWZvcmUoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0
cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTQ4MSw3ICs1
MDYsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgYXV0
byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihu
b2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8gdmlhYmxlUHJldmlvdXNTaWJsaW5nID0gZmly
c3RQcmVjZWRpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1
dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5v
ZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAo
ZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDkzLDcgKzUxOCw3IEBAIHZvaWQg
Tm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYKICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZSgqbm9kZSwgdmlhYmxlUHJldmlvdXNTaWJsaW5nLmdldCgpLCBlYyk7CiB9CiAKLXZvaWQg
Tm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBOb2RlOjphZnRlcihWZWN0b3I8VmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlm
ICghcGFyZW50KQpAQCAtNTAyLDE0ICs1MjcsMTQgQEAgdm9pZCBOb2RlOjphZnRlcihWZWN0b3I8
Tm9kZU9yU3RyaW5nPiYmIAogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1l
ZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZp
YWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KCp0aGlz
LCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9O
b2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBhdXRvIG5v
ZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1Zl
Y3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHBhcmVudC0+aW5zZXJ0QmVmb3JlKCpub2RlLCB2aWFibGVOZXh0U2libGluZy5nZXQoKSwgZWMp
OwogfQogCi12b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9k
ZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6cmVwbGFjZVdp
dGgoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3Rv
ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUxOCw3ICs1NDMsNyBAQCB2
b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJpCiAgICAgYXV0byBub2RlU2V0
ID0gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJp
bmdWZWN0b3IpOwogICAgIGF1dG8gdmlhYmxlTmV4dFNpYmxpbmcgPSBmaXJzdEZvbGxvd2luZ1Np
YmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMsIG5vZGVTZXQpOwogCi0gICAgYXV0byBub2RlID0gY29u
dmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVj
dG9yKSwgZWMpOworICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2Rl
KFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiAvLyBU
aGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSBEb2N1bWVudC5oIGFsc28gZGVwZW5kcyBvbiBp
dC4KICNkZWZpbmUgRFVNUF9OT0RFX1NUQVRJU1RJQ1MgMApAQCAtNTEsNyArNTIsNiBAQCBjbGFz
cyBNYXRoTUxRdWFsaWZpZWROYW1lOwogY2xhc3MgTmFtZWROb2RlTWFwOwogY2xhc3MgTm9kZUxp
c3Q7CiBjbGFzcyBOb2RlTGlzdHNOb2RlRGF0YTsKLWNsYXNzIE5vZGVPclN0cmluZzsKIGNsYXNz
IE5vZGVSYXJlRGF0YTsKIGNsYXNzIFF1YWxpZmllZE5hbWU7CiBjbGFzcyBSZW5kZXJCb3g7CkBA
IC0yMDgsOSArMjA4LDkgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIG5leHRFbGVtZW50U2libGlu
ZygpIGNvbnN0OwogCiAgICAgLy8gRnJvbSB0aGUgQ2hpbGROb2RlIC0gaHR0cHM6Ly9kb20uc3Bl
Yy53aGF0d2cub3JnLyNjaGlsZG5vZGUKLSAgICB2b2lkIGJlZm9yZShWZWN0b3I8Tm9kZU9yU3Ry
aW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZnRlcihWZWN0b3I8Tm9kZU9yU3Ry
aW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCByZXBsYWNlV2l0aChWZWN0b3I8Tm9k
ZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiZWZvcmUoVmVjdG9yPFZh
cmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBh
ZnRlcihWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkK
QEAgLTY2MSw2ICs2NjEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRTdHlsZUNoYW5nZShT
dHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkgeyBtX25vZGVGbGFncyA9IChtX25vZGVGbGFncyAm
IH5TdHlsZUNoYW5nZU1hc2spIHwgY2hhbmdlVHlwZTsgfQogICAgIHZvaWQgdXBkYXRlQW5jZXN0
b3JzRm9yU3R5bGVSZWNhbGMoKTsKIAorICAgIFJlZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBzZXVkb0lkIGN1c3RvbVBzZXVk
b0lkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAko
cmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgotI2luY2x1ZGUgIlRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1S
ZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwg
VmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmIChub2RlT3JTdHJpbmdWZWN0b3IuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOwotICAgIG5vZGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9yU3RyaW5nVmVjdG9yLnNpemUoKSk7Ci0gICAg
Zm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAgICAgICAg
c3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5n
OjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6
Y3JlYXRlKGNvbnRleHQuZG9jdW1lbnQoKSwgbm9kZU9yU3RyaW5nLnN0cmluZygpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0g
ICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZU9yU3RyaW5nLm5vZGUoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChub2Rlcy5zaXpl
KCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobm9kZXMuZmlyc3QoKSk7Ci0KLSAgICBh
dXRvIG5vZGVUb1JldHVybiA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShjb250ZXh0LmRvY3Vt
ZW50KCkpOwotICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7Ci0gICAgICAgIGlmICghbm9k
ZVRvUmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBlYykpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIFdURk1vdmUobm9kZVRvUmV0dXJuKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkocmV2
aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5oCShub25l
eGlzdGVudCkKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5vZGVPclN0
cmluZ19oCi0jZGVmaW5lIE5vZGVPclN0cmluZ19oCi0KLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBOb2RlT3JTdHJpbmcgewotcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAg
IFN0cmluZywKLSAgICAgICAgTm9kZQotICAgIH07Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCi0gICAgICAgIDogbV90eXBlKFR5cGU6OlN0cmluZykKLSAgICB7Ci0g
ICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdHJpbmcuaW1wbCgpOwotICAgICAgICBtX2RhdGEuc3Ry
aW5nLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoTm9kZSogbm9kZSkKLSAgICAg
ICAgOiBtX3R5cGUoVHlwZTo6Tm9kZSkKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5ub2RlID0gbm9k
ZTsKLSAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigpOwotICAgIH0KLQotICAgIE5vZGVPclN0cmlu
Zyhjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5
cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6
OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBvdGhlci5tX2RhdGEuc3RyaW5n
OwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5vZGUgPSBvdGhl
ci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlLT5yZWYoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGVPclN0
cmluZyYmIG90aGVyKQotICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAg
ICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5zdHJpbmcs
IG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToK
LSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEubm9k
ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IE5vZGVPclN0cmluZyYgb3RoZXIpCi0gICAg
ewotICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7
Ci0KLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0KLSAgICAgICAgbV90eXBlID0gb3RoZXIubV90eXBl
OwotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoK
LSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBvdGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAg
ICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEu
bm9kZTsKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIE5vZGVP
clN0cmluZyYgb3BlcmF0b3I9KE5vZGVPclN0cmluZyYmIG90aGVyKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAg
IGRlcmVmRGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAg
ICBtX2RhdGEuc3RyaW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAg
ICAgICAgICBtX2RhdGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51
bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotCi0gICAgfk5vZGVPclN0cmluZygpCi0gICAgewotICAgICAgICBkZXJl
ZkRhdGEoKTsKLSAgICB9Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLQotICAgIE5vZGUmIG5vZGUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6Tm9k
ZSk7IEFTU0VSVChtX2RhdGEubm9kZSk7IHJldHVybiAqbV9kYXRhLm5vZGU7IH0KLSAgICBTdHJp
bmdJbXBsJiBzdHJpbmcoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RyaW5nKTsg
QVNTRVJUKG1fZGF0YS5zdHJpbmcpOyByZXR1cm4gKm1fZGF0YS5zdHJpbmc7IH0KLSAgICAKLXBy
aXZhdGU6Ci0gICAgdm9pZCBkZXJlZkRhdGEoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBpZiAobV9kYXRh
LnN0cmluZykKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3RyaW5nLT5kZXJlZigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAgIGlmICht
X2RhdGEubm9kZSkKLSAgICAgICAgICAgICAgICBtX2RhdGEubm9kZS0+ZGVyZWYoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVHlwZSBtX3R5cGU7Ci0gICAg
dW5pb24gewotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0gICAgICAgIE5vZGUqIG5vZGU7
Ci0gICAgfSBtX2RhdGE7Ci19OwotCi1SZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdz
SW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9u
Q29kZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBOb2RlT3JTdHJp
bmdfaApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjA0MjMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIFZhcmlhbnQ8UmVmPE5vZGU+LCBT
dHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwOgorICAgICAgICBBZGQgYWRkaXRp
b25hbCB0ZXN0cyBmb3IgdGhlIGluaXRpYWwgc3RhdGUgb2YgVmFyaWFudCBhbmQgdXNpbmcKKyAg
ICAgICAgbWFrZU92ZXJsb2FkZXIgZm9yIHZpc2l0aW5nLgorCiAyMDE2LTA4LTA2ICBBYWthc2gg
SmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBFV1MgU3R5bGUgUXVldWUg
ZmFpbHMgdG8gcHJvY2VzcyBwYXRjaGVzIHdoaWNoIGZhaWxzIHZhbGlkYXRpb24KSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCShyZXZpc2lvbiAyMDQyMzEp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMjYgKzI2LDUyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRl
ICJDb3VudGVycy5oIgotI2luY2x1ZGUgIk1vdmVPbmx5LmgiCiAjaW5jbHVkZSAiUmVmTG9nZ2Vy
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewog
CitURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQoreworICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+
IHYxOworICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUo
c3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHYxKSA9PSAwKTsKKworICAgIHN0cnVjdCBUIHsK
KyAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQorICAgICAgICBpbnQgdmFsdWU7CisgICAgfTsK
KworICAgIFZhcmlhbnQ8VCwgaW50PiB2MjsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09
IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8VD4odjIpLnZhbHVl
ID09IDE1KTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQmFzaWMpCiB7Ci0gICAgc3RkOjpleHBl
cmltZW50YWw6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOworICAgIFZhcmlhbnQ8
aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgo
KSA9PSAwKTsKICAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odmFy
aWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8
aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6
Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3Rk
OjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVY
UEVDVF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2
YXJpYW50KSk7CisKKyAgICB2YXJpYW50ID0gMS4wOworICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQu
aW5kZXgoKSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGRv
dWJsZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6ZXhwZXJpbWVudGFs
OjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSAxLjApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6
ZXhwZXJpbWVudGFsOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBF
Q1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJp
YW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5h
dGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9y
KQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBmbG9hdCwg
U3RyaW5nPiBWYXJpYW50OwotCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAgTm9uZSwK
ICAgICAgICAgSW50LApAQCAtNTMsNyArNzksNiBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zp
c2l0b3IpCiAgICAgICAgIFN0cmluZywKICAgICB9OwogCi0KICAgICBzdHJ1Y3QgVmlzaXRvciB7
CiAgICAgICAgIFZpc2l0b3IoVHlwZSYgdCkKICAgICAgICAgICAgIDogdHlwZSh0KQpAQCAtNjks
NyArOTQsNyBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5
cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudCB2YXJpYW50ID0gODsKKyAgICBWYXJpYW50
PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CiAgICAgc3RkOjpleHBlcmltZW50YWw6
OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6Oklu
dCA9PSB0eXBlKTsKIApAQCAtODQsMTUgKzEwOSw0NSBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNp
Y1Zpc2l0b3IpCiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCitU
RVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlT3ZlcmxvYWRlcikKK3sKKyAgICBlbnVt
IGNsYXNzIFR5cGUgeworICAgICAgICBOb25lLAorICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0
LAorICAgICAgICBTdHJpbmcsCisgICAgfTsKKworICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7
CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VPdmVybG9hZGVyKAorICAgICAgICBbJl0o
aW50KSB7IHR5cGUgPSBUeXBlOjpJbnQ7IH0sCisgICAgICAgIFsmXShmbG9hdCkgeyB0eXBlID0g
VHlwZTo6RmxvYXQ7IH0sCisgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmlu
ZzsgfQorICAgICk7CisKKyAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9
IDg7CisgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAg
IEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKKworCisgICAgdmFyaWFudCA9IDEuMGY7
CisgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVY
UEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gImhlbGxv
IjsKKyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAg
RVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOworfQorCiBURVNUKFdURl9WYXJpYW50
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRh
bDo6dmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4s
IGludD4gVmFyaWFudDsKLSAKICAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0
aW5nU2NvcGUgc2NvcGU7CiAKICAgICB7CiAgICAgICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjpt
YWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOwotICAgICAgICBWYXJp
YW50IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7CisgICAgICAgIFZhcmlhbnQ8c3RkOjp1bmlxdWVf
cHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1
ZVB0cik7CiAKICAgICAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CiAgICAgICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CkBAIC0xMDIsMTQgKzE1Nywx
MiBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiAgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
IH0KIAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291bnRpbmcpCitURVNUKFdURl9WYXJpYW50LCBS
ZWZQdHIpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8
UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50OwotCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgi
YSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50
IHYgPSByZWY7CisgICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJl
ZjsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMTE3LDcgKzE3MCwxOCBAQCBURVNU
KFdURl9WYXJpYW50LCBSZWZDb3VudGluZykKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQg
diA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgVmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50
PiB2ID0gV1RGTW92ZShyZWYpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfVmFyaWFudCwg
UmVmKQoreworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJl
ZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBWYXJpYW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYg
PSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285547</attachid>
            <date>2016-08-07 17:52:09 -0700</date>
            <delta_ts>2016-08-07 18:02:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160807175038.patch</filename>
            <type>text/plain</type>
            <size>39728</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDIxIEBA
CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENP
TVBJTEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwog
bmFtZXNwYWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVS
X1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNl
cHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhD
UEVUSU9OX0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAg
ICBpZiAoKF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsg
XAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQogI2Vsc2UKLQotc3RhdGljIGlubGlu
ZSB2b2lkIF9fY3Jhc2hfaGVscGVyKGJvb2wpewotICAgIENSQVNIKCk7Ci19Ci1zdGF0aWMgaW5s
aW5lIGNvbnN0ZXhwciBib29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7Ci0gICAg
cmV0dXJuICF0ZXN0ID8gdHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOwotfQot
CiAjZGVmaW5lIF9fVEhST1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKLSNkZWZpbmUgX19DT05T
VF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29u
c3RleHByX2NyYXNoX2lmKChfX3ByZWRpY2F0ZSkpOwogI2VuZGlmCiAKIHN0cnVjdCBfX2luX3Bs
YWNlX3ByaXZhdGV7CkBAIC0xMTcsNiArMTA5LDExIEBAIHB1YmxpYzoKICAgICB7fQogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggaW5saW5lIFQgX190
aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcpeworICAgIF9fVEhS
T1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2Vzcyh3aGF0X2FyZykpCit9CisKIHRlbXBsYXRl
PHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBz
dHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjsKIApAQCAtMjI3LDggKzIyNCw3IEBAIHRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF8KIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVz
Li4uPiYmKTsKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUgY29uc3QmIGdldCgKLSAgICB2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKK2NvbnN0
ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNv
bnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CiAKIHRlbXBsYXRlIDxwdHJkaWZm
X3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+CiBjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUg
X19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKQEAgLTUzNSw3ICs1
MzEsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZT57CiAgICAgX1R5cGUmIF9fZ2V0KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewogICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5
cGU+OjpfX2dldChfX3ZhbCk7CiAgICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3Jy
ZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAgLypjb25zdGV4cHIqLyBfVHlwZSYmIF9fZ2V0
X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZT46Ol9fZ2V0X3JyZWYoX192YWwpOwogICAgIH0KICAgICBjb25zdGV4cHIgY29u
c3QgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewpAQCAtNjI2LDcgKzYy
Miw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKICAgICAgICAgcmV0
dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7CiAgICAgfQogCi0gICAgY29uc3RleHByIF9I
ZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAvKmNvbnN0ZXhwciov
IF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAgcmV0dXJu
IF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKICAgICB9CiAgICAgCkBAIC02NDUsNyAr
NjQxLDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+ewogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKKyAgICAv
KmNvbnN0ZXhwciovIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6
X190eXBlJiYgX19nZXRfcnJlZigKICAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsK
ICAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleC0xPik7CiAg
ICAgfQpAQCAtMTE2OSwxMCArMTE2NSwxMCBAQCBzdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHN7
CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+CiBzdHJ1Y3Qg
X19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57Ci0gICAgc3RhdGlj
IHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBf
X3NvdXJjZSl7CisgICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdl
ICosX1N0b3JhZ2UmKXsKICAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2Mo
KSk7CiAgICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqIF9f
b2JqKXsKKyAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsKICAgICAg
ICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7CiAgICAgfTsKIH07CkBAIC0x
NzgzLDI2ICsxNzc5LDQ4IEBAIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldCh2YXJpYW50PF9U
eXAKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29u
c3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUg
Y29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgX19DT05TVF9F
WFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9h
Y2Nlc3MoIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gKigmX192YXJp
YW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSk7CisgICAgcmV0dXJuICoo
CisgICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQorICAgICAgICAgICAgPyAmX190aHJvd19i
YWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKQorICAgICAgICAg
ICAgOiAmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KQorICAg
ICk7CiB9CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
IGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190
eXBlJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIF9fQ09OU1RfRVhQUl9USFJP
V19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJC
YWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAgcmV0dXJuICooJl9fdmFyaWFudF9hY2Nl
c3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOworICAgIHJldHVybiAqKAorICAgICAg
ICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKKyAgICAgICAgICAgID8gJl9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5
cGUmPigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikKKyAgICAgICAgICAgIDogJl9fdmFyaWFu
dF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikKKyAgICApOwogfQogCiB0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJp
YW50PF9UeXBlcy4uLj4mJiBfX3YpewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05f
SUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBp
bmRleCBpbiBnZXQiKSk7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5
cGVzLi4uPjo6Z2V0KHN0ZDo6bW92ZShfX3YpKTsKKyAgICByZXR1cm4gX192YXJpYW50X2FjY2Vz
c29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCisgICAgICAgICAgICAoCisgICAgICAgICAgICAg
ICAgKAorICAgICAgICAgICAgICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8aW50PigiQmFkIHZh
cmlhbnQgaW5kZXggaW4gZ2V0IikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogMAorICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAsIHN0ZDo6bW92ZShfX3YpCisgICAgICAgICAg
ICApCisgICAgICAgICk7CiB9CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9f
dil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRl
eCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAg
ICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoc3RkOjpt
b3ZlKF9fdikpOworICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4u
Lj46OmdldCgKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAg
ICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBf
X3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQi
KQorICAgICAgICAgICAgICAgICAgICAgICAgOiAwCisgICAgICAgICAgICAgICAgKSwKKyAgICAg
ICAgICAgICAgICBzdGQ6Om1vdmUoX192KQorICAgICAgICAgICAgKQorICAgICAgICApOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgpAQCAtMTg2OCw4
ICsxODg2LDkgQEAgY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAogdGVt
cGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0
eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBl
CiB2aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcix2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0g
ICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3YudmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQiKSk7
Ci0gICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1w
b2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworICAgIHJldHVybiAoX192LnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSkKKyAgICAgICAgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vz
czx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190
eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpCisgICAgICAgIDogX192aXNpdG9yX3Rh
YmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNp
dG9yLF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBf
VmFyaWFudHM+CkBAIC0xOTM4LDggKzE5NTcsOCBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJ
bmRleCxwdHJkaWZmX3QgCiBzdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgs
X0luZGljZXMuLi4+ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4u
LiBfVmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNp
dChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBfX0NP
TlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKHRydWUsIGJhZF92YXJpYW50X2FjY2VzcygiVmlz
aXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFyaWFu
dHMmJiAuLi4peworICAgICAgICBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTIwNTQsMyAr
MjA3MywxNiBAQCBzdHJ1Y3QgaGFzaDxleHBlcmltZW50YWw6OnZhcmlhbnQ8X1R5cGVzCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lLi4uIFR5cGVzPgordXNpbmcgVmFyaWFudCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PFR5cGVzLi4uPjsKKworfQorCit1c2luZyBXVEY6OlZhcmlhbnQ7CisKKyNpZiBDT01QSUxFUihN
U1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIFZhcmlhbnQ8UmVmPE5vZGU+LCBT
dHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIE5vZGVP
clN0cmluZy5oL2NwcAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmg6CisgICAgICAgICogZG9t
L0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnByZXBlbmQpOgorICAgICAg
ICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIFZhcmlhbnQ8
UmVmPE5vZGU+LCBTdHJpbmc+IGFuZCBtb3ZlIGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2Rl
CisgICAgICAgIGludG8gTm9kZS4KKworICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAxNi0w
OC0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2ltcGxpZnkg
dmFsdWVUb1VTVlN0cmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDIz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
NDg3LDcgKzE0ODcsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL05vZGUuY3BwCiAg
ICAgZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCiAgICAgZG9tL05vZGVJdGVyYXRvci5jcHAK
LSAgICBkb20vTm9kZU9yU3RyaW5nLmNwcAogICAgIGRvbS9Ob2RlUmFyZURhdGEuY3BwCiAgICAg
ZG9tL05vZGVUcmF2ZXJzYWwuY3BwCiAgICAgZG9tL092ZXJmbG93RXZlbnQuY3BwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4NDMsOCArMjg0Myw2IEBACiAJCTdDRTY4
MzQ3MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTY4MzQ2
MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0U2Q0JG
QjE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyog
Rm9ybWF0Q29udmVydGVyLmggKi87IH07CiAJCTdDRTZDQkZEMTg3RjM5NDkwMEQ0NkJGNSAvKiBG
b3JtYXRDb252ZXJ0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAg
Ki87IH07Ci0JCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUFDMTA2MUI0ODNE
MUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLzsgfTsKLQkJN0NFQUMxMDkxQjQ4M0Q3RjAw
MzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5n
LmNwcCAqLzsgfTsKIAkJN0NGREM1N0MxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNp
b25FcnJvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcCAq
LzsgfTsKIAkJN0NGREM1N0QxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1
N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdENEM5NkRDMUFENDQ4MzUw
MDM2NUE1MCAvKiBKU0ZldGNoSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3RDRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhl
YWRlcnMuY3BwICovOyB9OwpAQCAtMTAyNjUsOCArMTAyNjMsNiBAQAogCQk3Q0U2ODM0NjE5MjE4
MjE1MDBGNEQ5MjggLyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U2Q0JGQTE4N0YzNzA3MDBE
NDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvcm1hdENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U2
Q0JGQzE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdENvbnZlcnRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZU9yU3RyaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBO
b2RlT3JTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9k
ZU9yU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0ExQUMx
RDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0ZEQzU3QjFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVu
dEV4dGVuc2lvbkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
bnRFeHRlbnNpb25FcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RDRDOTZE
ODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaEhlYWRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjQxNDIsOCArMjQxMzgsNiBAQAogCQkJCTFBNzUwRDg3MEE5MEUzOTQw
MDBGRjIxNSAvKiBOb2RlSXRlcmF0b3IuaWRsICovLAogCQkJCUE4MTg3MjEwMDk3N0QzQzAwMDU4
MjZEOSAvKiBOb2RlTGlzdC5oICovLAogCQkJCTg1QUNBOUZBMEE5QjYzMTAwMDY3MUU5MCAvKiBO
b2RlTGlzdC5pZGwgKi8sCi0JCQkJN0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0
cmluZy5jcHAgKi8sCi0JCQkJN0NFQUMxMDYxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmlu
Zy5oICovLAogCQkJCTRGQUI0ODY2MTY0M0E2N0UwMEY3MEMwNyAvKiBOb2RlUmFyZURhdGEuY3Bw
ICovLAogCQkJCTYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLywK
IAkJCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8sCkBA
IC0yNjkwNCw3ICsyNjg5OCw2IEBACiAJCQkJODU0RkU3MzMwQTIyOTdCRTAwNThEN0FEIC8qIE5v
ZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM1MEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjFCMDk3
N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0NFQUMxMDcx
QjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjMx
ODlBRTMwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjNEN0IzMkQwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQzMTA1QkIxNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBp
biBIZWFkZXJzICovLApAQCAtMzA3MDYsNyArMzA2OTksNiBAQAogCQkJCUE4QzRBODAwMDlENTYz
MjcwMDAzQUM4RCAvKiBOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzMyMEEyMjk3
QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg1NEZFNzM0MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJN0NFQUMxMDkxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0RkZDMDIyQjE2NDNCNzEwMDA0RTE2MzggLyogTm9kZVJhcmVEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2Rl
VHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzNTAzQ0M3MTAxN0ExQjEwMDNCNDdF
MSAvKiBOb3RpZmljYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDE3ICszMywxNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVjdG9y
KEV4ZWNTdGF0ZSYgc3RhdGUpCitWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRv
Tm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQgPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3Ry
aW5nPiByZXN1bHQ7CisgICAgVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiByZXN1
bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJndW1lbnRDb3VudCk7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSk7CiAgICAgICAgIGlm
IChhdXRvKiBub2RlID0ganNEeW5hbWljQ2FzdDxKU05vZGUqPih2YWx1ZSkpCi0gICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKCZub2RlLT53cmFwcGVkKCkpOworICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChub2RlLT53cmFwcGVkKCkpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwog
ICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oCShyZXZpc2lvbiAyMDQyMzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw4IEBACiAjaWZuZGVmIEpTTm9kZU9yU3RyaW5nX2gKICNkZWZpbmUgSlNO
b2RlT3JTdHJpbmdfaAogCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNSw3ICszNiw5IEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVP
clN0cmluZ1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSYpOworY2xhc3MgTm9kZTsKKworVmVjdG9yPFZh
cmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1ZlY3RvcihKU0M6OkV4ZWNT
dGF0ZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQAogI2lu
Y2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcu
aCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSYWRpb05vZGVMaXN0LmgiCkBAIC04NzMsMTggKzg3MiwxOCBAQCB1bnNp
Z25lZCBDb250YWluZXJOb2RlOjpjaGlsZEVsZW1lbnRDb3VuCiAgICAgcmV0dXJuIHN0ZDo6ZGlz
dGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwogfQogCi12b2lkIENvbnRh
aW5lck5vZGU6OmFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3Rv
ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6OmFwcGVuZChWZWN0b3I8
VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1v
dmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hpbGQoKm5vZGUsIGVjKTsKIH0KIAotdm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0
b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09y
U3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsK
KyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdU
Rk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlz
aW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDggKzk5LDggQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGZpcnN0RWxl
bWVudENoaWxkKCkgY29uc3Q7CiAgICAgRWxlbWVudCogbGFzdEVsZW1lbnRDaGlsZCgpIGNvbnN0
OwogICAgIHVuc2lnbmVkIGNoaWxkRWxlbWVudENvdW50KCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcHJl
cGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBh
cHBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBwcmVwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4m
JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBlbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0
eShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyAr
MTEyLDYgQEAKICNpbmNsdWRlICJOb2RlLmNwcCIKICNpbmNsdWRlICJOb2RlRmlsdGVyQ29uZGl0
aW9uLmNwcCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuY3BwIgotI2luY2x1ZGUgIk5vZGVPclN0
cmluZy5jcHAiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmNwcCIKICNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmNwcCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmNwcCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0
aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUHJv
Z3Jlc3NFdmVudC5oIgpAQCAtNDM4LDE4ICs0MzcsMTcgQEAgYm9vbCBOb2RlOjphcHBlbmRDaGls
ZChOb2RlJiBuZXdDaGlsZCwgRQogICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigq
dGhpcykuYXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8UmVm
UHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKGNv
bnN0IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiBub2RlT3JTdHJpbmdWZWN0b3IpCitzdGF0aWMgSGFz
aFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdW
ZWN0b3IoY29uc3QgVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYgdmVjdG9yKQog
ewogICAgIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0OwotICAgIGZvciAoYXV0byYgbm9k
ZU9yU3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9y
U3RyaW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5n
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpO
b2RlOgotICAgICAgICAgICAgbm9kZVNldC5hZGQoJm5vZGVPclN0cmluZy5ub2RlKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisKKyAgICBhdXRvIHZpc2l0b3IgPSBX
VEY6Om1ha2VPdmVybG9hZGVyKAorICAgICAgICBbJl0oY29uc3QgUmVmPE5vZGU+JiBub2RlKSB7
IG5vZGVTZXQuYWRkKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUucHRyKCkpKTsgfSwKKyAgICAgICAg
W10oY29uc3QgU3RyaW5nJikgeyB9CisgICAgKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgdmFy
aWFudCA6IHZlY3RvcikKKyAgICAgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3Is
IHZhcmlhbnQpOwogCiAgICAgcmV0dXJuIG5vZGVTZXQ7CiB9CkBAIC00NzIsNyArNDcwLDM0IEBA
IHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RGb2xsb3dpbmdTaWJsaW4KICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPE5vZGU+IE5vZGU6OmNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3Ry
aW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
IChub2RlT3JTdHJpbmdWZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIG5vZGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobm9kZU9yU3RyaW5nVmVjdG9yLnNpemUoKSk7CisKKyAgICBhdXRvIHZpc2l0b3Ig
PSBXVEY6Om1ha2VPdmVybG9hZGVyKAorICAgICAgICBbJl0oUmVmPE5vZGU+JiBub2RlKSB7IG5v
ZGVzLnVuY2hlY2tlZEFwcGVuZChub2RlLmNvcHlSZWYoKSk7IH0sCisgICAgICAgIFsmXShTdHJp
bmcmIHN0cmluZykgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0cmluZykpOyB9CisgICAgKTsKKworICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG5vZGVP
clN0cmluZ1ZlY3RvcikKKyAgICAgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3Is
IHZhcmlhbnQpOworCisgICAgaWYgKG5vZGVzLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4g
V1RGTW92ZShub2Rlcy5maXJzdCgpKTsKKworICAgIGF1dG8gbm9kZVRvUmV0dXJuID0gRG9jdW1l
bnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIGZvciAoYXV0byYgbm9kZSA6IG5v
ZGVzKSB7CisgICAgICAgIGlmICghbm9kZVRvUmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBlYykp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFdURk1vdmUo
bm9kZVRvUmV0dXJuKTsKK30KKwordm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPFZhcmlhbnQ8UmVm
PE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAg
ICBpZiAoIXBhcmVudCkKQEAgLTQ4MSw3ICs1MDYsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9y
bWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8g
dmlhYmxlUHJldmlvdXNTaWJsaW5nID0gZmlyc3RQcmVjZWRpbmdTaWJsaW5nTm90SW5Ob2RlU2V0
KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBh
dXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0
cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNDkzLDcgKzUxOCw3IEBAIHZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSgqbm9kZSwgdmlhYmxlUHJldmlvdXNTaWJs
aW5nLmdldCgpLCBlYyk7CiB9CiAKLXZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmlu
Zz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBOb2RlOjph
ZnRlcihWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFy
ZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTAyLDE0ICs1MjcsMTQg
QEAgdm9pZCBOb2RlOjphZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIAogICAgIGF1dG8gbm9k
ZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9y
U3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dp
bmdTaWJsaW5nTm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9
IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmlu
Z1ZlY3RvciksIGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRv
Tm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5v
ZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKCpub2RlLCB2
aWFibGVOZXh0U2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OnJlcGxhY2VXaXRo
KFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBT
dHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
UmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBh
cmVudCkKQEAgLTUxOCw3ICs1NDMsNyBAQCB2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxO
b2RlT3JTdHJpCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5v
ZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8gdmlhYmxlTmV4
dFNpYmxpbmcgPSBmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMsIG5vZGVT
ZXQpOwogCi0gICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRo
aXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8gbm9kZSA9IGNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJl
dmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNs
dWRlIDx3dGYvVmFyaWFudC5oPgogCiAvLyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSBE
b2N1bWVudC5oIGFsc28gZGVwZW5kcyBvbiBpdC4KICNkZWZpbmUgRFVNUF9OT0RFX1NUQVRJU1RJ
Q1MgMApAQCAtNTEsNyArNTIsNiBAQCBjbGFzcyBNYXRoTUxRdWFsaWZpZWROYW1lOwogY2xhc3Mg
TmFtZWROb2RlTWFwOwogY2xhc3MgTm9kZUxpc3Q7CiBjbGFzcyBOb2RlTGlzdHNOb2RlRGF0YTsK
LWNsYXNzIE5vZGVPclN0cmluZzsKIGNsYXNzIE5vZGVSYXJlRGF0YTsKIGNsYXNzIFF1YWxpZmll
ZE5hbWU7CiBjbGFzcyBSZW5kZXJCb3g7CkBAIC0yMDgsOSArMjA4LDkgQEAgcHVibGljOgogICAg
IEVsZW1lbnQqIG5leHRFbGVtZW50U2libGluZygpIGNvbnN0OwogCiAgICAgLy8gRnJvbSB0aGUg
Q2hpbGROb2RlIC0gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjaGlsZG5vZGUKLSAgICB2
b2lkIGJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBhZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCByZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBiZWZvcmUoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhZnRlcihWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4s
IFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoKFZlY3Rv
cjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIE90aGVy
IG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKQEAgLTY2MSw2ICs2NjEsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkgeyBt
X25vZGVGbGFncyA9IChtX25vZGVGbGFncyAmIH5TdHlsZUNoYW5nZU1hc2spIHwgY2hhbmdlVHlw
ZTsgfQogICAgIHZvaWQgdXBkYXRlQW5jZXN0b3JzRm9yU3R5bGVSZWNhbGMoKTsKIAorICAgIFJl
ZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIFBzZXVkb0lkIGN1c3RvbVBzZXVkb0lkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmlu
Zy5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIlRleHQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJp
bmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JT
dHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChub2RlT3JTdHJpbmdW
ZWN0b3IuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxS
ZWY8Tm9kZT4+IG5vZGVzOwotICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9y
U3RyaW5nVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2Rl
T3JTdHJpbmdWZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBu
b2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6Y3JlYXRlKGNvbnRleHQuZG9jdW1lbnQoKSwgbm9k
ZU9yU3RyaW5nLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBl
bmQobm9kZU9yU3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURk1v
dmUobm9kZXMuZmlyc3QoKSk7Ci0KLSAgICBhdXRvIG5vZGVUb1JldHVybiA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShjb250ZXh0LmRvY3VtZW50KCkpOwotICAgIGZvciAoYXV0byYgbm9kZSA6
IG5vZGVzKSB7Ci0gICAgICAgIGlmICghbm9kZVRvUmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBl
YykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIFdURk1v
dmUobm9kZVRvUmV0dXJuKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGVPclN0cmluZy5oCShub25leGlzdGVudCkKQEAgLTEsMTYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIE5vZGVPclN0cmluZ19oCi0jZGVmaW5lIE5vZGVPclN0cmluZ19o
Ci0KLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOb2RlT3JTdHJpbmcgewotcHVibGljOgotICAg
IGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIFN0cmluZywKLSAgICAgICAgTm9kZQotICAgIH07
Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgICAgIDogbV90
eXBlKFR5cGU6OlN0cmluZykKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdHJpbmcu
aW1wbCgpOwotICAgICAgICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2Rl
T3JTdHJpbmcoTm9kZSogbm9kZSkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6Tm9kZSkKLSAgICB7
Ci0gICAgICAgIG1fZGF0YS5ub2RlID0gbm9kZTsKLSAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigp
OwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQot
ICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5z
dHJpbmcgPSBvdGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+
cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAg
ICAgICAgICAgbV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1f
ZGF0YS5ub2RlLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgTm9kZU9yU3RyaW5nKE5vZGVPclN0cmluZyYmIG90aGVyKQotICAgICAgICA6IG1fdHlw
ZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAg
ICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdGQ6OmV4
Y2hhbmdlKG90aGVyLm1fZGF0YS5zdHJpbmcsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gc3Rk
OjpleGNoYW5nZShvdGhlci5tX2RhdGEubm9kZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KGNvbnN0
IE5vZGVPclN0cmluZyYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIp
Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0KLSAg
ICAgICAgbV90eXBlID0gb3RoZXIubV90eXBlOwotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBv
dGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAg
bV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1fZGF0YS5ub2Rl
LT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KE5vZGVPclN0cmlu
ZyYmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVmRGF0YSgpOwotCi0gICAgICAgIG1fdHlw
ZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2Fz
ZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0gc3RkOjpleGNoYW5n
ZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IHN0ZDo6ZXhj
aGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgfk5vZGVPclN0
cmluZygpCi0gICAgewotICAgICAgICBkZXJlZkRhdGEoKTsKLSAgICB9Ci0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIE5vZGUmIG5vZGUoKSBjb25zdCB7
IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6Tm9kZSk7IEFTU0VSVChtX2RhdGEubm9kZSk7IHJldHVy
biAqbV9kYXRhLm5vZGU7IH0KLSAgICBTdHJpbmdJbXBsJiBzdHJpbmcoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gVHlwZTo6U3RyaW5nKTsgQVNTRVJUKG1fZGF0YS5zdHJpbmcpOyByZXR1cm4g
Km1fZGF0YS5zdHJpbmc7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBkZXJlZkRhdGEoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJp
bmc6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLnN0cmluZykKLSAgICAgICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nLT5kZXJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIGlmIChtX2RhdGEubm9kZSkKLSAgICAgICAgICAgICAgICBt
X2RhdGEubm9kZS0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgVHlwZSBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmc7Ci0gICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgfSBtX2RhdGE7Ci19OwotCi1SZWZQdHI8
Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9y
PE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBOb2RlT3JTdHJpbmdfaApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0MjMxKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgtMDYgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmlu
ZyB3aXRoIFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zhcmlh
bnQuY3BwOgorICAgICAgICBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3IgdGhlIGluaXRpYWwgc3Rh
dGUgb2YgVmFyaWFudCBhbmQgdXNpbmcKKyAgICAgICAgbWFrZU92ZXJsb2FkZXIgZm9yIHZpc2l0
aW5nLgorCiAyMDE2LTA4LTA2ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4K
IAogICAgICAgICBFV1MgU3R5bGUgUXVldWUgZmFpbHMgdG8gcHJvY2VzcyBwYXRjaGVzIHdoaWNo
IGZhaWxzIHZhbGlkYXRpb24KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zh
cmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zh
cmlhbnQuY3BwCShyZXZpc2lvbiAyMDQyMzEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9WYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjYgKzI2LDUyIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJDb3VudGVycy5oIgotI2luY2x1ZGUgIk1vdmVP
bmx5LmgiCiAjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCitURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQor
eworICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOworICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4
KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHYx
KSA9PSAwKTsKKworICAgIHN0cnVjdCBUIHsKKyAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQor
ICAgICAgICBpbnQgdmFsdWU7CisgICAgfTsKKworICAgIFZhcmlhbnQ8VCwgaW50PiB2MjsKKyAg
ICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhw
ZXJpbWVudGFsOjpnZXQ8VD4odjIpLnZhbHVlID09IDE1KTsKK30KKwogVEVTVChXVEZfVmFyaWFu
dCwgQmFzaWMpCiB7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBkb3VibGU+
IHZhcmlhbnQgPSAxOworICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwogICAg
IEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAwKTsKICAgICBFWFBFQ1RfVFJVRShzdGQ6
OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUo
KnN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBF
Q1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVs
bHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0
aXZlPGludD4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6
aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisKKyAgICB2YXJpYW50ID0gMS4w
OworICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQ
RUNUX1RSVUUoKnN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSAx
LjApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8aW50Pih2YXJp
YW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6
ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVT
VChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmlt
ZW50YWw6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiBWYXJpYW50OwotCiAgICAgZW51bSBj
bGFzcyBUeXBlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgSW50LApAQCAtNTMsNyArNzksNiBA
QCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAgICAgICAgIFN0cmluZywKICAgICB9
OwogCi0KICAgICBzdHJ1Y3QgVmlzaXRvciB7CiAgICAgICAgIFZpc2l0b3IoVHlwZSYgdCkKICAg
ICAgICAgICAgIDogdHlwZSh0KQpAQCAtNjksNyArOTQsNyBAQCBURVNUKFdURl9WYXJpYW50LCBC
YXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFu
dCB2YXJpYW50ID0gODsKKyAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9
IDg7CiAgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQp
OwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIApAQCAtODQsMTUgKzEwOSw0
NSBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAgICAgRVhQRUNUX1RSVUUoVHlw
ZTo6U3RyaW5nID09IHR5cGUpOwogfQogCitURVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdN
YWtlT3ZlcmxvYWRlcikKK3sKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOb25lLAor
ICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0LAorICAgICAgICBTdHJpbmcsCisgICAgfTsKKwor
ICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1h
a2VPdmVybG9hZGVyKAorICAgICAgICBbJl0oaW50KSB7IHR5cGUgPSBUeXBlOjpJbnQ7IH0sCisg
ICAgICAgIFsmXShmbG9hdCkgeyB0eXBlID0gVHlwZTo6RmxvYXQ7IH0sCisgICAgICAgIFsmXShT
dHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQorICAgICk7CisKKyAgICBWYXJpYW50PGlu
dCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjpleHBlcmltZW50YWw6OnZp
c2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBl
KTsKKworCisgICAgdmFyaWFudCA9IDEuMGY7CisgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUp
OworCisKKyAgICB2YXJpYW50ID0gImhlbGxvIjsKKyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlz
aXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5
cGUpOworfQorCiBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiB7Ci0g
ICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gVmFyaWFudDsKLSAKICAgICBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CiAKICAgICB7CiAgICAg
ICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPigpOwotICAgICAgICBWYXJpYW50IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7Cisg
ICAgICAgIFZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7CiAKICAgICAgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CiAgICAg
ICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7CkBAIC0xMDIsMTQgKzE1NywxMiBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3IpCiAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKIH0KIAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291
bnRpbmcpCitURVNUKFdURl9WYXJpYW50LCBSZWZQdHIpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4
cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50OwotCiAg
ICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2Vy
PiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSByZWY7CisgICAgICAgIFZhcmlhbnQ8UmVm
UHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OwpAQCAtMTE3LDcgKzE3MCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZDb3VudGluZykKICAg
ICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+
IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgVmFy
aWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOworICAgIH0KKwor
ICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKK30KKworVEVTVChXVEZfVmFyaWFudCwgUmVmKQoreworICAgIHsKKyAgICAgICAgUmVmTG9n
Z2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBWYXJp
YW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285548</attachid>
            <date>2016-08-07 18:02:21 -0700</date>
            <delta_ts>2016-08-08 13:33:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160807180049.patch</filename>
            <type>text/plain</type>
            <size>39814</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDIxIEBA
CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENP
TVBJTEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwog
bmFtZXNwYWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVS
X1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNl
cHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhD
UEVUSU9OX0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAg
ICBpZiAoKF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsg
XAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQogI2Vsc2UKLQotc3RhdGljIGlubGlu
ZSB2b2lkIF9fY3Jhc2hfaGVscGVyKGJvb2wpewotICAgIENSQVNIKCk7Ci19Ci1zdGF0aWMgaW5s
aW5lIGNvbnN0ZXhwciBib29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7Ci0gICAg
cmV0dXJuICF0ZXN0ID8gdHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOwotfQot
Ci0jZGVmaW5lIF9fVEhST1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKLSNkZWZpbmUgX19DT05T
VF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29u
c3RleHByX2NyYXNoX2lmKChfX3ByZWRpY2F0ZSkpOworI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElP
TihfX2V4Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAo
MCk7CiAjZW5kaWYKIAogc3RydWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKQEAgLTExNyw2ICsxMDks
MTEgQEAgcHVibGljOgogICAgIHt9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyhjb25z
dCBjaGFyKiB3aGF0X2FyZyl7CisgICAgX19USFJPV19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNj
ZXNzKHdoYXRfYXJnKSkKK30KKwogdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIHN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyOwog
CkBAIC0yMjcsOCArMjI0LDcgQEAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gXwogY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+
OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiYpOwogCiB0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KAotICAgIHZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYpOworY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmKTsKIAogdGVtcGxhdGUgPHB0cmRpZmZfdCBfSW5kZXgsIHR5cGVuYW1lLi4uIF9UeXBl
cz4KIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsIF9UeXBl
cy4uLj46Ol9fdHlwZSAmJgpAQCAtNTM1LDcgKzUzMSw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRh
PF9UeXBlPnsKICAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKICAgICB9Ci0g
ICAgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAg
ICAvKmNvbnN0ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsK
ICAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3Zh
bCk7CiAgICAgfQogICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7CkBAIC02MjYsNyArNjIyLDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8
X0hlYWQsX1Jlc3QuLi4+ewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+
KTsKICAgICB9CiAKLSAgICBjb25zdGV4cHIgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2lu
ZGV4X3Q8MD4peworICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNl
X2luZGV4X3Q8MD4pewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8
MD4pOwogICAgIH0KICAgICAKQEAgLTY0NSw3ICs2NDEsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0
YTxfSGVhZCxfUmVzdC4uLj57CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4K
LSAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+
OjpfX3R5cGUmJiBfX2dldF9ycmVmKAorICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAogICAgICAg
ICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewogICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0
X3JyZWYoaW5fcGxhY2U8X0luZGV4LTE+KTsKICAgICB9CkBAIC0xMTY5LDEwICsxMTY1LDEwIEBA
IHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wc3sKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSBfU3RvcmFnZT4KIHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgs
X0luZGV4LF9TdG9yYWdlPnsKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMo
X1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKKyAgICBzdGF0aWMgdm9pZCBf
X21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewogICAgICAgICBfX1RI
Uk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygpKTsKICAgICB9OwotICAgIHN0YXRpYyB2b2lk
IF9fZGVzdHJveV9mdW5jKF9TdG9yYWdlICogX19vYmopeworICAgIHN0YXRpYyB2b2lkIF9fZGVz
dHJveV9mdW5jKF9TdG9yYWdlICopewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJh
ZF9hbGxvYygpKTsKICAgICB9OwogfTsKQEAgLTE3ODMsMjYgKzE3NzksNDggQEAgY29uc3RleHBy
IGNvbnN0IF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cAogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRl
eCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4g
Z2V0IikpOwotICAgIHJldHVybiAqKCZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4u
Lj46OmdldChfX3YpKTsKKyAgICByZXR1cm4gKigKKyAgICAgICAgKF9JbmRleCE9X192LmluZGV4
KCkpCisgICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0Jj4oIkJhZCB2YXJp
YW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICA6ICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0lu
ZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCisgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4m
IF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5p
bmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsK
LSAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQo
X192KSk7CisgICAgcmV0dXJuICooCisgICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQorICAg
ICAgICAgICAgPyAmX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSY+KCJCYWQgdmFyaWFudCBpbmRleCBpbiBn
ZXQiKQorICAgICAgICAgICAgOiAmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+
OjpnZXQoX192KQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgs
X1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
X19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRf
dmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4g
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoc3RkOjptb3ZlKF9fdikp
OworICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgK
KyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgIChf
SW5kZXghPV9fdi5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3Rocm93X2Jh
ZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgOiAwCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAg
ICwgc3RkOjptb3ZlKF9fdikKKyAgICAgICAgICAgICkKKyAgICAgICAgKTsKIH0KIAogdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIGNvbnN0
IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQo
dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1df
RVhDUEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFk
IHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8
X0luZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFy
aWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAorICAgICAgICAgICAgKAorICAg
ICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGlu
dD4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICAgICAgICAgICAgICA6
IDAKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShfX3YpCisg
ICAgICAgICAgICApCisgICAgICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+CkBAIC0xODY4LDggKzE4ODYsOSBAQCBjb25zdCB0eXBlbmFtZSBf
X3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBl
bmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUKIHZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9y
LHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVU
SU9OX0lGKF9fdi52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCksIGJhZF92YXJpYW50X2FjY2Vzcygi
VmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKLSAgICByZXR1cm4gX192aXNpdG9yX3RhYmxl
PF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9y
LF9fdik7CisgICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAg
ICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5f
dHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJp
YW50IikKKyAgICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190
cmFtcG9saW5lW19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KQEAgLTE5MzgsOCArMTk1Nyw4
IEBAIHRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAKIHN0cnVjdCBfX3Zp
c2l0X2hlbHBlcjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KICAgICBzdGF0aWMgY29u
c3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFy
aWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1Zhcmlh
bnRzJiYgLi4uIF9fdil7Ci0gICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYo
dHJ1ZSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOwor
ICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7CisgICAgICAgIF9fdGhyb3df
YmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxf
VmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50
Iik7CiAgICAgfQogfTsKIApAQCAtMjA1NCwzICsyMDczLDE2IEBAIHN0cnVjdCBoYXNoPGV4cGVy
aW1lbnRhbDo6dmFyaWFudDxfVHlwZXMKIH07CiAKIH0gLy8gbmFtZXNwYWNlIHN0ZAorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Cit1c2luZyBWYXJpYW50
ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+OworCit9CisKK3VzaW5nIFdU
Rjo6VmFyaWFudDsKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocG9wKQor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxNi0wOC0wNiAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxhY2UgTm9kZU9yU3Ry
aW5nIHdpdGggVmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDYzOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBSZW1vdmUgTm9kZU9yU3RyaW5nLmgvY3BwCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNO
b2RlT3JTdHJpbmcuaDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6cHJlcGVuZCk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlU2V0UHJlVHJhbnNm
b3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0Rm9s
bG93aW5nU2libGluZ05vdEluTm9kZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb252
ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpiZWZv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6cmVwbGFjZVdpdGgpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIFJlcGxh
Y2UgTm9kZU9yU3RyaW5nIHdpdGggVmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4gYW5kIG1vdmUg
Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUKKyAgICAgICAgaW50byBOb2RlLgorCisgICAg
ICAgICogZG9tL05vZGVPclN0cmluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL05vZGVP
clN0cmluZy5oOiBSZW1vdmVkLgorCiAyMDE2LTA4LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlmeSB2YWx1ZVRvVVNWU3RyaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0ODcsNyArMTQ4Nyw2IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICBkb20vTm9kZS5jcHAKICAgICBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAKICAgICBkb20vTm9kZUl0ZXJhdG9yLmNwcAotICAgIGRvbS9Ob2RlT3JTdHJpbmcuY3BwCiAg
ICAgZG9tL05vZGVSYXJlRGF0YS5jcHAKICAgICBkb20vTm9kZVRyYXZlcnNhbC5jcHAKICAgICBk
b20vT3ZlcmZsb3dFdmVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjg0Myw4ICsyODQzLDYgQEAKIAkJN0NFNjgzNDcxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNz
YWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdDRTZDQkZCMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRD
b252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDRTZDQkZBMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCAqLzsgfTsKIAkJ
N0NFNkNCRkQxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2Q0JGQzE4N0YzOTQ5MDBE
NDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCAqLzsgfTsKLQkJN0NFQUMxMDcxQjQ4M0QxRDAw
MzM0NDgyIC8qIE5vZGVPclN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NFQUMxMDYxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5o
ICovOyB9OwotCQk3Q0VBQzEwOTFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUFDMTA4MUI0
ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovOyB9OwogCQk3Q0ZEQzU3QzFBQzFE
ODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAv
KiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovOyB9OwogCQk3Q0ZEQzU3RDFBQzFEODA1MDBF
MjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZEQzU3QjFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVu
dEV4dGVuc2lvbkVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJN0Q0Qzk2REMxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdENEM5NkQ4
MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoSGVhZGVycy5jcHAgKi87IH07CkBAIC0xMDI2NSw4
ICsxMDI2Myw2IEBACiAJCTdDRTY4MzQ2MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDRTZDQkZBMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0Q29udmVydGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3Jt
YXRDb252ZXJ0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9y
bWF0Q29udmVydGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NFQUMxMDYx
QjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOb2RlT3JTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlT3JTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVu
c2lvbkVycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRl
bnRFeHRlbnNpb25FcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkRD
NTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkVycm9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdENEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNo
SGVhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNo
SGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDE0Miw4ICsyNDEz
OCw2IEBACiAJCQkJMUE3NTBEODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVyYXRvci5pZGwg
Ki8sCiAJCQkJQTgxODcyMTAwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmggKi8sCiAJCQkJ
ODVBQ0E5RkEwQTlCNjMxMDAwNjcxRTkwIC8qIE5vZGVMaXN0LmlkbCAqLywKLQkJCQk3Q0VBQzEw
ODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLywKLQkJCQk3Q0VBQzEwNjFC
NDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8sCiAJCQkJNEZBQjQ4NjYxNjQzQTY3
RTAwRjcwQzA3IC8qIE5vZGVSYXJlRGF0YS5jcHAgKi8sCiAJCQkJNjMxODlBRTIwRTgzQTMzMzAw
MDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovLAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3
QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywKQEAgLTI2OTA0LDcgKzI2ODk4LDYgQEAKIAkJCQk4
NTRGRTczMzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUIwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3Q0VBQzEwNzFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9k
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2M0Q3QjMyRDBFNzhDRDNGMDBGNzYxN0Mg
LyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDMxMDVCQjE2NzUwRjE2
MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDcwNiw3ICsz
MDY5OSw2IEBACiAJCQkJQThDNEE4MDAwOUQ1NjMyNzAwMDNBQzhEIC8qIE5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODU0RkU3MzIwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25k
aXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzQwQTIyOTdCRTAwNThEN0FEIC8q
IE5vZGVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3Q0VBQzEwOTFCNDgzRDdGMDAz
MzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJCMTY0
M0I3MTAwMDRFMTYzOCAvKiBOb2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQz
MTA1QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzM1MDNDQzcxMDE3QTFCMTAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0
cmluZy5jcHAJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZU9yU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDE3IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVP
clN0cmluZz4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoRXhlY1N0YXRlJiBzdGF0ZSkKK1ZlY3RvcjxW
YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRlLmFyZ3VtZW50Q291
bnQoKTsKIAotICAgIFZlY3RvcjxOb2RlT3JTdHJpbmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8VmFy
aWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKTsKICAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBqc0R5bmFtaWNDYXN0
PEpTTm9kZSo+KHZhbHVlKSkKLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoJm5v
ZGUtPndyYXBwZWQoKSk7CisgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKG5vZGUt
PndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3Ry
aW5nLmgJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYg
SlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05vZGVPclN0cmluZ19oCiAKLSNpbmNsdWRlICJO
b2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEpTQzo6RXhlY1N0YXRl
Jik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRv
Tm9kZU9yU3RyaW5nVmVjdG9yKEpTQzo6RXhlY1N0YXRlJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24g
MjA0MjMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2lu
Y2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vRXZlbnREaXNwYXRjaEFzc2VydGlv
bi5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJhZGlvTm9kZUxpc3Qu
aCIKQEAgLTg3MywxOCArODcyLDE4IEBAIHVuc2lnbmVkIENvbnRhaW5lck5vZGU6OmNoaWxkRWxl
bWVudENvdW4KICAgICByZXR1cm4gc3RkOjpkaXN0YW5jZShjaGlsZHJlbi5iZWdpbigpLCBjaGls
ZHJlbi5lbmQoKSk7CiB9CiAKLXZvaWQgQ29udGFpbmVyTm9kZTo6YXBwZW5kKFZlY3RvcjxOb2Rl
T3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
Q29udGFpbmVyTm9kZTo6YXBwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4m
JiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUo
bm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVy
dE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7
CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBlbmRDaGls
ZCgqbm9kZSwgZWMpOwogfQogCi12b2lkIENvbnRhaW5lck5vZGU6OnByZXBlbmQoVmVjdG9yPE5v
ZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBDb250YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1v
dmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29u
dmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBl
Yyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBw
dWJsaWM6CiAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVt
ZW50KiBsYXN0RWxlbWVudENoaWxkKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50
Q291bnQoKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFwcGVuZChWZWN0b3I8VmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHByZXBlbmQoVmVjdG9y
PFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBi
b29sIGVuc3VyZVByZUluc2VydGlvblZhbGlkaXR5KE5vZGUmIG5ld0NoaWxkLCBOb2RlKiByZWZD
aGlsZCwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxs
SW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5j
cHAJKHJldmlzaW9uIDIwNDIzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNiBAQAogI2luY2x1ZGUgIk5vZGUuY3Bw
IgogI2luY2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIgogI2luY2x1ZGUgIk5vZGVJdGVy
YXRvci5jcHAiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmNwcCIKICNpbmNsdWRlICJOb2RlUmFy
ZURhdGEuY3BwIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuY3BwIgogI2luY2x1ZGUgIk92ZXJm
bG93RXZlbnQuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA0MjMxKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2
IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNp
bmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNpbmNsdWRlICJOb2RlT3JTdHJp
bmcuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCkBAIC00MzgsMTggKzQz
NywxNyBAQCBib29sIE5vZGU6OmFwcGVuZENoaWxkKE5vZGUmIG5ld0NoaWxkLCBFCiAgICAgcmV0
dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5hcHBlbmRDaGlsZChuZXdDaGlsZCwg
ZWMpOwogfQogCi1zdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zv
cm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPE5vZGVPclN0cmluZz4mIG5v
ZGVPclN0cmluZ1ZlY3RvcikKK3N0YXRpYyBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldFBy
ZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihjb25zdCBWZWN0b3I8VmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4+
IG5vZGVTZXQ7Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0
b3IpIHsKLSAgICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBOb2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2RlU2V0LmFk
ZCgmbm9kZU9yU3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KKworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZU92ZXJsb2FkZXIoCisgICAgICAg
IFsmXShjb25zdCBSZWY8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5hZGQoY29uc3RfY2FzdDxOb2Rl
Kj4obm9kZS5wdHIoKSkpOyB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICAp
OworCisgICAgZm9yIChjb25zdCBhdXRvJiB2YXJpYW50IDogdmVjdG9yKQorICAgICAgICBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAKICAgICByZXR1cm4gbm9k
ZVNldDsKIH0KQEAgLTQ3Miw3ICs0NzAsMzQgQEAgc3RhdGljIFJlZlB0cjxOb2RlPiBmaXJzdEZv
bGxvd2luZ1NpYmxpbgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIE5vZGU6OmJlZm9y
ZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitSZWZQdHI8Tm9kZT4gTm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUo
VmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3Rvciwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9k
ZXM7CisgICAgbm9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iu
c2l6ZSgpKTsKKworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZU92ZXJsb2FkZXIoCisgICAg
ICAgIFsmXShSZWY8Tm9kZT4mIG5vZGUpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGUuY29w
eVJlZigpKTsgfSwKKyAgICAgICAgWyZdKFN0cmluZyYgc3RyaW5nKSB7IG5vZGVzLnVuY2hlY2tl
ZEFwcGVuZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RyaW5nKSk7IH0KKyAgICApOworCisg
ICAgZm9yIChhdXRvJiB2YXJpYW50IDogbm9kZU9yU3RyaW5nVmVjdG9yKQorICAgICAgICBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisKKyAgICBpZiAobm9kZXMu
c2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOworCisg
ICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICAgICAgaWYgKCFub2RlVG9S
ZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShub2RlVG9SZXR1cm4pOworfQorCit2b2lkIE5v
ZGU6OmJlZm9yZShWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3Ry
aW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNDgxLDcgKzUw
Niw3IEBAIHZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYKICAgICBhdXRv
IG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKG5v
ZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVQcmV2aW91c1NpYmxpbmcgPSBmaXJz
dFByZWNlZGluZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMsIG5vZGVTZXQpOwogCi0gICAgYXV0
byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9k
ZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChl
YyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00OTMsNyArNTE4LDcgQEAgdm9pZCBO
b2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJgogICAgIHBhcmVudC0+aW5zZXJ0QmVm
b3JlKCpub2RlLCB2aWFibGVQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBO
b2RlOjphZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxWYXJpYW50PFJlZjxOb2Rl
PiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYg
KCFwYXJlbnQpCkBAIC01MDIsMTQgKzUyNywxNCBAQCB2b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYgCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9ybWVk
RnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8gdmlh
YmxlTmV4dFNpYmxpbmcgPSBmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMs
IG5vZGVTZXQpOwogCi0gICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8gbm9k
ZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVj
dG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
cGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJsZU5leHRTaWJsaW5nLmdldCgpLCBlYyk7
CiB9CiAKLXZvaWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBOb2RlOjpyZXBsYWNlV2l0
aChWZWN0b3I8VmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9y
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50
ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTE4LDcgKzU0Myw3IEBAIHZv
aWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmkKICAgICBhdXRvIG5vZGVTZXQg
PSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKG5vZGVPclN0cmlu
Z1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9IGZpcnN0Rm9sbG93aW5nU2li
bGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252
ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0
b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUo
V1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA0MjMxKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIC8vIFRo
aXMgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIERvY3VtZW50LmggYWxzbyBkZXBlbmRzIG9uIGl0
LgogI2RlZmluZSBEVU1QX05PREVfU1RBVElTVElDUyAwCkBAIC01MSw3ICs1Miw2IEBAIGNsYXNz
IE1hdGhNTFF1YWxpZmllZE5hbWU7CiBjbGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFzcyBOb2RlTGlz
dDsKIGNsYXNzIE5vZGVMaXN0c05vZGVEYXRhOwotY2xhc3MgTm9kZU9yU3RyaW5nOwogY2xhc3Mg
Tm9kZVJhcmVEYXRhOwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJlbmRlckJveDsKQEAg
LTIwOCw5ICsyMDgsOSBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogbmV4dEVsZW1lbnRTaWJsaW5n
KCkgY29uc3Q7CiAKICAgICAvLyBGcm9tIHRoZSBDaGlsZE5vZGUgLSBodHRwczovL2RvbS5zcGVj
LndoYXR3Zy5vcmcvI2NoaWxkbm9kZQotICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFmdGVyKFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlcGxhY2VXaXRoKFZlY3RvcjxOb2Rl
T3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJlZm9yZShWZWN0b3I8VmFy
aWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFm
dGVyKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPFZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+
PiYmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQpA
QCAtNjYxLDYgKzY2MSw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFN0eWxlQ2hhbmdlKFN0
eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKSB7IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYg
flN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VUeXBlOyB9CiAgICAgdm9pZCB1cGRhdGVBbmNlc3Rv
cnNGb3JTdHlsZVJlY2FsYygpOwogCisgICAgUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKFZlY3RvcjxWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0
aW9uQ29kZSYpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUHNldWRvSWQgY3VzdG9tUHNldWRv
SWQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShy
ZXZpc2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudEZy
YWdtZW50LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJl
ZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShOb2RlJiBjb250ZXh0LCBW
ZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7Ci0gICAgbm9kZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iuc2l6ZSgpKTsKLSAgICBm
b3IgKGF1dG8mIG5vZGVPclN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBz
d2l0Y2ggKG5vZGVPclN0cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6
OlR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChUZXh0Ojpj
cmVhdGUoY29udGV4dC5kb2N1bWVudCgpLCBub2RlT3JTdHJpbmcuc3RyaW5nKCkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6Tm9kZToKLSAg
ICAgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChub2RlT3JTdHJpbmcubm9kZSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5vZGVzLnNpemUo
KSA9PSAxKQotICAgICAgICByZXR1cm4gV1RGTW92ZShub2Rlcy5maXJzdCgpKTsKLQotICAgIGF1
dG8gbm9kZVRvUmV0dXJuID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGNvbnRleHQuZG9jdW1l
bnQoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKLSAgICAgICAgaWYgKCFub2Rl
VG9SZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICByZXR1cm4gV1RGTW92ZShub2RlVG9SZXR1cm4pOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5oCShyZXZp
c2lvbiAyMDQyMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTm9kZU9yU3Ry
aW5nX2gKLSNkZWZpbmUgTm9kZU9yU3RyaW5nX2gKLQotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IE5vZGVPclN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAg
U3RyaW5nLAotICAgICAgICBOb2RlCi0gICAgfTsKLQotICAgIE5vZGVPclN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZykKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6U3RyaW5nKQotICAgIHsKLSAg
ICAgICAgbV9kYXRhLnN0cmluZyA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIG1fZGF0YS5zdHJp
bmctPnJlZigpOwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlKiBub2RlKQotICAgICAg
ICA6IG1fdHlwZShUeXBlOjpOb2RlKQotICAgIHsKLSAgICAgICAgbV9kYXRhLm5vZGUgPSBub2Rl
OwotICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgfQotCi0gICAgTm9kZU9yU3RyaW5n
KGNvbnN0IE5vZGVPclN0cmluZyYgb3RoZXIpCi0gICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6
U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9IG90aGVyLm1fZGF0YS5zdHJpbmc7
Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IG90aGVy
Lm1fZGF0YS5ub2RlOwotICAgICAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoTm9kZU9yU3Ry
aW5nJiYgb3RoZXIpCi0gICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAg
ICAgICAgbV9kYXRhLnN0cmluZyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywg
bnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgot
ICAgICAgICAgICAgbV9kYXRhLm5vZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2Rl
LCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Tm9kZU9yU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgTm9kZU9yU3RyaW5nJiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsK
LQotICAgICAgICBkZXJlZkRhdGEoKTsKLQotICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7
Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgot
ICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9IG90aGVyLm1fZGF0YS5zdHJpbmc7Ci0gICAgICAg
ICAgICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IG90aGVyLm1fZGF0YS5u
b2RlOwotICAgICAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgTm9kZU9y
U3RyaW5nJiBvcGVyYXRvcj0oTm9kZU9yU3RyaW5nJiYgb3RoZXIpCi0gICAgewotICAgICAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAg
ZGVyZWZEYXRhKCk7Ci0KLSAgICAgICAgbV90eXBlID0gb3RoZXIubV90eXBlOwotICAgICAgICBz
d2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAg
IG1fZGF0YS5zdHJpbmcgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5zdHJpbmcsIG51bGxw
dHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAg
ICAgICAgIG1fZGF0YS5ub2RlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEubm9kZSwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0KLSAgICB+Tm9kZU9yU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIGRlcmVm
RGF0YSgpOwotICAgIH0KLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotCi0gICAgTm9kZSYgbm9kZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpOb2Rl
KTsgQVNTRVJUKG1fZGF0YS5ub2RlKTsgcmV0dXJuICptX2RhdGEubm9kZTsgfQotICAgIFN0cmlu
Z0ltcGwmIHN0cmluZygpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdHJpbmcpOyBB
U1NFUlQobV9kYXRhLnN0cmluZyk7IHJldHVybiAqbV9kYXRhLnN0cmluZzsgfQotICAgIAotcHJp
dmF0ZToKLSAgICB2b2lkIGRlcmVmRGF0YSgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGlmIChtX2RhdGEu
c3RyaW5nKQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdHJpbmctPmRlcmVmKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgaWYgKG1f
ZGF0YS5ub2RlKQotICAgICAgICAgICAgICAgIG1fZGF0YS5ub2RlLT5kZXJlZigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUeXBlIG1fdHlwZTsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgTm9kZSogbm9kZTsK
LSAgICB9IG1fZGF0YTsKLX07Ci0KLVJlZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJ
bnRvTm9kZShOb2RlJiBjb250ZXh0LCBWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25D
b2RlJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE5vZGVPclN0cmlu
Z19oCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQyMzEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlcGxhY2UgTm9kZU9yU3RyaW5nIHdpdGggVmFyaWFudDxSZWY8Tm9kZT4sIFN0
cmluZz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDYzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIEFkZCBhZGRpdGlv
bmFsIHRlc3RzIGZvciB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBWYXJpYW50IGFuZCB1c2luZworICAg
ICAgICBtYWtlT3ZlcmxvYWRlciBmb3IgdmlzaXRpbmcuCisKIDIwMTYtMDgtMDYgIEFha2FzaCBK
YWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEVXUyBTdHlsZSBRdWV1ZSBm
YWlscyB0byBwcm9jZXNzIHBhdGNoZXMgd2hpY2ggZmFpbHMgdmFsaWRhdGlvbgpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHJldmlzaW9uIDIwNDIzMSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwyNiArMjYsNTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUg
IkNvdW50ZXJzLmgiCi0jaW5jbHVkZSAiTW92ZU9ubHkuaCIKICNpbmNsdWRlICJSZWZMb2dnZXIu
aCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
K1RFU1QoV1RGX1ZhcmlhbnQsIEluaXRpYWwpCit7CisgICAgVmFyaWFudDxpbnQsIGRvdWJsZT4g
djE7CisgICAgRVhQRUNUX1RSVUUodjEuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJVRShz
dGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odjEpID09IDApOworCisgICAgc3RydWN0IFQgewor
ICAgICAgICBUKCkgOiB2YWx1ZSgxNSkgeyB9CisgICAgICAgIGludCB2YWx1ZTsKKyAgICB9Owor
CisgICAgVmFyaWFudDxULCBpbnQ+IHYyOworICAgIEVYUEVDVF9UUlVFKHYyLmluZGV4KCkgPT0g
MCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxUPih2MikudmFsdWUg
PT0gMTUpOworfQorCiBURVNUKFdURl9WYXJpYW50LCBCYXNpYykKIHsKLSAgICBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CisgICAgVmFyaWFudDxp
bnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgp
ID09IDApOwogICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8aW50Pih2YXJp
YW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRSgqc3RkOjpleHBlcmltZW50YWw6OmdldF9pZjxp
bnQ+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpn
ZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6
OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZh
cmlhbnQpKTsKKworICAgIHZhcmlhbnQgPSAxLjA7CisgICAgRVhQRUNUX1RSVUUodmFyaWFudC5p
bmRleCgpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8ZG91
YmxlPih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRSgqc3RkOjpleHBlcmltZW50YWw6
OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpl
eHBlcmltZW50YWw6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVD
VF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlh
bnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0
aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3Ip
CiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGZsb2F0LCBT
dHJpbmc+IFZhcmlhbnQ7Ci0KICAgICBlbnVtIGNsYXNzIFR5cGUgewogICAgICAgICBOb25lLAog
ICAgICAgICBJbnQsCkBAIC01Myw3ICs3OSw2IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlz
aXRvcikKICAgICAgICAgU3RyaW5nLAogICAgIH07CiAKLQogICAgIHN0cnVjdCBWaXNpdG9yIHsK
ICAgICAgICAgVmlzaXRvcihUeXBlJiB0KQogICAgICAgICAgICAgOiB0eXBlKHQpCkBAIC02OSw3
ICs5NCw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlw
ZSA9IFR5cGU6Ok5vbmU7CiAKLSAgICBWYXJpYW50IHZhcmlhbnQgPSA4OworICAgIFZhcmlhbnQ8
aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKICAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6
dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50
ID09IHR5cGUpOwogCkBAIC04NCwxNSArMTA5LDQ1IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2lj
VmlzaXRvcikKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAKK1RF
U1QoV1RGX1ZhcmlhbnQsIFZpc2l0b3JVc2luZ01ha2VPdmVybG9hZGVyKQoreworICAgIGVudW0g
Y2xhc3MgVHlwZSB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludCwKKyAgICAgICAgRmxvYXQs
CisgICAgICAgIFN0cmluZywKKyAgICB9OworCisgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsK
KworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZU92ZXJsb2FkZXIoCisgICAgICAgIFsmXShp
bnQpIHsgdHlwZSA9IFR5cGU6OkludDsgfSwKKyAgICAgICAgWyZdKGZsb2F0KSB7IHR5cGUgPSBU
eXBlOjpGbG9hdDsgfSwKKyAgICAgICAgWyZdKFN0cmluZykgeyB0eXBlID0gVHlwZTo6U3RyaW5n
OyB9CisgICAgKTsKKworICAgIFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0g
ODsKKyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAg
RVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gMS4wZjsK
KyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgRVhQ
RUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CisKKworICAgIHZhcmlhbnQgPSAiaGVsbG8i
OworICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBF
WFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7Cit9CisKIFRFU1QoV1RGX1ZhcmlhbnQs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKIHsKLSAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwg
aW50PiBWYXJpYW50OwotIAogICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3Rp
bmdTY29wZSBzY29wZTsKIAogICAgIHsKICAgICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1h
a2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIFZhcmlh
bnQgdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgVmFyaWFudDxzdGQ6OnVuaXF1ZV9w
dHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVl
UHRyKTsKIAogICAgICAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKICAgICAgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKQEAgLTEwMiwxNCArMTU3LDEy
IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKICAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwog
fQogCi1URVNUKFdURl9WYXJpYW50LCBSZWZDb3VudGluZykKK1RFU1QoV1RGX1ZhcmlhbnQsIFJl
ZlB0cikKIHsKLSAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxS
ZWZMb2dnZXI+LCBpbnQ+IFZhcmlhbnQ7Ci0KICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQg
diA9IHJlZjsKKyAgICAgICAgVmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gcmVm
OwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0xMTcsNyArMTcwLDE4IEBAIFRFU1Qo
V1RGX1ZhcmlhbnQsIFJlZkNvdW50aW5nKQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEi
KTsKICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2
ID0gV1RGTW92ZShyZWYpOworICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+
IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9WYXJpYW50LCBS
ZWYpCit7CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIFZhcmlhbnQ8UmVmPFJlZkxvZ2dlcj4sIGludD4gdiA9
IFdURk1vdmUocmVmKTsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285584</attachid>
            <date>2016-08-08 13:33:59 -0700</date>
            <delta_ts>2016-08-08 16:04:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160808133228.patch</filename>
            <type>text/plain</type>
            <size>38702</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAgICAgIChXVEY6Ok92ZXJsb2FkZXI6
Ok92ZXJsb2FkZXIpOgorICAgICAgICAoV1RGOjpPdmVybG9hZGVyPEE+OjpPdmVybG9hZGVyKToK
KyAgICAgICAgKFdURjo6bWFrZU92ZXJsb2FkZXIpOgorICAgICAgICBBZGQgV1RGOjptYWtlT3Zl
cmxvYWRlcigpIHdoaWNoIHRha2VzIGEgbGlzdCBvZiBsYW1iZGFzIHRvIHVzZQorICAgICAgICBh
biBhbiBvdmVybG9hZCBzZXQgZm9yIGEgdmlzaXRvciBvYmplY3QuCisKKyAgICAgICAgKiB3dGYv
VmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdvcmsg
aW4gV2ViQ29yZSBhbmQgYWRkIGEgdHlwZS1hbGlhcworICAgICAgICBzbyBpdCBjYW4gYmUgdXNl
ZCBhcyBXVEY6OlZhcmlhbnQuCisKIDIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXVEYgbmVlZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksMzYgQEAgYm9vbCBj
aGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBP
dmVybG9hZGVyIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
NTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRpb20KKwor
dGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgT3ZlcmxvYWRlciA6IE92ZXJs
b2FkZXI8QT4sIE92ZXJsb2FkZXI8Qi4uLj4geworICAgIE92ZXJsb2FkZXIoQSBhLCBCLi4uIGIp
CisgICAgICAgIDogT3ZlcmxvYWRlcjxBPihhKQorICAgICAgICAsIE92ZXJsb2FkZXI8Qi4uLj4o
Yi4uLikKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgT3ZlcmxvYWRlcjxBPjo6b3BlcmF0b3Ig
KCk7CisgICAgdXNpbmcgT3ZlcmxvYWRlcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3Rl
bXBsYXRlIDxjbGFzcyBBPgorc3RydWN0IE92ZXJsb2FkZXI8QT4gOiBBIHsKKyAgICBPdmVybG9h
ZGVyKEEgYSkKKyAgICAgICAgOiBBKGEpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9w
ZXJhdG9yKCk7Cit9OworIAordGVtcGxhdGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VPdmVybG9h
ZGVyKEYuLi4gZikKK3sKKyAgICByZXR1cm4gT3ZlcmxvYWRlcjxGLi4uPihmLi4uKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9t
aXRzIGEgMCBjaGVjay4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI2MikKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDIxIEBA
CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENP
TVBJTEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwog
bmFtZXNwYWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVS
X1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNl
cHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhD
UEVUSU9OX0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAg
ICBpZiAoKF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsg
XAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQogI2Vsc2UKLQotc3RhdGljIGlubGlu
ZSB2b2lkIF9fY3Jhc2hfaGVscGVyKGJvb2wpewotICAgIENSQVNIKCk7Ci19Ci1zdGF0aWMgaW5s
aW5lIGNvbnN0ZXhwciBib29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7Ci0gICAg
cmV0dXJuICF0ZXN0ID8gdHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOwotfQot
Ci0jZGVmaW5lIF9fVEhST1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKLSNkZWZpbmUgX19DT05T
VF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29u
c3RleHByX2NyYXNoX2lmKChfX3ByZWRpY2F0ZSkpOworI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElP
TihfX2V4Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAo
MCk7CiAjZW5kaWYKIAogc3RydWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKQEAgLTExNyw2ICsxMDks
MTEgQEAgcHVibGljOgogICAgIHt9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyhjb25z
dCBjaGFyKiB3aGF0X2FyZyl7CisgICAgX19USFJPV19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNj
ZXNzKHdoYXRfYXJnKSkKK30KKwogdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIHN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyOwog
CkBAIC01MzUsNyArNTMyLDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewogICAgIF9U
eXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwogICAgIH0KLSAgICBjb25zdGV4cHIgX1R5
cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAgIC8qY29uc3RleHByKi8g
X1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewogICAgICAgICByZXR1cm4g
X192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKICAgICB9CiAgICAg
Y29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsK
QEAgLTYyNiw3ICs2MjMsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57
CiAgICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwogICAgIH0KIAotICAg
IGNvbnN0ZXhwciBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAg
Lypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAg
ICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7CiAgICAgfQogICAg
IApAQCAtNjQ1LDcgKzY0Miw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFkLF9SZXN0Li4u
PnsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCisgICAgLypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgt
MSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCiAgICAgICAgIGluX3BsYWNlX2luZGV4
X3Q8X0luZGV4Pil7CiAgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxf
SW5kZXgtMT4pOwogICAgIH0KQEAgLTExNjksMTAgKzExNjYsMTAgQEAgc3RydWN0IF9fYmFja3Vw
X3N0b3JhZ2Vfb3BzewogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9y
YWdlPgogc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+
ewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqIF9fZGVz
dCxfU3RvcmFnZSYgX19zb3VyY2UpeworICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3Rf
ZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdlJil7CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0
ZDo6YmFkX2FsbG9jKCkpOwogICAgIH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMo
X1N0b3JhZ2UgKiBfX29iail7CisgICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3Jh
Z2UgKil7CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwogICAg
IH07CiB9OwpAQCAtMTc4MywyNiArMTc4MCwzNCBAQCBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBn
ZXQodmFyaWFudDxfVHlwCiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlIGNvbnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Ypewot
ICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgoKSwg
YmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAgcmV0
dXJuICooJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOwor
ICAgIHJldHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKKyAgICAgICAgICAg
ID8gJl9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0
IikKKyAgICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6
Z2V0KF9fdikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1l
IC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NP
TlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJp
YW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiAqKCZf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsKKyAgICByZXR1
cm4gKigKKyAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCisgICAgICAgICAgICA/ICZfX3Ro
cm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlJj4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAg
ICA6ICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCisgICAg
KTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgog
Y29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5
cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhS
T1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2Vzcygi
QmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNz
b3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9f
dmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAorICAgICAgICAoKChfSW5k
ZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2
YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAK
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBl
JiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgX19DT05TVF9FWFBS
X1RIUk9XX0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nl
c3MoIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gX192YXJpYW50X2Fj
Y2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoc3RkOjptb3ZlKF9fdikpOworICAgIHJldHVy
biBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKKyAgICAgICAgKCgo
X0luZGV4IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJC
YWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKKyAgICApOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgpAQCAtMTg2
OCw4ICsxODczLDkgQEAgY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAog
dGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhw
ciB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190
eXBlCiB2aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcix2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7
Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3YudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQi
KSk7Ci0gICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3Ry
YW1wb2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworICAgIHJldHVybiAoX192LnZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSkKKyAgICAgICAgPyBfX3Rocm93X2JhZF92YXJpYW50X2Fj
Y2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6
X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpCisgICAgICAgIDogX192aXNpdG9y
X3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192
aXNpdG9yLF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4u
LiBfVmFyaWFudHM+CkBAIC0xOTM4LDggKzE5NDQsOCBAQCB0ZW1wbGF0ZTxzaXplX3QgX1Zhcmlh
bnRJbmRleCxwdHJkaWZmX3QgCiBzdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5k
ZXgsX0luZGljZXMuLi4+ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1l
IC4uLiBfVmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zp
c2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192
aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBf
X0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKHRydWUsIGJhZF92YXJpYW50X2FjY2Vzcygi
VmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFy
aWFudHMmJiAuLi4peworICAgICAgICBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFt
ZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190
eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTIwNTQs
MyArMjA2MCwxNiBAQCBzdHJ1Y3QgaGFzaDxleHBlcmltZW50YWw6OnZhcmlhbnQ8X1R5cGVzCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lLi4uIFR5cGVzPgordXNpbmcgVmFyaWFudCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJp
YW50PFR5cGVzLi4uPjsKKworfQorCit1c2luZyBXVEY6OlZhcmlhbnQ7CisKKyNpZiBDT01QSUxF
UihNU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIFZhcmlhbnQ8UmVmPE5vZGU+
LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIE5v
ZGVPclN0cmluZy5oL2NwcAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmg6CisgICAgICAgICog
ZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6
YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnByZXBlbmQpOgorICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAg
ICAgKiBkb20vTm9kZS5oOgorICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIFZhcmlh
bnQ8UmVmPE5vZGU+LCBTdHJpbmc+IGFuZCBtb3ZlIGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9O
b2RlCisgICAgICAgIGludG8gTm9kZS4KKworICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAx
Ni0wOC0wOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jl
c3Npb24ocjIwNDIzOSk6IENhdXNlZCBmbGFreSBjcmFzaGVzIHVuZGVyIH5EYXRhYmFzZSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0ODcsNyArMTQ4Nyw2IEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vTm9kZS5jcHAKICAgICBkb20vTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKICAgICBkb20vTm9kZUl0ZXJhdG9yLmNwcAotICAgIGRvbS9Ob2RlT3JTdHJp
bmcuY3BwCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAKICAgICBkb20vTm9kZVRyYXZlcnNhbC5j
cHAKICAgICBkb20vT3ZlcmZsb3dFdmVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNDI2MikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjg0Myw4ICsyODQzLDYgQEAKIAkJN0NFNjgzNDcxOTIxODIxNTAwRjREOTI4
IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8q
IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRTZDQkZCMTg3RjM3MDcwMEQ0NkJGNSAv
KiBGb3JtYXRDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDRTZDQkZBMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCAq
LzsgfTsKIAkJN0NFNkNCRkQxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2Q0JGQzE4
N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCAqLzsgfTsKLQkJN0NFQUMxMDcx
QjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQUMxMDYxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVP
clN0cmluZy5oICovOyB9OwotCQk3Q0VBQzEwOTFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3Ry
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
RUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovOyB9OwogCQk3Q0ZE
QzU3QzFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdBMUFDMUQ4MDUw
MEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovOyB9OwogCQk3Q0ZEQzU3RDFB
QzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZEQzU3QjFBQzFEODA1MDBFMjRBNTcg
LyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Q0Qzk2REMxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hI
ZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdENEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoSGVhZGVycy5jcHAgKi87IH07CkBA
IC0xMDI2MSw4ICsxMDI1OSw2IEBACiAJCTdDRTY4MzQ2MTkyMTgyMTUwMEY0RDkyOCAvKiBVc2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDRTZDQkZBMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252
ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0Q29udmVydGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJG
NSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRm9ybWF0Q29udmVydGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0NFQUMxMDYxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlT3JTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJN0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlT3JTdHJpbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcgLyogQ29u
dGVudEV4dGVuc2lvbkVycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkVycm9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdENEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAv
KiBKU0ZldGNoSGVhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0ZldGNoSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDEy
OSw4ICsyNDEyNSw2IEBACiAJCQkJMUE3NTBEODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVy
YXRvci5pZGwgKi8sCiAJCQkJQTgxODcyMTAwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0Lmgg
Ki8sCiAJCQkJODVBQ0E5RkEwQTlCNjMxMDAwNjcxRTkwIC8qIE5vZGVMaXN0LmlkbCAqLywKLQkJ
CQk3Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLywKLQkJCQk3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8sCiAJCQkJNEZBQjQ4
NjYxNjQzQTY3RTAwRjcwQzA3IC8qIE5vZGVSYXJlRGF0YS5jcHAgKi8sCiAJCQkJNjMxODlBRTIw
RTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovLAogCQkJCTYzRDdCMzJDMEU3OENE
M0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywKQEAgLTI2ODg5LDcgKzI2ODgzLDYg
QEAKIAkJCQk4NTRGRTczMzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUIwOTc3RDNDMDAwNTgyNkQ5IC8qIE5v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0VBQzEwNzFCNDgzRDFEMDAzMzQ0ODIgLyog
Tm9kZU9yU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzE4OUFFMzBFODNBMzMzMDAwMTJF
NDEgLyogTm9kZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk2M0Q3QjMyRDBFNzhDRDNG
MDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDMxMDVC
QjE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDY5MCw3ICszMDY4Myw2IEBACiAJCQkJQThDNEE4MDAwOUQ1NjMyNzAwMDNBQzhEIC8qIE5vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzIwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVG
aWx0ZXJDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzQwQTIyOTdCRTAw
NThEN0FEIC8qIE5vZGVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3Q0VBQzEwOTFC
NDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRG
RkMwMjJCMTY0M0I3MTAwMDRFMTYzOCAvKiBOb2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTQzMTA1QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzM1MDNDQzcxMDE3QTFCMTAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMz
LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVj
dG9yPE5vZGVPclN0cmluZz4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoRXhlY1N0YXRlJiBzdGF0ZSkK
K1ZlY3RvcjxWYXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0
b3IoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRl
LmFyZ3VtZW50Q291bnQoKTsKIAotICAgIFZlY3RvcjxOb2RlT3JTdHJpbmc+IHJlc3VsdDsKKyAg
ICBWZWN0b3I8VmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICByZXN1
bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI2MikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgSlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05v
ZGVPclN0cmluZ19oCiAKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9y
U3RyaW5nVmVjdG9yKEpTQzo6RXhlY1N0YXRlJik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8VmFy
aWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEpTQzo6RXhl
Y1N0YXRlJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAj
aW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIk5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmlu
Zy5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJhZGlvTm9kZUxpc3QuaCIKQEAgLTg3MywxOCArODcyLDE4IEBAIHVu
c2lnbmVkIENvbnRhaW5lck5vZGU6OmNoaWxkRWxlbWVudENvdW4KICAgICByZXR1cm4gc3RkOjpk
aXN0YW5jZShjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJlbi5lbmQoKSk7CiB9CiAKLXZvaWQgQ29u
dGFpbmVyTm9kZTo6YXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9kZTo6YXBwZW5kKFZlY3Rv
cjxWYXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMp
OworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUo
V1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhcHBlbmRDaGlsZCgqbm9kZSwgZWMpOwogfQogCi12b2lk
IENvbnRhaW5lck5vZGU6OnByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJp
bmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjpwcmVwZW5k
KFZlY3RvcjxWYXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVy
dE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9y
KSwgZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50
b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFu
b2RlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
aAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCog
Zmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVtZW50KiBsYXN0RWxlbWVudENoaWxk
KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKLSAgICB2
b2lkIGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGFwcGVuZChWZWN0b3I8VmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHByZXBlbmQoVmVjdG9yPFZhcmlhbnQ8UmVmUHRyPE5v
ZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBib29sIGVuc3VyZVByZUlu
c2VydGlvblZhbGlkaXR5KE5vZGUmIG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9u
Q29kZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAJKHJldmlzaW9uIDIw
NDI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw3ICsxMTIsNiBAQAogI2luY2x1ZGUgIk5vZGUuY3BwIgogI2luY2x1ZGUgIk5v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwIgogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5jcHAiCi0jaW5j
bHVkZSAiTm9kZU9yU3RyaW5nLmNwcCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuY3BwIgogI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuY3BwIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuY3BwIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKICNpbmNsdWRl
ICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
ICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCkBAIC00MzgsMTggKzQzNywxNyBAQCBib29sIE5v
ZGU6OmFwcGVuZENoaWxkKE5vZGUmIG5ld0NoaWxkLCBFCiAgICAgcmV0dXJuIGRvd25jYXN0PENv
bnRhaW5lck5vZGU+KCp0aGlzKS5hcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOwogfQogCi1zdGF0
aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPE5vZGVPclN0cmluZz4mIG5vZGVPclN0cmluZ1ZlY3Rv
cikKK3N0YXRpYyBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJv
bU5vZGVPclN0cmluZ1ZlY3Rvcihjb25zdCBWZWN0b3I8VmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0
cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXQ7Ci0g
ICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAgICAg
ICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9yU3Ry
aW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2Rl
T3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2RlU2V0LmFkZCgmbm9kZU9yU3Ry
aW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKworICAg
IGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZU92ZXJsb2FkZXIoCisgICAgICAgIFsmXShjb25zdCBS
ZWZQdHI8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5hZGQobm9kZSk7IH0sCisgICAgICAgIFtdKGNv
bnN0IFN0cmluZyYpIHsgfQorICAgICk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhbnQg
OiB2ZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJp
YW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDcyLDcgKzQ3MCwzNCBAQCBzdGF0
aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGluCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3Ry
aW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0cjxOb2RlPiBOb2RlOjpjb252ZXJ0
Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8VmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmlu
Zz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
bm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOworCisgICAgYXV0byB2aXNpdG9yID0g
V1RGOjptYWtlT3ZlcmxvYWRlcigKKyAgICAgICAgWyZdKFJlZlB0cjxOb2RlPiYgbm9kZSkgeyBu
b2Rlcy51bmNoZWNrZWRBcHBlbmQoKm5vZGUpOyB9LAorICAgICAgICBbJl0oU3RyaW5nJiBzdHJp
bmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdHJp
bmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBub2RlT3JTdHJpbmdW
ZWN0b3IpCisgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50
KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
bm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1JldHVybiA9IERvY3VtZW50RnJhZ21l
bnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlcykgewor
ICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hpbGQobm9kZSwgZWMpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBXVEZNb3ZlKG5vZGVUb1Jl
dHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxWYXJpYW50PFJlZlB0cjxOb2Rl
PiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYg
KCFwYXJlbnQpCkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5v
ZGVPclN0cmluZz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZy
b21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJs
ZVByZXZpb3VzU2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGluZ05vdEluTm9kZVNldCgqdGhp
cywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRv
Tm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBu
b2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdW
ZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKQEAg
LTQ5Myw3ICs1MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYm
CiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJsZVByZXZpb3VzU2libGluZy5n
ZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYg
bm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6YWZ0ZXIo
VmVjdG9yPFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3Rv
ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVu
dCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUwMiwxNCArNTI3LDE0IEBA
IHZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiAKICAgICBhdXRvIG5vZGVT
ZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKG5vZGVPclN0
cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9IGZpcnN0Rm9sbG93aW5n
U2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdW
ZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2Rl
KQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSgqbm9kZSwgdmlh
YmxlTmV4dFNpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2RlOjpyZXBsYWNlV2l0aChW
ZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxWYXJpYW50PFJlZlB0cjxOb2RlPiwg
U3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFw
YXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBOb2RlOjpyZXBsYWNlV2l0aChWZWN0b3I8
Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21O
b2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJsZU5l
eHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KCp0aGlzLCBub2Rl
U2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0
aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBhdXRvIG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShy
ZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBuZWVkcyB0byBiZSBoZXJlIGJlY2F1c2Ug
RG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAjZGVmaW5lIERVTVBfTk9ERV9TVEFUSVNU
SUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0aE1MUXVhbGlmaWVkTmFtZTsKIGNsYXNz
IE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0OwogY2xhc3MgTm9kZUxpc3RzTm9kZURhdGE7
Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2RlUmFyZURhdGE7CiBjbGFzcyBRdWFsaWZp
ZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4LDkgKzIwOCw5IEBAIHB1YmxpYzoKICAg
ICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdDsKIAogICAgIC8vIEZyb20gdGhl
IENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY2hpbGRub2RlCi0gICAg
dm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxWYXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4m
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPFZhcmlhbnQ8UmVmUHRy
PE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZXBsYWNlV2l0
aChWZWN0b3I8VmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAKICAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDggQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNoYW5n
ZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNrKSB8
IGNoYW5nZVR5cGU7IH0KICAgICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxjKCk7
CiAKKyAgICBSZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVjdG9y
PFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDI2MikK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAg
LTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNs
dWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
bm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9y
U3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3Ry
aW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRv
Y3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMu
dW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4g
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5k
Q2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI2MikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBO
b2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsK
LXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAg
IE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAg
fQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6
Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0
YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3Ry
aW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAg
ICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1f
ZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0g
ICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAg
ICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2Rh
dGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVm
RGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJp
bmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToK
LSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAg
ICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9y
PShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQot
ICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5v
ZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQot
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBu
b2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRh
Lm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkg
Y29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3Ry
aW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQg
ZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAg
ICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAg
U3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwot
fTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNv
bnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDI2
MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFj
ZSBOb2RlT3JTdHJpbmcgd2l0aCBWYXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIHRo
ZSBpbml0aWFsIHN0YXRlIG9mIFZhcmlhbnQgYW5kIHVzaW5nCisgICAgICAgIG1ha2VPdmVybG9h
ZGVyIGZvciB2aXNpdGluZy4KKwogMjAxNi0wOC0wOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgaW4gbWFjL1NldERvY3VtZW50VVJJ
Lm1tIGFmdGVyIHIyMDQyNDcKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zh
cmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zh
cmlhbnQuY3BwCShyZXZpc2lvbiAyMDQyNjIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9WYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjYgKzI2LDUyIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJDb3VudGVycy5oIgotI2luY2x1ZGUgIk1vdmVP
bmx5LmgiCiAjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCitURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQor
eworICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOworICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4
KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHYx
KSA9PSAwKTsKKworICAgIHN0cnVjdCBUIHsKKyAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQor
ICAgICAgICBpbnQgdmFsdWU7CisgICAgfTsKKworICAgIFZhcmlhbnQ8VCwgaW50PiB2MjsKKyAg
ICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhw
ZXJpbWVudGFsOjpnZXQ8VD4odjIpLnZhbHVlID09IDE1KTsKK30KKwogVEVTVChXVEZfVmFyaWFu
dCwgQmFzaWMpCiB7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBkb3VibGU+
IHZhcmlhbnQgPSAxOworICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwogICAg
IEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAwKTsKICAgICBFWFBFQ1RfVFJVRShzdGQ6
OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUo
KnN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBF
Q1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVs
bHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0
aXZlPGludD4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6
aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisKKyAgICB2YXJpYW50ID0gMS4w
OworICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQ
RUNUX1RSVUUoKnN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSAx
LjApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXRfaWY8aW50Pih2YXJp
YW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6
ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVT
VChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmlt
ZW50YWw6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiBWYXJpYW50OwotCiAgICAgZW51bSBj
bGFzcyBUeXBlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgSW50LApAQCAtNTMsNyArNzksNiBA
QCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAgICAgICAgIFN0cmluZywKICAgICB9
OwogCi0KICAgICBzdHJ1Y3QgVmlzaXRvciB7CiAgICAgICAgIFZpc2l0b3IoVHlwZSYgdCkKICAg
ICAgICAgICAgIDogdHlwZSh0KQpAQCAtNjksNyArOTQsNyBAQCBURVNUKFdURl9WYXJpYW50LCBC
YXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFu
dCB2YXJpYW50ID0gODsKKyAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9
IDg7CiAgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQp
OwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIApAQCAtODQsMTUgKzEwOSw0
NSBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAgICAgRVhQRUNUX1RSVUUoVHlw
ZTo6U3RyaW5nID09IHR5cGUpOwogfQogCitURVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdN
YWtlT3ZlcmxvYWRlcikKK3sKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOb25lLAor
ICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0LAorICAgICAgICBTdHJpbmcsCisgICAgfTsKKwor
ICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1h
a2VPdmVybG9hZGVyKAorICAgICAgICBbJl0oaW50KSB7IHR5cGUgPSBUeXBlOjpJbnQ7IH0sCisg
ICAgICAgIFsmXShmbG9hdCkgeyB0eXBlID0gVHlwZTo6RmxvYXQ7IH0sCisgICAgICAgIFsmXShT
dHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQorICAgICk7CisKKyAgICBWYXJpYW50PGlu
dCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjpleHBlcmltZW50YWw6OnZp
c2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBl
KTsKKworCisgICAgdmFyaWFudCA9IDEuMGY7CisgICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUp
OworCisKKyAgICB2YXJpYW50ID0gImhlbGxvIjsKKyAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlz
aXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5
cGUpOworfQorCiBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiB7Ci0g
ICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gVmFyaWFudDsKLSAKICAgICBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CiAKICAgICB7CiAgICAg
ICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPigpOwotICAgICAgICBWYXJpYW50IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7Cisg
ICAgICAgIFZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7CiAKICAgICAgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CiAgICAg
ICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7CkBAIC0xMDIsMTQgKzE1NywxMiBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3IpCiAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKIH0KIAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291
bnRpbmcpCitURVNUKFdURl9WYXJpYW50LCBSZWZQdHIpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4
cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50OwotCiAg
ICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2Vy
PiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSByZWY7CisgICAgICAgIFZhcmlhbnQ8UmVm
UHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OwpAQCAtMTE3LDcgKzE3MCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZDb3VudGluZykKICAg
ICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+
IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgVmFy
aWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOworICAgIH0KKwor
ICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKK30KKworVEVTVChXVEZfVmFyaWFudCwgUmVmKQoreworICAgIHsKKyAgICAgICAgUmVmTG9n
Z2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBWYXJp
YW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285597</attachid>
            <date>2016-08-08 16:04:20 -0700</date>
            <delta_ts>2016-08-08 21:02:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160808160250.patch</filename>
            <type>text/plain</type>
            <size>39480</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI2MikKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDIxIEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQogI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lk
IF9fY3Jhc2hfaGVscGVyKGJvb2wpewotICAgIENSQVNIKCk7Ci19Ci1zdGF0aWMgaW5saW5lIGNv
bnN0ZXhwciBib29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7Ci0gICAgcmV0dXJu
ICF0ZXN0ID8gdHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOwotfQotCi0jZGVm
aW5lIF9fVEhST1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKLSNkZWZpbmUgX19DT05TVF9FWFBS
X1RIUk9XX0VYQ1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29uc3RleHBy
X2NyYXNoX2lmKChfX3ByZWRpY2F0ZSkpOworI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4
Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAoMCk7CiAj
ZW5kaWYKIAogc3RydWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKQEAgLTExNyw2ICsxMDksMTEgQEAg
cHVibGljOgogICAgIHt9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFy
KiB3aGF0X2FyZyl7CisgICAgX19USFJPV19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNjZXNzKHdo
YXRfYXJnKSkKK30KKwogdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KIHN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyOwogCkBAIC01
MzUsNyArNTMyLDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewogICAgIF9UeXBlJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwogICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAgIC8qY29uc3RleHByKi8gX1R5cGUm
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewogICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKICAgICB9CiAgICAgY29uc3Rl
eHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKQEAgLTYy
Niw3ICs2MjMsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57CiAgICAg
ICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwogICAgIH0KIAotICAgIGNvbnN0
ZXhwciBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAgLypjb25z
dGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAg
IHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7CiAgICAgfQogICAgIApAQCAt
NjQ1LDcgKzY0Miw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYo
CisgICAgLypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVz
dC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCiAgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0lu
ZGV4Pil7CiAgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgt
MT4pOwogICAgIH0KQEAgLTExNjksMTAgKzExNjYsMTAgQEAgc3RydWN0IF9fYmFja3VwX3N0b3Jh
Z2Vfb3BzewogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgog
c3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAg
IHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqIF9fZGVzdCxfU3Rv
cmFnZSYgX19zb3VyY2UpeworICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhf
U3RvcmFnZSAqLF9TdG9yYWdlJil7CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFk
X2FsbG9jKCkpOwogICAgIH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3Jh
Z2UgKiBfX29iail7CisgICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7
CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwogICAgIH07CiB9
OwpAQCAtMTc4MywyNiArMTc4MCwzNCBAQCBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFy
aWFudDxfVHlwCiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlIGNvbnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIF9f
Q09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3Zh
cmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAgcmV0dXJuICoo
Jl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOworICAgIHJl
dHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKKyAgICAgICAgICAgID8gJl9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikKKyAg
ICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9f
dikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VY
UFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2Fj
Y2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiAqKCZfX3Zhcmlh
bnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsKKyAgICByZXR1cm4gKigK
KyAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCisgICAgICAgICAgICA/ICZfX3Rocm93X2Jh
ZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlJj4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICA6ICZf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCisgICAgKTsKIH0K
IAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBn
ZXQodmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhD
UEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZh
cmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0lu
ZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFu
dF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9f
di5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50
IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciBjb25z
dCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0
KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9X
X0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJh
ZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29y
PF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoc3RkOjptb3ZlKF9fdikpOworICAgIHJldHVybiBfX3Zh
cmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKKyAgICAgICAgKCgoX0luZGV4
IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFy
aWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKKyAgICApOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgpAQCAtMTg2OCw4ICsx
ODczLDkgQEAgY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAogdGVtcGxh
dGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlCiB2
aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcix2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAg
X19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQiKSk7Ci0g
ICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xp
bmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworICAgIHJldHVybiAoX192LnZhbHVlbGVz
c19ieV9leGNlcHRpb24oKSkKKyAgICAgICAgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0
eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpCisgICAgICAgIDogX192aXNpdG9yX3RhYmxl
PF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9y
LF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFy
aWFudHM+CkBAIC0xOTM4LDggKzE5NDQsOCBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRl
eCxwdHJkaWZmX3QgCiBzdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0lu
ZGljZXMuLi4+ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBf
VmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3Jf
cmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChf
VmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBfX0NPTlNU
X0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKHRydWUsIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRp
bmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFyaWFudHMm
JiAuLi4peworICAgICAgICBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlPigi
VmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTIwNTQsMyArMjA2
MCw3IEBAIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIHN0ZAorCisjaWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhw
b3ApCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDI2MikKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4
LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2Rl
T3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIE5vZGVPclN0cmluZy5oL2NwcAor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmg6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnByZXBlbmQpOgorICAgICAgICAqIGRvbS9Db250YWlu
ZXJOb2RlLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9k
ZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6YmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFmdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgor
ICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9k
ZT4sIFN0cmluZz4gYW5kIG1vdmUgY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUKKyAgICAg
ICAgaW50byBOb2RlLgorCisgICAgICAgICogZG9tL05vZGVPclN0cmluZy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogZG9tL05vZGVPclN0cmluZy5oOiBSZW1vdmVkLgorCiAyMDE2LTA4LTA4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMjA0
MjM5KTogQ2F1c2VkIGZsYWt5IGNyYXNoZXMgdW5kZXIgfkRhdGFiYXNlKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0KFdlYkNvcmVf
U09VUkNFUwogICAgIGRvbS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmluZy5jcHAKICAg
ICBkb20vTm9kZVJhcmVEYXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcAogICAgIGRv
bS9PdmVyZmxvd0V2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yODQzLDggKzI4NDMsNiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENv
bnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICovOyB9OwogCQk3
Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3RjM5NDkwMEQ0
NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFCNDgzRDFEMDAz
MzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmgg
Ki87IH07Ci0JCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQUMxMDgxQjQ4
M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRDNTdDMUFDMUQ4
MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8q
IENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFDMUQ4MDUwMEUy
NEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50
RXh0ZW5zaW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3RDRDOTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Q0Qzk2RDgx
QUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAgLTEwMjYxLDgg
KzEwMjU5LDYgQEAKIAkJN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1h
dENvbnZlcnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3Jt
YXRDb252ZXJ0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0VBQzEwNjFC
NDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5vZGVPclN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5z
aW9uRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVu
dEV4dGVuc2lvbkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1
N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hI
ZWFkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hI
ZWFkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTI5LDggKzI0MTI1
LDYgQEAKIAkJCQkxQTc1MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJhdG9yLmlkbCAq
LywKIAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4
NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJCTdDRUFDMTA4
MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdDRUFDMTA2MUI0
ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2NjE2NDNBNjdF
MDBGNzBDMDcgLyogTm9kZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBFODNBMzMzMDAw
MTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdD
IC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLApAQCAtMjY4ODksNyArMjY4ODMsNiBAQAogCQkJCTg1
NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBp
biBIZWFkZXJzICovLAotCQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2Rl
UmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAv
KiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJCMTY3NTBGMTYw
MERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjkwLDcgKzMw
NjgzLDYgQEAKIAkJCQlBOEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRp
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyog
Tm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0ODNEN0YwMDMz
NDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZGQzAyMkIxNjQz
QjcxMDAwNEUxNjM4IC8qIE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDMx
MDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMzUwM0NDNzEwMTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3Ry
aW5nLmNwcAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0b3I8Tm9kZU9y
U3RyaW5nPiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQorVmVjdG9yPHN0
ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzdGF0ZS5hcmd1
bWVudENvdW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3RyaW5nPiByZXN1bHQ7CisgICAgVmVj
dG9yPHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICByZXN1
bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI2MikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgSlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05v
ZGVPclN0cmluZ19oCiAKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9y
U3RyaW5nVmVjdG9yKEpTQzo6RXhlY1N0YXRlJik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8c3Rk
Ojp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlND
OjpFeGVjU3RhdGUmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYg
QEAKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0Lmgi
CiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9y
U3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4NzIsMTgg
QEAgdW5zaWduZWQgQ29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJldHVybiBz
dGQ6OmRpc3RhbmNlKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0KIAotdm9p
ZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJp
bmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQo
VmVjdG9yPHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5n
VmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1Zl
Y3RvciksIGVjKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5n
c0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8
fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hpbGQoKm5vZGUsIGVjKTsK
IH0KIAotdm9pZCBDb250YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYg
bm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9k
ZTo6cHJlcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBu
b2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2Rl
PiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9k
ZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5v
ZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAg
ICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuaAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6
CiAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVtZW50KiBs
YXN0RWxlbWVudENoaWxkKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQo
KSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIGFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxO
b2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0
b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgYm9vbCBlbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eShOb2RlJiBuZXdDaGlsZCwg
Tm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RPTUFsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
QWxsSW5PbmUuY3BwCShyZXZpc2lvbiAyMDQyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9N
QWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRl
ICJOb2RlLmNwcCIKICNpbmNsdWRlICJOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCIKICNpbmNsdWRl
ICJOb2RlSXRlcmF0b3IuY3BwIgotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5jcHAiCiAjaW5jbHVk
ZSAiTm9kZVJhcmVEYXRhLmNwcCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmNwcCIKICNpbmNs
dWRlICJPdmVyZmxvd0V2ZW50LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIw
NDI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2
ZW50LmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAi
Tm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgpAQCAt
NDM4LDE4ICs0MzcsMTcgQEAgYm9vbCBOb2RlOjphcHBlbmRDaGlsZChOb2RlJiBuZXdDaGlsZCwg
RQogICAgIHJldHVybiBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGhpcykuYXBwZW5kQ2hpbGQo
bmV3Q2hpbGQsIGVjKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0
UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiBub2RlT3JTdHJpbmdWZWN0b3IpCitzdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+
IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9y
PHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFz
aFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXQ7Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcg
OiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAg
ICAgICAgICBub2RlU2V0LmFkZCgmbm9kZU9yU3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KKworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZp
c2l0b3IoCisgICAgICAgIFsmXShjb25zdCBSZWZQdHI8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5h
ZGQobm9kZSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFN0cmluZyYpIHsgfQorICAgICk7CisKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCisgICAgICAgIHN0ZDo6dmlzaXQo
dmlzaXRvciwgdmFyaWFudCk7CiAKICAgICByZXR1cm4gbm9kZVNldDsKIH0KQEAgLTQ3Miw3ICs0
NzAsMzQgQEAgc3RhdGljIFJlZlB0cjxOb2RlPiBmaXJzdEZvbGxvd2luZ1NpYmxpbgogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi12b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5n
PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8Tm9kZT4g
Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVjdG9yPHN0ZDo6dmFyaWFudDxS
ZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAgICBub2Rl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOworCisg
ICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKFJlZlB0cjxO
b2RlPiYgbm9kZSkgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQoKm5vZGUpOyB9LAorICAgICAgICBb
Jl0oU3RyaW5nJiBzdHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShk
b2N1bWVudCgpLCBzdHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQg
OiBub2RlT3JTdHJpbmdWZWN0b3IpCisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFu
dCk7CisKKyAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBXVEZNb3Zl
KG5vZGVzLmZpcnN0KCkpOworCisgICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1bWVudEZyYWdt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsK
KyAgICAgICAgaWYgKCFub2RlVG9SZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShub2RlVG9S
ZXR1cm4pOworfQorCit2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0
cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAg
ICAgaWYgKCFwYXJlbnQpCkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpiZWZvcmUoVmVj
dG9yPE5vZGVPclN0cmluZz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zv
cm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRv
IHZpYWJsZVByZXZpb3VzU2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGluZ05vdEluTm9kZVNl
dCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmlu
Z3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAg
YXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JT
dHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47
CiAKQEAgLTQ5Myw3ICs1MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3Ry
aW5nPiYmCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJsZVByZXZpb3VzU2li
bGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6
YWZ0ZXIoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9y
U3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTAyLDE0
ICs1MjcsMTQgQEAgdm9pZCBOb2RlOjphZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIAogICAg
IGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0
b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmly
c3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1
dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5v
ZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAo
ZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3Jl
KCpub2RlLCB2aWFibGVOZXh0U2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OnJl
cGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPHN0ZDo6dmFyaWFu
dDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9k
ZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTE4LDcgKzU0Myw3IEBAIHZvaWQgTm9kZTo6cmVw
bGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmkKICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJl
VHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAg
ICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9k
ZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0
cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7Cisg
ICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2Rl
T3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA0MjYyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIC8vIFRoaXMgbmVlZHMgdG8g
YmUgaGVyZSBiZWNhdXNlIERvY3VtZW50LmggYWxzbyBkZXBlbmRzIG9uIGl0LgogI2RlZmluZSBE
VU1QX05PREVfU1RBVElTVElDUyAwCkBAIC01MSw3ICs1Miw2IEBAIGNsYXNzIE1hdGhNTFF1YWxp
ZmllZE5hbWU7CiBjbGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFzcyBOb2RlTGlzdDsKIGNsYXNzIE5v
ZGVMaXN0c05vZGVEYXRhOwotY2xhc3MgTm9kZU9yU3RyaW5nOwogY2xhc3MgTm9kZVJhcmVEYXRh
OwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTIwOCw5ICsyMDgs
OSBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogbmV4dEVsZW1lbnRTaWJsaW5nKCkgY29uc3Q7CiAK
ICAgICAvLyBGcm9tIHRoZSBDaGlsZE5vZGUgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcv
I2NoaWxkbm9kZQotICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlcGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJl
ZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIo
VmVjdG9yPHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5v
ZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmUoRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBh
cnQgb2YgRE9NKQpAQCAtNjYxLDYgKzY2MSw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFN0
eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKSB7IG1fbm9kZUZsYWdzID0gKG1f
bm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VUeXBlOyB9CiAgICAgdm9pZCB1
cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygpOwogCisgICAgUmVmUHRyPE5vZGU+IGNvbnZl
cnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+
LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBQ
c2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKLQot
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9O
b2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0b3I8UmVmPE5vZGU+
PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1Zl
Y3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9yU3RyaW5nIDogbm9kZU9yU3RyaW5n
VmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3RyaW5nLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbm9kZXMudW5j
aGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRvY3VtZW50KCksIG5vZGVPclN0cmlu
Zy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZU9yU3Ry
aW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGVP
clN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKG5vZGVz
LmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1bWVudEZyYWdtZW50Ojpj
cmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlcykg
ewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hpbGQobm9kZSwgZWMpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBXVEZNb3ZlKG5vZGVU
b1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBOb2RlT3JTdHJpbmdfaAotCi0jaW5j
bHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNs
YXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAgIE5vZGUKLSAgICB9OwotCi0gICAg
Tm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgICAgICA6IG1fdHlwZShUeXBl
OjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3RyaW5nID0gc3RyaW5nLmltcGwoKTsK
LSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAgfQotCi0gICAgTm9kZU9yU3RyaW5n
KE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6Ok5vZGUpCi0gICAgewotICAgICAg
ICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0YS5ub2RlLT5yZWYoKTsKLSAgICB9
Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3RyaW5nJiBvdGhlcikKLSAgICAgICAg
OiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0g
b3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmctPnJlZigpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAg
IG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAgICBtX2RhdGEubm9k
ZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE5v
ZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIu
bV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBU
eXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0gc3RkOjpleGNoYW5nZShv
dGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IHN0ZDo6ZXhjaGFu
Z2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBOb2RlT3JT
dHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVmRGF0YSgpOwotCi0gICAgICAgIG1f
dHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAg
Y2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9k
YXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5u
b2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9yPShOb2RlT3JTdHJpbmcmJiBvdGhl
cikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAgIHJldHVy
biAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQotICAgICAgICBtX3R5cGUgPSBvdGhl
ci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6
U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5vZGUgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIH5Ob2RlT3JTdHJpbmcoKQot
ICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQotCi0gICAgVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBub2RlKCkgY29uc3QgeyBBU1NFUlQo
bV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRhLm5vZGUpOyByZXR1cm4gKm1fZGF0
YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkgY29uc3QgeyBBU1NFUlQobV90eXBl
ID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3RyaW5nKTsgcmV0dXJuICptX2RhdGEu
c3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgZGVyZWZEYXRhKCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAg
ICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN0cmlu
Zy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6
Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAgICAgICAgICAgICAgbV9kYXRhLm5v
ZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwot
ICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwotfTsKLQotUmVmUHRyPE5vZGU+IGNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDI2MikKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTA2ICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBz
dGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zhcmlh
bnQuY3BwOgorICAgICAgICBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3IgdGhlIGluaXRpYWwgc3Rh
dGUgb2Ygc3RkOjp2YXJpYW50IGFuZCB1c2luZworICAgICAgICBtYWtlVmlzaXRvciBmb3Igdmlz
aXRpbmcuCisKIDIwMTYtMDgtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVcGRhdGUgQVBJIHRlc3RzIGluIG1hYy9TZXREb2N1bWVudFVSSS5tbSBhZnRlciBy
MjA0MjQ3CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAko
cmV2aXNpb24gMjA0MjYyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiw1MiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCiAjaW5jbHVkZSAiQ291bnRlcnMuaCIKLSNpbmNsdWRlICJNb3ZlT25seS5oIgogI2lu
Y2x1ZGUgIlJlZkxvZ2dlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKIAorVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKK3sKKyAgICBzdGQ6
OnZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOworICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4KCkgPT0g
MCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1
Y3QgVCB7CisgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOwor
ICAgIH07CisKKyAgICBzdGQ6OnZhcmlhbnQ8VCwgaW50PiB2MjsKKyAgICBFWFBFQ1RfVFJVRSh2
Mi5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9
PSAxNSk7Cit9CisKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2YXJpYW50PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBzdGQ6OnZhcmlh
bnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5k
ZXgoKSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4o
dmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2YXJpYW50KSA9
PSAxKTsKKyAgICBFWFBFQ1RfVFJVRSgqc3RkOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsK
KyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxwdHIp
OworICAgIEVYUEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7
CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50
KSk7CisKKyAgICB2YXJpYW50ID0gMS4wOworICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgo
KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEp
OworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7
CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsK
KyAgICBFWFBFQ1RfVFJVRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkp
OworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkp
OwogfQogCiBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiB7Ci0gICAgdHlwZWRlZiBz
dGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IFZhcmlhbnQ7Ci0K
ICAgICBlbnVtIGNsYXNzIFR5cGUgewogICAgICAgICBOb25lLAogICAgICAgICBJbnQsCkBAIC01
Myw3ICs3OSw2IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKICAgICAgICAgU3Ry
aW5nLAogICAgIH07CiAKLQogICAgIHN0cnVjdCBWaXNpdG9yIHsKICAgICAgICAgVmlzaXRvcihU
eXBlJiB0KQogICAgICAgICAgICAgOiB0eXBlKHQpCkBAIC02OSwzMCArOTQsNjAgQEAgVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsK
IAotICAgIFZhcmlhbnQgdmFyaWFudCA9IDg7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0
KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBT
dHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFu
dCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50
ID0gMS4wZjsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIEVY
UEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gImhlbGxv
IjsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIEVYUEVDVF9U
UlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKK30KKworVEVTVChXVEZfVmFyaWFudCwgVmlzaXRv
clVzaW5nTWFrZVZpc2l0b3IpCit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTm9u
ZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwKKyAgICAgICAgU3RyaW5nLAorICAgIH07
CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOworCisgICAgYXV0byB2aXNpdG9yID0gV1RG
OjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGludCkgeyB0eXBlID0gVHlwZTo6SW50OyB9LAor
ICAgICAgICBbJl0oZmxvYXQpIHsgdHlwZSA9IFR5cGU6OkZsb2F0OyB9LAorICAgICAgICBbJl0o
U3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KKyAgICApOworCisgICAgc3RkOjp2YXJp
YW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAog
ICAgIHZhcmlhbnQgPSAxLjBmOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9y
KHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAg
IEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhl
bGxvIjsKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFu
dCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShU
eXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvcikKIHsKLSAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0
ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiBWYXJpYW50
OwotIAogICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29w
ZTsKIAogICAgIHsKICAgICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIFZhcmlhbnQgdiA9IFdURk1v
dmUodW5pcXVlUHRyKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwog
CiAgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29u
c3RydWN0aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVT
VChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRF
U1QoV1RGX1ZhcmlhbnQsIFJlZkNvdW50aW5nKQorVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQog
ewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dl
cj4sIGludD4gVmFyaWFudDsKLQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAg
ICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVm
OworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsK
ICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMTE3LDcgKzE3MCwxOCBAQCBURVNUKFdU
Rl9WYXJpYW50LCBSZWZDb3VudGluZykKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQgdiA9
IFdURk1vdmUocmVmKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBp
bnQ+IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9WYXJpYW50
LCBSZWYpCit7CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwg
aW50PiB2ID0gV1RGTW92ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEp
IGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285628</attachid>
            <date>2016-08-08 21:02:39 -0700</date>
            <delta_ts>2016-08-09 07:17:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160808210108.patch</filename>
            <type>text/plain</type>
            <size>40377</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDIxIEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQogI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lk
IF9fY3Jhc2hfaGVscGVyKGJvb2wpewotICAgIENSQVNIKCk7Ci19Ci1zdGF0aWMgaW5saW5lIGNv
bnN0ZXhwciBib29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7Ci0gICAgcmV0dXJu
ICF0ZXN0ID8gdHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOwotfQotCi0jZGVm
aW5lIF9fVEhST1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKLSNkZWZpbmUgX19DT05TVF9FWFBS
X1RIUk9XX0VYQ1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29uc3RleHBy
X2NyYXNoX2lmKChfX3ByZWRpY2F0ZSkpOworI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4
Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAoMCk7CiAj
ZW5kaWYKIAogc3RydWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKQEAgLTExNyw2ICsxMDksMTEgQEAg
cHVibGljOgogICAgIHt9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFy
KiB3aGF0X2FyZyl7CisgICAgX19USFJPV19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNjZXNzKHdo
YXRfYXJnKSkKK30KKwogdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KIHN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyOwogCkBAIC01
MzUsNyArNTMyLDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewogICAgIF9UeXBlJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwogICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAgIC8qY29uc3RleHByKi8gX1R5cGUm
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewogICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKICAgICB9CiAgICAgY29uc3Rl
eHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKQEAgLTYy
Niw3ICs2MjMsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57CiAgICAg
ICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwogICAgIH0KIAotICAgIGNvbnN0
ZXhwciBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAgLypjb25z
dGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAg
IHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7CiAgICAgfQogICAgIApAQCAt
NjQ1LDcgKzY0Miw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYo
CisgICAgLypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVz
dC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCiAgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0lu
ZGV4Pil7CiAgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgt
MT4pOwogICAgIH0KQEAgLTExNjksMTAgKzExNjYsMTAgQEAgc3RydWN0IF9fYmFja3VwX3N0b3Jh
Z2Vfb3BzewogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgog
c3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAg
IHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqIF9fZGVzdCxfU3Rv
cmFnZSYgX19zb3VyY2UpeworICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhf
U3RvcmFnZSAqLF9TdG9yYWdlJil7CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFk
X2FsbG9jKCkpOwogICAgIH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3Jh
Z2UgKiBfX29iail7CisgICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7
CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwogICAgIH07CiB9
OwpAQCAtMTc4MywyNiArMTc4MCwzNCBAQCBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFy
aWFudDxfVHlwCiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlIGNvbnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIF9f
Q09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3Zh
cmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAgcmV0dXJuICoo
Jl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOworICAgIHJl
dHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKKyAgICAgICAgICAgID8gJl9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikKKyAg
ICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9f
dikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VY
UFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2Fj
Y2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiAqKCZfX3Zhcmlh
bnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsKKyAgICByZXR1cm4gKigK
KyAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCisgICAgICAgICAgICA/ICZfX3Rocm93X2Jh
ZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlJj4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICA6ICZf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCisgICAgKTsKIH0K
IAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBn
ZXQodmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhD
UEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZh
cmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0lu
ZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFu
dF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9f
di5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50
IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciBjb25z
dCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0
KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9X
X0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJh
ZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29y
PF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoc3RkOjptb3ZlKF9fdikpOworICAgIHJldHVybiBfX3Zh
cmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKKyAgICAgICAgKCgoX0luZGV4
IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFy
aWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKKyAgICApOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgpAQCAtMTg2OCw4ICsx
ODczLDkgQEAgY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAogdGVtcGxh
dGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlCiB2
aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcix2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAg
X19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQiKSk7Ci0g
ICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xp
bmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworICAgIHJldHVybiAoX192LnZhbHVlbGVz
c19ieV9leGNlcHRpb24oKSkKKyAgICAgICAgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0
eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpCisgICAgICAgIDogX192aXNpdG9yX3RhYmxl
PF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9y
LF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFy
aWFudHM+CkBAIC0xOTM4LDggKzE5NDQsOCBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRl
eCxwdHJkaWZmX3QgCiBzdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0lu
ZGljZXMuLi4+ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBf
VmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3Jf
cmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChf
VmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBfX0NPTlNU
X0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKHRydWUsIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRp
bmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFyaWFudHMm
JiAuLi4peworICAgICAgICBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlPigi
VmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTIwNTQsMyArMjA2
MCw3IEBAIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIHN0ZAorCisjaWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhw
b3ApCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4
LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2Rl
T3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIE5vZGVPclN0cmluZy5oL2NwcAor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmg6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnByZXBlbmQpOgorICAgICAgICAqIGRvbS9Db250YWlu
ZXJOb2RlLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9k
ZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6YmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFmdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgor
ICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9k
ZT4sIFN0cmluZz4gYW5kIG1vdmUgY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUKKyAgICAg
ICAgaW50byBOb2RlLgorCisgICAgICAgICogZG9tL05vZGVPclN0cmluZy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogZG9tL05vZGVPclN0cmluZy5oOiBSZW1vdmVkLgorCiAyMDE2LTA4LTA4ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5zdXJl
IFN0cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveApJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDg3LDcgKzE0ODcsNiBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL05vZGUuY3BwCiAgICAgZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCiAgICAgZG9tL05vZGVJdGVyYXRvci5jcHAKLSAgICBkb20vTm9kZU9yU3RyaW5n
LmNwcAogICAgIGRvbS9Ob2RlUmFyZURhdGEuY3BwCiAgICAgZG9tL05vZGVUcmF2ZXJzYWwuY3Bw
CiAgICAgZG9tL092ZXJmbG93RXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQyNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTI4NDUsOCArMjg0NSw2IEBACiAJCTdDRTY4MzQ3MTkyMTgyMTUwMEY0RDkyOCAv
KiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTY4MzQ2MTkyMTgyMTUwMEY0RDkyOCAvKiBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0U2Q0JGQjE4N0YzNzA3MDBENDZCRjUgLyog
Rm9ybWF0Q29udmVydGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmggKi87
IH07CiAJCTdDRTZDQkZEMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkMxODdG
Mzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi87IH07Ci0JCTdDRUFDMTA3MUI0
ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JT
dHJpbmcuaCAqLzsgfTsKLQkJN0NFQUMxMDkxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmlu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VB
QzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLzsgfTsKIAkJN0NGREM1
N0MxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZEQzU3QTFBQzFEODA1MDBF
MjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcCAqLzsgfTsKIAkJN0NGREM1N0QxQUMx
RDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8q
IENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdENEM5NkRDMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoSGVh
ZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
RDRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwICovOyB9OwpAQCAt
MTAyNjUsOCArMTAyNjMsNiBAQAogCQk3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVy
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1hdENvbnZlcnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U2Q0JGQzE4N0YzOTQ5MDBENDZCRjUg
LyogRm9ybWF0Q29udmVydGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1hdENvbnZlcnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdD
RUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTm9kZU9yU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZU9yU3RyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRl
bnRFeHRlbnNpb25FcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0ZEQzU3QjFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25FcnJvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RDRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyog
SlNGZXRjaEhlYWRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNGZXRjaEhlYWRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQxMzUs
OCArMjQxMzEsNiBAQAogCQkJCTFBNzUwRDg3MEE5MEUzOTQwMDBGRjIxNSAvKiBOb2RlSXRlcmF0
b3IuaWRsICovLAogCQkJCUE4MTg3MjEwMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5oICov
LAogCQkJCTg1QUNBOUZBMEE5QjYzMTAwMDY3MUU5MCAvKiBOb2RlTGlzdC5pZGwgKi8sCi0JCQkJ
N0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi8sCi0JCQkJN0NF
QUMxMDYxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oICovLAogCQkJCTRGQUI0ODY2
MTY0M0E2N0UwMEY3MEMwNyAvKiBOb2RlUmFyZURhdGEuY3BwICovLAogCQkJCTYzMTg5QUUyMEU4
M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLywKIAkJCQk2M0Q3QjMyQzBFNzhDRDNG
MDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8sCkBAIC0yNjg5NSw3ICsyNjg4OSw2IEBA
CiAJCQkJODU0RkU3MzMwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM1MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjFCMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2Rl
TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0NFQUMxMDcxQjQ4M0QxRDAwMzM0NDgyIC8qIE5v
ZGVPclN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQx
IC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjNEN0IzMkQwRTc4Q0QzRjAw
Rjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzMTA1QkIx
Njc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2
OTgsNyArMzA2OTEsNiBAQAogCQkJCUE4QzRBODAwMDlENTYzMjcwMDAzQUM4RCAvKiBOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzMyMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmls
dGVyQ29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM0MEEyMjk3QkUwMDU4
RDdBRCAvKiBOb2RlSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NFQUMxMDkxQjQ4
M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RkZD
MDIyQjE2NDNCNzEwMDA0RTE2MzggLyogTm9kZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUU0MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMzNTAzQ0M3MTAxN0ExQjEwMDNCNDdFMSAvKiBOb3RpZmljYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVP
clN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlT3JTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywx
MSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3Rv
cjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCitW
ZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdW
ZWN0b3IoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0
YXRlLmFyZ3VtZW50Q291bnQoKTsKIAotICAgIFZlY3RvcjxOb2RlT3JTdHJpbmc+IHJlc3VsdDsK
KyAgICBWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4gcmVzdWx0Owog
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50Q291bnQpOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkocmV2aXNpb24gMjA0Mjc2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBKU05vZGVPclN0cmluZ19oCiAjZGVm
aW5lIEpTTm9kZU9yU3RyaW5nX2gKIAotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzUsNyArMzYsOSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVPclN0cmluZz4g
dG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUmKTsKK2NsYXNzIE5vZGU7CisKK1Zl
Y3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1Zl
Y3RvcihKU0M6OkV4ZWNTdGF0ZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDIwNDI3NikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNiBAQAogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOYW1lTm9k
ZUxpc3QuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSYWRpb05vZGVMaXN0LmgiCkBAIC04NzMsMTgg
Kzg3MiwxOCBAQCB1bnNpZ25lZCBDb250YWluZXJOb2RlOjpjaGlsZEVsZW1lbnRDb3VuCiAgICAg
cmV0dXJuIHN0ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwog
fQogCi12b2lkIENvbnRhaW5lck5vZGU6OmFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6
OmFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBu
b2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9y
U3RyaW5nVmVjdG9yKSwgZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBlbmRDaGlsZCgqbm9k
ZSwgZWMpOwogfQogCi12b2lkIENvbnRhaW5lck5vZGU6OnByZXBlbmQoVmVjdG9yPE5vZGVPclN0
cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJp
bmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVm
UHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RG
TW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBA
IHB1YmxpYzoKICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIEVs
ZW1lbnQqIGxhc3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1l
bnRDb3VudCgpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4m
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8
UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBwcmVw
ZW5kKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICBib29sIGVuc3VyZVByZUluc2VydGlvblZhbGlkaXR5KE5vZGUmIG5l
d0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01BbGxJbk9uZS5jcHAJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01BbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNiBAQAog
I2luY2x1ZGUgIk5vZGUuY3BwIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIgog
I2luY2x1ZGUgIk5vZGVJdGVyYXRvci5jcHAiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmNwcCIK
ICNpbmNsdWRlICJOb2RlUmFyZURhdGEuY3BwIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuY3Bw
IgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2
aXNpb24gMjA0Mjc2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11
dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNp
bmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50
LmgiCkBAIC00MzgsMTggKzQzNywxNyBAQCBib29sIE5vZGU6OmFwcGVuZENoaWxkKE5vZGUmIG5l
d0NoaWxkLCBFCiAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5hcHBl
bmRDaGlsZChuZXdDaGlsZCwgZWMpOwogfQogCi1zdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+
IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9y
PE5vZGVPclN0cmluZz4mIG5vZGVPclN0cmluZ1ZlY3RvcikKK3N0YXRpYyBIYXNoU2V0PFJlZlB0
cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihjb25z
dCBWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mIHZlY3RvcikKIHsK
ICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldDsKLSAgICBmb3IgKGF1dG8mIG5vZGVP
clN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBzd2l0Y2ggKG5vZGVPclN0
cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6OlR5cGU6OlN0cmluZzoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6Tm9k
ZToKLSAgICAgICAgICAgIG5vZGVTZXQuYWRkKCZub2RlT3JTdHJpbmcubm9kZSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCisgICAgYXV0byB2aXNpdG9yID0gV1RG
OjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZlB0cjxOb2RlPiYgbm9kZSkgeyBu
b2RlU2V0LmFkZChub2RlKTsgfSwKKyAgICAgICAgW10oY29uc3QgU3RyaW5nJikgeyB9CisgICAg
KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgdmFyaWFudCA6IHZlY3RvcikKKyAgICAgICAgc3Rk
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAt
NDcyLDcgKzQ3MCwzNCBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGlu
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2Rl
T3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0
cjxOb2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8c3RkOjp2
YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmIChub2RlT3JTdHJpbmdWZWN0b3IuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOwor
ICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9yU3RyaW5nVmVjdG9yLnNpemUo
KSk7CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0o
UmVmUHRyPE5vZGU+JiBub2RlKSB7IG5vZGVzLnVuY2hlY2tlZEFwcGVuZCgqbm9kZSk7IH0sCisg
ICAgICAgIFsmXShTdHJpbmcmIHN0cmluZykgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6
Y3JlYXRlKGRvY3VtZW50KCksIHN0cmluZykpOyB9CisgICAgKTsKKworICAgIGZvciAoYXV0byYg
dmFyaWFudCA6IG5vZGVPclN0cmluZ1ZlY3RvcikKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9y
LCB2YXJpYW50KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUobm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1JldHVybiA9IERvY3Vt
ZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBu
b2RlcykgeworICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hpbGQobm9kZSwgZWMp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBXVEZNb3Zl
KG5vZGVUb1JldHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTQ4MSw3ICs1MDYsNyBAQCB2b2lkIE5vZGU6OmJl
Zm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFBy
ZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwog
ICAgIGF1dG8gdmlhYmxlUHJldmlvdXNTaWJsaW5nID0gZmlyc3RQcmVjZWRpbmdTaWJsaW5nTm90
SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rl
c09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVj
KTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3Zl
KG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNDkzLDcgKzUxOCw3IEBAIHZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSgqbm9kZSwgdmlhYmxlUHJl
dmlvdXNTaWJsaW5nLmdldCgpLCBlYyk7CiB9CiAKLXZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5v
ZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBOb2RlOjphZnRlcihWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4m
JiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBA
IC01MDIsMTQgKzUyNywxNCBAQCB2b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+
JiYgCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0
cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8gdmlhYmxlTmV4dFNpYmxp
bmcgPSBmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMsIG5vZGVTZXQpOwog
Ci0gICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdU
Rk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8gbm9kZSA9IGNvbnZlcnRO
b2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwog
ICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFyZW50LT5pbnNl
cnRCZWZvcmUoKm5vZGUsIHZpYWJsZU5leHRTaWJsaW5nLmdldCgpLCBlYyk7CiB9CiAKLXZvaWQg
Tm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBOb2RlOjpyZXBsYWNlV2l0aChWZWN0b3I8c3Rk
Ojp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBw
YXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBO
b2RlOjpyZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5v
ZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVj
dG9yKTsKICAgICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5n
Tm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnRO
b2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZN
b3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVy
bjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBu
ZWVkcyB0byBiZSBoZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAj
ZGVmaW5lIERVTVBfTk9ERV9TVEFUSVNUSUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0
aE1MUXVhbGlmaWVkTmFtZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0Owog
Y2xhc3MgTm9kZUxpc3RzTm9kZURhdGE7Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2Rl
UmFyZURhdGE7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4
LDkgKzIwOCw5IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBj
b25zdDsKIAogICAgIC8vIEZyb20gdGhlIENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hh
dHdnLm9yZy8jY2hpbGRub2RlCi0gICAgdm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4m
JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4m
JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0
cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxzdGQ6OnZh
cmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCBhZnRlcihWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPHN0ZDo6dmFyaWFudDxS
ZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAKICAgICAvLyBPdGhlciBtZXRob2Rz
IChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDggQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpIHsgbV9ub2RlRmxh
Z3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNrKSB8IGNoYW5nZVR5cGU7IH0KICAg
ICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxjKCk7CiAKKyAgICBSZWZQdHI8Tm9k
ZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWZQ
dHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIFBzZXVkb0lkIGN1c3RvbVBzZXVkb0lkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0Mjc2KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmlu
Zy5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIlRleHQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJp
bmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JT
dHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChub2RlT3JTdHJpbmdW
ZWN0b3IuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxS
ZWY8Tm9kZT4+IG5vZGVzOwotICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9y
U3RyaW5nVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2Rl
T3JTdHJpbmdWZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBu
b2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6Y3JlYXRlKGNvbnRleHQuZG9jdW1lbnQoKSwgbm9k
ZU9yU3RyaW5nLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBl
bmQobm9kZU9yU3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURk1v
dmUobm9kZXMuZmlyc3QoKSk7Ci0KLSAgICBhdXRvIG5vZGVUb1JldHVybiA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShjb250ZXh0LmRvY3VtZW50KCkpOwotICAgIGZvciAoYXV0byYgbm9kZSA6
IG5vZGVzKSB7Ci0gICAgICAgIGlmICghbm9kZVRvUmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBl
YykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIFdURk1v
dmUobm9kZVRvUmV0dXJuKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkocmV2aXNpb24gMjA0Mjc2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGVPclN0cmluZy5oCShub25leGlzdGVudCkKQEAgLTEsMTYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIE5vZGVPclN0cmluZ19oCi0jZGVmaW5lIE5vZGVPclN0cmluZ19o
Ci0KLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOb2RlT3JTdHJpbmcgewotcHVibGljOgotICAg
IGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIFN0cmluZywKLSAgICAgICAgTm9kZQotICAgIH07
Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgICAgIDogbV90
eXBlKFR5cGU6OlN0cmluZykKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdHJpbmcu
aW1wbCgpOwotICAgICAgICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2Rl
T3JTdHJpbmcoTm9kZSogbm9kZSkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6Tm9kZSkKLSAgICB7
Ci0gICAgICAgIG1fZGF0YS5ub2RlID0gbm9kZTsKLSAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigp
OwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQot
ICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5z
dHJpbmcgPSBvdGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+
cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAg
ICAgICAgICAgbV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1f
ZGF0YS5ub2RlLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgTm9kZU9yU3RyaW5nKE5vZGVPclN0cmluZyYmIG90aGVyKQotICAgICAgICA6IG1fdHlw
ZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAg
ICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdGQ6OmV4
Y2hhbmdlKG90aGVyLm1fZGF0YS5zdHJpbmcsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gc3Rk
OjpleGNoYW5nZShvdGhlci5tX2RhdGEubm9kZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KGNvbnN0
IE5vZGVPclN0cmluZyYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIp
Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0KLSAg
ICAgICAgbV90eXBlID0gb3RoZXIubV90eXBlOwotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBv
dGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAg
bV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1fZGF0YS5ub2Rl
LT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KE5vZGVPclN0cmlu
ZyYmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVmRGF0YSgpOwotCi0gICAgICAgIG1fdHlw
ZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2Fz
ZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0gc3RkOjpleGNoYW5n
ZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IHN0ZDo6ZXhj
aGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgfk5vZGVPclN0
cmluZygpCi0gICAgewotICAgICAgICBkZXJlZkRhdGEoKTsKLSAgICB9Ci0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIE5vZGUmIG5vZGUoKSBjb25zdCB7
IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6Tm9kZSk7IEFTU0VSVChtX2RhdGEubm9kZSk7IHJldHVy
biAqbV9kYXRhLm5vZGU7IH0KLSAgICBTdHJpbmdJbXBsJiBzdHJpbmcoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gVHlwZTo6U3RyaW5nKTsgQVNTRVJUKG1fZGF0YS5zdHJpbmcpOyByZXR1cm4g
Km1fZGF0YS5zdHJpbmc7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBkZXJlZkRhdGEoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJp
bmc6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLnN0cmluZykKLSAgICAgICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nLT5kZXJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIGlmIChtX2RhdGEubm9kZSkKLSAgICAgICAgICAgICAgICBt
X2RhdGEubm9kZS0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgVHlwZSBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmc7Ci0gICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgfSBtX2RhdGE7Ci19OwotCi1SZWZQdHI8
Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9y
PE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBOb2RlT3JTdHJpbmdfaApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0Mjc2KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDgtMDggIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3Jp
cHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJp
YW50LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCisyMDE2LTA4LTA2ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJp
bmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1ZhcmlhbnQuY3BwOgorICAgICAgICBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3IgdGhlIGlu
aXRpYWwgc3RhdGUgb2Ygc3RkOjp2YXJpYW50IGFuZCB1c2luZworICAgICAgICBtYWtlVmlzaXRv
ciBmb3IgdmlzaXRpbmcuCisKIDIwMTYtMDgtMDggIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFNvbWUgRVdTIGNvbnNvbGUgbG9ncyBkb2Vzbid0IGdvIHRv
IGxvZyBmaWxlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIw
NDI3NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDYgKzc2LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9UZW1wb3JhcnlDaGFuZ2UuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL1VuaXF1ZVJlZi5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvVmFyaWFudC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVmVj
dG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9XVEZTdHJpbmcuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1dlYWtQdHIuY3BwCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0Mjc2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDI2ICsyNiw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVk
ZSAiQ291bnRlcnMuaCIKLSNpbmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dl
ci5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAorVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKK3sKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBk
b3VibGU+IHYxOworICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNU
X1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAg
IFQoKSA6IHZhbHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBz
dGQ6OnZhcmlhbnQ8VCwgaW50PiB2MjsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09IDAp
OworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+
IHZhcmlhbnQgPSAxOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAwKTsKLSAg
ICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7
CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBF
Q1RfVFJVRSgqc3RkOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9U
UlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZB
TFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisKKyAgICB2YXJp
YW50ID0gMS4wOworICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsKKyAgICBF
WFBFQ1RfVFJVRShzdGQ6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9U
UlVFKCpzdGQ6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RS
VUUoc3RkOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9G
QUxTRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdU
Rl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRh
bDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IFZhcmlhbnQ7Ci0KICAgICBlbnVtIGNsYXNz
IFR5cGUgewogICAgICAgICBOb25lLAogICAgICAgICBJbnQsCkBAIC01Myw3ICs3OSw2IEBAIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKICAgICAgICAgU3RyaW5nLAogICAgIH07CiAK
LQogICAgIHN0cnVjdCBWaXNpdG9yIHsKICAgICAgICAgVmlzaXRvcihUeXBlJiB0KQogICAgICAg
ICAgICAgOiB0eXBlKHQpCkBAIC02OSwzMCArOTQsNjAgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFz
aWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAgIFZhcmlhbnQg
dmFyaWFudCA9IDg7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSks
IHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQg
PSA4OworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgRVhQRUNU
X1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gMS4wZjsKKyAgICBz
dGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6
OkZsb2F0ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gImhlbGxvIjsKKyAgICBzdGQ6OnZp
c2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmlu
ZyA9PSB0eXBlKTsKK30KKworVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nTWFrZVZpc2l0
b3IpCit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgSW50
LAorICAgICAgICBGbG9hdCwKKyAgICAgICAgU3RyaW5nLAorICAgIH07CisKKyAgICBUeXBlIHR5
cGUgPSBUeXBlOjpOb25lOworCisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgWyZdKGludCkgeyB0eXBlID0gVHlwZTo6SW50OyB9LAorICAgICAgICBbJl0oZmxv
YXQpIHsgdHlwZSA9IFR5cGU6OkZsb2F0OyB9LAorICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUg
PSBUeXBlOjpTdHJpbmc7IH0KKyAgICApOworCisgICAgc3RkOjp2YXJpYW50PGludCwgZmxvYXQs
IFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsK
ICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAx
LjBmOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50
KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5
cGU6OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0g
dHlwZSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKIHsK
LSAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiBWYXJpYW50OwotIAogICAgIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKIAogICAgIHsKICAg
ICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUodW5pcXVlUHRyKTsK
KyAgICAgICAgc3RkOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRl
c3RydWN0aW9uQ291bnQpOwpAQCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVTVChXVEZfVmFyaWFudCwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yKQogICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRFU1QoV1RGX1ZhcmlhbnQs
IFJlZkNvdW50aW5nKQorVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQogewotICAgIHR5cGVkZWYg
c3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gVmFyaWFu
dDsKLQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVmUHRyPFJl
ZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVmOworICAgICAgICBzdGQ6
OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKICAgICB9CiAKICAgICBB
U1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOwpAQCAtMTE3LDcgKzE3MCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZD
b3VudGluZykKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUocmVmKTsK
KyAgICAgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3Zl
KHJlZik7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9WYXJpYW50LCBSZWYpCit7CisgICAg
eworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYo
YSk7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92
ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285637</attachid>
            <date>2016-08-09 07:17:25 -0700</date>
            <delta_ts>2016-08-09 10:44:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160809071551.patch</filename>
            <type>text/plain</type>
            <size>40931</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDIxIEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQogI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lk
IF9fY3Jhc2hfaGVscGVyKGJvb2wpewotICAgIENSQVNIKCk7Ci19Ci1zdGF0aWMgaW5saW5lIGNv
bnN0ZXhwciBib29sIF9fY29uc3RleHByX2NyYXNoX2lmKGJvb2wgdGVzdCl7Ci0gICAgcmV0dXJu
ICF0ZXN0ID8gdHJ1ZSA6IChfX2NyYXNoX2hlbHBlcih0ZXN0KSwgZmFsc2UpOwotfQotCi0jZGVm
aW5lIF9fVEhST1dfRVhDRVBUSU9OKC4uLikgQ1JBU0goKTsKLSNkZWZpbmUgX19DT05TVF9FWFBS
X1RIUk9XX0VYQ1BFVElPTl9JRihfX3ByZWRpY2F0ZSwgX19leGNlcHRpb24pIF9fY29uc3RleHBy
X2NyYXNoX2lmKChfX3ByZWRpY2F0ZSkpOworI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4
Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAoMCk7CiAj
ZW5kaWYKIAogc3RydWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKQEAgLTExNyw2ICsxMDksMTEgQEAg
cHVibGljOgogICAgIHt9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFy
KiB3aGF0X2FyZyl7CisgICAgX19USFJPV19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNjZXNzKHdo
YXRfYXJnKSkKK30KKwogdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KIHN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyOwogCkBAIC01
MzUsNyArNTMyLDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewogICAgIF9UeXBlJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwogICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4peworICAgIC8qY29uc3RleHByKi8gX1R5cGUm
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewogICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKICAgICB9CiAgICAgY29uc3Rl
eHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKQEAgLTYy
Niw3ICs2MjMsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57CiAgICAg
ICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwogICAgIH0KIAotICAgIGNvbnN0
ZXhwciBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CisgICAgLypjb25z
dGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAg
IHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7CiAgICAgfQogICAgIApAQCAt
NjQ1LDcgKzY0Miw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYo
CisgICAgLypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVz
dC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCiAgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0lu
ZGV4Pil7CiAgICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgt
MT4pOwogICAgIH0KQEAgLTExNjksMTAgKzExNjYsMTAgQEAgc3RydWN0IF9fYmFja3VwX3N0b3Jh
Z2Vfb3BzewogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgog
c3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAg
IHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqIF9fZGVzdCxfU3Rv
cmFnZSYgX19zb3VyY2UpeworICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhf
U3RvcmFnZSAqLF9TdG9yYWdlJil7CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFk
X2FsbG9jKCkpOwogICAgIH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3Jh
Z2UgKiBfX29iail7CisgICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7
CiAgICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwogICAgIH07CiB9
OwpAQCAtMTc4MywyNiArMTc4MCwzNCBAQCBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQodmFy
aWFudDxfVHlwCiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlIGNvbnN0JiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIF9f
Q09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgoKSwgYmFkX3Zh
cmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAgcmV0dXJuICoo
Jl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOworICAgIHJl
dHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKKyAgICAgICAgICAgID8gJl9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikKKyAg
ICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9f
dikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VY
UFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2Fj
Y2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiAqKCZfX3Zhcmlh
bnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsKKyAgICByZXR1cm4gKigK
KyAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCisgICAgICAgICAgICA/ICZfX3Rocm93X2Jh
ZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlJj4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICA6ICZf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCisgICAgKTsKIH0K
IAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBn
ZXQodmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhD
UEVUSU9OX0lGKF9JbmRleCE9X192LmluZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZh
cmlhbnQgaW5kZXggaW4gZ2V0IikpOwotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0lu
ZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFu
dF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9f
di5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50
IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciBjb25z
dCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0
KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9X
X0VYQ1BFVElPTl9JRihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJh
ZCB2YXJpYW50IGluZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29y
PF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoc3RkOjptb3ZlKF9fdikpOworICAgIHJldHVybiBfX3Zh
cmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKKyAgICAgICAgKCgoX0luZGV4
IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFy
aWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKKyAgICApOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgpAQCAtMTg2OCw4ICsx
ODczLDkgQEAgY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAogdGVtcGxh
dGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlCiB2
aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcix2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAg
X19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9JRihfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIlZpc2l0aW5nIG9mIGVtcHR5IHZhcmlhbnQiKSk7Ci0g
ICAgcmV0dXJuIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xp
bmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOworICAgIHJldHVybiAoX192LnZhbHVlbGVz
c19ieV9leGNlcHRpb24oKSkKKyAgICAgICAgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0
eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpCisgICAgICAgIDogX192aXNpdG9yX3RhYmxl
PF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9y
LF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFy
aWFudHM+CkBAIC0xOTM4LDggKzE5NDQsOCBAQCB0ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRl
eCxwdHJkaWZmX3QgCiBzdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0lu
ZGljZXMuLi4+ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBf
VmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3Jf
cmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChf
VmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBfX0NPTlNU
X0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKHRydWUsIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRp
bmcgb2YgZW1wdHkgdmFyaWFudCIpKTsKKyAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFyaWFudHMm
JiAuLi4peworICAgICAgICBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlPigi
VmlzaXRpbmcgb2YgZW1wdHkgdmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTIwNTQsMyArMjA2
MCw3IEBAIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIHN0ZAorCisjaWYgQ09NUElMRVIoTVNWQykKKyNwcmFnbWEgd2FybmluZyhw
b3ApCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTA4
LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2Rl
T3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIE5vZGVPclN0cmluZy5oL2NwcAor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmg6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnByZXBlbmQpOgorICAgICAgICAqIGRvbS9Db250YWlu
ZXJOb2RlLmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9k
ZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6YmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFmdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OnJlcGxhY2VXaXRoKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgor
ICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9k
ZT4sIFN0cmluZz4gYW5kIG1vdmUgY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUKKyAgICAg
ICAgaW50byBOb2RlLgorCisgICAgICAgICogZG9tL05vZGVPclN0cmluZy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogZG9tL05vZGVPclN0cmluZy5oOiBSZW1vdmVkLgorCiAyMDE2LTA4LTA4ICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5zdXJl
IFN0cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveApJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDg3LDcgKzE0ODcsNiBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL05vZGUuY3BwCiAgICAgZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCiAgICAgZG9tL05vZGVJdGVyYXRvci5jcHAKLSAgICBkb20vTm9kZU9yU3RyaW5n
LmNwcAogICAgIGRvbS9Ob2RlUmFyZURhdGEuY3BwCiAgICAgZG9tL05vZGVUcmF2ZXJzYWwuY3Bw
CiAgICAgZG9tL092ZXJmbG93RXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQyNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTI4NDUsOCArMjg0NSw2IEBACiAJCTdDRTY4MzQ3MTkyMTgyMTUwMEY0RDkyOCAv
KiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTY4MzQ2MTkyMTgyMTUwMEY0RDkyOCAvKiBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0U2Q0JGQjE4N0YzNzA3MDBENDZCRjUgLyog
Rm9ybWF0Q29udmVydGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmggKi87
IH07CiAJCTdDRTZDQkZEMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkMxODdG
Mzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi87IH07Ci0JCTdDRUFDMTA3MUI0
ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JT
dHJpbmcuaCAqLzsgfTsKLQkJN0NFQUMxMDkxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmlu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VB
QzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLzsgfTsKIAkJN0NGREM1
N0MxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZEQzU3QTFBQzFEODA1MDBF
MjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcCAqLzsgfTsKIAkJN0NGREM1N0QxQUMx
RDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8q
IENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdENEM5NkRDMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoSGVh
ZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
RDRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhlYWRlcnMuY3BwICovOyB9OwpAQCAt
MTAyNjUsOCArMTAyNjMsNiBAQAogCQk3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyogVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0U2Q0JGQTE4N0YzNzA3MDBENDZCRjUgLyogRm9ybWF0Q29udmVy
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1hdENvbnZlcnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U2Q0JGQzE4N0YzOTQ5MDBENDZCRjUg
LyogRm9ybWF0Q29udmVydGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1hdENvbnZlcnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdD
RUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTm9kZU9yU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZU9yU3RyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRl
bnRFeHRlbnNpb25FcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0ZEQzU3QjFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25FcnJvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RDRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyog
SlNGZXRjaEhlYWRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNGZXRjaEhlYWRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQxMzUs
OCArMjQxMzEsNiBAQAogCQkJCTFBNzUwRDg3MEE5MEUzOTQwMDBGRjIxNSAvKiBOb2RlSXRlcmF0
b3IuaWRsICovLAogCQkJCUE4MTg3MjEwMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5oICov
LAogCQkJCTg1QUNBOUZBMEE5QjYzMTAwMDY3MUU5MCAvKiBOb2RlTGlzdC5pZGwgKi8sCi0JCQkJ
N0NFQUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi8sCi0JCQkJN0NF
QUMxMDYxQjQ4M0QxRDAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5oICovLAogCQkJCTRGQUI0ODY2
MTY0M0E2N0UwMEY3MEMwNyAvKiBOb2RlUmFyZURhdGEuY3BwICovLAogCQkJCTYzMTg5QUUyMEU4
M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLywKIAkJCQk2M0Q3QjMyQzBFNzhDRDNG
MDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8sCkBAIC0yNjg5NSw3ICsyNjg4OSw2IEBA
CiAJCQkJODU0RkU3MzMwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM1MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg3MjFCMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2Rl
TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0NFQUMxMDcxQjQ4M0QxRDAwMzM0NDgyIC8qIE5v
ZGVPclN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQx
IC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjNEN0IzMkQwRTc4Q0QzRjAw
Rjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzMTA1QkIx
Njc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2
OTgsNyArMzA2OTEsNiBAQAogCQkJCUE4QzRBODAwMDlENTYzMjcwMDAzQUM4RCAvKiBOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzMyMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmls
dGVyQ29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM0MEEyMjk3QkUwMDU4
RDdBRCAvKiBOb2RlSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NFQUMxMDkxQjQ4
M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RkZD
MDIyQjE2NDNCNzEwMDA0RTE2MzggLyogTm9kZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUU0MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMzNTAzQ0M3MTAxN0ExQjEwMDNCNDdFMSAvKiBOb3RpZmljYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVP
clN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlT3JTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywx
MSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZlY3Rv
cjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCitW
ZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdW
ZWN0b3IoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0
YXRlLmFyZ3VtZW50Q291bnQoKTsKIAotICAgIFZlY3RvcjxOb2RlT3JTdHJpbmc+IHJlc3VsdDsK
KyAgICBWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4gcmVzdWx0Owog
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50Q291bnQpOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkocmV2aXNpb24gMjA0Mjc2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBKU05vZGVPclN0cmluZ19oCiAjZGVm
aW5lIEpTTm9kZU9yU3RyaW5nX2gKIAotI2luY2x1ZGUgIk5vZGVPclN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzUsNyArMzYsOSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVmVjdG9yPE5vZGVPclN0cmluZz4g
dG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUmKTsKK2NsYXNzIE5vZGU7CisKK1Zl
Y3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1Zl
Y3RvcihKU0M6OkV4ZWNTdGF0ZSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDIwNDI3NikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNiBAQAogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOYW1lTm9k
ZUxpc3QuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNpbmNsdWRl
ICJOb2RlT3JTdHJpbmcuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSYWRpb05vZGVMaXN0LmgiCkBAIC04NzMsMTgg
Kzg3MiwxOCBAQCB1bnNpZ25lZCBDb250YWluZXJOb2RlOjpjaGlsZEVsZW1lbnRDb3VuCiAgICAg
cmV0dXJuIHN0ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwog
fQogCi12b2lkIENvbnRhaW5lck5vZGU6OmFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5v
ZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENvbnRhaW5lck5vZGU6
OmFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBu
b2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9y
U3RyaW5nVmVjdG9yKSwgZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBlbmRDaGlsZCgqbm9k
ZSwgZWMpOwogfQogCi12b2lkIENvbnRhaW5lck5vZGU6OnByZXBlbmQoVmVjdG9yPE5vZGVPclN0
cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJp
bmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVm
UHRyPE5vZGU+IG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RG
TW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBj
b252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBA
IHB1YmxpYzoKICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwogICAgIEVs
ZW1lbnQqIGxhc3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1l
bnRDb3VudCgpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHByZXBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4m
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYXBwZW5kKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8
UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBwcmVw
ZW5kKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICBib29sIGVuc3VyZVByZUluc2VydGlvblZhbGlkaXR5KE5vZGUmIG5l
d0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01BbGxJbk9uZS5jcHAJKHJldmlzaW9uIDIwNDI3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01BbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNiBAQAog
I2luY2x1ZGUgIk5vZGUuY3BwIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIgog
I2luY2x1ZGUgIk5vZGVJdGVyYXRvci5jcHAiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmNwcCIK
ICNpbmNsdWRlICJOb2RlUmFyZURhdGEuY3BwIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuY3Bw
IgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2
aXNpb24gMjA0Mjc2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11
dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKLSNp
bmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50
LmgiCkBAIC00MzgsMTggKzQzNywxNyBAQCBib29sIE5vZGU6OmFwcGVuZENoaWxkKE5vZGUmIG5l
d0NoaWxkLCBFCiAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0aGlzKS5hcHBl
bmRDaGlsZChuZXdDaGlsZCwgZWMpOwogfQogCi1zdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+
IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9y
PE5vZGVPclN0cmluZz4mIG5vZGVPclN0cmluZ1ZlY3RvcikKK3N0YXRpYyBIYXNoU2V0PFJlZlB0
cjxOb2RlPj4gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihjb25z
dCBWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mIHZlY3RvcikKIHsK
ICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPj4gbm9kZVNldDsKLSAgICBmb3IgKGF1dG8mIG5vZGVP
clN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBzd2l0Y2ggKG5vZGVPclN0
cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6OlR5cGU6OlN0cmluZzoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6Tm9k
ZToKLSAgICAgICAgICAgIG5vZGVTZXQuYWRkKCZub2RlT3JTdHJpbmcubm9kZSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCisgICAgYXV0byB2aXNpdG9yID0gV1RG
OjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZlB0cjxOb2RlPiYgbm9kZSkgeyBu
b2RlU2V0LmFkZChub2RlKTsgfSwKKyAgICAgICAgW10oY29uc3QgU3RyaW5nJikgeyB9CisgICAg
KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgdmFyaWFudCA6IHZlY3RvcikKKyAgICAgICAgc3Rk
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAt
NDcyLDcgKzQ3MCwzNCBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IGZpcnN0Rm9sbG93aW5nU2libGlu
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxOb2Rl
T3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZlB0
cjxOb2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShWZWN0b3I8c3RkOjp2
YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmIChub2RlT3JTdHJpbmdWZWN0b3IuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOwor
ICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9yU3RyaW5nVmVjdG9yLnNpemUo
KSk7CisKKyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0o
UmVmUHRyPE5vZGU+JiBub2RlKSB7IG5vZGVzLnVuY2hlY2tlZEFwcGVuZCgqbm9kZSk7IH0sCisg
ICAgICAgIFsmXShTdHJpbmcmIHN0cmluZykgeyBub2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6
Y3JlYXRlKGRvY3VtZW50KCksIHN0cmluZykpOyB9CisgICAgKTsKKworICAgIGZvciAoYXV0byYg
dmFyaWFudCA6IG5vZGVPclN0cmluZ1ZlY3RvcikKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9y
LCB2YXJpYW50KTsKKworICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUobm9kZXMuZmlyc3QoKSk7CisKKyAgICBhdXRvIG5vZGVUb1JldHVybiA9IERvY3Vt
ZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBu
b2RlcykgeworICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hpbGQobm9kZSwgZWMp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBXVEZNb3Zl
KG5vZGVUb1JldHVybik7Cit9CisKK3ZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTQ4MSw3ICs1MDYsNyBAQCB2b2lkIE5vZGU6OmJl
Zm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFBy
ZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwog
ICAgIGF1dG8gdmlhYmxlUHJldmlvdXNTaWJsaW5nID0gZmlyc3RQcmVjZWRpbmdTaWJsaW5nTm90
SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rl
c09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVj
KTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3Zl
KG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNDkzLDcgKzUxOCw3IEBAIHZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSgqbm9kZSwgdmlhYmxlUHJl
dmlvdXNTaWJsaW5nLmdldCgpLCBlYyk7CiB9CiAKLXZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5v
ZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBOb2RlOjphZnRlcihWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4m
JiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBA
IC01MDIsMTQgKzUyNywxNCBAQCB2b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+
JiYgCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9ybWVkRnJvbU5vZGVPclN0
cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8gdmlhYmxlTmV4dFNpYmxp
bmcgPSBmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMsIG5vZGVTZXQpOwog
Ci0gICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdU
Rk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8gbm9kZSA9IGNvbnZlcnRO
b2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwog
ICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFyZW50LT5pbnNl
cnRCZWZvcmUoKm5vZGUsIHZpYWJsZU5leHRTaWJsaW5nLmdldCgpLCBlYyk7CiB9CiAKLXZvaWQg
Tm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0
b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBOb2RlOjpyZXBsYWNlV2l0aChWZWN0b3I8c3Rk
Ojp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBw
YXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC01MTgsNyArNTQzLDcgQEAgdm9pZCBO
b2RlOjpyZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaQogICAgIGF1dG8gbm9kZVNldCA9IG5v
ZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVj
dG9yKTsKICAgICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5n
Tm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnRO
b2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZN
b3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVy
bjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMDQyNzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogLy8gVGhpcyBu
ZWVkcyB0byBiZSBoZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24gaXQuCiAj
ZGVmaW5lIERVTVBfTk9ERV9TVEFUSVNUSUNTIDAKQEAgLTUxLDcgKzUyLDYgQEAgY2xhc3MgTWF0
aE1MUXVhbGlmaWVkTmFtZTsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5vZGVMaXN0Owog
Y2xhc3MgTm9kZUxpc3RzTm9kZURhdGE7Ci1jbGFzcyBOb2RlT3JTdHJpbmc7CiBjbGFzcyBOb2Rl
UmFyZURhdGE7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMjA4
LDkgKzIwOCw5IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBj
b25zdDsKIAogICAgIC8vIEZyb20gdGhlIENoaWxkTm9kZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hh
dHdnLm9yZy8jY2hpbGRub2RlCi0gICAgdm9pZCBiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4m
JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4m
JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0
cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmVmb3JlKFZlY3RvcjxzdGQ6OnZh
cmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCBhZnRlcihWZWN0b3I8c3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVwbGFjZVdpdGgoVmVjdG9yPHN0ZDo6dmFyaWFudDxS
ZWZQdHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2RlJik7CiAKICAgICAvLyBPdGhlciBtZXRob2Rz
IChub3QgcGFydCBvZiBET00pCkBAIC02NjEsNiArNjYxLDggQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpIHsgbV9ub2RlRmxh
Z3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNrKSB8IGNoYW5nZVR5cGU7IH0KICAg
ICB2b2lkIHVwZGF0ZUFuY2VzdG9yc0ZvclN0eWxlUmVjYWxjKCk7CiAKKyAgICBSZWZQdHI8Tm9k
ZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWZQ
dHI8Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIFBzZXVkb0lkIGN1c3RvbVBzZXVkb0lkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0Mjc2KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vZGVPclN0cmlu
Zy5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIlRleHQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWZQdHI8Tm9kZT4gY29udmVydE5vZGVzT3JTdHJp
bmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JT
dHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChub2RlT3JTdHJpbmdW
ZWN0b3IuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZlY3RvcjxS
ZWY8Tm9kZT4+IG5vZGVzOwotICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZU9y
U3RyaW5nVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2Rl
T3JTdHJpbmdWZWN0b3IpIHsKLSAgICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBu
b2Rlcy51bmNoZWNrZWRBcHBlbmQoVGV4dDo6Y3JlYXRlKGNvbnRleHQuZG9jdW1lbnQoKSwgbm9k
ZU9yU3RyaW5nLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBl
bmQobm9kZU9yU3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChub2Rlcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURk1v
dmUobm9kZXMuZmlyc3QoKSk7Ci0KLSAgICBhdXRvIG5vZGVUb1JldHVybiA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShjb250ZXh0LmRvY3VtZW50KCkpOwotICAgIGZvciAoYXV0byYgbm9kZSA6
IG5vZGVzKSB7Ci0gICAgICAgIGlmICghbm9kZVRvUmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBl
YykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIFdURk1v
dmUobm9kZVRvUmV0dXJuKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkocmV2aXNpb24gMjA0Mjc2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGVPclN0cmluZy5oCShub25leGlzdGVudCkKQEAgLTEsMTYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIE5vZGVPclN0cmluZ19oCi0jZGVmaW5lIE5vZGVPclN0cmluZ19o
Ci0KLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOb2RlT3JTdHJpbmcgewotcHVibGljOgotICAg
IGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIFN0cmluZywKLSAgICAgICAgTm9kZQotICAgIH07
Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgICAgIDogbV90
eXBlKFR5cGU6OlN0cmluZykKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdHJpbmcu
aW1wbCgpOwotICAgICAgICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2Rl
T3JTdHJpbmcoTm9kZSogbm9kZSkKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6Tm9kZSkKLSAgICB7
Ci0gICAgICAgIG1fZGF0YS5ub2RlID0gbm9kZTsKLSAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigp
OwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQot
ICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5z
dHJpbmcgPSBvdGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+
cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAg
ICAgICAgICAgbV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1f
ZGF0YS5ub2RlLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgTm9kZU9yU3RyaW5nKE5vZGVPclN0cmluZyYmIG90aGVyKQotICAgICAgICA6IG1fdHlw
ZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAg
ICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBzdGQ6OmV4
Y2hhbmdlKG90aGVyLm1fZGF0YS5zdHJpbmcsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gc3Rk
OjpleGNoYW5nZShvdGhlci5tX2RhdGEubm9kZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KGNvbnN0
IE5vZGVPclN0cmluZyYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIp
Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0KLSAg
ICAgICAgbV90eXBlID0gb3RoZXIubV90eXBlOwotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmcgPSBv
dGhlci5tX2RhdGEuc3RyaW5nOwotICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAg
bV9kYXRhLm5vZGUgPSBvdGhlci5tX2RhdGEubm9kZTsKLSAgICAgICAgICAgIG1fZGF0YS5ub2Rl
LT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyYgb3BlcmF0b3I9KE5vZGVPclN0cmlu
ZyYmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVmRGF0YSgpOwotCi0gICAgICAgIG1fdHlw
ZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2Fz
ZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0gc3RkOjpleGNoYW5n
ZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IHN0ZDo6ZXhj
aGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgfk5vZGVPclN0
cmluZygpCi0gICAgewotICAgICAgICBkZXJlZkRhdGEoKTsKLSAgICB9Ci0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIE5vZGUmIG5vZGUoKSBjb25zdCB7
IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6Tm9kZSk7IEFTU0VSVChtX2RhdGEubm9kZSk7IHJldHVy
biAqbV9kYXRhLm5vZGU7IH0KLSAgICBTdHJpbmdJbXBsJiBzdHJpbmcoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gVHlwZTo6U3RyaW5nKTsgQVNTRVJUKG1fZGF0YS5zdHJpbmcpOyByZXR1cm4g
Km1fZGF0YS5zdHJpbmc7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBkZXJlZkRhdGEoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJp
bmc6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLnN0cmluZykKLSAgICAgICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nLT5kZXJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6Tm9kZToKLSAgICAgICAgICAgIGlmIChtX2RhdGEubm9kZSkKLSAgICAgICAgICAgICAgICBt
X2RhdGEubm9kZS0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgVHlwZSBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmc7Ci0gICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgfSBtX2RhdGE7Ci19OwotCi1SZWZQdHI8
Tm9kZT4gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoTm9kZSYgY29udGV4dCwgVmVjdG9y
PE5vZGVPclN0cmluZz4mJiwgRXhjZXB0aW9uQ29kZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBOb2RlT3JTdHJpbmdfaApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0Mjc2KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDgtMDggIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3Jp
cHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJp
YW50LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCisyMDE2LTA4LTA2ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJp
bmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1ZhcmlhbnQuY3BwOgorICAgICAgICBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3IgdGhlIGlu
aXRpYWwgc3RhdGUgb2Ygc3RkOjp2YXJpYW50IGFuZCB1c2luZworICAgICAgICBtYWtlVmlzaXRv
ciBmb3IgdmlzaXRpbmcuCisKIDIwMTYtMDgtMDggIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFNvbWUgRVdTIGNvbnNvbGUgbG9ncyBkb2Vzbid0IGdvIHRv
IGxvZyBmaWxlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIw
NDI3NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDYgKzc2LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9UZW1wb3JhcnlDaGFuZ2UuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL1VuaXF1ZVJlZi5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvVmFyaWFudC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVmVj
dG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9XVEZTdHJpbmcuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1dlYWtQdHIuY3BwCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0Mjc2
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDI2ICsyNiw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVk
ZSAiQ291bnRlcnMuaCIKLSNpbmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dl
ci5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAorVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKK3sKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBk
b3VibGU+IHYxOworICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNU
X1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAg
IFQoKSA6IHZhbHVlKDE1KSB7IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBz
dGQ6OnZhcmlhbnQ8VCwgaW50PiB2MjsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09IDAp
OworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+
IHZhcmlhbnQgPSAxOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAwKTsKLSAg
ICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7
CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBF
Q1RfVFJVRSgqc3RkOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9U
UlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZB
TFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisKKyAgICB2YXJp
YW50ID0gMS4wOworICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsKKyAgICBF
WFBFQ1RfVFJVRShzdGQ6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9U
UlVFKCpzdGQ6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RS
VUUoc3RkOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9G
QUxTRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdU
Rl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRh
bDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IFZhcmlhbnQ7Ci0KICAgICBlbnVtIGNsYXNz
IFR5cGUgewogICAgICAgICBOb25lLAogICAgICAgICBJbnQsCkBAIC01Myw3ICs3OSw2IEBAIFRF
U1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKICAgICAgICAgU3RyaW5nLAogICAgIH07CiAK
LQogICAgIHN0cnVjdCBWaXNpdG9yIHsKICAgICAgICAgVmlzaXRvcihUeXBlJiB0KQogICAgICAg
ICAgICAgOiB0eXBlKHQpCkBAIC02OSw0NyArOTQsNzUgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFz
aWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAgIFZhcmlhbnQg
dmFyaWFudCA9IDg7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSks
IHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQg
PSA4OworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNU
X1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsKLSAgICBz
dGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3Rk
Ojp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpG
bG9hdCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9ICJoZWxsbyI7Ci0gICAgc3RkOjpleHBl
cmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQo
VmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09
IHR5cGUpOwogfQogCi1URVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCitU
RVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvcikKIHsKLSAgICB0eXBlZGVm
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPiwgaW50PiBWYXJpYW50OwotIAotICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgewor
ICAgICAgICBOb25lLAorICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0LAorICAgICAgICBTdHJp
bmcsCisgICAgfTsKIAotICAgIHsKLSAgICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIFZhcmlhbnQg
diA9IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCi0g
ICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3Ry
dWN0aW9uQ291bnQpOwotICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwotICAgIH0KLSAgICAKLSAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKLSAg
ICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9u
Q291bnQpOworICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsm
XShpbnQpIHsgdHlwZSA9IFR5cGU6OkludDsgfSwKKyAgICAgICAgWyZdKGZsb2F0KSB7IHR5cGUg
PSBUeXBlOjpGbG9hdDsgfSwKKyAgICAgICAgWyZdKFN0cmluZykgeyB0eXBlID0gVHlwZTo6U3Ry
aW5nOyB9CisgICAgKTsKKworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZh
cmlhbnQgPSA4OworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgRVhQRUNU
X1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gMS4wZjsKKyAgICBz
dGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0
ID09IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gImhlbGxvIjsKKyAgICBzdGQ6OnZpc2l0KHZp
c2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsK
IH0KIAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291bnRpbmcpCi17Ci0gICAgdHlwZWRlZiBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50Owor
Ly9URVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCisvL3sKKy8vICAgIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKy8vCisvLyAg
ICB7CisvLyAgICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisvLyAgICAgICAgc3RkOjp2YXJpYW50PHN0ZDo6dW5p
cXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworLy8KKy8vICAgICAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKy8vICAgICAgICBFWFBFQ1RfRVEoMHUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworLy8gICAg
fQorLy8gICAgCisvLyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKy8vICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisvL30KIAorVEVTVChXVEZfVmFy
aWFudCwgUmVmUHRyKQorewogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAg
ICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudCB2ID0gcmVmOwor
ICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKICAg
ICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMTE3LDEwICsxNzAsMjEgQEAgVEVTVChXVEZf
VmFyaWFudCwgUmVmQ291bnRpbmcpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwog
ICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYgPSBX
VEZNb3ZlKHJlZik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50
PiB2ID0gV1RGTW92ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKIH0KIAorLy9URVNUKFdURl9WYXJpYW50
LCBSZWYpCisvL3sKKy8vICAgIHsKKy8vICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworLy8gICAg
ICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKy8vICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmPFJl
ZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKy8vICAgIH0KKy8vCisvLyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisvL30K
KwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285648</attachid>
            <date>2016-08-09 10:44:59 -0700</date>
            <delta_ts>2016-08-09 10:56:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160809104324.patch</filename>
            <type>text/plain</type>
            <size>45881</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDI1IEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQorI2RlZmluZSBfX05PRVhDRVBUIG5vZXhjZXB0
CisjZGVmaW5lIF9fTk9FWENFUFRfKF9fZXhjZXB0aW9uKSBub2V4Y2VwdChfX2V4Y2VwdGlvbikK
ICNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKLSAgICBD
UkFTSCgpOwotfQotc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFz
aF9pZihib29sIHRlc3QpewotICAgIHJldHVybiAhdGVzdCA/IHRydWUgOiAoX19jcmFzaF9oZWxw
ZXIodGVzdCksIGZhbHNlKTsKLX0KLQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTiguLi4pIENS
QVNIKCk7Ci0jZGVmaW5lIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX19wcmVkaWNh
dGUsIF9fZXhjZXB0aW9uKSBfX2NvbnN0ZXhwcl9jcmFzaF9pZigoX19wcmVkaWNhdGUpKTsKKyNk
ZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRp
b247IENSQVNIKCk7IH0gd2hpbGUgKDApOworI2RlZmluZSBfX05PRVhDRVBUCisjZGVmaW5lIF9f
Tk9FWENFUFRfKC4uLikKICNlbmRpZgogCiBzdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewpAQCAt
MTE3LDYgKzExMywxMSBAQCBwdWJsaWM6CiAgICAge30KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKXsKKyAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRf
dmFyaWFudF9hY2Nlc3Mod2hhdF9hcmcpKQorfQorCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgogc3RydWN0IF9fdHlwZV9pbmRl
eF9oZWxwZXI7CiAKQEAgLTMwNiw3ICszMDcsNyBAQCBzdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxfSGVhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGFyZ2V0LHR5cGVuYW1lIC4uLiBf
QXJncz4KIHN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlewogICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIG5vZXhjZXB0KF9UYXJnZXQoc3RkOjpkZWNs
dmFsPF9BcmdzPigpLi4uKSk7CisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxl
PF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgpAQCAtNTM1LDcgKzUzNiw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsK
ICAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAgIHJldHVybiBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKICAgICB9Ci0gICAgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAvKmNvbnN0
ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CiAgICAg
fQogICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7CkBAIC02MjYsNyArNjI3LDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jl
c3QuLi4+ewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKICAgICB9
CiAKLSAgICBjb25zdGV4cHIgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4p
eworICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwogICAg
IH0KICAgICAKQEAgLTY0NSw3ICs2NDYsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxf
UmVzdC4uLj57CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25z
dGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUm
JiBfX2dldF9ycmVmKAorICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAogICAgICAgICBpbl9wbGFj
ZV9pbmRleF90PF9JbmRleD4pewogICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5f
cGxhY2U8X0luZGV4LTE+KTsKICAgICB9CkBAIC0xMTY5LDEwICsxMTcwLDEwIEBAIHN0cnVjdCBf
X2JhY2t1cF9zdG9yYWdlX29wc3sKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSBfU3RvcmFnZT4KIHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9T
dG9yYWdlPnsKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2Ug
KiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKKyAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29u
c3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewogICAgICAgICBfX1RIUk9XX0VYQ0VQ
VElPTihzdGQ6OmJhZF9hbGxvYygpKTsKICAgICB9OwotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopeworICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5j
KF9TdG9yYWdlICopewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygp
KTsKICAgICB9OwogfTsKQEAgLTE1MjksMjcgKzE1MzAsMjcgQEAgY2xhc3MgdmFyaWFudDoKIAog
cHVibGljOgogICAgIGNvbnN0ZXhwciB2YXJpYW50KCkKLSAgICAgICAgbm9leGNlcHQobm9leGNl
cHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgorICAg
ICAgICBfX05PRVhDRVBUXyhub2V4Y2VwdCh0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTwwLF9UeXBl
cy4uLj46Ol9fdHlwZSgpKSk6CiAgICAgICAgIF9fc3RvcmFnZShpbl9wbGFjZTwwPiksCiAgICAg
ICAgIF9faW5kZXgoMCkKICAgICB7fQogCiAgICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKQotICAgIG5vZXhjZXB0
KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Cisg
ICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4u
Lj46OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQog
ICAgIHt9CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3By
aXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CiAgICAgCiAgICAgY29uc3RleHBy
IHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3Ro
ZXIpCi0gICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CisgICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJp
YW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAg
IF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKICAgICB7fQogCiAgICAgY29uc3Rl
eHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBf
X290aGVyKT1kZWxldGU7CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJp
YW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBub2V4Y2VwdChf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUp
OgorICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVj
dDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChf
X290aGVyKSkKICAgICB7fQogCkBAIC0xNjY4LDcgKzE2NjksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiYKLSAgICAg
ICAgICAgIF9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbjxf
VHlwZXMuLi4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7CiAgICAgICAg
IGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewogICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKICAgICAgICAgfQpAQCAtMTY5NCwxMCArMTY5NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwogICAgIH0KICAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHR7CisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7CiAgICAgICAgIHJldHVybiBfX2luZGV4
PT0tMTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgpIGNvbnN0IG5vZXhj
ZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gX19pbmRleDsKICAgICB9CiAKQEAgLTE3MDYsNyArMTcwNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgog
ICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSwKICAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQotICAgICAgICAg
ICAgJl9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46
OnZhbHVlKSB7CisgICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICAgICAgaWYgKF9fb3RoZXIuaW5k
ZXgoKSA9PSBpbmRleCgpKSB7CiAgICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtp
bmRleCgpXSgqdGhpcyxfX290aGVyKTsKQEAgLTE3MjQsMTAgKzE3MjUsMTAgQEAgY2xhc3MgdmFy
aWFudDw+ewogcHVibGljOgogICAgIHZhcmlhbnQoKT1kZWxldGU7CiAgICAgCi0gICAgY29uc3Rl
eHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0eworICAgIGNv
bnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25z
dCBfX05PRVhDRVBUewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC0xNzM4LDcgKzE3
MzksNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgogdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUKLXN3YXAodmFyaWFudDxfVHlw
ZXMuLi4+ICZfX2xocywgdmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jocykgbm9leGNlcHQoCitzd2Fw
KHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19saHMsIHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9f
Tk9FWENFUFRfKAogICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVl
KSB7CiAgICAgX19saHMuc3dhcChfX3Jocyk7CiB9CkBAIC0xNzgzLDI2ICsxNzg0LDM0IEBAIGNv
bnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldCh2YXJpYW50PF9UeXAKIAogdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9J
RihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGlu
ZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSk7CisgICAgcmV0dXJuICooCisgICAgICAgIChfSW5kZXghPV9f
di5pbmRleCgpKQorICAgICAgICAgICAgPyAmX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJC
YWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKQorICAgICAgICAgICAgOiAmX192YXJpYW50X2FjY2Vz
c29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxfVHlw
ZXMuLi4+JiBfX3YpewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4
IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBn
ZXQiKSk7Ci0gICAgcmV0dXJuICooJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KF9fdikpOworICAgIHJldHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgo
KSkKKyAgICAgICAgICAgID8gJl9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigiQmFkIHZhcmlhbnQgaW5k
ZXggaW4gZ2V0IikKKyAgICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5
cGVzLi4uPjo6Z2V0KF9fdikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgo
KSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAg
cmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KHN0ZDo6bW92
ZShfX3YpKTsKKyAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+
OjpnZXQoCisgICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFy
aWFudF9hY2Nlc3M8aW50PigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjpt
b3ZlKF9fdikpCisgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgogY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYg
X192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192Lmlu
ZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwot
ICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6
Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVz
Li4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFk
X3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0
ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+CkBAIC0xODI5LDcgKzE4MzgsNyBAQCBjb25zdGV4cHIgc3RkOjphZGRf
cG9pbnRlcl90PHR5cGVuYW1lIF9fCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZSh2YXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgbm9leGNlcHR7Citjb25zdGV4cHIgYm9vbCBob2xkc19h
bHRlcm5hdGl2ZSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKICAg
ICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlOwogfQogCkBAIC0xODY4LDggKzE4NzcsOSBAQCBjb25zdCB0eXBlbmFtZSBfX3Zpc2l0b3Jf
dGFibGU8X1Zpc2l0b3IsCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRv
cixfVHlwZXMuLi4+OjpfX3R5cGUKIHZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLHZhcmlhbnQ8
X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9f
di52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCksIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRpbmcg
b2YgZW1wdHkgdmFyaWFudCIpKTsKLSAgICByZXR1cm4gX192aXNpdG9yX3RhYmxlPF9WaXNpdG9y
LF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Cisg
ICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICA/IF9fdGhy
b3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlz
aXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikKKyAg
ICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5l
W19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KQEAgLTE5MzgsOCArMTk0OCw4IEBAIHRlbXBs
YXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAKIHN0cnVjdCBfX3Zpc2l0X2hlbHBl
cjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KICAgICBzdGF0aWMgY29uc3RleHByIHR5
cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+
OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4u
IF9fdil7Ci0gICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOworICAgIF9fdmlz
aXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7CisgICAgICAgIF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixf
VmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50Iik7CiAgICAg
fQogfTsKIApAQCAtMjA0MCwxNyArMjA1MCwyMSBAQCBzdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7CiAK
IHRlbXBsYXRlPD4KIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlPnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6Om1vbm9zdGF0ZSkgbm9leGNlcHR7CisgICAg
c2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjptb25vc3RhdGUpIF9fTk9FWENFUFR7CiAg
ICAgICAgIHJldHVybiA0MjsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgogc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50PF9UeXBlcy4uLj4+ewotICAg
IHNpemVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
ICZ2KSBub2V4Y2VwdCB7CisgICAgc2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjp2YXJp
YW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewogICAgICAgICByZXR1cm4gc3Rk
OjpoYXNoPHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4KICAgICAgICAgICAgICAgIGV4cGVyaW1l
bnRhbDo6dmlzaXQoZXhwZXJpbWVudGFsOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKICAgICB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAor
MjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxh
Y2UgTm9kZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9j
cHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgorICAgICAgICAqIGRvbS9Db250YWluZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVwZW5kKToKKyAgICAgICAgKiBkb20vQ29u
dGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0aCk6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+IGFuZCBtb3ZlIGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlCisgICAg
ICAgIGludG8gTm9kZS4KKworICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAxNi0wOC0wOCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3Vy
ZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGlzIGNvcnJlY3QgaW5zaWRlIElubGluZVRleHRCb3gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmlu
Zy5jcHAKICAgICBkb20vTm9kZVJhcmVEYXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNw
cAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0Mjg0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQ1LDggKzI4NDUsNiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5Mjgg
LyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyog
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8q
IEZvcm1hdENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICov
OyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3
RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFC
NDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggKi87IH07Ci0JCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NF
QUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRD
NTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAw
RTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFD
MUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAv
KiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3RDRDOTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhl
YWRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAg
LTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZl
cnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1
IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXRDb252ZXJ0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVPclN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250
ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8q
IEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTM1
LDggKzI0MTMxLDYgQEAKIAkJCQkxQTc1MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJh
dG9yLmlkbCAqLywKIAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAq
LywKIAkJCQk4NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJ
CTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdD
RUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2
NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9kZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBF
ODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0Qz
RjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLApAQCAtMjY4OTUsNyArMjY4ODksNiBA
QAogCQkJCTg1NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBO
b2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0
MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0Yw
MEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJC
MTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMw
Njk4LDcgKzMwNjkxLDYgQEAKIAkJCQlBOEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0
ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8qIE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEwMTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
T3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMs
MTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQor
VmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3RyaW5nPiByZXN1bHQ7Cisg
ICAgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKTsKICAgICAgICAgaWYgKGF1dG8qIG5v
ZGUgPSBqc0R5bmFtaWNDYXN0PEpTTm9kZSo+KHZhbHVlKSkKLSAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoJm5vZGUtPndyYXBwZWQoKSk7CisgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKG5vZGUtPndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDggQEAKICNpZm5kZWYgSlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05vZGVPclN0cmlu
Z19oCiAKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEpTQzo6RXhlY1N0YXRlJik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8c3RkOjp2YXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUm
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4NzIsMTggQEAgdW5zaWduZWQg
Q29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJldHVybiBzdGQ6OmRpc3RhbmNl
KGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0KIAotdm9pZCBDb250YWluZXJO
b2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPHN0ZDo6
dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1v
dmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hpbGQoKm5vZGUsIGVjKTsKIH0KIAotdm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0
b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5v
ZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwg
ZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2Rl
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
cmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZmly
c3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVtZW50KiBsYXN0RWxlbWVudENoaWxkKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKLSAgICB2b2lk
IGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxO
b2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBlbnN1cmVQcmVJ
bnNlcnRpb25WYWxpZGl0eShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlv
bkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAy
MDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRlICJOb2RlLmNwcCIKICNpbmNsdWRlICJO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuY3BwIgotI2lu
Y2x1ZGUgIk5vZGVPclN0cmluZy5jcHAiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmNwcCIKICNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmNwcCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmNwcCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgpAQCAtNDM4LDE4ICs0MzcsMTcgQEAgYm9vbCBO
b2RlOjphcHBlbmRDaGlsZChOb2RlJiBuZXdDaGlsZCwgRQogICAgIHJldHVybiBkb3duY2FzdDxD
b250YWluZXJOb2RlPigqdGhpcykuYXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9y
U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiBub2RlT3JTdHJpbmdWZWN0
b3IpCitzdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZy
b21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4s
IFN0cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXQ7
Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAg
ICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9y
U3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2RlU2V0LmFkZCgmbm9kZU9y
U3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwor
ICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25zdCBS
ZWY8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5hZGQoY29uc3RfY2FzdDxOb2RlKj4obm9kZS5wdHIo
KSkpOyB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICApOworCisgICAgZm9y
IChjb25zdCBhdXRvJiB2YXJpYW50IDogdmVjdG9yKQorICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOwogCiAgICAgcmV0dXJuIG5vZGVTZXQ7CiB9CkBAIC00NzIsNyArNDcwLDM0
IEBAIHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RGb2xsb3dpbmdTaWJsaW4KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBu
b2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPE5vZGU+IE5vZGU6
OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CisgICAgbm9kZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iuc2l6ZSgpKTsKKworICAgIGF1dG8g
dmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShSZWY8Tm9kZT4mIG5vZGUp
IHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGUpOyB9LAorICAgICAgICBbJl0oU3RyaW5nJiBz
dHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBz
dHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBub2RlT3JTdHJp
bmdWZWN0b3IpCisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisKKyAgICBp
ZiAobm9kZXMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0
KCkpOworCisgICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUo
ZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICAgICAgaWYg
KCFub2RlVG9SZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShub2RlVG9SZXR1cm4pOworfQor
Cit2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQp
CkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmlu
Zz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3Vz
U2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNl
dCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhp
cywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29u
dmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBl
Yyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1
MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFy
ZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJsZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMp
OwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3Ry
aW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPHN0
ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTAyLDE0ICs1MjcsMTQgQEAgdm9pZCBO
b2RlOjphZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIAogICAgIGF1dG8gbm9kZVNldCA9IG5v
ZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVj
dG9yKTsKICAgICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5n
Tm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnRO
b2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZN
b3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKCpub2RlLCB2aWFibGVOZXh0
U2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmlu
Zz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50
KQpAQCAtNTE4LDcgKzU0Myw3IEBAIHZvaWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVP
clN0cmkKICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9y
U3RyaW5nVmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2li
bGluZyA9IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7
CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywg
V1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVy
dE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIERvY3Vt
ZW50LmggYWxzbyBkZXBlbmRzIG9uIGl0LgogI2RlZmluZSBEVU1QX05PREVfU1RBVElTVElDUyAw
CkBAIC01MSw3ICs1Miw2IEBAIGNsYXNzIE1hdGhNTFF1YWxpZmllZE5hbWU7CiBjbGFzcyBOYW1l
ZE5vZGVNYXA7CiBjbGFzcyBOb2RlTGlzdDsKIGNsYXNzIE5vZGVMaXN0c05vZGVEYXRhOwotY2xh
c3MgTm9kZU9yU3RyaW5nOwogY2xhc3MgTm9kZVJhcmVEYXRhOwogY2xhc3MgUXVhbGlmaWVkTmFt
ZTsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTIwOCw5ICsyMDgsOSBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogbmV4dEVsZW1lbnRTaWJsaW5nKCkgY29uc3Q7CiAKICAgICAvLyBGcm9tIHRoZSBDaGls
ZE5vZGUgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NoaWxkbm9kZQotICAgIHZvaWQg
YmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHJlcGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8
Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRo
KFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQpAQCAtNjYxLDYgKzY2MSw4IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFu
Z2VUeXBlKSB7IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykg
fCBjaGFuZ2VUeXBlOyB9CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygp
OwogCisgICAgUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3Rv
cjxzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0
CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIw
NDI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
LSNpbmNsdWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+
IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2Rl
T3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYg
bm9kZU9yU3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZU9yU3RyaW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3Ry
aW5nOgotICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250
ZXh0LmRvY3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAg
bm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0g
ICAgICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9S
ZXR1cm4gPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAg
ICBmb3IgKGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+
YXBwZW5kQ2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDE2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2Rl
ZmluZSBOb2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3Ry
aW5nIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0g
ICAgICAgIE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7
Ci0gICAgfQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBl
KFR5cGU6Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAg
IG1fZGF0YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9k
ZU9yU3RyaW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0g
ICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAg
ICAgIG1fZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5v
ZGU7Ci0gICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhl
cikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2Rh
dGEuc3RyaW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAg
ICBtX2RhdGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAg
IGRlcmVmRGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAg
ICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0
YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6
Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAg
ICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9w
ZXJhdG9yPShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09
ICZvdGhlcikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEo
KTsKLQotICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90
eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0
cmluZyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9k
YXRhLm5vZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0g
ICAgfQotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBO
b2RlJiBub2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQo
bV9kYXRhLm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3Ry
aW5nKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2Rh
dGEuc3RyaW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAg
IHZvaWQgZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAg
ICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0g
ICAgICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUp
Ci0gICAgICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAg
ICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9k
YXRhOwotfTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5v
ZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNDI4NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1
IEBACisyMDE2LTA4LTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
TmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBV
UkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKworMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJlcGxhY2UgTm9kZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3Ry
aW5nPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9u
YWwgdGVzdHMgZm9yIHRoZSBpbml0aWFsIHN0YXRlIG9mIHN0ZDo6dmFyaWFudCBhbmQgdXNpbmcK
KyAgICAgICAgbWFrZVZpc2l0b3IgZm9yIHZpc2l0aW5nLgorCiAyMDE2LTA4LTA5ICBLb25zdGFu
dGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICB3ZWJraXQtZ3RrIHRh
cmJhbGwgZmFpbHMgdG8gYnVpbGQgZHVlIHRvIG1pc3NpbmcgZmlsZXMKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA0Mjg0KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBzZXQo
VGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1N0cmlu
Z1ZpZXcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1RlbXBvcmFyeUNo
YW5nZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVW5pcXVlUmVmLmNw
cAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9WYXJpYW50LmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9WZWN0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL1dURlN0cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvV2Vha1B0ci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1ZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1ZhcmlhbnQuY3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjYgKzI2LDUyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJDb3VudGVycy5oIgotI2luY2x1ZGUg
Ik1vdmVPbmx5LmgiCiAjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCitURVNUKFdURl9WYXJpYW50LCBJbml0
aWFsKQoreworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdjE7CisgICAgRVhQRUNUX1RS
VUUodjEuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYxKSA9
PSAwKTsKKworICAgIHN0cnVjdCBUIHsKKyAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQorICAg
ICAgICBpbnQgdmFsdWU7CisgICAgfTsKKworICAgIHN0ZDo6dmFyaWFudDxULCBpbnQ+IHYyOwor
ICAgIEVYUEVDVF9UUlVFKHYyLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpn
ZXQ8VD4odjIpLnZhbHVlID09IDE1KTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQmFzaWMpCiB7
Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAx
OworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNU
X1RSVUUodmFyaWFudC5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJp
bWVudGFsOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6Omdl
dDxpbnQ+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmdldF9pZjxpbnQ+
KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4odmFy
aWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxkb3VibGU+KHZhcmlhbnQpKTsKKworICAgIHZhcmlhbnQgPSAxLjA7CisgICAgRVhQRUNUX1RS
VUUodmFyaWFudC5pbmRleCgpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGRvdWJs
ZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGRvdWJsZT4o
dmFyaWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldF9pZjxpbnQ+KHZhcmlh
bnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
ZG91YmxlPih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8aW50Pih2YXJpYW50KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikK
IHsKLSAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0
cmluZz4gVmFyaWFudDsKLQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAg
ICAgICAgIEludCwKQEAgLTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNp
dG9yKQogICAgICAgICBTdHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3Igewog
ICAgICAgICBWaXNpdG9yKFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDMw
ICs5NCw2MCBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5
cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudCB2YXJpYW50ID0gODsKLSAgICBzdGQ6OmV4
cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2YXJp
YW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjp2aXNpdChWaXNp
dG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7
CisKKworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwg
dmFyaWFudCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CisKKworICAg
IHZhcmlhbnQgPSAiaGVsbG8iOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFu
dCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOworfQorCitURVNUKFdU
Rl9WYXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvcikKK3sKKyAgICBlbnVtIGNsYXNzIFR5
cGUgeworICAgICAgICBOb25lLAorICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0LAorICAgICAg
ICBTdHJpbmcsCisgICAgfTsKKworICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CisKKyAgICBh
dXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oaW50KSB7IHR5cGUg
PSBUeXBlOjpJbnQ7IH0sCisgICAgICAgIFsmXShmbG9hdCkgeyB0eXBlID0gVHlwZTo6RmxvYXQ7
IH0sCisgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQorICAgICk7
CisKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAg
ICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6Oklu
dCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgc3RkOjpleHBlcmltZW50
YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRv
ciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAog
ICAgIHZhcmlhbnQgPSAiaGVsbG8iOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNp
dG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwog
ICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAogVEVTVChXVEZfVmFy
aWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmlt
ZW50YWw6OnZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+LCBpbnQ+IFZhcmlhbnQ7Ci0gCiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
VGVzdGluZ1Njb3BlIHNjb3BlOwogCiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0
ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAg
VmFyaWFudCB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZN
b3ZlKHVuaXF1ZVB0cik7CiAKICAgICAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CiAgICAgICAgIEVYUEVDVF9FUSgwdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CkBAIC0xMDIs
MTQgKzE1NywxMiBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiAg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlv
bkNvdW50KTsKIH0KIAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291bnRpbmcpCitURVNUKFdURl9W
YXJpYW50LCBSZWZQdHIpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFu
dDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50OwotCiAgICAgewogICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAg
ICBWYXJpYW50IHYgPSByZWY7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50PiB2ID0gcmVmOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0xMTcsNyAr
MTcwLDE4IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZkNvdW50aW5nKQogICAgIHsKICAgICAgICAg
UmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAg
ICAgICAgVmFyaWFudCB2ID0gV1RGTW92ZShyZWYpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVm
UHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisK
K1RFU1QoV1RGX1ZhcmlhbnQsIFJlZikKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc3RkOjp2YXJpYW50
PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNT
RVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285649</attachid>
            <date>2016-08-09 10:56:53 -0700</date>
            <delta_ts>2016-08-09 11:08:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160809105519.patch</filename>
            <type>text/plain</type>
            <size>45869</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDI1IEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQorI2RlZmluZSBfX05PRVhDRVBUIG5vZXhjZXB0
CisjZGVmaW5lIF9fTk9FWENFUFRfKF9fZXhjZXB0aW9uKSBub2V4Y2VwdChfX2V4Y2VwdGlvbikK
ICNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKLSAgICBD
UkFTSCgpOwotfQotc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFz
aF9pZihib29sIHRlc3QpewotICAgIHJldHVybiAhdGVzdCA/IHRydWUgOiAoX19jcmFzaF9oZWxw
ZXIodGVzdCksIGZhbHNlKTsKLX0KLQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTiguLi4pIENS
QVNIKCk7Ci0jZGVmaW5lIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX19wcmVkaWNh
dGUsIF9fZXhjZXB0aW9uKSBfX2NvbnN0ZXhwcl9jcmFzaF9pZigoX19wcmVkaWNhdGUpKTsKKyNk
ZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRp
b247IENSQVNIKCk7IH0gd2hpbGUgKDApOworI2RlZmluZSBfX05PRVhDRVBUCisjZGVmaW5lIF9f
Tk9FWENFUFRfKC4uLikKICNlbmRpZgogCiBzdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewpAQCAt
MTE3LDYgKzExMywxMSBAQCBwdWJsaWM6CiAgICAge30KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKXsKKyAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRf
dmFyaWFudF9hY2Nlc3Mod2hhdF9hcmcpKQorfQorCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgogc3RydWN0IF9fdHlwZV9pbmRl
eF9oZWxwZXI7CiAKQEAgLTMwNiw3ICszMDcsNyBAQCBzdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxfSGVhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGFyZ2V0LHR5cGVuYW1lIC4uLiBf
QXJncz4KIHN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlewogICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIG5vZXhjZXB0KF9UYXJnZXQoc3RkOjpkZWNs
dmFsPF9BcmdzPigpLi4uKSk7CisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxl
PF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgpAQCAtNTM1LDcgKzUzNiw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsK
ICAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAgIHJldHVybiBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKICAgICB9Ci0gICAgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAvKmNvbnN0
ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CiAgICAg
fQogICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7CkBAIC02MjYsNyArNjI3LDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jl
c3QuLi4+ewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKICAgICB9
CiAKLSAgICBjb25zdGV4cHIgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4p
eworICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwogICAg
IH0KICAgICAKQEAgLTY0NSw3ICs2NDYsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxf
UmVzdC4uLj57CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25z
dGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUm
JiBfX2dldF9ycmVmKAorICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAogICAgICAgICBpbl9wbGFj
ZV9pbmRleF90PF9JbmRleD4pewogICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5f
cGxhY2U8X0luZGV4LTE+KTsKICAgICB9CkBAIC0xMTY5LDEwICsxMTcwLDEwIEBAIHN0cnVjdCBf
X2JhY2t1cF9zdG9yYWdlX29wc3sKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSBfU3RvcmFnZT4KIHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9T
dG9yYWdlPnsKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2Ug
KiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKKyAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29u
c3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewogICAgICAgICBfX1RIUk9XX0VYQ0VQ
VElPTihzdGQ6OmJhZF9hbGxvYygpKTsKICAgICB9OwotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopeworICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5j
KF9TdG9yYWdlICopewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygp
KTsKICAgICB9OwogfTsKQEAgLTE1MjksMjcgKzE1MzAsMjcgQEAgY2xhc3MgdmFyaWFudDoKIAog
cHVibGljOgogICAgIGNvbnN0ZXhwciB2YXJpYW50KCkKLSAgICAgICAgbm9leGNlcHQobm9leGNl
cHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgorICAg
ICAgICBfX05PRVhDRVBUXyhub2V4Y2VwdCh0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTwwLF9UeXBl
cy4uLj46Ol9fdHlwZSgpKSk6CiAgICAgICAgIF9fc3RvcmFnZShpbl9wbGFjZTwwPiksCiAgICAg
ICAgIF9faW5kZXgoMCkKICAgICB7fQogCiAgICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKQotICAgIG5vZXhjZXB0
KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Cisg
ICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4u
Lj46OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQog
ICAgIHt9CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3By
aXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CiAgICAgCiAgICAgY29uc3RleHBy
IHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3Ro
ZXIpCi0gICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CisgICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJp
YW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAg
IF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKICAgICB7fQogCiAgICAgY29uc3Rl
eHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBf
X290aGVyKT1kZWxldGU7CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJp
YW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBub2V4Y2VwdChf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUp
OgorICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVj
dDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChf
X290aGVyKSkKICAgICB7fQogCkBAIC0xNjY4LDcgKzE2NjksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiYKLSAgICAg
ICAgICAgIF9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbjxf
VHlwZXMuLi4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7CiAgICAgICAg
IGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewogICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKICAgICAgICAgfQpAQCAtMTY5NCwxMCArMTY5NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwogICAgIH0KICAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHR7CisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7CiAgICAgICAgIHJldHVybiBfX2luZGV4
PT0tMTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgpIGNvbnN0IG5vZXhj
ZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gX19pbmRleDsKICAgICB9CiAKQEAgLTE3MDYsNyArMTcwNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgog
ICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSwKICAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQotICAgICAgICAg
ICAgJl9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46
OnZhbHVlKSB7CisgICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICAgICAgaWYgKF9fb3RoZXIuaW5k
ZXgoKSA9PSBpbmRleCgpKSB7CiAgICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtp
bmRleCgpXSgqdGhpcyxfX290aGVyKTsKQEAgLTE3MjQsMTAgKzE3MjUsMTAgQEAgY2xhc3MgdmFy
aWFudDw+ewogcHVibGljOgogICAgIHZhcmlhbnQoKT1kZWxldGU7CiAgICAgCi0gICAgY29uc3Rl
eHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0eworICAgIGNv
bnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25z
dCBfX05PRVhDRVBUewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC0xNzM4LDcgKzE3
MzksNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgogdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUKLXN3YXAodmFyaWFudDxfVHlw
ZXMuLi4+ICZfX2xocywgdmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jocykgbm9leGNlcHQoCitzd2Fw
KHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19saHMsIHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9f
Tk9FWENFUFRfKAogICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVl
KSB7CiAgICAgX19saHMuc3dhcChfX3Jocyk7CiB9CkBAIC0xNzgzLDI2ICsxNzg0LDM0IEBAIGNv
bnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldCh2YXJpYW50PF9UeXAKIAogdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9J
RihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGlu
ZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSk7CisgICAgcmV0dXJuICooCisgICAgICAgIChfSW5kZXghPV9f
di5pbmRleCgpKQorICAgICAgICAgICAgPyAmX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJC
YWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKQorICAgICAgICAgICAgOiAmX192YXJpYW50X2FjY2Vz
c29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxfVHlw
ZXMuLi4+JiBfX3YpewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4
IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBn
ZXQiKSk7Ci0gICAgcmV0dXJuICooJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KF9fdikpOworICAgIHJldHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgo
KSkKKyAgICAgICAgICAgID8gJl9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigiQmFkIHZhcmlhbnQgaW5k
ZXggaW4gZ2V0IikKKyAgICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5
cGVzLi4uPjo6Z2V0KF9fdikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgo
KSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAg
cmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KHN0ZDo6bW92
ZShfX3YpKTsKKyAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+
OjpnZXQoCisgICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFy
aWFudF9hY2Nlc3M8aW50PigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjpt
b3ZlKF9fdikpCisgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgogY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYg
X192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192Lmlu
ZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwot
ICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6
Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVz
Li4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFk
X3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0
ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+CkBAIC0xODI5LDcgKzE4MzgsNyBAQCBjb25zdGV4cHIgc3RkOjphZGRf
cG9pbnRlcl90PHR5cGVuYW1lIF9fCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZSh2YXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgbm9leGNlcHR7Citjb25zdGV4cHIgYm9vbCBob2xkc19h
bHRlcm5hdGl2ZSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKICAg
ICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlOwogfQogCkBAIC0xODY4LDggKzE4NzcsOSBAQCBjb25zdCB0eXBlbmFtZSBfX3Zpc2l0b3Jf
dGFibGU8X1Zpc2l0b3IsCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRv
cixfVHlwZXMuLi4+OjpfX3R5cGUKIHZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLHZhcmlhbnQ8
X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9f
di52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCksIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRpbmcg
b2YgZW1wdHkgdmFyaWFudCIpKTsKLSAgICByZXR1cm4gX192aXNpdG9yX3RhYmxlPF9WaXNpdG9y
LF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Cisg
ICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICA/IF9fdGhy
b3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlz
aXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikKKyAg
ICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5l
W19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KQEAgLTE5MzgsOCArMTk0OCw4IEBAIHRlbXBs
YXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAKIHN0cnVjdCBfX3Zpc2l0X2hlbHBl
cjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KICAgICBzdGF0aWMgY29uc3RleHByIHR5
cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+
OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4u
IF9fdil7Ci0gICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOworICAgIF9fdmlz
aXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7CisgICAgICAgIF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixf
VmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50Iik7CiAgICAg
fQogfTsKIApAQCAtMjA0MCwxNyArMjA1MCwyMSBAQCBzdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7CiAK
IHRlbXBsYXRlPD4KIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlPnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6Om1vbm9zdGF0ZSkgbm9leGNlcHR7CisgICAg
c2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjptb25vc3RhdGUpIF9fTk9FWENFUFR7CiAg
ICAgICAgIHJldHVybiA0MjsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgogc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50PF9UeXBlcy4uLj4+ewotICAg
IHNpemVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
ICZ2KSBub2V4Y2VwdCB7CisgICAgc2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjp2YXJp
YW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewogICAgICAgICByZXR1cm4gc3Rk
OjpoYXNoPHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4KICAgICAgICAgICAgICAgIGV4cGVyaW1l
bnRhbDo6dmlzaXQoZXhwZXJpbWVudGFsOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKICAgICB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAor
MjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxh
Y2UgTm9kZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9j
cHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgorICAgICAgICAqIGRvbS9Db250YWluZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVwZW5kKToKKyAgICAgICAgKiBkb20vQ29u
dGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0aCk6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+IGFuZCBtb3ZlIGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlCisgICAg
ICAgIGludG8gTm9kZS4KKworICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAxNi0wOC0wOCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3Vy
ZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGlzIGNvcnJlY3QgaW5zaWRlIElubGluZVRleHRCb3gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmlu
Zy5jcHAKICAgICBkb20vTm9kZVJhcmVEYXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNw
cAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0Mjg0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQ1LDggKzI4NDUsNiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5Mjgg
LyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyog
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8q
IEZvcm1hdENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICov
OyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3
RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFC
NDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggKi87IH07Ci0JCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NF
QUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRD
NTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAw
RTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFD
MUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAv
KiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3RDRDOTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhl
YWRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAg
LTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZl
cnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1
IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXRDb252ZXJ0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVPclN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250
ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8q
IEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTM1
LDggKzI0MTMxLDYgQEAKIAkJCQkxQTc1MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJh
dG9yLmlkbCAqLywKIAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAq
LywKIAkJCQk4NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJ
CTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdD
RUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2
NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9kZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBF
ODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0Qz
RjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLApAQCAtMjY4OTUsNyArMjY4ODksNiBA
QAogCQkJCTg1NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBO
b2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0
MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0Yw
MEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJC
MTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMw
Njk4LDcgKzMwNjkxLDYgQEAKIAkJCQlBOEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0
ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8qIE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEwMTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
T3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMs
MTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQor
VmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3RyaW5nPiByZXN1bHQ7Cisg
ICAgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKTsKICAgICAgICAgaWYgKGF1dG8qIG5v
ZGUgPSBqc0R5bmFtaWNDYXN0PEpTTm9kZSo+KHZhbHVlKSkKLSAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoJm5vZGUtPndyYXBwZWQoKSk7CisgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKG5vZGUtPndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDggQEAKICNpZm5kZWYgSlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05vZGVPclN0cmlu
Z19oCiAKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEpTQzo6RXhlY1N0YXRlJik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8c3RkOjp2YXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUm
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4NzIsMTggQEAgdW5zaWduZWQg
Q29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJldHVybiBzdGQ6OmRpc3RhbmNl
KGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0KIAotdm9pZCBDb250YWluZXJO
b2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPHN0ZDo6
dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1v
dmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hpbGQoKm5vZGUsIGVjKTsKIH0KIAotdm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0
b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5v
ZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwg
ZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2Rl
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
cmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZmly
c3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVtZW50KiBsYXN0RWxlbWVudENoaWxkKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKLSAgICB2b2lk
IGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxO
b2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBlbnN1cmVQcmVJ
bnNlcnRpb25WYWxpZGl0eShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlv
bkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAy
MDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRlICJOb2RlLmNwcCIKICNpbmNsdWRlICJO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuY3BwIgotI2lu
Y2x1ZGUgIk5vZGVPclN0cmluZy5jcHAiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmNwcCIKICNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmNwcCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmNwcCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgpAQCAtNDM4LDE4ICs0MzcsMTcgQEAgYm9vbCBO
b2RlOjphcHBlbmRDaGlsZChOb2RlJiBuZXdDaGlsZCwgRQogICAgIHJldHVybiBkb3duY2FzdDxD
b250YWluZXJOb2RlPigqdGhpcykuYXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9y
U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiBub2RlT3JTdHJpbmdWZWN0
b3IpCitzdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZy
b21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4s
IFN0cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXQ7
Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAg
ICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9y
U3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2RlU2V0LmFkZCgmbm9kZU9y
U3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwor
ICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25zdCBS
ZWY8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5hZGQoY29uc3RfY2FzdDxOb2RlKj4obm9kZS5wdHIo
KSkpOyB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICApOworCisgICAgZm9y
IChjb25zdCBhdXRvJiB2YXJpYW50IDogdmVjdG9yKQorICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOwogCiAgICAgcmV0dXJuIG5vZGVTZXQ7CiB9CkBAIC00NzIsNyArNDcwLDM0
IEBAIHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RGb2xsb3dpbmdTaWJsaW4KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBu
b2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPE5vZGU+IE5vZGU6
OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CisgICAgbm9kZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iuc2l6ZSgpKTsKKworICAgIGF1dG8g
dmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShSZWY8Tm9kZT4mIG5vZGUp
IHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGUpOyB9LAorICAgICAgICBbJl0oU3RyaW5nJiBz
dHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBz
dHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBub2RlT3JTdHJp
bmdWZWN0b3IpCisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisKKyAgICBp
ZiAobm9kZXMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0
KCkpOworCisgICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUo
ZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICAgICAgaWYg
KCFub2RlVG9SZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gbm9kZVRvUmV0dXJuOworfQorCit2b2lkIE5v
ZGU6OmJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2Rl
T3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC00ODEs
NyArNTA2LDcgQEAgdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJgogICAg
IGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0
b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3VzU2libGluZyA9
IGZpcnN0UHJlY2VkaW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92
ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVz
T3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAg
aWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1MTgsNyBAQCB2
b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFyZW50LT5pbnNl
cnRCZWZvcmUoKm5vZGUsIHZpYWJsZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMpOwogfQogCi12
b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9y
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPHN0ZDo6dmFyaWFu
dDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgp
OwogICAgIGlmICghcGFyZW50KQpAQCAtNTAyLDE0ICs1MjcsMTQgQEAgdm9pZCBOb2RlOjphZnRl
cihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIAogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVU
cmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAg
ICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2Rl
U2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKG5vZGVP
clN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKCpub2RlLCB2aWFibGVOZXh0U2libGluZy5n
ZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJp
bmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6
cmVwbGFjZVdpdGgoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9k
ZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTE4
LDcgKzU0Myw3IEBAIHZvaWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVPclN0cmkKICAg
ICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVj
dG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9IGZp
cnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBh
dXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShu
b2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JT
dHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA0Mjg0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIERvY3VtZW50LmggYWxz
byBkZXBlbmRzIG9uIGl0LgogI2RlZmluZSBEVU1QX05PREVfU1RBVElTVElDUyAwCkBAIC01MSw3
ICs1Miw2IEBAIGNsYXNzIE1hdGhNTFF1YWxpZmllZE5hbWU7CiBjbGFzcyBOYW1lZE5vZGVNYXA7
CiBjbGFzcyBOb2RlTGlzdDsKIGNsYXNzIE5vZGVMaXN0c05vZGVEYXRhOwotY2xhc3MgTm9kZU9y
U3RyaW5nOwogY2xhc3MgTm9kZVJhcmVEYXRhOwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNz
IFJlbmRlckJveDsKQEAgLTIwOCw5ICsyMDgsOSBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogbmV4
dEVsZW1lbnRTaWJsaW5nKCkgY29uc3Q7CiAKICAgICAvLyBGcm9tIHRoZSBDaGlsZE5vZGUgLSBo
dHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NoaWxkbm9kZQotICAgIHZvaWQgYmVmb3JlKFZl
Y3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFmdGVyKFZl
Y3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlcGxhY2VX
aXRoKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJl
Zm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0
cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoKFZlY3Rvcjxz
dGQ6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gT3Ro
ZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQpAQCAtNjYxLDYgKzY2MSw4IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKSB7
IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VU
eXBlOyB9CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygpOwogCisgICAg
UmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxzdGQ6OnZh
cmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAgICAgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2Rl
T3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJU
ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rl
c09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYg
bm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAobm9kZU9y
U3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBW
ZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZU9yU3RyaW5n
IDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9yU3RyaW5nLnR5
cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5nOgotICAgICAg
ICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0LmRvY3VtZW50
KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9kZXMudW5jaGVj
a2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVy
biBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1
bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBmb3IgKGF1dG8m
IG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBwZW5kQ2hpbGQo
bm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmluZSBOb2RlT3JT
dHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5nIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAgICAgIE5vZGUK
LSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgICAg
ICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEuc3RyaW5nID0g
c3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0gICAgfQotCi0g
ICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5cGU6Ok5vZGUp
Ci0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1fZGF0YS5ub2Rl
LT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9yU3RyaW5nJiBv
dGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBt
X2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5z
dHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9k
ZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAg
ICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICAgICAg
OiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3RyaW5nID0g
c3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9k
ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9y
PShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRlcmVmRGF0YSgp
OwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dpdGNoIChtX3R5
cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEuc3Ry
aW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5zdHJpbmctPnJl
ZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAg
ICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAgICAgICBtX2Rh
dGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJhdG9yPShOb2Rl
T3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsKLQotICAgICAg
ICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAg
ICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9IHN0ZDo6
ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRhLm5vZGUgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIH5O
b2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAgfQotCi0gICAg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2RlJiBub2RlKCkg
Y29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9kYXRhLm5vZGUp
OyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5nKCkgY29uc3Qg
eyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEuc3RyaW5nKTsg
cmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgZGVyZWZE
YXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlw
ZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0gICAgICAgICAg
ICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgU3RyaW5n
SW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRhOwotfTsKLQot
UmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQs
IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDI4NCkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA4
LTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTmVlZCBhIHNob3J0
IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvVmFyaWFudC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKworMjAxNi0w
OC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxhY2UgTm9k
ZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9y
IHRoZSBpbml0aWFsIHN0YXRlIG9mIHN0ZDo6dmFyaWFudCBhbmQgdXNpbmcKKyAgICAgICAgbWFr
ZVZpc2l0b3IgZm9yIHZpc2l0aW5nLgorCiAyMDE2LTA4LTA5ICBLb25zdGFudGluIFRva2FyZXYg
IDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICB3ZWJraXQtZ3RrIHRhcmJhbGwgZmFpbHMg
dG8gYnVpbGQgZHVlIHRvIG1pc3NpbmcgZmlsZXMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjA0Mjg0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBzZXQoVGVzdFdURl9TT1VS
Q0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1RlbXBvcmFyeUNoYW5nZS5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVW5pcXVlUmVmLmNwcAorICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9WYXJpYW50LmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9WZWN0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL1dURlN0cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
V2Vha1B0ci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9W
YXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjYgKzI2LDUyIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKICNpbmNsdWRlICJDb3VudGVycy5oIgotI2luY2x1ZGUgIk1vdmVPbmx5Lmgi
CiAjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgewogCitURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQoreworICAg
IHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdjE7CisgICAgRVhQRUNUX1RSVUUodjEuaW5kZXgo
KSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYxKSA9PSAwKTsKKworICAg
IHN0cnVjdCBUIHsKKyAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQorICAgICAgICBpbnQgdmFs
dWU7CisgICAgfTsKKworICAgIHN0ZDo6dmFyaWFudDxULCBpbnQ+IHYyOworICAgIEVYUEVDVF9U
UlVFKHYyLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8VD4odjIpLnZh
bHVlID09IDE1KTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQmFzaWMpCiB7Ci0gICAgc3RkOjpl
eHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOworICAgIHN0ZDo6
dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFu
dC5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8
aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHZhcmlh
bnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVs
bHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlh
bnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZh
cmlhbnQpKTsKKworICAgIHZhcmlhbnQgPSAxLjA7CisgICAgRVhQRUNUX1RSVUUodmFyaWFudC5p
bmRleCgpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGRvdWJsZT4odmFyaWFudCkg
PT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0g
MS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxw
dHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJp
YW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJp
YW50KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIHsKLSAgICB0eXBl
ZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gVmFyaWFu
dDsKLQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIEludCwK
QEAgLTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgICAg
ICBTdHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3IgewogICAgICAgICBWaXNp
dG9yKFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDMwICs5NCw2MCBAQCBU
RVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpO
b25lOwogCi0gICAgVmFyaWFudCB2YXJpYW50ID0gODsKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6
dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2YXJpYW50PGludCwgZmxv
YXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2
YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CisKKworICAgIHZh
cmlhbnQgPSAxLjBmOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7Cisg
ICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CisKKworICAgIHZhcmlhbnQgPSAi
aGVsbG8iOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgRVhQ
RUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOworfQorCitURVNUKFdURl9WYXJpYW50LCBW
aXNpdG9yVXNpbmdNYWtlVmlzaXRvcikKK3sKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAg
ICBOb25lLAorICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0LAorICAgICAgICBTdHJpbmcsCisg
ICAgfTsKKworICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CisKKyAgICBhdXRvIHZpc2l0b3Ig
PSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oaW50KSB7IHR5cGUgPSBUeXBlOjpJbnQ7
IH0sCisgICAgICAgIFsmXShmbG9hdCkgeyB0eXBlID0gVHlwZTo6RmxvYXQ7IH0sCisgICAgICAg
IFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQorICAgICk7CisKKyAgICBzdGQ6
OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsK
IAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KFZp
c2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7
CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQg
PSAiaGVsbG8iOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2
YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9U
UlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAogVEVTVChXVEZfVmFyaWFudCwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6OnZhcmlh
bnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IFZh
cmlhbnQ7Ci0gCiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3Bl
IHNjb3BlOwogCiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlx
dWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFudCB2ID0g
V1RGTW92ZSh1bmlxdWVQdHIpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0
cik7CiAKICAgICAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
Ojpjb25zdHJ1Y3Rpb25Db3VudCk7CiAgICAgICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CkBAIC0xMDIsMTQgKzE1NywxMiBA
QCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiAgICAgRVhQRUNUX0VR
KDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKIH0K
IAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291bnRpbmcpCitURVNUKFdURl9WYXJpYW50LCBSZWZQ
dHIpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8UmVm
TG9nZ2VyPiwgaW50PiBWYXJpYW50OwotCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIp
OwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50IHYg
PSByZWY7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0g
cmVmOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0xMTcsNyArMTcwLDE4IEBAIFRF
U1QoV1RGX1ZhcmlhbnQsIFJlZkNvdW50aW5nKQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFu
dCB2ID0gV1RGTW92ZShyZWYpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dl
cj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJl
ZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1Zh
cmlhbnQsIFJlZikKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAg
IFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZjxSZWZMb2dn
ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJy
ZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285650</attachid>
            <date>2016-08-09 11:08:30 -0700</date>
            <delta_ts>2016-08-09 11:32:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160809110656.patch</filename>
            <type>text/plain</type>
            <size>45878</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDI1IEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQorI2RlZmluZSBfX05PRVhDRVBUIG5vZXhjZXB0
CisjZGVmaW5lIF9fTk9FWENFUFRfKF9fZXhjZXB0aW9uKSBub2V4Y2VwdChfX2V4Y2VwdGlvbikK
ICNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKLSAgICBD
UkFTSCgpOwotfQotc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFz
aF9pZihib29sIHRlc3QpewotICAgIHJldHVybiAhdGVzdCA/IHRydWUgOiAoX19jcmFzaF9oZWxw
ZXIodGVzdCksIGZhbHNlKTsKLX0KLQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTiguLi4pIENS
QVNIKCk7Ci0jZGVmaW5lIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX19wcmVkaWNh
dGUsIF9fZXhjZXB0aW9uKSBfX2NvbnN0ZXhwcl9jcmFzaF9pZigoX19wcmVkaWNhdGUpKTsKKyNk
ZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRp
b247IENSQVNIKCk7IH0gd2hpbGUgKDApOworI2RlZmluZSBfX05PRVhDRVBUCisjZGVmaW5lIF9f
Tk9FWENFUFRfKC4uLikKICNlbmRpZgogCiBzdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewpAQCAt
MTE3LDYgKzExMywxMSBAQCBwdWJsaWM6CiAgICAge30KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKXsKKyAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRf
dmFyaWFudF9hY2Nlc3Mod2hhdF9hcmcpKQorfQorCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgogc3RydWN0IF9fdHlwZV9pbmRl
eF9oZWxwZXI7CiAKQEAgLTMwNiw3ICszMDcsNyBAQCBzdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxfSGVhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGFyZ2V0LHR5cGVuYW1lIC4uLiBf
QXJncz4KIHN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlewogICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIG5vZXhjZXB0KF9UYXJnZXQoc3RkOjpkZWNs
dmFsPF9BcmdzPigpLi4uKSk7CisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxl
PF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgpAQCAtNTM1LDcgKzUzNiw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsK
ICAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAgIHJldHVybiBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKICAgICB9Ci0gICAgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAvKmNvbnN0
ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CiAgICAg
fQogICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7CkBAIC02MjYsNyArNjI3LDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jl
c3QuLi4+ewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKICAgICB9
CiAKLSAgICBjb25zdGV4cHIgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4p
eworICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwogICAg
IH0KICAgICAKQEAgLTY0NSw3ICs2NDYsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxf
UmVzdC4uLj57CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25z
dGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUm
JiBfX2dldF9ycmVmKAorICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAogICAgICAgICBpbl9wbGFj
ZV9pbmRleF90PF9JbmRleD4pewogICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5f
cGxhY2U8X0luZGV4LTE+KTsKICAgICB9CkBAIC0xMTY5LDEwICsxMTcwLDEwIEBAIHN0cnVjdCBf
X2JhY2t1cF9zdG9yYWdlX29wc3sKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSBfU3RvcmFnZT4KIHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9T
dG9yYWdlPnsKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2Ug
KiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKKyAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29u
c3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewogICAgICAgICBfX1RIUk9XX0VYQ0VQ
VElPTihzdGQ6OmJhZF9hbGxvYygpKTsKICAgICB9OwotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopeworICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5j
KF9TdG9yYWdlICopewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygp
KTsKICAgICB9OwogfTsKQEAgLTE1MjksMjcgKzE1MzAsMjcgQEAgY2xhc3MgdmFyaWFudDoKIAog
cHVibGljOgogICAgIGNvbnN0ZXhwciB2YXJpYW50KCkKLSAgICAgICAgbm9leGNlcHQobm9leGNl
cHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgorICAg
ICAgICBfX05PRVhDRVBUXyhub2V4Y2VwdCh0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTwwLF9UeXBl
cy4uLj46Ol9fdHlwZSgpKSk6CiAgICAgICAgIF9fc3RvcmFnZShpbl9wbGFjZTwwPiksCiAgICAg
ICAgIF9faW5kZXgoMCkKICAgICB7fQogCiAgICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKQotICAgIG5vZXhjZXB0
KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Cisg
ICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4u
Lj46OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQog
ICAgIHt9CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3By
aXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CiAgICAgCiAgICAgY29uc3RleHBy
IHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3Ro
ZXIpCi0gICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CisgICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJp
YW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAg
IF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKICAgICB7fQogCiAgICAgY29uc3Rl
eHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBf
X290aGVyKT1kZWxldGU7CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJp
YW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBub2V4Y2VwdChf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUp
OgorICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVj
dDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChf
X290aGVyKSkKICAgICB7fQogCkBAIC0xNjY4LDcgKzE2NjksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiYKLSAgICAg
ICAgICAgIF9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbjxf
VHlwZXMuLi4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7CiAgICAgICAg
IGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewogICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKICAgICAgICAgfQpAQCAtMTY5NCwxMCArMTY5NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwogICAgIH0KICAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHR7CisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7CiAgICAgICAgIHJldHVybiBfX2luZGV4
PT0tMTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgpIGNvbnN0IG5vZXhj
ZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gX19pbmRleDsKICAgICB9CiAKQEAgLTE3MDYsNyArMTcwNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgog
ICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSwKICAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQotICAgICAgICAg
ICAgJl9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46
OnZhbHVlKSB7CisgICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICAgICAgaWYgKF9fb3RoZXIuaW5k
ZXgoKSA9PSBpbmRleCgpKSB7CiAgICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtp
bmRleCgpXSgqdGhpcyxfX290aGVyKTsKQEAgLTE3MjQsMTAgKzE3MjUsMTAgQEAgY2xhc3MgdmFy
aWFudDw+ewogcHVibGljOgogICAgIHZhcmlhbnQoKT1kZWxldGU7CiAgICAgCi0gICAgY29uc3Rl
eHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0eworICAgIGNv
bnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25z
dCBfX05PRVhDRVBUewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC0xNzM4LDcgKzE3
MzksNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgogdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUKLXN3YXAodmFyaWFudDxfVHlw
ZXMuLi4+ICZfX2xocywgdmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jocykgbm9leGNlcHQoCitzd2Fw
KHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19saHMsIHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9f
Tk9FWENFUFRfKAogICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVl
KSB7CiAgICAgX19saHMuc3dhcChfX3Jocyk7CiB9CkBAIC0xNzgzLDI2ICsxNzg0LDM0IEBAIGNv
bnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldCh2YXJpYW50PF9UeXAKIAogdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9J
RihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGlu
ZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSk7CisgICAgcmV0dXJuICooCisgICAgICAgIChfSW5kZXghPV9f
di5pbmRleCgpKQorICAgICAgICAgICAgPyAmX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJC
YWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKQorICAgICAgICAgICAgOiAmX192YXJpYW50X2FjY2Vz
c29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxfVHlw
ZXMuLi4+JiBfX3YpewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4
IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBn
ZXQiKSk7Ci0gICAgcmV0dXJuICooJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KF9fdikpOworICAgIHJldHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgo
KSkKKyAgICAgICAgICAgID8gJl9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigiQmFkIHZhcmlhbnQgaW5k
ZXggaW4gZ2V0IikKKyAgICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5
cGVzLi4uPjo6Z2V0KF9fdikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgo
KSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAg
cmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KHN0ZDo6bW92
ZShfX3YpKTsKKyAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+
OjpnZXQoCisgICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFy
aWFudF9hY2Nlc3M8aW50PigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjpt
b3ZlKF9fdikpCisgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgogY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYg
X192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192Lmlu
ZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwot
ICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6
Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVz
Li4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFk
X3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0
ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+CkBAIC0xODI5LDcgKzE4MzgsNyBAQCBjb25zdGV4cHIgc3RkOjphZGRf
cG9pbnRlcl90PHR5cGVuYW1lIF9fCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZSh2YXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgbm9leGNlcHR7Citjb25zdGV4cHIgYm9vbCBob2xkc19h
bHRlcm5hdGl2ZSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKICAg
ICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlOwogfQogCkBAIC0xODY4LDggKzE4NzcsOSBAQCBjb25zdCB0eXBlbmFtZSBfX3Zpc2l0b3Jf
dGFibGU8X1Zpc2l0b3IsCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRv
cixfVHlwZXMuLi4+OjpfX3R5cGUKIHZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLHZhcmlhbnQ8
X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9f
di52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCksIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRpbmcg
b2YgZW1wdHkgdmFyaWFudCIpKTsKLSAgICByZXR1cm4gX192aXNpdG9yX3RhYmxlPF9WaXNpdG9y
LF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Cisg
ICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICA/IF9fdGhy
b3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlz
aXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikKKyAg
ICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5l
W19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KQEAgLTE5MzgsOCArMTk0OCw4IEBAIHRlbXBs
YXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAKIHN0cnVjdCBfX3Zpc2l0X2hlbHBl
cjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KICAgICBzdGF0aWMgY29uc3RleHByIHR5
cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+
OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4u
IF9fdil7Ci0gICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOworICAgIF9fdmlz
aXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7CisgICAgICAgIF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixf
VmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50Iik7CiAgICAg
fQogfTsKIApAQCAtMjA0MCwxNyArMjA1MCwyMSBAQCBzdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7CiAK
IHRlbXBsYXRlPD4KIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlPnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6Om1vbm9zdGF0ZSkgbm9leGNlcHR7CisgICAg
c2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjptb25vc3RhdGUpIF9fTk9FWENFUFR7CiAg
ICAgICAgIHJldHVybiA0MjsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgogc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50PF9UeXBlcy4uLj4+ewotICAg
IHNpemVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
ICZ2KSBub2V4Y2VwdCB7CisgICAgc2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjp2YXJp
YW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewogICAgICAgICByZXR1cm4gc3Rk
OjpoYXNoPHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4KICAgICAgICAgICAgICAgIGV4cGVyaW1l
bnRhbDo6dmlzaXQoZXhwZXJpbWVudGFsOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKICAgICB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAor
MjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxh
Y2UgTm9kZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9j
cHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgorICAgICAgICAqIGRvbS9Db250YWluZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVwZW5kKToKKyAgICAgICAgKiBkb20vQ29u
dGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0aCk6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+IGFuZCBtb3ZlIGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlCisgICAg
ICAgIGludG8gTm9kZS4KKworICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAxNi0wOC0wOCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3Vy
ZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGlzIGNvcnJlY3QgaW5zaWRlIElubGluZVRleHRCb3gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmlu
Zy5jcHAKICAgICBkb20vTm9kZVJhcmVEYXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNw
cAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0Mjg0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQ1LDggKzI4NDUsNiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5Mjgg
LyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyog
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8q
IEZvcm1hdENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICov
OyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3
RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFC
NDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggKi87IH07Ci0JCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NF
QUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRD
NTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAw
RTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFD
MUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAv
KiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3RDRDOTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhl
YWRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAg
LTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZl
cnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1
IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXRDb252ZXJ0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVPclN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250
ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8q
IEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTM1
LDggKzI0MTMxLDYgQEAKIAkJCQkxQTc1MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJh
dG9yLmlkbCAqLywKIAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAq
LywKIAkJCQk4NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJ
CTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdD
RUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2
NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9kZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBF
ODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0Qz
RjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLApAQCAtMjY4OTUsNyArMjY4ODksNiBA
QAogCQkJCTg1NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBO
b2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0
MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0Yw
MEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJC
MTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMw
Njk4LDcgKzMwNjkxLDYgQEAKIAkJCQlBOEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0
ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8qIE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEwMTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
T3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMs
MTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQor
VmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3RyaW5nPiByZXN1bHQ7Cisg
ICAgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKTsKICAgICAgICAgaWYgKGF1dG8qIG5v
ZGUgPSBqc0R5bmFtaWNDYXN0PEpTTm9kZSo+KHZhbHVlKSkKLSAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoJm5vZGUtPndyYXBwZWQoKSk7CisgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKG5vZGUtPndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDggQEAKICNpZm5kZWYgSlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05vZGVPclN0cmlu
Z19oCiAKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEpTQzo6RXhlY1N0YXRlJik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8c3RkOjp2YXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUm
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4NzIsMTggQEAgdW5zaWduZWQg
Q29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJldHVybiBzdGQ6OmRpc3RhbmNl
KGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0KIAotdm9pZCBDb250YWluZXJO
b2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPHN0ZDo6
dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1v
dmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hpbGQoKm5vZGUsIGVjKTsKIH0KIAotdm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0
b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5v
ZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwg
ZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2Rl
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
cmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZmly
c3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVtZW50KiBsYXN0RWxlbWVudENoaWxkKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKLSAgICB2b2lk
IGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxO
b2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBlbnN1cmVQcmVJ
bnNlcnRpb25WYWxpZGl0eShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlv
bkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAy
MDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRlICJOb2RlLmNwcCIKICNpbmNsdWRlICJO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuY3BwIgotI2lu
Y2x1ZGUgIk5vZGVPclN0cmluZy5jcHAiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmNwcCIKICNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmNwcCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmNwcCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgpAQCAtNDM4LDE4ICs0MzcsMTcgQEAgYm9vbCBO
b2RlOjphcHBlbmRDaGlsZChOb2RlJiBuZXdDaGlsZCwgRQogICAgIHJldHVybiBkb3duY2FzdDxD
b250YWluZXJOb2RlPigqdGhpcykuYXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9y
U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiBub2RlT3JTdHJpbmdWZWN0
b3IpCitzdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZy
b21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4s
IFN0cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXQ7
Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAg
ICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9y
U3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2RlU2V0LmFkZCgmbm9kZU9y
U3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwor
ICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25zdCBS
ZWY8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5hZGQoY29uc3RfY2FzdDxOb2RlKj4obm9kZS5wdHIo
KSkpOyB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICApOworCisgICAgZm9y
IChjb25zdCBhdXRvJiB2YXJpYW50IDogdmVjdG9yKQorICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOwogCiAgICAgcmV0dXJuIG5vZGVTZXQ7CiB9CkBAIC00NzIsNyArNDcwLDM0
IEBAIHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RGb2xsb3dpbmdTaWJsaW4KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBu
b2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPE5vZGU+IE5vZGU6
OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CisgICAgbm9kZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iuc2l6ZSgpKTsKKworICAgIGF1dG8g
dmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShSZWY8Tm9kZT4mIG5vZGUp
IHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGUpOyB9LAorICAgICAgICBbJl0oU3RyaW5nJiBz
dHJpbmcpIHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBz
dHJpbmcpKTsgfQorICAgICk7CisKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBub2RlT3JTdHJp
bmdWZWN0b3IpCisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisKKyAgICBp
ZiAobm9kZXMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0
KCkpOworCisgICAgYXV0byBub2RlVG9SZXR1cm4gPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUo
ZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICAgICAgaWYg
KCFub2RlVG9SZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShub2RlVG9SZXR1cm4pOworfQor
Cit2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQp
CkBAIC00ODEsNyArNTA2LDcgQEAgdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmlu
Zz4mJgogICAgIGF1dG8gbm9kZVNldCA9IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JT
dHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVjdG9yKTsKICAgICBhdXRvIHZpYWJsZVByZXZpb3Vz
U2libGluZyA9IGZpcnN0UHJlY2VkaW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNl
dCk7CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhp
cywgV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29u
dmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBl
Yyk7CiAgICAgaWYgKGVjIHx8ICFub2RlKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5Myw3ICs1
MTgsNyBAQCB2b2lkIE5vZGU6OmJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmCiAgICAgcGFy
ZW50LT5pbnNlcnRCZWZvcmUoKm5vZGUsIHZpYWJsZVByZXZpb3VzU2libGluZy5nZXQoKSwgZWMp
OwogfQogCi12b2lkIE5vZGU6OmFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3Ry
aW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPHN0
ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50KQpAQCAtNTAyLDE0ICs1MjcsMTQgQEAgdm9pZCBO
b2RlOjphZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIAogICAgIGF1dG8gbm9kZVNldCA9IG5v
ZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3Iobm9kZU9yU3RyaW5nVmVj
dG9yKTsKICAgICBhdXRvIHZpYWJsZU5leHRTaWJsaW5nID0gZmlyc3RGb2xsb3dpbmdTaWJsaW5n
Tm90SW5Ob2RlU2V0KCp0aGlzLCBub2RlU2V0KTsKIAotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnRO
b2Rlc09yU3RyaW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3Rvciks
IGVjKTsKKyAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZN
b3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKICAgICBpZiAoZWMgfHwgIW5vZGUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKCpub2RlLCB2aWFibGVOZXh0
U2libGluZy5nZXQoKSwgZWMpOwogfQogCi12b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmlu
Zz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50
KQpAQCAtNTE4LDcgKzU0Myw3IEBAIHZvaWQgTm9kZTo6cmVwbGFjZVdpdGgoVmVjdG9yPE5vZGVP
clN0cmkKICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9y
U3RyaW5nVmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2li
bGluZyA9IGZpcnN0Rm9sbG93aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7
CiAKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywg
V1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVy
dE5vZGVzT3JTdHJpbmdzSW50b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUg
PHd0Zi9WYXJpYW50Lmg+CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIERvY3Vt
ZW50LmggYWxzbyBkZXBlbmRzIG9uIGl0LgogI2RlZmluZSBEVU1QX05PREVfU1RBVElTVElDUyAw
CkBAIC01MSw3ICs1Miw2IEBAIGNsYXNzIE1hdGhNTFF1YWxpZmllZE5hbWU7CiBjbGFzcyBOYW1l
ZE5vZGVNYXA7CiBjbGFzcyBOb2RlTGlzdDsKIGNsYXNzIE5vZGVMaXN0c05vZGVEYXRhOwotY2xh
c3MgTm9kZU9yU3RyaW5nOwogY2xhc3MgTm9kZVJhcmVEYXRhOwogY2xhc3MgUXVhbGlmaWVkTmFt
ZTsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTIwOCw5ICsyMDgsOSBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogbmV4dEVsZW1lbnRTaWJsaW5nKCkgY29uc3Q7CiAKICAgICAvLyBGcm9tIHRoZSBDaGls
ZE5vZGUgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NoaWxkbm9kZQotICAgIHZvaWQg
YmVmb3JlKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGFmdGVyKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHJlcGxhY2VXaXRoKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGJlZm9yZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWZ0ZXIoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8
Tm9kZT4sIFN0cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRo
KFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQpAQCAtNjYxLDYgKzY2MSw4IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFu
Z2VUeXBlKSB7IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykg
fCBjaGFuZ2VUeXBlOyB9CiAgICAgdm9pZCB1cGRhdGVBbmNlc3RvcnNGb3JTdHlsZVJlY2FsYygp
OwogCisgICAgUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3Rv
cjxzdGQ6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBQc2V1ZG9JZCBjdXN0b21Qc2V1ZG9JZCgpIGNvbnN0CiAg
ICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5jcHAJKHJldmlzaW9uIDIwNDI4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJOb2RlT3JTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNp
bmNsdWRlICJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPE5vZGU+IGNv
bnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUmIGNvbnRleHQsIFZlY3RvcjxOb2RlT3JT
dHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAobm9kZU9yU3RyaW5nVmVjdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG5vZGVPclN0cmluZ1ZlY3Rvci5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9k
ZU9yU3RyaW5nIDogbm9kZU9yU3RyaW5nVmVjdG9yKSB7Ci0gICAgICAgIHN3aXRjaCAobm9kZU9y
U3RyaW5nLnR5cGUoKSkgewotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6U3RyaW5n
OgotICAgICAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFRleHQ6OmNyZWF0ZShjb250ZXh0
LmRvY3VtZW50KCksIG5vZGVPclN0cmluZy5zdHJpbmcoKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTm9kZU9yU3RyaW5nOjpUeXBlOjpOb2RlOgotICAgICAgICAgICAgbm9k
ZXMudW5jaGVja2VkQXBwZW5kKG5vZGVPclN0cmluZy5ub2RlKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCi0gICAg
ICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwotCi0gICAgYXV0byBub2RlVG9SZXR1
cm4gPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoY29udGV4dC5kb2N1bWVudCgpKTsKLSAgICBm
b3IgKGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBpZiAoIW5vZGVUb1JldHVybi0+YXBw
ZW5kQ2hpbGQobm9kZSwgZWMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
ICAgIHJldHVybiBXVEZNb3ZlKG5vZGVUb1JldHVybik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDE2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb2RlT3JTdHJpbmdfaAotI2RlZmlu
ZSBOb2RlT3JTdHJpbmdfaAotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZU9yU3RyaW5n
IHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBTdHJpbmcsCi0gICAg
ICAgIE5vZGUKLSAgICB9OwotCi0gICAgTm9kZU9yU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotICAgICAgICA6IG1fdHlwZShUeXBlOjpTdHJpbmcpCi0gICAgewotICAgICAgICBtX2RhdGEu
c3RyaW5nID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLnN0cmluZy0+cmVmKCk7Ci0g
ICAgfQotCi0gICAgTm9kZU9yU3RyaW5nKE5vZGUqIG5vZGUpCi0gICAgICAgIDogbV90eXBlKFR5
cGU6Ok5vZGUpCi0gICAgewotICAgICAgICBtX2RhdGEubm9kZSA9IG5vZGU7Ci0gICAgICAgIG1f
ZGF0YS5ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoY29uc3QgTm9kZU9y
U3RyaW5nJiBvdGhlcikKLSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAg
ICAgICAgICBtX2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAg
IG1fZGF0YS5zdHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VHlwZTo6Tm9kZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7
Ci0gICAgICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlT3JTdHJpbmcmJiBvdGhlcikK
LSAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBtX2RhdGEu
c3RyaW5nID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEuc3RyaW5nLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBt
X2RhdGEubm9kZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLm5vZGUsIG51bGxwdHIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcm
IG9wZXJhdG9yPShjb25zdCBOb2RlT3JTdHJpbmcmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYg
KHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIGRl
cmVmRGF0YSgpOwotCi0gICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKLSAgICAgICAgc3dp
dGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBt
X2RhdGEuc3RyaW5nID0gb3RoZXIubV9kYXRhLnN0cmluZzsKLSAgICAgICAgICAgIG1fZGF0YS5z
dHJpbmctPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9k
ZToKLSAgICAgICAgICAgIG1fZGF0YS5ub2RlID0gb3RoZXIubV9kYXRhLm5vZGU7Ci0gICAgICAg
ICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcmIG9wZXJh
dG9yPShOb2RlT3JTdHJpbmcmJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZv
dGhlcikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICBkZXJlZkRhdGEoKTsK
LQotICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmlu
ZyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgbV9kYXRh
Lm5vZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIH5Ob2RlT3JTdHJpbmcoKQotICAgIHsKLSAgICAgICAgZGVyZWZEYXRhKCk7Ci0gICAg
fQotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBOb2Rl
JiBub2RlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6Ok5vZGUpOyBBU1NFUlQobV9k
YXRhLm5vZGUpOyByZXR1cm4gKm1fZGF0YS5ub2RlOyB9Ci0gICAgU3RyaW5nSW1wbCYgc3RyaW5n
KCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0cmluZyk7IEFTU0VSVChtX2RhdGEu
c3RyaW5nKTsgcmV0dXJuICptX2RhdGEuc3RyaW5nOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZv
aWQgZGVyZWZEYXRhKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAg
IGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaWYgKG1fZGF0YS5zdHJpbmcpCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBpZiAobV9kYXRhLm5vZGUpCi0g
ICAgICAgICAgICAgICAgbV9kYXRhLm5vZGUtPmRlcmVmKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAg
ICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBOb2RlKiBub2RlOwotICAgIH0gbV9kYXRh
OwotfTsKLQotUmVmUHRyPE5vZGU+IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKE5vZGUm
IGNvbnRleHQsIFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTm9kZU9yU3RyaW5nX2gKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
NDI4NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDE2LTA4LTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTmVl
ZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwg
KE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KworMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
cGxhY2UgTm9kZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5n
PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcDoKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwg
dGVzdHMgZm9yIHRoZSBpbml0aWFsIHN0YXRlIG9mIHN0ZDo6dmFyaWFudCBhbmQgdXNpbmcKKyAg
ICAgICAgbWFrZVZpc2l0b3IgZm9yIHZpc2l0aW5nLgorCiAyMDE2LTA4LTA5ICBLb25zdGFudGlu
IFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICB3ZWJraXQtZ3RrIHRhcmJh
bGwgZmFpbHMgdG8gYnVpbGQgZHVlIHRvIG1pc3NpbmcgZmlsZXMKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA0Mjg0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBzZXQoVGVz
dFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1N0cmluZ1Zp
ZXcuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1RlbXBvcmFyeUNoYW5n
ZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVW5pcXVlUmVmLmNwcAor
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9WYXJpYW50LmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9WZWN0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL1dURlN0cmluZy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvV2Vha1B0ci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ZhcmlhbnQuY3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjYgKzI2LDUyIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJDb3VudGVycy5oIgotI2luY2x1ZGUgIk1v
dmVPbmx5LmgiCiAjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCitURVNUKFdURl9WYXJpYW50LCBJbml0aWFs
KQoreworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdjE7CisgICAgRVhQRUNUX1RSVUUo
djEuaW5kZXgoKSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYxKSA9PSAw
KTsKKworICAgIHN0cnVjdCBUIHsKKyAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQorICAgICAg
ICBpbnQgdmFsdWU7CisgICAgfTsKKworICAgIHN0ZDo6dmFyaWFudDxULCBpbnQ+IHYyOworICAg
IEVYUEVDVF9UUlVFKHYyLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8
VD4odjIpLnZhbHVlID09IDE1KTsKK30KKwogVEVTVChXVEZfVmFyaWFudCwgQmFzaWMpCiB7Ci0g
ICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwor
ICAgIHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RS
VUUodmFyaWFudC5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVu
dGFsOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxp
bnQ+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmdldF9pZjxpbnQ+KHZh
cmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4odmFyaWFu
dCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxp
bnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxk
b3VibGU+KHZhcmlhbnQpKTsKKworICAgIHZhcmlhbnQgPSAxLjA7CisgICAgRVhQRUNUX1RSVUUo
dmFyaWFudC5pbmRleCgpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGRvdWJsZT4o
dmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGRvdWJsZT4odmFy
aWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldF9pZjxpbnQ+KHZhcmlhbnQp
ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91
YmxlPih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
aW50Pih2YXJpYW50KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIHsK
LSAgICB0eXBlZGVmIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmlu
Zz4gVmFyaWFudDsKLQogICAgIGVudW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAg
ICAgIEludCwKQEAgLTUzLDcgKzc5LDYgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9y
KQogICAgICAgICBTdHJpbmcsCiAgICAgfTsKIAotCiAgICAgc3RydWN0IFZpc2l0b3IgewogICAg
ICAgICBWaXNpdG9yKFR5cGUmIHQpCiAgICAgICAgICAgICA6IHR5cGUodCkKQEAgLTY5LDMwICs5
NCw2MCBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5cGUg
PSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudCB2YXJpYW50ID0gODsKLSAgICBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2YXJpYW50
PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjp2aXNpdChWaXNpdG9y
KHR5cGUpLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CisK
KworICAgIHZhcmlhbnQgPSAxLjBmOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFy
aWFudCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CisKKworICAgIHZh
cmlhbnQgPSAiaGVsbG8iOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7
CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOworfQorCitURVNUKFdURl9W
YXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvcikKK3sKKyAgICBlbnVtIGNsYXNzIFR5cGUg
eworICAgICAgICBOb25lLAorICAgICAgICBJbnQsCisgICAgICAgIEZsb2F0LAorICAgICAgICBT
dHJpbmcsCisgICAgfTsKKworICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CisKKyAgICBhdXRv
IHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oaW50KSB7IHR5cGUgPSBU
eXBlOjpJbnQ7IH0sCisgICAgICAgIFsmXShmbG9hdCkgeyB0eXBlID0gVHlwZTo6RmxvYXQ7IH0s
CisgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQorICAgICk7CisK
KyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBz
dGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9
PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6
OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAogICAg
IHZhcmlhbnQgPSAiaGVsbG8iOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9y
KHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAg
IEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIAogVEVTVChXVEZfVmFyaWFu
dCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50
YWw6OnZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+
LCBpbnQ+IFZhcmlhbnQ7Ci0gCiAgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVz
dGluZ1Njb3BlIHNjb3BlOwogCiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFy
aWFudCB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZNb3Zl
KHVuaXF1ZVB0cik7CiAKICAgICAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CiAgICAgICAgIEVYUEVDVF9FUSgwdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CkBAIC0xMDIsMTQg
KzE1NywxMiBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiAgICAg
RVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKIH0KIAotVEVTVChXVEZfVmFyaWFudCwgUmVmQ291bnRpbmcpCitURVNUKFdURl9WYXJp
YW50LCBSZWZQdHIpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxS
ZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiBWYXJpYW50OwotCiAgICAgewogICAgICAgICBSZWZMb2dn
ZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBW
YXJpYW50IHYgPSByZWY7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwg
aW50PiB2ID0gcmVmOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0xMTcsNyArMTcw
LDE4IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZkNvdW50aW5nKQogICAgIHsKICAgICAgICAgUmVm
TG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAg
ICAgVmFyaWFudCB2ID0gV1RGTW92ZShyZWYpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RF
U1QoV1RGX1ZhcmlhbnQsIFJlZikKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJl
ZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285653</attachid>
            <date>2016-08-09 11:32:48 -0700</date>
            <delta_ts>2016-08-09 13:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160638-20160809113113.patch</filename>
            <type>text/plain</type>
            <size>45888</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA2MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Vmlz
aXRvcjo6VmlzaXRvcik6CisgICAgICAgIChXVEY6Om1ha2VWaXNpdG9yKToKKyAgICAgICAgQWRk
IFdURjo6bWFrZVZpc2l0b3IoKSB3aGljaCB0YWtlcyBhIGxpc3Qgb2YgbGFtYmRhcyB0byB1c2UK
KyAgICAgICAgYW4gYW4gb3ZlcmxvYWQgc2V0IGZvciBhIHZpc2l0b3Igb2JqZWN0LgorCisgICAg
ICAgIEFsc28sIHJlLWV4cG9ydCBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCAoYW5kIGhlbHBl
cnMpIGluIHRoZSBzdGQKKyAgICAgICAgbmFtZXNwYWNlIHVzaW5nIHR5cGUgYWxpYXNpbmcuCisK
KyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICBNYWtlIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50IHdvcmsgaW4gV2ViQ29yZS4KKwogMjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdURiBuZWVkcyBhIHZhcmlhbnQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
Ly8gVGhpcyB3YXMgdXNlZCB0byBkZWNsYXJlIGFuZCBkZWZpbmUgYSBzdGF0aWMgbG9jYWwgdmFy
aWFibGUgKHN0YXRpYyBUOykgc28gdGhhdAogLy8gIGl0IHdhcyBsZWFrZWQgc28gdGhhdCBpdHMg
ZGVzdHJ1Y3RvcnMgd2VyZSBub3QgY2FsbGVkIGF0IGV4aXQuCkBAIC0zMDksNiArMzEwLDM2IEBA
IGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gVmlzaXRvciBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8yNTMzODc5NS9pcy10aGVyZS1hLW5hbWUtZm9yLXRoaXMtdHVwbGUtY3JlYXRpb24taWRp
b20KKwordGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzLi4uIEI+CitzdHJ1Y3QgVmlzaXRvciA6IFZp
c2l0b3I8QT4sIFZpc2l0b3I8Qi4uLj4geworICAgIFZpc2l0b3IoQSBhLCBCLi4uIGIpCisgICAg
ICAgIDogVmlzaXRvcjxBPihhKQorICAgICAgICAsIFZpc2l0b3I8Qi4uLj4oYi4uLikKKyAgICB7
CisgICAgfQorCisgICAgdXNpbmcgVmlzaXRvcjxBPjo6b3BlcmF0b3IgKCk7CisgICAgdXNpbmcg
VmlzaXRvcjxCLi4uPjo6b3BlcmF0b3IgKCk7Cit9OworICAKK3RlbXBsYXRlIDxjbGFzcyBBPgor
c3RydWN0IFZpc2l0b3I8QT4gOiBBIHsKKyAgICBWaXNpdG9yKEEgYSkKKyAgICAgICAgOiBBKGEp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIEE6Om9wZXJhdG9yKCk7Cit9OworIAordGVtcGxh
dGUgPGNsYXNzLi4uIEY+CithdXRvIG1ha2VWaXNpdG9yKEYuLi4gZikKK3sKKyAgICByZXR1cm4g
VmlzaXRvcjxGLi4uPihmLi4uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM3Miw2ICs0MDMs
MTQgQEAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogICAgIHJldHVy
biBtb3ZlKGZvcndhcmQ8VD4odmFsdWUpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyB2YXJpYW50ID0gc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8VHlwZXMuLi4+
OworCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0OwordXNpbmcgc3RkOjpleHBlcmltZW50
YWw6OmdldF9pZjsKK3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTsK
K3VzaW5nIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdDsKKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAK
ICNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
Pih2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8bmV3PgogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNDgsMzAgKzQ5LDI1IEBACiAjaW5j
bHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KIAorI2lmIENPTVBJTEVS
KE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQy
NDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUyMikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisjZW5kaWYKKwogbmFtZXNw
YWNlIHN0ZCB7CiBuYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKIAogI2lmIENPTVBJTEVSX1NVUFBP
UlRTKEVYQ0VQVElPTlMpCi0KICNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24p
IHRocm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9O
X0lGKF9fcHJlZGljYXRlLCBfX2V4Y2VwdGlvbikgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAo
KF9fcHJlZGljYXRlKSkgeyBcCi0gICAgICAgICAgICB0aHJvdyBfX2V4Y2VwdGlvbjsgXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoMCk7IFwKLQorI2RlZmluZSBfX05PRVhDRVBUIG5vZXhjZXB0
CisjZGVmaW5lIF9fTk9FWENFUFRfKF9fZXhjZXB0aW9uKSBub2V4Y2VwdChfX2V4Y2VwdGlvbikK
ICNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NyYXNoX2hlbHBlcihib29sKXsKLSAgICBD
UkFTSCgpOwotfQotc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2NvbnN0ZXhwcl9jcmFz
aF9pZihib29sIHRlc3QpewotICAgIHJldHVybiAhdGVzdCA/IHRydWUgOiAoX19jcmFzaF9oZWxw
ZXIodGVzdCksIGZhbHNlKTsKLX0KLQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTiguLi4pIENS
QVNIKCk7Ci0jZGVmaW5lIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX19wcmVkaWNh
dGUsIF9fZXhjZXB0aW9uKSBfX2NvbnN0ZXhwcl9jcmFzaF9pZigoX19wcmVkaWNhdGUpKTsKKyNk
ZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRp
b247IENSQVNIKCk7IH0gd2hpbGUgKDApOworI2RlZmluZSBfX05PRVhDRVBUCisjZGVmaW5lIF9f
Tk9FWENFUFRfKC4uLikKICNlbmRpZgogCiBzdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewpAQCAt
MTE3LDYgKzExMywxMSBAQCBwdWJsaWM6CiAgICAge30KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKXsKKyAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRf
dmFyaWFudF9hY2Nlc3Mod2hhdF9hcmcpKQorfQorCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgogc3RydWN0IF9fdHlwZV9pbmRl
eF9oZWxwZXI7CiAKQEAgLTMwNiw3ICszMDcsNyBAQCBzdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxfSGVhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGFyZ2V0LHR5cGVuYW1lIC4uLiBf
QXJncz4KIHN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlewogICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIG5vZXhjZXB0KF9UYXJnZXQoc3RkOjpkZWNs
dmFsPF9BcmdzPigpLi4uKSk7CisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxl
PF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgpAQCAtNTM1LDcgKzUzNiw3IEBAIHVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsK
ICAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7CiAgICAgICAgIHJldHVybiBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKICAgICB9Ci0gICAgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKKyAgICAvKmNvbnN0
ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKICAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7CiAgICAg
fQogICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7CkBAIC02MjYsNyArNjI3LDcgQEAgdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jl
c3QuLi4+ewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKICAgICB9
CiAKLSAgICBjb25zdGV4cHIgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4p
eworICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pewogICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwogICAg
IH0KICAgICAKQEAgLTY0NSw3ICs2NDYsNyBAQCB1bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxf
UmVzdC4uLj57CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25z
dGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUm
JiBfX2dldF9ycmVmKAorICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAogICAgICAgICBpbl9wbGFj
ZV9pbmRleF90PF9JbmRleD4pewogICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5f
cGxhY2U8X0luZGV4LTE+KTsKICAgICB9CkBAIC0xMTY5LDEwICsxMTcwLDEwIEBAIHN0cnVjdCBf
X2JhY2t1cF9zdG9yYWdlX29wc3sKIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSBfU3RvcmFnZT4KIHN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9T
dG9yYWdlPnsKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2Ug
KiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKKyAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29u
c3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewogICAgICAgICBfX1RIUk9XX0VYQ0VQ
VElPTihzdGQ6OmJhZF9hbGxvYygpKTsKICAgICB9OwotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopeworICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5j
KF9TdG9yYWdlICopewogICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygp
KTsKICAgICB9OwogfTsKQEAgLTE1MjksMjcgKzE1MzAsMjcgQEAgY2xhc3MgdmFyaWFudDoKIAog
cHVibGljOgogICAgIGNvbnN0ZXhwciB2YXJpYW50KCkKLSAgICAgICAgbm9leGNlcHQobm9leGNl
cHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgorICAg
ICAgICBfX05PRVhDRVBUXyhub2V4Y2VwdCh0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTwwLF9UeXBl
cy4uLj46Ol9fdHlwZSgpKSk6CiAgICAgICAgIF9fc3RvcmFnZShpbl9wbGFjZTwwPiksCiAgICAg
ICAgIF9faW5kZXgoMCkKICAgICB7fQogCiAgICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKQotICAgIG5vZXhjZXB0
KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Cisg
ICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4u
Lj46OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQog
ICAgIHt9CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3By
aXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CiAgICAgCiAgICAgY29uc3RleHBy
IHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3Ro
ZXIpCi0gICAgbm9leGNlcHQoX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CisgICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJp
YW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAg
IF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKICAgICB7fQogCiAgICAgY29uc3Rl
eHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBf
X290aGVyKT1kZWxldGU7CiAKICAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJp
YW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBub2V4Y2VwdChf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUp
OgorICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVj
dDxfVHlwZXMuLi4+Ojp2YWx1ZSk6CiAgICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChf
X290aGVyKSkKICAgICB7fQogCkBAIC0xNjY4LDcgKzE2NjksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiYKLSAgICAg
ICAgICAgIF9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbjxf
VHlwZXMuLi4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7CiAgICAgICAg
IGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewogICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKICAgICAgICAgfQpAQCAtMTY5NCwxMCArMTY5NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwogICAgIH0KICAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHR7CisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7CiAgICAgICAgIHJldHVybiBfX2luZGV4
PT0tMTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgpIGNvbnN0IG5vZXhj
ZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gX19pbmRleDsKICAgICB9CiAKQEAgLTE3MDYsNyArMTcwNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgog
ICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSwKICAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQotICAgICAgICAg
ICAgJl9fb3RoZXIpIG5vZXhjZXB0KF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46
OnZhbHVlKSB7CisgICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICAgICAgaWYgKF9fb3RoZXIuaW5k
ZXgoKSA9PSBpbmRleCgpKSB7CiAgICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtp
bmRleCgpXSgqdGhpcyxfX290aGVyKTsKQEAgLTE3MjQsMTAgKzE3MjUsMTAgQEAgY2xhc3MgdmFy
aWFudDw+ewogcHVibGljOgogICAgIHZhcmlhbnQoKT1kZWxldGU7CiAgICAgCi0gICAgY29uc3Rl
eHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0eworICAgIGNv
bnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0eworICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25z
dCBfX05PRVhDRVBUewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC0xNzM4LDcgKzE3
MzksNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgogdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUKLXN3YXAodmFyaWFudDxfVHlw
ZXMuLi4+ICZfX2xocywgdmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jocykgbm9leGNlcHQoCitzd2Fw
KHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19saHMsIHZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9f
Tk9FWENFUFRfKAogICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVl
KSB7CiAgICAgX19saHMuc3dhcChfX3Jocyk7CiB9CkBAIC0xNzgzLDI2ICsxNzg0LDM0IEBAIGNv
bnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldCh2YXJpYW50PF9UeXAKIAogdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgX19DT05TVF9FWFBSX1RIUk9XX0VYQ1BFVElPTl9J
RihfSW5kZXghPV9fdi5pbmRleCgpLCBiYWRfdmFyaWFudF9hY2Nlc3MoIkJhZCB2YXJpYW50IGlu
ZGV4IGluIGdldCIpKTsKLSAgICByZXR1cm4gKigmX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSk7CisgICAgcmV0dXJuICooCisgICAgICAgIChfSW5kZXghPV9f
di5pbmRleCgpKQorICAgICAgICAgICAgPyAmX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJC
YWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKQorICAgICAgICAgICAgOiAmX192YXJpYW50X2FjY2Vz
c29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxfVHlw
ZXMuLi4+JiBfX3YpewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4
IT1fX3YuaW5kZXgoKSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBn
ZXQiKSk7Ci0gICAgcmV0dXJuICooJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KF9fdikpOworICAgIHJldHVybiAqKAorICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgo
KSkKKyAgICAgICAgICAgID8gJl9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigiQmFkIHZhcmlhbnQgaW5k
ZXggaW4gZ2V0IikKKyAgICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5
cGVzLi4uPjo6Z2V0KF9fdikKKyAgICApOwogfQogCiB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewotICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYoX0luZGV4IT1fX3YuaW5kZXgo
KSwgYmFkX3ZhcmlhbnRfYWNjZXNzKCJCYWQgdmFyaWFudCBpbmRleCBpbiBnZXQiKSk7Ci0gICAg
cmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KHN0ZDo6bW92
ZShfX3YpKTsKKyAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+
OjpnZXQoCisgICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFy
aWFudF9hY2Nlc3M8aW50PigiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjpt
b3ZlKF9fdikpCisgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgogY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYg
X192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9JbmRleCE9X192Lmlu
ZGV4KCksIGJhZF92YXJpYW50X2FjY2VzcygiQmFkIHZhcmlhbnQgaW5kZXggaW4gZ2V0IikpOwot
ICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChzdGQ6
Om1vdmUoX192KSk7CisgICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVz
Li4uPjo6Z2V0KAorICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFk
X3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0
ZDo6bW92ZShfX3YpKQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+CkBAIC0xODI5LDcgKzE4MzgsNyBAQCBjb25zdGV4cHIgc3RkOjphZGRf
cG9pbnRlcl90PHR5cGVuYW1lIF9fCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZSh2YXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgbm9leGNlcHR7Citjb25zdGV4cHIgYm9vbCBob2xkc19h
bHRlcm5hdGl2ZSh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKICAg
ICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlOwogfQogCkBAIC0xODY4LDggKzE4NzcsOSBAQCBjb25zdCB0eXBlbmFtZSBfX3Zpc2l0b3Jf
dGFibGU8X1Zpc2l0b3IsCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRv
cixfVHlwZXMuLi4+OjpfX3R5cGUKIHZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLHZhcmlhbnQ8
X1R5cGVzLi4uPiYgX192KXsKLSAgICBfX0NPTlNUX0VYUFJfVEhST1dfRVhDUEVUSU9OX0lGKF9f
di52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCksIGJhZF92YXJpYW50X2FjY2VzcygiVmlzaXRpbmcg
b2YgZW1wdHkgdmFyaWFudCIpKTsKLSAgICByZXR1cm4gX192aXNpdG9yX3RhYmxlPF9WaXNpdG9y
LF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Cisg
ICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQorICAgICAgICA/IF9fdGhy
b3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlz
aXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikKKyAg
ICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5l
W19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KQEAgLTE5MzgsOCArMTk0OCw4IEBAIHRlbXBs
YXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAKIHN0cnVjdCBfX3Zpc2l0X2hlbHBl
cjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KICAgICBzdGF0aWMgY29uc3RleHByIHR5
cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+
OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4u
IF9fdil7Ci0gICAgICAgIF9fQ09OU1RfRVhQUl9USFJPV19FWENQRVRJT05fSUYodHJ1ZSwgYmFk
X3ZhcmlhbnRfYWNjZXNzKCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50IikpOworICAgIF9fdmlz
aXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7CisgICAgICAgIF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixf
VmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2YXJpYW50Iik7CiAgICAg
fQogfTsKIApAQCAtMjA0MCwxNyArMjA1MCwyMSBAQCBzdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7CiAK
IHRlbXBsYXRlPD4KIHN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlPnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6Om1vbm9zdGF0ZSkgbm9leGNlcHR7CisgICAg
c2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjptb25vc3RhdGUpIF9fTk9FWENFUFR7CiAg
ICAgICAgIHJldHVybiA0MjsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgogc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjp2YXJpYW50PF9UeXBlcy4uLj4+ewotICAg
IHNpemVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
ICZ2KSBub2V4Y2VwdCB7CisgICAgc2l6ZV90IG9wZXJhdG9yKCkoZXhwZXJpbWVudGFsOjp2YXJp
YW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewogICAgICAgICByZXR1cm4gc3Rk
OjpoYXNoPHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4KICAgICAgICAgICAgICAgIGV4cGVyaW1l
bnRhbDo6dmlzaXQoZXhwZXJpbWVudGFsOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKICAgICB9CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKKworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDQyODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAor
MjAxNi0wOC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxh
Y2UgTm9kZU9yU3RyaW5nIHdpdGggc3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjM4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBOb2RlT3JTdHJpbmcuaC9j
cHAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5oOgorICAgICAgICAqIGRvbS9Db250YWluZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwcmVwZW5kKToKKyAgICAgICAgKiBkb20vQ29u
dGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RGb2xsb3dpbmdTaWJsaW5nTm90SW5Ob2RlU2V0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjphZnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZXBsYWNlV2l0aCk6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgUmVwbGFjZSBOb2RlT3JTdHJpbmcgd2l0aCBzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+IGFuZCBtb3ZlIGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlCisgICAg
ICAgIGludG8gTm9kZS4KKworICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGRvbS9Ob2RlT3JTdHJpbmcuaDogUmVtb3ZlZC4KKwogMjAxNi0wOC0wOCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3Vy
ZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGlzIGNvcnJlY3QgaW5zaWRlIElubGluZVRleHRCb3gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw3ICsxNDg3LDYgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9Ob2RlLmNwcAogICAgIGRvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCi0gICAgZG9tL05vZGVPclN0cmlu
Zy5jcHAKICAgICBkb20vTm9kZVJhcmVEYXRhLmNwcAogICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNw
cAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0Mjg0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yODQ1LDggKzI4NDUsNiBAQAogCQk3Q0U2ODM0NzE5MjE4MjE1MDBGNEQ5Mjgg
LyogVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2ODM0NjE5MjE4MjE1MDBGNEQ5MjggLyog
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8q
IEZvcm1hdENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oICov
OyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3
RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovOyB9OwotCQk3Q0VBQzEwNzFC
NDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9y
U3RyaW5nLmggKi87IH07Ci0JCTdDRUFDMTA5MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NF
QUMxMDgxQjQ4M0Q3RjAwMzM0NDgyIC8qIE5vZGVPclN0cmluZy5jcHAgKi87IH07CiAJCTdDRkRD
NTdDMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAw
RTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi87IH07CiAJCTdDRkRDNTdEMUFD
MUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkRDNTdCMUFDMUQ4MDUwMEUyNEE1NyAv
KiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3RDRDOTZEQzFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaEhl
YWRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hIZWFkZXJzLmNwcCAqLzsgfTsKQEAg
LTEwMjY1LDggKzEwMjYzLDYgQEAKIAkJN0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZl
cnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRDb252ZXJ0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNkNCRkMxODdGMzk0OTAwRDQ2QkY1
IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXRDb252ZXJ0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0VBQzEwNjFCNDgzRDFEMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVPclN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3Q0VBQzEwODFCNDgzRDdGMDAzMzQ0ODIgLyogTm9kZU9yU3RyaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVPclN0cmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkRDNTdBMUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250
ZW50RXh0ZW5zaW9uRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29udGVudEV4dGVuc2lvbkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NGREM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Q0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8q
IEpTRmV0Y2hIZWFkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRmV0Y2hIZWFkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTM1
LDggKzI0MTMxLDYgQEAKIAkJCQkxQTc1MEQ4NzBBOTBFMzk0MDAwRkYyMTUgLyogTm9kZUl0ZXJh
dG9yLmlkbCAqLywKIAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAq
LywKIAkJCQk4NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAotCQkJ
CTdDRUFDMTA4MUI0ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwICovLAotCQkJCTdD
RUFDMTA2MUI0ODNEMUQwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuaCAqLywKIAkJCQk0RkFCNDg2
NjE2NDNBNjdFMDBGNzBDMDcgLyogTm9kZVJhcmVEYXRhLmNwcCAqLywKIAkJCQk2MzE4OUFFMjBF
ODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0Qz
RjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLApAQCAtMjY4OTUsNyArMjY4ODksNiBA
QAogCQkJCTg1NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRUFDMTA3MUI0ODNEMUQwMDMzNDQ4MiAvKiBO
b2RlT3JTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0
MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzRDdCMzJEMEU3OENEM0Yw
MEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MzEwNUJC
MTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKQEAgLTMw
Njk4LDcgKzMwNjkxLDYgQEAKIAkJCQlBOEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUFDMTA5MUI0
ODNEN0YwMDMzNDQ4MiAvKiBOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkIxNjQzQjcxMDAwNEUxNjM4IC8qIE5vZGVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMzUwM0NDNzEwMTdBMUIxMDAzQjQ3RTEgLyogTm90aWZpY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
T3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMs
MTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WZWN0
b3I8Tm9kZU9yU3RyaW5nPiB0b05vZGVPclN0cmluZ1ZlY3RvcihFeGVjU3RhdGUmIHN0YXRlKQor
VmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7CiAKLSAgICBWZWN0b3I8Tm9kZU9yU3RyaW5nPiByZXN1bHQ7Cisg
ICAgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKTsKICAgICAgICAgaWYgKGF1dG8qIG5v
ZGUgPSBqc0R5bmFtaWNDYXN0PEpTTm9kZSo+KHZhbHVlKSkKLSAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoJm5vZGUtPndyYXBwZWQoKSk7CisgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKG5vZGUtPndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVPclN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDggQEAKICNpZm5kZWYgSlNOb2RlT3JTdHJpbmdfaAogI2RlZmluZSBKU05vZGVPclN0cmlu
Z19oCiAKLSNpbmNsdWRlICJOb2RlT3JTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTM1LDcgKzM2LDkgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVZlY3RvcjxOb2RlT3JTdHJpbmc+IHRvTm9kZU9yU3RyaW5nVmVj
dG9yKEpTQzo6RXhlY1N0YXRlJik7CitjbGFzcyBOb2RlOworCitWZWN0b3I8c3RkOjp2YXJpYW50
PFJlZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoSlNDOjpFeGVjU3RhdGUm
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmFkaW9Ob2RlTGlzdC5oIgpAQCAtODczLDE4ICs4NzIsMTggQEAgdW5zaWduZWQg
Q29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bgogICAgIHJldHVybiBzdGQ6OmRpc3RhbmNl
KGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpKTsKIH0KIAotdm9pZCBDb250YWluZXJO
b2RlOjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBub2RlT3JTdHJpbmdWZWN0b3IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDb250YWluZXJOb2RlOjphcHBlbmQoVmVjdG9yPHN0ZDo6
dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3Ry
aW5nc0ludG9Ob2RlKCp0aGlzLCBXVEZNb3ZlKG5vZGVPclN0cmluZ1ZlY3RvciksIGVjKTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1v
dmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwZW5kQ2hpbGQoKm5vZGUsIGVjKTsKIH0KIAotdm9pZCBDb250
YWluZXJOb2RlOjpwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgbm9kZU9yU3RyaW5nVmVj
dG9yLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ29udGFpbmVyTm9kZTo6cHJlcGVuZChWZWN0
b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiBub2RlT3JTdHJpbmdWZWN0b3Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5v
ZGVzT3JTdHJpbmdzSW50b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwg
ZWMpOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFub2Rl
KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
cmV2aXNpb24gMjA0Mjg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZmly
c3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKICAgICBFbGVtZW50KiBsYXN0RWxlbWVudENoaWxkKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgY2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKLSAgICB2b2lk
IGFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBwcmVwZW5kKFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGFwcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcHJlcGVuZChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxO
b2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBlbnN1cmVQcmVJ
bnNlcnRpb25WYWxpZGl0eShOb2RlJiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlv
bkNvZGUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAy
MDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNyArMTEyLDYgQEAKICNpbmNsdWRlICJOb2RlLmNwcCIKICNpbmNsdWRlICJO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuY3BwIgotI2lu
Y2x1ZGUgIk5vZGVPclN0cmluZy5jcHAiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmNwcCIKICNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmNwcCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmNwcCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgpAQCAtNDM4LDE4ICs0MzcsMTcgQEAgYm9vbCBO
b2RlOjphcHBlbmRDaGlsZChOb2RlJiBuZXdDaGlsZCwgRQogICAgIHJldHVybiBkb3duY2FzdDxD
b250YWluZXJOb2RlPigqdGhpcykuYXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9y
U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxOb2RlT3JTdHJpbmc+JiBub2RlT3JTdHJpbmdWZWN0
b3IpCitzdGF0aWMgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZy
b21Ob2RlT3JTdHJpbmdWZWN0b3IoY29uc3QgVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4s
IFN0cmluZz4+JiB2ZWN0b3IpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4+IG5vZGVTZXQ7
Ci0gICAgZm9yIChhdXRvJiBub2RlT3JTdHJpbmcgOiBub2RlT3JTdHJpbmdWZWN0b3IpIHsKLSAg
ICAgICAgc3dpdGNoIChub2RlT3JTdHJpbmcudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZU9y
U3RyaW5nOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b2RlT3JTdHJpbmc6OlR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBub2RlU2V0LmFkZCgmbm9kZU9y
U3RyaW5nLm5vZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwor
ICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25zdCBS
ZWY8Tm9kZT4mIG5vZGUpIHsgbm9kZVNldC5hZGQoY29uc3RfY2FzdDxOb2RlKj4obm9kZS5wdHIo
KSkpOyB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICApOworCisgICAgZm9y
IChjb25zdCBhdXRvJiB2YXJpYW50IDogdmVjdG9yKQorICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOwogCiAgICAgcmV0dXJuIG5vZGVTZXQ7CiB9CkBAIC00NzIsNyArNDcwLDM0
IEBAIHN0YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RGb2xsb3dpbmdTaWJsaW4KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4mJiBu
b2RlT3JTdHJpbmdWZWN0b3IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPE5vZGU+IE5vZGU6
OmNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CisgICAgbm9kZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iuc2l6ZSgpKTsKKworICAgIGF1dG8g
dmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShSZWY8Tm9kZT4mIG5vZGUp
IHsgbm9kZXMudW5jaGVja2VkQXBwZW5kKG5vZGUuY29weVJlZigpKTsgfSwKKyAgICAgICAgWyZd
KFN0cmluZyYgc3RyaW5nKSB7IG5vZGVzLnVuY2hlY2tlZEFwcGVuZChUZXh0OjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RyaW5nKSk7IH0KKyAgICApOworCisgICAgZm9yIChhdXRvJiB2YXJpYW50IDog
bm9kZU9yU3RyaW5nVmVjdG9yKQorICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQp
OworCisgICAgaWYgKG5vZGVzLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gV1RGTW92ZShu
b2Rlcy5maXJzdCgpKTsKKworICAgIGF1dG8gbm9kZVRvUmV0dXJuID0gRG9jdW1lbnRGcmFnbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOworICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7Cisg
ICAgICAgIGlmICghbm9kZVRvUmV0dXJuLT5hcHBlbmRDaGlsZChub2RlLCBlYykpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFdURk1vdmUobm9kZVRvUmV0
dXJuKTsKK30KKwordm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9k
ZT4sIFN0cmluZz4+JiYgbm9kZU9yU3RyaW5nVmVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gcGFyZW50Tm9kZSgpOwogICAgIGlm
ICghcGFyZW50KQpAQCAtNDgxLDcgKzUwNiw3IEBAIHZvaWQgTm9kZTo6YmVmb3JlKFZlY3RvcjxO
b2RlT3JTdHJpbmc+JiYKICAgICBhdXRvIG5vZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRG
cm9tTm9kZU9yU3RyaW5nVmVjdG9yKG5vZGVPclN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFi
bGVQcmV2aW91c1NpYmxpbmcgPSBmaXJzdFByZWNlZGluZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRo
aXMsIG5vZGVTZXQpOwogCi0gICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50
b05vZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8g
bm9kZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5n
VmVjdG9yKSwgZWMpOwogICAgIGlmIChlYyB8fCAhbm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC00OTMsNyArNTE4LDcgQEAgdm9pZCBOb2RlOjpiZWZvcmUoVmVjdG9yPE5vZGVPclN0cmluZz4m
JgogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKCpub2RlLCB2aWFibGVQcmV2aW91c1NpYmxpbmcu
Z2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2RlOjphZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYm
IG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIE5vZGU6OmFmdGVy
KFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1Zl
Y3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBh
cmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKQEAgLTUwMiwxNCArNTI3LDE0
IEBAIHZvaWQgTm9kZTo6YWZ0ZXIoVmVjdG9yPE5vZGVPclN0cmluZz4mJiAKICAgICBhdXRvIG5v
ZGVTZXQgPSBub2RlU2V0UHJlVHJhbnNmb3JtZWRGcm9tTm9kZU9yU3RyaW5nVmVjdG9yKG5vZGVP
clN0cmluZ1ZlY3Rvcik7CiAgICAgYXV0byB2aWFibGVOZXh0U2libGluZyA9IGZpcnN0Rm9sbG93
aW5nU2libGluZ05vdEluTm9kZVNldCgqdGhpcywgbm9kZVNldCk7CiAKLSAgICBhdXRvIG5vZGUg
PSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZSgqdGhpcywgV1RGTW92ZShub2RlT3JTdHJp
bmdWZWN0b3IpLCBlYyk7CisgICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50
b05vZGUoV1RGTW92ZShub2RlT3JTdHJpbmdWZWN0b3IpLCBlYyk7CiAgICAgaWYgKGVjIHx8ICFu
b2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSgqbm9kZSwg
dmlhYmxlTmV4dFNpYmxpbmcuZ2V0KCksIGVjKTsKIH0KIAotdm9pZCBOb2RlOjpyZXBsYWNlV2l0
aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZlY3RvcjxzdGQ6OnZhcmlhbnQ8UmVmPE5v
ZGU+LCBTdHJpbmc+PiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IHBhcmVudE5vZGUoKTsKICAgICBp
ZiAoIXBhcmVudCkKQEAgLTUxOCw3ICs1NDMsNyBAQCB2b2lkIE5vZGU6OnJlcGxhY2VXaXRoKFZl
Y3RvcjxOb2RlT3JTdHJpCiAgICAgYXV0byBub2RlU2V0ID0gbm9kZVNldFByZVRyYW5zZm9ybWVk
RnJvbU5vZGVPclN0cmluZ1ZlY3Rvcihub2RlT3JTdHJpbmdWZWN0b3IpOwogICAgIGF1dG8gdmlh
YmxlTmV4dFNpYmxpbmcgPSBmaXJzdEZvbGxvd2luZ1NpYmxpbmdOb3RJbk5vZGVTZXQoKnRoaXMs
IG5vZGVTZXQpOwogCi0gICAgYXV0byBub2RlID0gY29udmVydE5vZGVzT3JTdHJpbmdzSW50b05v
ZGUoKnRoaXMsIFdURk1vdmUobm9kZU9yU3RyaW5nVmVjdG9yKSwgZWMpOworICAgIGF1dG8gbm9k
ZSA9IGNvbnZlcnROb2Rlc09yU3RyaW5nc0ludG9Ob2RlKFdURk1vdmUobm9kZU9yU3RyaW5nVmVj
dG9yKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgJKHJldmlzaW9uIDIwNDI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
KyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiAvLyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVj
YXVzZSBEb2N1bWVudC5oIGFsc28gZGVwZW5kcyBvbiBpdC4KICNkZWZpbmUgRFVNUF9OT0RFX1NU
QVRJU1RJQ1MgMApAQCAtNTEsNyArNTIsNiBAQCBjbGFzcyBNYXRoTUxRdWFsaWZpZWROYW1lOwog
Y2xhc3MgTmFtZWROb2RlTWFwOwogY2xhc3MgTm9kZUxpc3Q7CiBjbGFzcyBOb2RlTGlzdHNOb2Rl
RGF0YTsKLWNsYXNzIE5vZGVPclN0cmluZzsKIGNsYXNzIE5vZGVSYXJlRGF0YTsKIGNsYXNzIFF1
YWxpZmllZE5hbWU7CiBjbGFzcyBSZW5kZXJCb3g7CkBAIC0yMDgsOSArMjA4LDkgQEAgcHVibGlj
OgogICAgIEVsZW1lbnQqIG5leHRFbGVtZW50U2libGluZygpIGNvbnN0OwogCiAgICAgLy8gRnJv
bSB0aGUgQ2hpbGROb2RlIC0gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjaGlsZG5vZGUK
LSAgICB2b2lkIGJlZm9yZShWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBhZnRlcihWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCByZXBsYWNlV2l0aChWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBiZWZvcmUoVmVjdG9yPHN0ZDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0
cmluZz4+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFmdGVyKFZlY3RvcjxzdGQ6OnZh
cmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiYmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBy
ZXBsYWNlV2l0aChWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEV4Y2VwdGlvbkNv
ZGUmKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKQEAgLTY2MSw2
ICs2NjEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5n
ZVR5cGUgY2hhbmdlVHlwZSkgeyBtX25vZGVGbGFncyA9IChtX25vZGVGbGFncyAmIH5TdHlsZUNo
YW5nZU1hc2spIHwgY2hhbmdlVHlwZTsgfQogICAgIHZvaWQgdXBkYXRlQW5jZXN0b3JzRm9yU3R5
bGVSZWNhbGMoKTsKIAorICAgIFJlZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRv
Tm9kZShWZWN0b3I8c3RkOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4mJiwgRXhjZXB0aW9u
Q29kZSYpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUHNldWRvSWQgY3VzdG9tUHNldWRvSWQo
KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlT3JTdHJpbmcuY3BwCShyZXZp
c2lvbiAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTm9kZU9yU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZlB0
cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShOb2RlJiBjb250ZXh0LCBWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmIG5vZGVPclN0cmluZ1ZlY3RvciwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaWYgKG5vZGVPclN0cmluZ1ZlY3Rvci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7Ci0gICAgbm9kZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShub2RlT3JTdHJpbmdWZWN0b3Iuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIG5vZGVPclN0cmluZyA6IG5vZGVPclN0cmluZ1ZlY3RvcikgewotICAgICAgICBzd2l0
Y2ggKG5vZGVPclN0cmluZy50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlT3JTdHJpbmc6OlR5
cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChUZXh0OjpjcmVh
dGUoY29udGV4dC5kb2N1bWVudCgpLCBub2RlT3JTdHJpbmcuc3RyaW5nKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVPclN0cmluZzo6VHlwZTo6Tm9kZToKLSAgICAg
ICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChub2RlT3JTdHJpbmcubm9kZSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5vZGVzLnNpemUoKSA9
PSAxKQotICAgICAgICByZXR1cm4gV1RGTW92ZShub2Rlcy5maXJzdCgpKTsKLQotICAgIGF1dG8g
bm9kZVRvUmV0dXJuID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGNvbnRleHQuZG9jdW1lbnQo
KSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKLSAgICAgICAgaWYgKCFub2RlVG9S
ZXR1cm4tPmFwcGVuZENoaWxkKG5vZGUsIGVjKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLSAgICByZXR1cm4gV1RGTW92ZShub2RlVG9SZXR1cm4pOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVPclN0cmluZy5oCShyZXZpc2lv
biAyMDQyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZU9yU3RyaW5nLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTm9kZU9yU3RyaW5n
X2gKLSNkZWZpbmUgTm9kZU9yU3RyaW5nX2gKLQotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE5v
ZGVPclN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgU3Ry
aW5nLAotICAgICAgICBOb2RlCi0gICAgfTsKLQotICAgIE5vZGVPclN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZykKLSAgICAgICAgOiBtX3R5cGUoVHlwZTo6U3RyaW5nKQotICAgIHsKLSAgICAg
ICAgbV9kYXRhLnN0cmluZyA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIG1fZGF0YS5zdHJpbmct
PnJlZigpOwotICAgIH0KLQotICAgIE5vZGVPclN0cmluZyhOb2RlKiBub2RlKQotICAgICAgICA6
IG1fdHlwZShUeXBlOjpOb2RlKQotICAgIHsKLSAgICAgICAgbV9kYXRhLm5vZGUgPSBub2RlOwot
ICAgICAgICBtX2RhdGEubm9kZS0+cmVmKCk7Ci0gICAgfQotCi0gICAgTm9kZU9yU3RyaW5nKGNv
bnN0IE5vZGVPclN0cmluZyYgb3RoZXIpCi0gICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3Ry
aW5nOgotICAgICAgICAgICAgbV9kYXRhLnN0cmluZyA9IG90aGVyLm1fZGF0YS5zdHJpbmc7Ci0g
ICAgICAgICAgICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IG90aGVyLm1f
ZGF0YS5ub2RlOwotICAgICAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOb2RlT3JTdHJpbmcoTm9kZU9yU3RyaW5n
JiYgb3RoZXIpCi0gICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAgICAgICAg
ICAgbV9kYXRhLnN0cmluZyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kYXRhLnN0cmluZywgbnVs
bHB0cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAg
ICAgICAgICAgbV9kYXRhLm5vZGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5ub2RlLCBu
dWxscHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTm9k
ZU9yU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgTm9kZU9yU3RyaW5nJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQot
ICAgICAgICBkZXJlZkRhdGEoKTsKLQotICAgICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0g
ICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6U3RyaW5nOgotICAg
ICAgICAgICAgbV9kYXRhLnN0cmluZyA9IG90aGVyLm1fZGF0YS5zdHJpbmc7Ci0gICAgICAgICAg
ICBtX2RhdGEuc3RyaW5nLT5yZWYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFR5cGU6Ok5vZGU6Ci0gICAgICAgICAgICBtX2RhdGEubm9kZSA9IG90aGVyLm1fZGF0YS5ub2Rl
OwotICAgICAgICAgICAgbV9kYXRhLm5vZGUtPnJlZigpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgTm9kZU9yU3Ry
aW5nJiBvcGVyYXRvcj0oTm9kZU9yU3RyaW5nJiYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAo
dGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAgZGVy
ZWZEYXRhKCk7Ci0KLSAgICAgICAgbV90eXBlID0gb3RoZXIubV90eXBlOwotICAgICAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIG1f
ZGF0YS5zdHJpbmcgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZGF0YS5zdHJpbmcsIG51bGxwdHIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZTo6Tm9kZToKLSAgICAgICAg
ICAgIG1fZGF0YS5ub2RlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RhdGEubm9kZSwgbnVsbHB0
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0KLSAgICB+Tm9kZU9yU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIGRlcmVmRGF0
YSgpOwotICAgIH0KLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
Ci0gICAgTm9kZSYgbm9kZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpOb2RlKTsg
QVNTRVJUKG1fZGF0YS5ub2RlKTsgcmV0dXJuICptX2RhdGEubm9kZTsgfQotICAgIFN0cmluZ0lt
cGwmIHN0cmluZygpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdHJpbmcpOyBBU1NF
UlQobV9kYXRhLnN0cmluZyk7IHJldHVybiAqbV9kYXRhLnN0cmluZzsgfQotICAgIAotcHJpdmF0
ZToKLSAgICB2b2lkIGRlcmVmRGF0YSgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewotICAgICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGlmIChtX2RhdGEuc3Ry
aW5nKQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdHJpbmctPmRlcmVmKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlOjpOb2RlOgotICAgICAgICAgICAgaWYgKG1fZGF0
YS5ub2RlKQotICAgICAgICAgICAgICAgIG1fZGF0YS5ub2RlLT5kZXJlZigpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUeXBlIG1fdHlwZTsKLSAgICB1bmlv
biB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgTm9kZSogbm9kZTsKLSAg
ICB9IG1fZGF0YTsKLX07Ci0KLVJlZlB0cjxOb2RlPiBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRv
Tm9kZShOb2RlJiBjb250ZXh0LCBWZWN0b3I8Tm9kZU9yU3RyaW5nPiYmLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE5vZGVPclN0cmluZ19o
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDQyODQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNSBAQAorMjAxNi0wOC0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRo
ZSBidWcgVVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisKKzIwMTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXBsYWNlIE5vZGVPclN0cmluZyB3aXRoIHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9k
ZT4sIFN0cmluZz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MDYzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIEFkZCBh
ZGRpdGlvbmFsIHRlc3RzIGZvciB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBzdGQ6OnZhcmlhbnQgYW5k
IHVzaW5nCisgICAgICAgIG1ha2VWaXNpdG9yIGZvciB2aXNpdGluZy4KKwogMjAxNi0wOC0wOSAg
S29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgd2Via2l0
LWd0ayB0YXJiYWxsIGZhaWxzIHRvIGJ1aWxkIGR1ZSB0byBtaXNzaW5nIGZpbGVzCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDI4NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcg
QEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9TdHJpbmdWaWV3LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9UZW1w
b3JhcnlDaGFuZ2UuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1VuaXF1
ZVJlZi5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVmFyaWFudC5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVmVjdG9yLmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9XVEZTdHJpbmcuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV1RGL1dlYWtQdHIuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA0Mjg0KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsy
Niw1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQ291bnRlcnMuaCIKLSNp
bmNsdWRlICJNb3ZlT25seS5oIgogI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAorVEVTVChXVEZfVmFyaWFu
dCwgSW5pdGlhbCkKK3sKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOworICAgIEVY
UEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50
Pih2MSkgPT0gMCk7CisKKyAgICBzdHJ1Y3QgVCB7CisgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7
IH0KKyAgICAgICAgaW50IHZhbHVlOworICAgIH07CisKKyAgICBzdGQ6OnZhcmlhbnQ8VCwgaW50
PiB2MjsKKyAgICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09IDApOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7Cit9CisKIFRFU1QoV1RGX1ZhcmlhbnQsIEJh
c2ljKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZG91YmxlPiB2YXJp
YW50ID0gMTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwogICAg
IEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJVRShzdGQ6
OmV4cGVyaW1lbnRhbDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUo
c3RkOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRSgqc3RkOjpnZXRf
aWY8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldF9pZjxkb3Vi
bGU+KHZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisKKyAgICB2YXJpYW50ID0gMS4wOworICAgIEVY
UEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6Omdl
dDxkb3VibGU+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmdldF9pZjxk
b3VibGU+KHZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXRfaWY8aW50
Pih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zp
c2l0b3IpCiB7Ci0gICAgdHlwZWRlZiBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGZs
b2F0LCBTdHJpbmc+IFZhcmlhbnQ7Ci0KICAgICBlbnVtIGNsYXNzIFR5cGUgewogICAgICAgICBO
b25lLAogICAgICAgICBJbnQsCkBAIC01Myw3ICs3OSw2IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJh
c2ljVmlzaXRvcikKICAgICAgICAgU3RyaW5nLAogICAgIH07CiAKLQogICAgIHN0cnVjdCBWaXNp
dG9yIHsKICAgICAgICAgVmlzaXRvcihUeXBlJiB0KQogICAgICAgICAgICAgOiB0eXBlKHQpCkBA
IC02OSwzMCArOTQsNjAgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAg
VHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAgIFZhcmlhbnQgdmFyaWFudCA9IDg7Ci0gICAg
c3RkOjpleHBlcmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0
ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmlz
aXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50ID09
IHR5cGUpOworCisKKyAgICB2YXJpYW50ID0gMS4wZjsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3Io
dHlwZSksIHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwor
CisKKyAgICB2YXJpYW50ID0gImhlbGxvIjsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSks
IHZhcmlhbnQpOworICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKK30KKwor
VEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nTWFrZVZpc2l0b3IpCit7CisgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgSW50LAorICAgICAgICBGbG9hdCwK
KyAgICAgICAgU3RyaW5nLAorICAgIH07CisKKyAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwor
CisgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGludCkg
eyB0eXBlID0gVHlwZTo6SW50OyB9LAorICAgICAgICBbJl0oZmxvYXQpIHsgdHlwZSA9IFR5cGU6
OkZsb2F0OyB9LAorICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0K
KyAgICApOworCisgICAgc3RkOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9
IDg7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShU
eXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBmOwotICAgIHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUp
OwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlz
aXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJp
YW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAKIFRFU1Qo
V1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKIHsKLSAgICB0eXBlZGVmIHN0ZDo6
ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPiwgaW50PiBWYXJpYW50OwotIAogICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKIAogICAgIHsKICAgICAgICAgYXV0byB1bmlxdWVQ
dHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Ci0g
ICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgc3RkOjp2YXJp
YW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2
ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1Rf
RVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpA
QCAtMTAyLDE0ICsxNTcsMTIgQEAgVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yKQogICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVz
dHJ1Y3Rpb25Db3VudCk7CiB9CiAKLVRFU1QoV1RGX1ZhcmlhbnQsIFJlZkNvdW50aW5nKQorVEVT
VChXVEZfVmFyaWFudCwgUmVmUHRyKQogewotICAgIHR5cGVkZWYgc3RkOjpleHBlcmltZW50YWw6
OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gVmFyaWFudDsKLQogICAgIHsKICAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsK
LSAgICAgICAgVmFyaWFudCB2ID0gcmVmOworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJl
ZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAt
MTE3LDcgKzE3MCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZDb3VudGluZykKICAgICB7CiAg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigm
YSk7Ci0gICAgICAgIFZhcmlhbnQgdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgc3RkOjp2YXJp
YW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgfQorCisg
ICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OworfQorCitURVNUKFdURl9WYXJpYW50LCBSZWYpCit7CisgICAgeworICAgICAgICBSZWZMb2dn
ZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHN0ZDo6
dmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwogICAgIH0KIAog
ICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>