<?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>109334</bug_id>
          
          <creation_ts>2013-02-08 16:48:30 -0800</creation_ts>
          <short_desc>Harden FastMalloc (again)</short_desc>
          <delta_ts>2013-09-13 10:34:23 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121307</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>828836</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-08 16:48:30 -0800</bug_when>
    <thetext>Harden FastMalloc (again)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828840</commentid>
    <comment_count>1</comment_count>
      <attachid>187388</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-08 16:57:15 -0800</bug_when>
    <thetext>Created attachment 187388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828843</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 17:06:06 -0800</bug_when>
    <thetext>Attachment 187388 did not pass style-queue:

Source/WTF/wtf/FastMalloc.cpp:547:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:695:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:727:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:727:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:728:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:728:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:754:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:754:  SLL_Next is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:758:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:758:  SLL_SetNext is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:762:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:762:  SLL_Push is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:763:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:767:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:767:  SLL_Pop is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:768:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:769:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:778:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:778:  SLL_PopRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:785:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:792:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:794:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:797:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:797:  SLL_PushRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:799:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:803:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:803:  SLL_Size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1001:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1001:  allocated_regions_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1004:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1004:  free_list_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1008:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1008:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1011:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1011:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1017:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:1025:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1026:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1034:  _head is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1049:  _head is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1061:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1062:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1103:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1113:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1113:  Extra space between HardenedSLL and objects  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:1113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1169:  DLL_Init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1170:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1171:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1174:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1174:  DLL_Remove is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1176:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1177:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:1177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1178:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:1178:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1185:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1185:  DLL_Length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1203:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1203:  DLL_Prepend is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1204:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1205:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1206:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1207:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1216:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1222:  The parameter name &quot;N&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1222:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1225:  The parameter name &quot;N&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1225:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1247:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1258:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1260:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1260:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1265:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1270:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1276:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1281:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1286:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1286:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1337:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1337:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1657:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1751:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1763:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2000:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2002:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2014:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2016:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2063:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2169:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2172:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2174:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2263:  r_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2395:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2396:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2424:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2444:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2478:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:2478:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2478:  list_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2481:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:2481:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2481:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2484:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2484:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2485:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:2508:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2513:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2513:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2518:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2518:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2536:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2537:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2564:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:2564:  Extra space between uintptr_t and entropy_  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:2564:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2564:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2567:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2576:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2586:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2586:  size_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2784:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2784:  TCMalloc_Central_FreeList::Init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2787:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2789:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2791:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2792:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2800:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2800:  TCMalloc_Central_FreeList::ReleaseListToSpans is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2808:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2809:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2815:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2826:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2923:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2923:  TCMalloc_Central_FreeList::InsertRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2938:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2938:  TCMalloc_Central_FreeList::RemoveRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2953:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2961:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2962:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2976:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2976:  TCMalloc_Central_FreeList::FetchFromSpansSafe is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2977:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2985:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2985:  TCMalloc_Central_FreeList::FetchFromSpans is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2986:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/FastMalloc.cpp:2986:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2987:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2989:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2992:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2993:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2994:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3038:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3039:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3041:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3043:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3050:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3051:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3052:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3053:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3058:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3076:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:3076:  TCMalloc_ThreadCache::Init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:3082:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3084:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:3120:  TCMalloc_ThreadCache::Deallocate is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:3134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespaceFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/FastMalloc.cpp&apos;, u&apos;Source/WTF/wtf/MallocZoneSupport.h&apos;]&quot; exit_code: 1
/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3253:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3263:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:3263:  TCMalloc_ThreadCache::NewHeap is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:3266:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3380:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/FastMalloc.cpp:3380:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/FastMalloc.cpp:3380:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:3882:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3885:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3886:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 195 in 3 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>828854</commentid>
    <comment_count>3</comment_count>
      <attachid>187388</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-08 17:33:37 -0800</bug_when>
    <thetext>Comment on attachment 187388
Patch

I have apparently managed to clobber performance now.  sigh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830193</commentid>
    <comment_count>4</comment_count>
      <attachid>187692</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-11 15:16:33 -0800</bug_when>
    <thetext>Created attachment 187692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830195</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 15:18:11 -0800</bug_when>
    <thetext>Attachment 187692 did not pass style-queue:

Source/WTF/wtf/FastMalloc.cpp:547:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:695:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:727:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:727:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:728:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:728:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:754:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:758:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:762:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:763:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:767:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:768:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:769:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:778:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:785:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:792:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:794:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:797:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:799:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:803:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1001:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1001:  allocated_regions_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1004:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1004:  free_list_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1008:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1008:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1011:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1011:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1017:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:1025:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1026:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1034:  _head is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1049:  _head is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1061:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1062:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1103:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1113:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1113:  Extra space between HardenedSLL and objects  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:1113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1169:  DLL_Init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1170:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1171:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1174:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1174:  DLL_Remove is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1176:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1177:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:1177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1178:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:1178:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1185:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1185:  DLL_Length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1203:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1203:  DLL_Prepend is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1204:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1205:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1206:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1207:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1216:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1222:  The parameter name &quot;N&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1222:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1225:  The parameter name &quot;N&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1225:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1247:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1258:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1260:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1260:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1265:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1270:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1276:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1281:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1286:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1286:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1337:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1337:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1657:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:1751:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1763:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2000:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2002:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2014:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2016:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2063:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2169:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2172:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2174:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2263:  r_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2395:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2396:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2424:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2444:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2478:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:2478:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2478:  list_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2481:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:2481:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2481:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2484:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2484:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2485:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:2508:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2513:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2513:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2518:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2518:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2536:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2537:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2564:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:2564:  Extra space between uintptr_t and entropy_  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:2564:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2564:  entropy_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2567:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2576:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2586:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2586:  size_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2784:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2784:  TCMalloc_Central_FreeList::Init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2787:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2789:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2791:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2792:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2800:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2800:  TCMalloc_Central_FreeList::ReleaseListToSpans is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2808:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2809:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2815:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2826:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2923:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2923:  TCMalloc_Central_FreeList::InsertRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2938:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2938:  TCMalloc_Central_FreeList::RemoveRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2953:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2961:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2962:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2976:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2976:  TCMalloc_Central_FreeList::FetchFromSpansSafe is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2977:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2985:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:2985:  TCMalloc_Central_FreeList::FetchFromSpans is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:2986:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/FastMalloc.cpp:2986:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2987:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2989:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2992:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2993:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:2994:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3038:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3039:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3041:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3043:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3050:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3051:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3052:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3053:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3058:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3076:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:3076:  TCMalloc_ThreadCache::Init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:3082:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3084:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:3120:  TCMalloc_ThreadCache::Deallocate is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:3134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3253:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3263:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:3263:  TCMalloc_ThreadCache::NewHeap is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WTF/wtf/FastMalloc.cpp:3266:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3380:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WTF/wtf/FastMalloc.cpp:3380:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/FastMalloc.cpp:3380:  Use 0 instead of NULL.  [readability/null] [5]
Source/WTF/wtf/FastMalloc.cpp:3882:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/FastMalloc.cpp&apos;, u&apos;Source/WTF/wtf/MallocZoneSupport.h&apos;]&quot; exit_code: 1
F/wtf/FastMalloc.cpp:3885:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:3886:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 188 in 3 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>830254</commentid>
    <comment_count>6</comment_count>
      <attachid>187692</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-11 15:51:29 -0800</bug_when>
    <thetext>Comment on attachment 187692
Patch

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

r=me with comments.

&gt; Source/WTF/ChangeLog:17
&gt; +        I&apos;ve also made an explicit struct type forthe FastMalloc singly linked

for the

&gt; Source/WTF/wtf/FastMalloc.cpp:695
&gt; +// Hardened singly linked list.  We make this a struct to allow compiler to

s/struct/class

&gt; Source/WTF/wtf/FastMalloc.cpp:4549
&gt; +    ASSERT(localAddress);
&gt; +    if (!localAddress)
&gt; +        return 0;

We didn&apos;t ASSERT in the old code. Are you sure this is okay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830260</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-11 15:54:53 -0800</bug_when>
    <thetext>Committed r142536: &lt;http://trac.webkit.org/changeset/142536&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187388</attachid>
            <date>2013-02-08 16:57:15 -0800</date>
            <delta_ts>2013-02-11 15:16:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109334-20130208165350.patch</filename>
            <type>text/plain</type>
            <size>49836</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGEyN2Q5NzFiMGMzMmNiYTBhZjIyODQ0
ODZmOTNlMGRlYjg2NjJlMGQuLjUwZWEwOTIxNmI3Zjc3NzRkOTI5ZTVlMjhjZDUzYmY1MTlmNDJm
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDEzLTAyLTA4ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgSGFyZGVuIEZhc3RNYWxsb2MgKGFnYWluKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MzM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtaW1wbGVtZW50IGhh
cmRlbmluZyBvZiBsaW5rZWQgbGlzdHMgaW4gVENNYWxsb2MuCisKKyAgICAgICAgSW4gb3JkZXIg
dG8ga2VlcCBoZWFwIGludHJvc3BlY3Rpb24gd29ya2luZywgd2UgbmVlZCB0byB0aHJlYWQgdGhl
CisgICAgICAgIGhlYXAgZW50cm9weSBtYW51YWxseSBhcyB0aGUgaW50cm9zcGVjdGlvbiBwcm9j
ZXNzIGNhbid0IHVzZSB0aGUKKyAgICAgICAgYWRkcmVzcyBvZiBhIGdsb2JhbCBpbiBkZXRlcm1p
bmluZyB0aGUgbWFzay4gIEdpdmVuIHdlIG5vdyBoYXZlIHRvCisgICAgICAgIHRocmVhZCBhIHZh
bHVlIHRocm91Z2ggYW55d2F5LCBJJ3ZlIHN0b3BwZWQgcmVseWluZyBvbiBBU0xSIGZvciBlbnRy
b3B5CisgICAgICAgIGFuZCBhbSBzaW1wbHkgdXNpbmcgYXJjNHJhbmRvbSgpIG9uIGRhcndpbiwg
YW5kIHRpbWUgKyBBU0xSIGV2ZXJ5d2hlcmUKKyAgICAgICAgZWxzZS4KKworICAgICAgICBJJ3Zl
IGFsc28gbWFkZSBhbiBleHBsaWNpdCBzdHJ1Y3QgdHlwZSBmb3J0aGUgRmFzdE1hbGxvYyBzaW5n
bHkgbGlua2VkCisgICAgICAgIGxpc3RzLCBhcyBpdCBzZWVtZWQgbGlrZSB0aGUgb25seSB3YXkg
dG8gcmVsaWFibHkgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICAgICAgICB2b2lkKidzIHRoYXQgd2Vy
ZSBsaXN0cyB2cy4gdm9pZCogdGhhdCB3ZXJlIG5vdC4gIFRoaXMgYWxzbyBtYWRlIGl0CisgICAg
ICAgIHNvbWV3aGF0IGVhc2llciB0byByZWFzb24gYWJvdXQgdGhpbmdzIGFjcm9zcyBwcm9jZXNz
ZXMuCisKKyAgICAgICAgVmVyaWZpZWQgdGhhdCBhbGwgdGhlIGludHJvc3BlY3Rpb24gdG9vbHMg
d29yayBhcyBleHBlY3RlZC4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAg
ICAgKFdURjo6aW50ZXJuYWxFbnRyb3B5VmFsdWUpOgorICAgICAgICAoV1RGKToKKyAgICAgICAg
KEhhcmRlbmVkU0xMKToKKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6OkhhcmRlbmVkU0xMOjpudWxsKToKKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6
OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6OnZhbHVlKToKKyAgICAgICAg
KFdURjo6SGFyZGVuZWRTTEw6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkhhcmRlbmVkU0xM
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFRDRW50cnkpOgorICAg
ICAgICAoV1RGOjpTTExfTmV4dCk6CisgICAgICAgIChXVEY6OlNMTF9TZXROZXh0KToKKyAgICAg
ICAgKFdURjo6U0xMX1B1c2gpOgorICAgICAgICAoV1RGOjpTTExfUG9wKToKKyAgICAgICAgKFdU
Rjo6U0xMX1BvcFJhbmdlKToKKyAgICAgICAgKFdURjo6U0xMX1B1c2hSYW5nZSk6CisgICAgICAg
IChXVEY6OlNMTF9TaXplKToKKyAgICAgICAgKFBhZ2VIZWFwQWxsb2NhdG9yKToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFs
bG9jYXRvcjo6TmV3KToKKyAgICAgICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkRlbGV0ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjpyZWNvcmRBZG1pbmlzdHJhdGl2ZVJl
Z2lvbnMpOgorICAgICAgICAoV1RGOjpTcGFuOjpuZXh0KToKKyAgICAgICAgKFdURjo6U3Bhbjo6
cmVtb3RlTmV4dCk6CisgICAgICAgIChXVEY6OlNwYW46OnByZXYpOgorICAgICAgICAoV1RGOjpT
cGFuOjpzZXROZXh0KToKKyAgICAgICAgKFdURjo6U3Bhbjo6c2V0UHJldik6CisgICAgICAgIChT
cGFuKToKKyAgICAgICAgKFdURjo6RExMX0luaXQpOgorICAgICAgICAoV1RGOjpETExfUmVtb3Zl
KToKKyAgICAgICAgKFdURjo6RExMX0lzRW1wdHkpOgorICAgICAgICAoV1RGOjpETExfTGVuZ3Ro
KToKKyAgICAgICAgKFdURjo6RExMX1ByZXBlbmQpOgorICAgICAgICAoVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OmVu
dW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVl
TGlzdDo6ZW50cm9weSk6CisgICAgICAgIChUQ01hbGxvY19QYWdlSGVhcCk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjppbml0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFn
ZUhlYXA6OnNjYXZlbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6Ok5ldyk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpBbGxvY0xhcmdlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNhcnZlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2Nf
UGFnZUhlYXA6OkRlbGV0ZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpSZXR1
cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrTGlzdCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jX1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QpOgorICAgICAgICAoVENNYWxsb2Nf
VGhyZWFkQ2FjaGVfRnJlZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNo
ZV9GcmVlTGlzdDo6SW5pdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0Zy
ZWVMaXN0OjplbXB0eSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVM
aXN0OjpQdXNoKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3Q6
OlB1c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0
OjpQb3BSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0
OjpQb3ApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW51
bWVyYXRlRnJlZU9iamVjdHMpOgorICAgICAgICAoVENNYWxsb2NfVGhyZWFkQ2FjaGUpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbml0KToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnMpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMp
OgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpQb3B1bGF0ZSk6Cisg
ICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0KToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NfVGhyZWFkQ2FjaGU6OlJlbGVhc2VUb0NlbnRyYWxDYWNoZSk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NfVGhyZWFkQ2FjaGU6Ok5ld0hlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRD
YWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSk6CisgICAgICAgICogd3RmL01hbGxvY1pvbmVT
dXBwb3J0Lmg6CisgICAgICAgIChSZW1vdGVNZW1vcnlSZWFkZXIpOgorCiAyMDEzLTAyLTA4ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEJyaW5nIFdlYktpdCB1
cCB0byBzcGVlZCB3aXRoIGxhdGVzdCBFbmNyeXB0ZWQgTWVkaWEgc3BlYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwIGIvU291cmNlL1dURi93dGYvRmFzdE1hbGxv
Yy5jcHAKaW5kZXggYjc1NTMyZjdjNWNhZTcyNzIzODIzYzI2NmYxNDMxMzBiMDQ5ZGNkOS4uYjAx
NDczNzZkODI5MTkxZGFmZmNhZjQ4MTA4N2I4YzQwZDQ4YmQ2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvRmFzdE1hbGxvYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5j
cHAKQEAgLTc4LDYgKzc4LDggQEAKICNpbmNsdWRlICJGYXN0TWFsbG9jLmgiCiAKICNpbmNsdWRl
ICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKwogI2luY2x1ZGUgPGxp
bWl0cz4KICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTEwMiw3ICsx
MDQsNyBAQAogCiAvLyBIYXJkZW4gdGhlIHBvaW50ZXJzIHN0b3JlZCBpbiB0aGUgVENNYWxsb2Mg
bGlua2VkIGxpc3RzCiAjaWYgQ09NUElMRVIoR0NDKQotI2RlZmluZSBFTkFCTEVfVENNQUxMT0Nf
SEFSREVOSU5HIDAKKyNkZWZpbmUgRU5BQkxFX1RDTUFMTE9DX0hBUkRFTklORyAxCiAjZW5kaWYK
IAogLy8gVXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgdG8gcGVyaW9kaWNhbGx5IHNjYXZlbmdlIG1l
bW9yeSB0byByZWxlYXNlIGJhY2sgdG8gdGhlIHN5c3RlbQpAQCAtNTIwLDEzICs1MjIsNDEgQEAg
bmFtZXNwYWNlIFdURiB7CiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyIGtMTEhhcmRlbmluZ01hc2sg
PSAwOwogZW51bSB7Ci0gICAgTWFza0FkZHJTaGlmdCA9IDgsCi0gICAgTWFza0tleVNoaWZ0ID0g
NAorICAgIE1hc2tLZXlTaGlmdCA9IDEzCit9OworCit0ZW1wbGF0ZSA8dW5zaWduZWQ+IHN0cnVj
dCBFbnRyb3B5U291cmNlOwordGVtcGxhdGUgPD4gc3RydWN0IEVudHJvcHlTb3VyY2U8ND4gewor
ICAgIHN0YXRpYyB1aW50MzJfdCB2YWx1ZSgpCisgICAgeworI2lmIE9TKERBUldJTikKKyAgICAg
ICAgcmV0dXJuIGFyYzRyYW5kb20oKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihjdXJyZW50VGltZSgpICogMTAwMDAp
IF4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZrTExIYXJkZW5pbmdNYXNrKSk7CisjZW5k
aWYKKyAgICB9CiB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW50cm9weVNvdXJjZTw4PiB7Cisg
ICAgc3RhdGljIHVpbnQ2NF90IHZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBFbnRyb3B5
U291cmNlPDQ+Ojp2YWx1ZSgpIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihFbnRyb3B5U291cmNl
PDQ+Ojp2YWx1ZSgpKSA8PCAzMik7CisgICAgfQorfTsKKworc3RhdGljIEFMV0FZU19JTkxJTkUg
dWludHB0cl90IGludGVybmFsRW50cm9weVZhbHVlKCkgeworICAgIHN0YXRpYyB1aW50cHRyX3Qg
dmFsdWUgPSBFbnRyb3B5U291cmNlPHNpemVvZih1aW50cHRyX3QpPjo6dmFsdWUoKTsKKyAgICBB
U1NFUlQodmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworI2RlZmluZSBIQVJERU5JTkdf
RU5UUk9QWSBpbnRlcm5hbEVudHJvcHlWYWx1ZSgpCiAjZGVmaW5lIFJPVEFURV9WQUxVRSh2YWx1
ZSwgYW1vdW50KSAoKCh2YWx1ZSkgPj4gKGFtb3VudCkpIHwgKCh2YWx1ZSkgPDwgKHNpemVvZih2
YWx1ZSkgKiA4IC0gKGFtb3VudCkpKSkKLSNkZWZpbmUgWE9SX01BU0tfUFRSX1dJVEhfS0VZKHB0
ciwga2V5KSAocmVpbnRlcnByZXRfY2FzdDx0eXBlb2YocHRyKT4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHB0cileUk9UQVRFX1ZBTFVFKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihr
ZXkpLCBNYXNrS2V5U2hpZnQpXlJPVEFURV9WQUxVRShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oJmtMTEhhcmRlbmluZ01hc2spLCBNYXNrQWRkclNoaWZ0KSkpCisjZGVmaW5lIFhPUl9NQVNL
X1BUUl9XSVRIX0tFWShwdHIsIGtleSwgZW50cm9weSkgKHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW9m
KHB0cik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpXihST1RBVEVfVkFMVUUocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGtleSksIE1hc2tLZXlTaGlmdCleZW50cm9weSkpKQor
CiAjZWxzZQotI2RlZmluZSBYT1JfTUFTS19QVFJfV0lUSF9LRVkocHRyLCBrZXkpIChwdHIpCisj
ZGVmaW5lIFhPUl9NQVNLX1BUUl9XSVRIX0tFWShwdHIsIGtleSwgZW50cm9weSkgKCgodm9pZCll
bnRyb3B5KSwgKCh2b2lkKWtleSksIHB0cikKKyNkZWZpbmUgSEFSREVOSU5HX0VOVFJPUFkgMAog
I2VuZGlmCiAKIApAQCAtNjYyLDEyICs2OTIsNDAgQEAgc3RhdGljIHNpemVfdCBjbGFzc190b19z
aXplW2tOdW1DbGFzc2VzXTsKIC8vIE1hcHBpbmcgZnJvbSBzaXplIGNsYXNzIHRvIG51bWJlciBv
ZiBwYWdlcyB0byBhbGxvY2F0ZSBhdCBhIHRpbWUKIHN0YXRpYyBzaXplX3QgY2xhc3NfdG9fcGFn
ZXNba051bUNsYXNzZXNdOwogCisvLyBIYXJkZW5lZCBzaW5nbHkgbGlua2VkIGxpc3QuICBXZSBt
YWtlIHRoaXMgYSBzdHJ1Y3QgdG8gYWxsb3cgY29tcGlsZXIgdG8KKy8vIHN0YXRpY2FsbHkgcHJl
dmVudCBtaXNtYXRjaGluZyBoYXJkZW5lZCBhbmQgbm9uLWhhcmRlbmVkIGxpc3QKK2NsYXNzIEhh
cmRlbmVkU0xMIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSGFyZGVuZWRTTEwgY3JlYXRlKHZvaWQq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFyZGVuZWRTTEwgcmVzdWx0OworICAgICAgICByZXN1
bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBIYXJkZW5lZFNMTCBudWxsKCkKKyAgICB7CisgICAgICAgIEhhcmRlbmVkU0xMIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSAwOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHZvaWQgc2V0VmFsdWUodm9pZCogdmFsdWUpIHsgbV92YWx1ZSA9IHZh
bHVlOyB9CisgICAgdm9pZCogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQorICAgIHR5cGVkZWYg
dm9pZCogKEhhcmRlbmVkU0xMOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3Ig
VW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPyAmSGFyZGVuZWRT
TEw6Om1fdmFsdWUgOiAwOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCogbV92YWx1ZTsKK307CisK
IC8vIFRyYW5zZmVyQ2FjaGUgaXMgdXNlZCB0byBjYWNoZSB0cmFuc2ZlcnMgb2YgbnVtX29iamVj
dHNfdG9fbW92ZVtzaXplX2NsYXNzXQogLy8gYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aHJlYWQg
Y2FjaGVzIGFuZCB0aGUgY2VudHJhbCBjYWNoZSBmb3IgYSBnaXZlbiBzaXplCiAvLyBjbGFzcy4K
IHN0cnVjdCBUQ0VudHJ5IHsKLSAgdm9pZCAqaGVhZDsgIC8vIEhlYWQgb2YgY2hhaW4gb2Ygb2Jq
ZWN0cy4KLSAgdm9pZCAqdGFpbDsgIC8vIFRhaWwgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KKyAgSGFy
ZGVuZWRTTEwgaGVhZDsgIC8vIEhlYWQgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KKyAgSGFyZGVuZWRT
TEwgdGFpbDsgIC8vIFRhaWwgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KIH07CiAvLyBBIGNlbnRyYWwg
Y2FjaGUgZnJlZWxpc3QgY2FuIGhhdmUgYW55d2hlcmUgZnJvbSAwIHRvIGtOdW1UcmFuc2ZlckVu
dHJpZXMKIC8vIHNsb3RzIHRvIHB1dCBsaW5rIGxpc3QgY2hhaW5zIGludG8uICBUbyBrZWVwIG1l
bW9yeSB1c2FnZSBib3VuZGVkIHRoZSB0b3RhbApAQCAtNjkyLDYzICs3NTAsNjEgQEAgc3RhdGlj
IGlubGluZSBpbnQgTGdGbG9vcihzaXplX3QgbikgewogICByZXR1cm4gbG9nOwogfQogCi0vLyBT
b21lIHZlcnkgYmFzaWMgbGlua2VkIGxpc3QgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggdXNp
bmcgdm9pZCAqIGFzCi0vLyBzdG9yYWdlLgotCi1zdGF0aWMgaW5saW5lIHZvaWQgKlNMTF9OZXh0
KHZvaWQgKnQpIHsKLSAgcmV0dXJuIFhPUl9NQVNLX1BUUl9XSVRIX0tFWSgqKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPih0KSksIHQpOworLy8gRnVuY3Rpb25zIGZvciB1c2luZyBvdXIgc2ltcGxl
IGhhcmRlbmVkIHNpbmdseSBsaW5rZWQgbGlzdAorc3RhdGljIGlubGluZSBIYXJkZW5lZFNMTCBT
TExfTmV4dChIYXJkZW5lZFNMTCB0LCB1aW50cHRyX3QgZW50cm9weSkgeworICAgIHJldHVybiBI
YXJkZW5lZFNMTDo6Y3JlYXRlKFhPUl9NQVNLX1BUUl9XSVRIX0tFWSgqKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPih0LnZhbHVlKCkpKSwgdC52YWx1ZSgpLCBlbnRyb3B5KSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBTTExfU2V0TmV4dCh2b2lkICp0LCB2b2lkICpuKSB7Ci0gICoocmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KHQpKSA9IFhPUl9NQVNLX1BUUl9XSVRIX0tFWShuLCB0KTsKK3N0
YXRpYyBpbmxpbmUgdm9pZCBTTExfU2V0TmV4dChIYXJkZW5lZFNMTCB0LCBIYXJkZW5lZFNMTCBu
LCB1aW50cHRyX3QgZW50cm9weSkgeworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHQu
dmFsdWUoKSkpID0gWE9SX01BU0tfUFRSX1dJVEhfS0VZKG4udmFsdWUoKSwgdC52YWx1ZSgpLCBl
bnRyb3B5KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9QdXNoKHZvaWQgKipsaXN0LCB2
b2lkICplbGVtZW50KSB7Ci0gIFNMTF9TZXROZXh0KGVsZW1lbnQsICpsaXN0KTsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBTTExfUHVzaChIYXJkZW5lZFNMTCogbGlzdCwgSGFyZGVuZWRTTEwgZWxlbWVu
dCwgdWludHB0cl90IGVudHJvcHkpIHsKKyAgU0xMX1NldE5leHQoZWxlbWVudCwgKmxpc3QsIGVu
dHJvcHkpOwogICAqbGlzdCA9IGVsZW1lbnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqU0xM
X1BvcCh2b2lkICoqbGlzdCkgewotICB2b2lkICpyZXN1bHQgPSAqbGlzdDsKLSAgKmxpc3QgPSBT
TExfTmV4dCgqbGlzdCk7CitzdGF0aWMgaW5saW5lIEhhcmRlbmVkU0xMIFNMTF9Qb3AoSGFyZGVu
ZWRTTEwgKmxpc3QsIHVpbnRwdHJfdCBlbnRyb3B5KSB7CisgIEhhcmRlbmVkU0xMIHJlc3VsdCA9
ICpsaXN0OworICAqbGlzdCA9IFNMTF9OZXh0KCpsaXN0LCBlbnRyb3B5KTsKICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotCiAvLyBSZW1vdmUgTiBlbGVtZW50cyBmcm9tIGEgbGlua2VkIGxpc3QgdG8g
d2hpY2ggaGVhZCBwb2ludHMuICBoZWFkIHdpbGwgYmUKIC8vIG1vZGlmaWVkIHRvIHBvaW50IHRv
IHRoZSBuZXcgaGVhZC4gIHN0YXJ0IGFuZCBlbmQgd2lsbCBwb2ludCB0byB0aGUgZmlyc3QKIC8v
IGFuZCBsYXN0IG5vZGVzIG9mIHRoZSByYW5nZS4gIE5vdGUgdGhhdCBlbmQgd2lsbCBwb2ludCB0
byBOVUxMIGFmdGVyIHRoaXMKIC8vIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLXN0YXRpYyBpbmxpbmUg
dm9pZCBTTExfUG9wUmFuZ2Uodm9pZCAqKmhlYWQsIGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQg
KiplbmQpIHsKKworc3RhdGljIGlubGluZSB2b2lkIFNMTF9Qb3BSYW5nZShIYXJkZW5lZFNMTCog
aGVhZCwgaW50IE4sIEhhcmRlbmVkU0xMICpzdGFydCwgSGFyZGVuZWRTTEwgKmVuZCwgdWludHB0
cl90IGVudHJvcHkpIHsKICAgaWYgKE4gPT0gMCkgewotICAgICpzdGFydCA9IE5VTEw7Ci0gICAg
KmVuZCA9IE5VTEw7CisgICAgKnN0YXJ0ID0gSGFyZGVuZWRTTEw6Om51bGwoKTsKKyAgICAqZW5k
ID0gSGFyZGVuZWRTTEw6Om51bGwoKTsKICAgICByZXR1cm47CiAgIH0KIAotICB2b2lkICp0bXAg
PSAqaGVhZDsKKyAgSGFyZGVuZWRTTEwgdG1wID0gKmhlYWQ7CiAgIGZvciAoaW50IGkgPSAxOyBp
IDwgTjsgKytpKSB7Ci0gICAgdG1wID0gU0xMX05leHQodG1wKTsKKyAgICB0bXAgPSBTTExfTmV4
dCh0bXAsIGVudHJvcHkpOwogICB9CiAKICAgKnN0YXJ0ID0gKmhlYWQ7CiAgICplbmQgPSB0bXA7
Ci0gICpoZWFkID0gU0xMX05leHQodG1wKTsKKyAgKmhlYWQgPSBTTExfTmV4dCh0bXAsIGVudHJv
cHkpOwogICAvLyBVbmxpbmsgcmFuZ2UgZnJvbSBsaXN0LgotICBTTExfU2V0TmV4dCh0bXAsIE5V
TEwpOworICBTTExfU2V0TmV4dCh0bXAsIEhhcmRlbmVkU0xMOjpudWxsKCksIGVudHJvcHkpOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgU0xMX1B1c2hSYW5nZSh2b2lkICoqaGVhZCwgdm9pZCAq
c3RhcnQsIHZvaWQgKmVuZCkgeworc3RhdGljIGlubGluZSB2b2lkIFNMTF9QdXNoUmFuZ2UoSGFy
ZGVuZWRTTEwgKmhlYWQsIEhhcmRlbmVkU0xMIHN0YXJ0LCBIYXJkZW5lZFNMTCBlbmQsIHVpbnRw
dHJfdCBlbnRyb3B5KSB7CiAgIGlmICghc3RhcnQpIHJldHVybjsKLSAgU0xMX1NldE5leHQoZW5k
LCAqaGVhZCk7CisgIFNMTF9TZXROZXh0KGVuZCwgKmhlYWQsIGVudHJvcHkpOwogICAqaGVhZCA9
IHN0YXJ0OwogfQogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBTTExfU2l6ZSh2b2lkICpoZWFkKSB7
CitzdGF0aWMgaW5saW5lIHNpemVfdCBTTExfU2l6ZShIYXJkZW5lZFNMTCBoZWFkLCB1aW50cHRy
X3QgZW50cm9weSkgewogICBpbnQgY291bnQgPSAwOwogICB3aGlsZSAoaGVhZCkgewogICAgIGNv
dW50Kys7Ci0gICAgaGVhZCA9IFNMTF9OZXh0KGhlYWQpOworICAgIGhlYWQgPSBTTExfTmV4dCho
ZWFkLCBlbnRyb3B5KTsKICAgfQogICByZXR1cm4gY291bnQ7CiB9CkBAIC05NDIsMzAgKzk5OCwz
MiBAQCBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvciB7CiAgIHNpemVfdCBmcmVlX2F2YWlsXzsKIAog
ICAvLyBMaW5rZWQgbGlzdCBvZiBhbGwgcmVnaW9ucyBhbGxvY2F0ZWQgYnkgdGhpcyBhbGxvY2F0
b3IKLSAgdm9pZCogYWxsb2NhdGVkX3JlZ2lvbnNfOworICBIYXJkZW5lZFNMTCBhbGxvY2F0ZWRf
cmVnaW9uc187CiAKICAgLy8gRnJlZSBsaXN0IG9mIGFscmVhZHkgY2FydmVkIG9iamVjdHMKLSAg
dm9pZCogZnJlZV9saXN0XzsKKyAgSGFyZGVuZWRTTEwgZnJlZV9saXN0XzsKIAogICAvLyBOdW1i
ZXIgb2YgYWxsb2NhdGVkIGJ1dCB1bmZyZWVkIG9iamVjdHMKICAgaW50IGludXNlXzsKKyAgdWlu
dHB0cl90IGVudHJvcHlfOwogCiAgcHVibGljOgotICB2b2lkIEluaXQoKSB7CisgIHZvaWQgSW5p
dCh1aW50cHRyX3QgZW50cm9weSkgewogICAgIEFTU0VSVChrQWxpZ25lZFNpemUgPD0ga0FsbG9j
SW5jcmVtZW50KTsKICAgICBpbnVzZV8gPSAwOwotICAgIGFsbG9jYXRlZF9yZWdpb25zXyA9IDA7
CisgICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gSGFyZGVuZWRTTEw6Om51bGwoKTsKICAgICBmcmVl
X2FyZWFfID0gTlVMTDsKICAgICBmcmVlX2F2YWlsXyA9IDA7Ci0gICAgZnJlZV9saXN0XyA9IE5V
TEw7CisgICAgZnJlZV9saXN0Xy5zZXRWYWx1ZShOVUxMKTsKKyAgICBlbnRyb3B5XyA9IGVudHJv
cHk7CiAgIH0KIAogICBUKiBOZXcoKSB7CiAgICAgLy8gQ29uc3VsdCBmcmVlIGxpc3QKICAgICB2
b2lkKiByZXN1bHQ7Ci0gICAgaWYgKGZyZWVfbGlzdF8gIT0gTlVMTCkgewotICAgICAgcmVzdWx0
ID0gZnJlZV9saXN0XzsKLSAgICAgIGZyZWVfbGlzdF8gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPihyZXN1bHQpKTsKKyAgICBpZiAoZnJlZV9saXN0XykgeworICAgICAgcmVzdWx0ID0gZnJl
ZV9saXN0Xy52YWx1ZSgpOworICAgICAgZnJlZV9saXN0XyA9IFNMTF9OZXh0KGZyZWVfbGlzdF8s
IGVudHJvcHlfKTsKICAgICB9IGVsc2UgewogICAgICAgaWYgKGZyZWVfYXZhaWxfIDwga0FsaWdu
ZWRTaXplKSB7CiAgICAgICAgIC8vIE5lZWQgbW9yZSByb29tCkBAIC05NzMsOCArMTAzMSw5IEBA
IGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKICAgICAgICAgaWYgKCFuZXdfYWxsb2NhdGlvbikK
ICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICpyZWludGVycHJldF9jYXN0X3B0cjx2b2lk
Kio+KG5ld19hbGxvY2F0aW9uKSA9IGFsbG9jYXRlZF9yZWdpb25zXzsKLSAgICAgICAgYWxsb2Nh
dGVkX3JlZ2lvbnNfID0gbmV3X2FsbG9jYXRpb247CisgICAgICAgIEhhcmRlbmVkU0xMIG5ld19o
ZWFkID0gSGFyZGVuZWRTTEw6OmNyZWF0ZShuZXdfYWxsb2NhdGlvbik7CisgICAgICAgIFNMTF9T
ZXROZXh0KG5ld19oZWFkLCBhbGxvY2F0ZWRfcmVnaW9uc18sIGVudHJvcHlfKTsKKyAgICAgICAg
YWxsb2NhdGVkX3JlZ2lvbnNfID0gbmV3X2hlYWQ7CiAgICAgICAgIGZyZWVfYXJlYV8gPSBuZXdf
YWxsb2NhdGlvbiArIGtBbGlnbmVkU2l6ZTsKICAgICAgICAgZnJlZV9hdmFpbF8gPSBrQWxsb2NJ
bmNyZW1lbnQgLSBrQWxpZ25lZFNpemU7CiAgICAgICB9CkBAIC05ODcsOCArMTA0Niw5IEBAIGNs
YXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKICAgfQogCiAgIHZvaWQgRGVsZXRlKFQqIHApIHsKLSAg
ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBmcmVlX2xpc3RfOwotICAgIGZyZWVf
bGlzdF8gPSBwOworICAgIEhhcmRlbmVkU0xMIG5ld19oZWFkID0gSGFyZGVuZWRTTEw6OmNyZWF0
ZShwKTsKKyAgICBTTExfU2V0TmV4dChuZXdfaGVhZCwgZnJlZV9saXN0XywgZW50cm9weV8pOwor
ICAgIGZyZWVfbGlzdF8gPSBuZXdfaGVhZDsKICAgICBpbnVzZV8tLTsKICAgfQogCkBAIC05OTgs
OCArMTA1OCw4IEBAIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKICAgdGVtcGxhdGUgPGNsYXNz
IFJlY29yZGVyPgogICB2b2lkIHJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYg
cmVjb3JkZXIsIGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyKQogICB7Ci0gICAgICBm
b3IgKHZvaWQqIGFkbWluQWxsb2NhdGlvbiA9IGFsbG9jYXRlZF9yZWdpb25zXzsgYWRtaW5BbGxv
Y2F0aW9uOyBhZG1pbkFsbG9jYXRpb24gPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFsbG9jYXRpb24pKSkKLSAgICAgICAgICByZWNv
cmRlci5yZWNvcmRSZWdpb24ocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGFkbWluQWxs
b2NhdGlvbiksIGtBbGxvY0luY3JlbWVudCk7CisgICAgICBmb3IgKEhhcmRlbmVkU0xMIGFkbWlu
QWxsb2NhdGlvbiA9IGFsbG9jYXRlZF9yZWdpb25zXzsgYWRtaW5BbGxvY2F0aW9uOyBhZG1pbkFs
bG9jYXRpb24uc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUluSGFyZGVuZWRMaW5rZWRMaXN0KHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFsbG9jYXRpb24udmFsdWUoKSksIGVudHJvcHlf
KSkpCisgICAgICAgICAgcmVjb3JkZXIucmVjb3JkUmVnaW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm1f
YWRkcmVzc190PihhZG1pbkFsbG9jYXRpb24udmFsdWUoKSksIGtBbGxvY0luY3JlbWVudCk7CiAg
IH0KICNlbmRpZgogfTsKQEAgLTEwNDAsMTYgKzExMDAsMTcgQEAgc3RhdGljIHNpemVfdCBBbGxv
Y2F0aW9uU2l6ZShzaXplX3QgYnl0ZXMpIHsKIHN0cnVjdCBTcGFuIHsKICAgUGFnZUlEICAgICAg
ICBzdGFydDsgICAgICAgICAgLy8gU3RhcnRpbmcgcGFnZSBudW1iZXIKICAgTGVuZ3RoICAgICAg
ICBsZW5ndGg7ICAgICAgICAgLy8gTnVtYmVyIG9mIHBhZ2VzIGluIHNwYW4KLSAgU3BhbiogbmV4
dCgpIGNvbnN0IHsgcmV0dXJuIFhPUl9NQVNLX1BUUl9XSVRIX0tFWShtX25leHQsIHRoaXMpOyB9
Ci0gIFNwYW4qIHByZXYoKSBjb25zdCB7IHJldHVybiBYT1JfTUFTS19QVFJfV0lUSF9LRVkobV9w
cmV2LCB0aGlzKTsgfQotICB2b2lkIHNldE5leHQoU3BhbiogbmV4dCkgeyBtX25leHQgPSBYT1Jf
TUFTS19QVFJfV0lUSF9LRVkobmV4dCwgdGhpcyk7IH0KLSAgdm9pZCBzZXRQcmV2KFNwYW4qIHBy
ZXYpIHsgbV9wcmV2ID0gWE9SX01BU0tfUFRSX1dJVEhfS0VZKHByZXYsIHRoaXMpOyB9CisgIFNw
YW4qIG5leHQodWludHB0cl90IGVudHJvcHkpIGNvbnN0IHsgcmV0dXJuIFhPUl9NQVNLX1BUUl9X
SVRIX0tFWShtX25leHQsIHRoaXMsIGVudHJvcHkpOyB9CisgIFNwYW4qIHJlbW90ZU5leHQoY29u
c3QgU3BhbiogcmVtb3RlU3BhblBvaW50ZXIsIHVpbnRwdHJfdCBlbnRyb3B5KSBjb25zdCB7IHJl
dHVybiBYT1JfTUFTS19QVFJfV0lUSF9LRVkobV9uZXh0LCByZW1vdGVTcGFuUG9pbnRlciwgZW50
cm9weSk7IH0KKyAgU3BhbiogcHJldih1aW50cHRyX3QgZW50cm9weSkgY29uc3QgeyByZXR1cm4g
WE9SX01BU0tfUFRSX1dJVEhfS0VZKG1fcHJldiwgdGhpcywgZW50cm9weSk7IH0KKyAgdm9pZCBz
ZXROZXh0KFNwYW4qIG5leHQsIHVpbnRwdHJfdCBlbnRyb3B5KSB7IG1fbmV4dCA9IFhPUl9NQVNL
X1BUUl9XSVRIX0tFWShuZXh0LCB0aGlzLCBlbnRyb3B5KTsgfQorICB2b2lkIHNldFByZXYoU3Bh
biogcHJldiwgdWludHB0cl90IGVudHJvcHkpIHsgbV9wcmV2ID0gWE9SX01BU0tfUFRSX1dJVEhf
S0VZKHByZXYsIHRoaXMsIGVudHJvcHkpOyB9CiAKIHByaXZhdGU6CiAgIFNwYW4qICAgICAgICAg
bV9uZXh0OyAgICAgICAgICAgLy8gVXNlZCB3aGVuIGluIGxpbmsgbGlzdAogICBTcGFuKiAgICAg
ICAgIG1fcHJldjsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBpbiBsaW5rIGxpc3QKIHB1YmxpYzoK
LSAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlua2VkIGxpc3Qgb2YgZnJlZSBv
YmplY3RzCisgIEhhcmRlbmVkU0xMICAgIG9iamVjdHM7ICAgICAgICAvLyBMaW5rZWQgbGlzdCBv
ZiBmcmVlIG9iamVjdHMKICAgdW5zaWduZWQgaW50ICBmcmVlIDogMTsgICAgICAgLy8gSXMgdGhl
IHNwYW4gZnJlZQogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCiAgIHVuc2lnbmVkIGludCAg
c2FtcGxlIDogMTsgICAgIC8vIFNhbXBsZWQgb2JqZWN0PwpAQCAtMTEwNSwyNSArMTE2NiwyNSBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgRGVsZXRlU3BhbihTcGFuKiBzcGFuKSB7CiAvLyBEb3VibHkg
bGlua2VkIGxpc3Qgb2Ygc3BhbnMuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBETExfSW5pdChTcGFuKiBsaXN0KSB7Ci0gIGxpc3QtPnNldE5leHQobGlzdCk7Ci0g
IGxpc3QtPnNldFByZXYobGlzdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMX0luaXQoU3Bhbiog
bGlzdCwgdWludHB0cl90IGVudHJvcHkpIHsKKyAgbGlzdC0+c2V0TmV4dChsaXN0LCBlbnRyb3B5
KTsKKyAgbGlzdC0+c2V0UHJldihsaXN0LCBlbnRyb3B5KTsKIH0KIAotc3RhdGljIGlubGluZSB2
b2lkIERMTF9SZW1vdmUoU3Bhbiogc3BhbikgewotICBzcGFuLT5wcmV2KCktPnNldE5leHQoc3Bh
bi0+bmV4dCgpKTsKLSAgc3Bhbi0+bmV4dCgpLT5zZXRQcmV2KHNwYW4tPnByZXYoKSk7Ci0gIHNw
YW4tPnNldFByZXYoTlVMTCk7Ci0gIHNwYW4tPnNldE5leHQoTlVMTCk7CitzdGF0aWMgaW5saW5l
IHZvaWQgRExMX1JlbW92ZShTcGFuKiBzcGFuLCB1aW50cHRyX3QgZW50cm9weSkgeworICBzcGFu
LT5wcmV2KGVudHJvcHkpLT5zZXROZXh0KHNwYW4tPm5leHQoZW50cm9weSksIGVudHJvcHkpOwor
ICBzcGFuLT5uZXh0KGVudHJvcHkpLT5zZXRQcmV2KHNwYW4tPnByZXYoZW50cm9weSksIGVudHJv
cHkpOworICBzcGFuLT5zZXRQcmV2KE5VTEwsIGVudHJvcHkpOworICBzcGFuLT5zZXROZXh0KE5V
TEwsIGVudHJvcHkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIERMTF9Jc0VtcHR5
KGNvbnN0IFNwYW4qIGxpc3QpIHsKLSAgcmV0dXJuIGxpc3QtPm5leHQoKSA9PSBsaXN0Oworc3Rh
dGljIEFMV0FZU19JTkxJTkUgYm9vbCBETExfSXNFbXB0eShjb25zdCBTcGFuKiBsaXN0LCB1aW50
cHRyX3QgZW50cm9weSkgeworICByZXR1cm4gbGlzdC0+bmV4dChlbnRyb3B5KSA9PSBsaXN0Owog
fQogCi1zdGF0aWMgaW50IERMTF9MZW5ndGgoY29uc3QgU3BhbiogbGlzdCkgeworc3RhdGljIGlu
dCBETExfTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QsIHVpbnRwdHJfdCBlbnRyb3B5KSB7CiAgIGlu
dCByZXN1bHQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0KCk7IHMgIT0gbGlzdDsg
cyA9IHMtPm5leHQoKSkgeworICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0KGVudHJvcHkpOyBz
ICE9IGxpc3Q7IHMgPSBzLT5uZXh0KGVudHJvcHkpKSB7CiAgICAgcmVzdWx0Kys7CiAgIH0KICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTExMzksMTMgKzEyMDAsMTEgQEAgc3RhdGljIHZvaWQgRExMX1By
aW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KSB7CiB9CiAjZW5kaWYKIAot
c3RhdGljIGlubGluZSB2b2lkIERMTF9QcmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNwYW4pIHsK
LSAgQVNTRVJUKHNwYW4tPm5leHQoKSA9PSBOVUxMKTsKLSAgQVNTRVJUKHNwYW4tPnByZXYoKSA9
PSBOVUxMKTsKLSAgc3Bhbi0+c2V0TmV4dChsaXN0LT5uZXh0KCkpOwotICBzcGFuLT5zZXRQcmV2
KGxpc3QpOwotICBsaXN0LT5uZXh0KCktPnNldFByZXYoc3Bhbik7Ci0gIGxpc3QtPnNldE5leHQo
c3Bhbik7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMX1ByZXBlbmQoU3BhbiogbGlzdCwgU3Bhbiog
c3BhbiwgdWludHB0cl90IGVudHJvcHkpIHsKKyAgc3Bhbi0+c2V0TmV4dChsaXN0LT5uZXh0KGVu
dHJvcHkpLCBlbnRyb3B5KTsKKyAgc3Bhbi0+c2V0UHJldihsaXN0LCBlbnRyb3B5KTsKKyAgbGlz
dC0+bmV4dChlbnRyb3B5KS0+c2V0UHJldihzcGFuLCBlbnRyb3B5KTsKKyAgbGlzdC0+c2V0TmV4
dChzcGFuLCBlbnRyb3B5KTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU0LDE2ICsxMjEzLDE2
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBETExfUHJlcGVuZChTcGFuKiBsaXN0LCBTcGFuKiBzcGFu
KSB7CiAKIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewogIHB1YmxpYzoKLSAgdm9p
ZCBJbml0KHNpemVfdCBjbCk7CisgIHZvaWQgSW5pdChzaXplX3QgY2wsIHVpbnRwdHJfdCBlbnRy
b3B5KTsKIAogICAvLyBUaGVzZSBtZXRob2RzIGFsbCBkbyBpbnRlcm5hbCBsb2NraW5nLgogCiAg
IC8vIEluc2VydCB0aGUgc3BlY2lmaWVkIHJhbmdlIGludG8gdGhlIGNlbnRyYWwgZnJlZWxpc3Qu
ICBOIGlzIHRoZSBudW1iZXIgb2YKICAgLy8gZWxlbWVudHMgaW4gdGhlIHJhbmdlLgotICB2b2lk
IEluc2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKTsKKyAgdm9pZCBJbnNl
cnRSYW5nZShIYXJkZW5lZFNMTCBzdGFydCwgSGFyZGVuZWRTTEwgZW5kLCBpbnQgTik7CiAKICAg
Ly8gUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGludG8gTi4K
LSAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTik7Cisg
IHZvaWQgUmVtb3ZlUmFuZ2UoSGFyZGVuZWRTTEwqIHN0YXJ0LCBIYXJkZW5lZFNMTCogZW5kLCBp
bnQgKk4pOwogCiAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2Fj
aGUuCiAgIHNpemVfdCBsZW5ndGgoKSB7CkBAIC0xMTgxLDQzICsxMjQwLDUwIEBAIGNsYXNzIFRD
TWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewogICB0ZW1wbGF0ZSA8Y2xhc3MgRmluZGVyLCBjbGFz
cyBSZWFkZXI+CiAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNv
bnN0IFJlYWRlciYgcmVhZGVyLCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0KiByZW1vdGVDZW50
cmFsRnJlZUxpc3QpCiAgIHsKLSAgICBmb3IgKFNwYW4qIHNwYW4gPSAmZW1wdHlfOyBzcGFuICYm
IHNwYW4gIT0gJmVtcHR5Xzsgc3BhbiA9IChzcGFuLT5uZXh0KCkgPyByZWFkZXIoc3Bhbi0+bmV4
dCgpKSA6IDApKQotICAgICAgQVNTRVJUKCFzcGFuLT5vYmplY3RzKTsKKyAgICB7CisgICAgICBz
dGF0aWMgY29uc3QgcHRyZGlmZl90IGVtcHR5T2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oJmVtcHR5XykgLSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzKTsK
KyAgICAgIFNwYW4qIHJlbW90ZUVtcHR5ID0gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVMaXN0KSArIGVtcHR5T2Zmc2V0KTsK
KyAgICAgIFNwYW4qIHJlbW90ZVNwYW4gPSBub25lbXB0eV8ucmVtb3RlTmV4dChyZW1vdGVFbXB0
eSwgZW50cm9weV8pOworICAgICAgZm9yIChTcGFuKiBzcGFuID0gcmVhZGVyKHJlbW90ZUVtcHR5
KTsgc3BhbiAmJiBzcGFuICE9ICZlbXB0eV87IHJlbW90ZVNwYW4gPSBzcGFuLT5yZW1vdGVOZXh0
KHJlbW90ZVNwYW4sIGVudHJvcHlfKSwgc3BhbiA9IChyZW1vdGVTcGFuID8gcmVhZGVyKHJlbW90
ZVNwYW4pIDogMCkpCisgICAgICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0cyk7CisgICAgfQogCiAg
ICAgQVNTRVJUKCFub25lbXB0eV8ub2JqZWN0cyk7CiAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZf
dCBub25lbXB0eU9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZub25lbXB0
eV8pIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhpcyk7CiAKICAgICBTcGFuKiBy
ZW1vdGVOb25lbXB0eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkgKyBub25lbXB0eU9mZnNldCk7Ci0gICAgU3Bh
biogcmVtb3RlU3BhbiA9IG5vbmVtcHR5Xy5uZXh0KCk7CisgICAgU3BhbiogcmVtb3RlU3BhbiA9
IG5vbmVtcHR5Xy5yZW1vdGVOZXh0KHJlbW90ZU5vbmVtcHR5LCBlbnRyb3B5Xyk7CiAKLSAgICBm
b3IgKFNwYW4qIHNwYW4gPSByZWFkZXIocmVtb3RlU3Bhbik7IHNwYW4gJiYgcmVtb3RlU3BhbiAh
PSByZW1vdGVOb25lbXB0eTsgcmVtb3RlU3BhbiA9IHNwYW4tPm5leHQoKSwgc3BhbiA9IChzcGFu
LT5uZXh0KCkgPyByZWFkZXIoc3Bhbi0+bmV4dCgpKSA6IDApKSB7Ci0gICAgICBmb3IgKHZvaWQq
IG5leHRPYmplY3QgPSBzcGFuLT5vYmplY3RzOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0ID0gcmVh
ZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9i
amVjdCkpKQotICAgICAgICBmaW5kZXIudmlzaXQobmV4dE9iamVjdCk7CisgICAgZm9yIChTcGFu
KiBzcGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBzcGFuICYmIHJlbW90ZVNwYW4gIT0gcmVtb3Rl
Tm9uZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5yZW1vdGVOZXh0KHJlbW90ZVNwYW4sIGVudHJv
cHlfKSwgc3BhbiA9IChyZW1vdGVTcGFuID8gcmVhZGVyKHJlbW90ZVNwYW4pIDogMCkpIHsKKyAg
ICAgIGZvciAoSGFyZGVuZWRTTEwgbmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRPYmpl
Y3Q7IG5leHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUluSGFyZGVuZWRMaW5rZWRM
aXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0LnZhbHVlKCkpLCBlbnRyb3B5
XykpKSB7CisgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZhbHVlKCkpOworICAgICAg
fQogICAgIH0KICAgfQogI2VuZGlmCiAKKyAgdWludHB0cl90IGVudHJvcHkoKSBjb25zdCB7IHJl
dHVybiBlbnRyb3B5XzsgfQogIHByaXZhdGU6CiAgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxk
CiAgIC8vIFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgogICAvLyBSZXR1cm4g
TlVMTCBpZiBubyBmcmVlIGVudHJpZXMgaW4gY2FjaGUuCi0gIHZvaWQqIEZldGNoRnJvbVNwYW5z
KCk7CisgIEhhcmRlbmVkU0xMIEZldGNoRnJvbVNwYW5zKCk7CiAKICAgLy8gUkVRVUlSRVM6IGxv
Y2tfIGlzIGhlbGQKICAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCByZXR1cm4uICBG
ZXRjaGVzCiAgIC8vIGZyb20gcGFnZWhlYXAgaWYgY2FjaGUgaXMgZW1wdHkuICBPbmx5IHJldHVy
bnMKICAgLy8gTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gIHZvaWQqIEZldGNoRnJvbVNw
YW5zU2FmZSgpOworICBIYXJkZW5lZFNMTCBGZXRjaEZyb21TcGFuc1NhZmUoKTsKIAogICAvLyBS
RVFVSVJFUzogbG9ja18gaXMgaGVsZAogICAvLyBSZWxlYXNlIGEgbGlua2VkIGxpc3Qgb2Ygb2Jq
ZWN0cyB0byBzcGFucy4KICAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIHZv
aWQgUmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsKKyAgdm9pZCBSZWxlYXNlTGlzdFRv
U3BhbnMoSGFyZGVuZWRTTEwgc3RhcnQpOwogCiAgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxk
CiAgIC8vIFJlbGVhc2UgYW4gb2JqZWN0IHRvIHNwYW5zLgogICAvLyBNYXkgdGVtcG9yYXJpbHkg
cmVsZWFzZSBsb2NrXy4KLSAgQUxXQVlTX0lOTElORSB2b2lkIFJlbGVhc2VUb1NwYW5zKHZvaWQq
IG9iamVjdCk7CisgIEFMV0FZU19JTkxJTkUgdm9pZCBSZWxlYXNlVG9TcGFucyhIYXJkZW5lZFNM
TCBvYmplY3QpOwogCiAgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCiAgIC8vIFBvcHVsYXRl
IGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KQEAgLTEyNjgsNiArMTMzNCw3
IEBAIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewogICAvLyBhZGFwdGl2ZSB2YWx1
ZSB0aGF0IGlzIGluY3JlYXNlZCBpZiB0aGVyZSBpcyBsb3RzIG9mIHRyYWZmaWMKICAgLy8gb24g
YSBnaXZlbiBzaXplIGNsYXNzLgogICBpbnQzMl90IGNhY2hlX3NpemVfOworICB1aW50cHRyX3Qg
ZW50cm9weV87CiB9OwogCiAjaWYgQ09NUElMRVIoQ0xBTkcpICYmIGRlZmluZWQoX19oYXNfd2Fy
bmluZykKQEAgLTE1ODYsNiArMTY1Myw5IEBAIGNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFwIHsKICAg
Ly8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cwogICB1aW50cHRyX3QgZnJlZV9w
YWdlc187CiAKKyAgLy8gVXNlZCBmb3IgaGFyZGVuaW5nCisgIHVpbnRwdHJfdCBlbnRyb3B5XzsK
KwogICAvLyBCeXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KICAgdWludDY0X3Qgc3lzdGVtX2J5
dGVzXzsKIApAQCAtMTY3OCw2ICsxNzQ4LDcgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5p
dCgpCiAgIHBhZ2VtYXBfY2FjaGVfID0gUGFnZU1hcENhY2hlKDApOwogICBmcmVlX3BhZ2VzXyA9
IDA7CiAgIHN5c3RlbV9ieXRlc18gPSAwOworICBlbnRyb3B5XyA9IEhBUkRFTklOR19FTlRST1BZ
OwogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogICBmcmVl
X2NvbW1pdHRlZF9wYWdlc18gPSAwOwpAQCAtMTY4OCwxMSArMTc1OSwxMSBAQCB2b2lkIFRDTWFs
bG9jX1BhZ2VIZWFwOjppbml0KCkKICAgLy8gU3RhcnQgc2NhdmVuZ2luZyBhdCBrTWF4UGFnZXMg
bGlzdAogICBzY2F2ZW5nZV9pbmRleF8gPSBrTWF4UGFnZXMtMTsKICAgQ09NUElMRV9BU1NFUlQo
a051bUNsYXNzZXMgPD0gKDEgPDwgUGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFsdWViaXRz
KTsKLSAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwpOwotICBETExfSW5pdCgmbGFyZ2VfLnJldHVy
bmVkKTsKKyAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwsIGVudHJvcHlfKTsKKyAgRExMX0luaXQo
JmxhcmdlXy5yZXR1cm5lZCwgZW50cm9weV8pOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtN
YXhQYWdlczsgaSsrKSB7Ci0gICAgRExMX0luaXQoJmZyZWVfW2ldLm5vcm1hbCk7Ci0gICAgRExM
X0luaXQoJmZyZWVfW2ldLnJldHVybmVkKTsKKyAgICBETExfSW5pdCgmZnJlZV9baV0ubm9ybWFs
LCBlbnRyb3B5Xyk7CisgICAgRExMX0luaXQoJmZyZWVfW2ldLnJldHVybmVkLCBlbnRyb3B5Xyk7
CiAgIH0KIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKQEAg
LTE4MzcsMTEgKzE5MDgsMTEgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UoKQog
ICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0g
a01heFBhZ2VzKSA/ICZsYXJnZV8gOiAmZnJlZV9baV07CiAgICAgICAgICAgICAvLyBJZiB0aGUg
c3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgcGFnZXMgcmV0
dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2UgcmV0dXJuIGFsbCBidXQgMSBzcGFu
LiAgCiAgICAgICAgICAgICAvLyBSZXR1cm4gb25seSA1MCUgb2YgYSBzcGFubGlzdCBhdCBhIHRp
bWUgc28gc3BhbnMgb2Ygc2l6ZSAxIGFyZSBub3QgdGhlIG9ubHkgb25lcyBsZWZ0LgotICAgICAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IERMTF9MZW5ndGgoJnNsaXN0LT5ub3JtYWwpOworICAgICAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IERMTF9MZW5ndGgoJnNsaXN0LT5ub3JtYWwsIGVudHJvcHlf
KTsKICAgICAgICAgICAgIHNpemVfdCBudW1TcGFuc1RvUmV0dXJuID0gKGkgPiBrTWluU3Bhbkxp
c3RzV2l0aFNwYW5zKSA/IGxlbmd0aCA6IGxlbmd0aCAvIDI7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgc3RhdGljX2Nhc3Q8c2l6ZV90PihqKSA8IG51bVNwYW5zVG9SZXR1cm4gJiYgIURM
TF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSAmJiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiB0YXJn
ZXRQYWdlQ291bnQ7IGorKykgewotICAgICAgICAgICAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9y
bWFsLnByZXYoKTsKLSAgICAgICAgICAgICAgICBETExfUmVtb3ZlKHMpOworICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IHN0YXRpY19jYXN0PHNpemVfdD4oaikgPCBudW1TcGFuc1RvUmV0dXJu
ICYmICFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1hbCwgZW50cm9weV8pICYmIGZyZWVfY29tbWl0
dGVkX3BhZ2VzXyA+IHRhcmdldFBhZ2VDb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgU3Bh
biogcyA9IHNsaXN0LT5ub3JtYWwucHJldihlbnRyb3B5Xyk7CisgICAgICAgICAgICAgICAgRExM
X1JlbW92ZShzLCBlbnRyb3B5Xyk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFzLT5kZWNvbW1p
dHRlZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzLT5kZWNvbW1pdHRlZCkgewogICAgICAgICAg
ICAgICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLApAQCAtMTg1MCw3ICsxOTIxLDcgQEAgdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UoKQogICAgICAgICAgICAgICAgICAgICBmcmVlX2NvbW1p
dHRlZF9wYWdlc18gLT0gcy0+bGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBzLT5kZWNvbW1p
dHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIERMTF9QcmVw
ZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMpOworICAgICAgICAgICAgICAgIERMTF9QcmVwZW5kKCZz
bGlzdC0+cmV0dXJuZWQsIHMsIGVudHJvcHlfKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CkBAIC0xODc3LDEwICsxOTQ4LDEwIEBAIGlubGluZSBTcGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6
TmV3KExlbmd0aCBuKSB7CiAgIGZvciAoTGVuZ3RoIHMgPSBuOyBzIDwga01heFBhZ2VzOyBzKysp
IHsKICAgICBTcGFuKiBsbCA9IE5VTEw7CiAgICAgYm9vbCByZWxlYXNlZCA9IGZhbHNlOwotICAg
IGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5vcm1hbCkpIHsKKyAgICBpZiAoIURMTF9Jc0Vt
cHR5KCZmcmVlX1tzXS5ub3JtYWwsIGVudHJvcHlfKSkgewogICAgICAgLy8gRm91bmQgbm9ybWFs
IHNwYW4KICAgICAgIGxsID0gJmZyZWVfW3NdLm5vcm1hbDsKLSAgICB9IGVsc2UgaWYgKCFETExf
SXNFbXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7CisgICAgfSBlbHNlIGlmICghRExMX0lzRW1w
dHkoJmZyZWVfW3NdLnJldHVybmVkLCBlbnRyb3B5XykpIHsKICAgICAgIC8vIEZvdW5kIHJldHVy
bmVkIHNwYW47IHJlYWxsb2NhdGUgaXQKICAgICAgIGxsID0gJmZyZWVfW3NdLnJldHVybmVkOwog
ICAgICAgcmVsZWFzZWQgPSB0cnVlOwpAQCAtMTg4OSw3ICsxOTYwLDcgQEAgaW5saW5lIFNwYW4q
IFRDTWFsbG9jX1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pIHsKICAgICAgIGNvbnRpbnVlOwogICAg
IH0KIAotICAgIFNwYW4qIHJlc3VsdCA9IGxsLT5uZXh0KCk7CisgICAgU3BhbiogcmVzdWx0ID0g
bGwtPm5leHQoZW50cm9weV8pOwogICAgIENhcnZlKHJlc3VsdCwgbiwgcmVsZWFzZWQpOwogI2lm
IFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKICAgICAvLyBUaGUgbmV3
bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBz
cGFuIGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4gIFVwZGF0ZSB0aGUKQEAgLTE5MjYsOSArMTk5
Nyw5IEBAIFNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpBbGxvY0xhcmdlKExlbmd0aCBuKSB7CiAg
IFNwYW4gKmJlc3QgPSBOVUxMOwogCiAgIC8vIFNlYXJjaCB0aHJvdWdoIG5vcm1hbCBsaXN0Ci0g
IGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlXy5ub3JtYWwubmV4dCgpOworICBmb3IgKFNwYW4qIHNw
YW4gPSBsYXJnZV8ubm9ybWFsLm5leHQoZW50cm9weV8pOwogICAgICAgIHNwYW4gIT0gJmxhcmdl
Xy5ub3JtYWw7Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQoKSkgeworICAgICAgIHNwYW4gPSBz
cGFuLT5uZXh0KGVudHJvcHlfKSkgewogICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgewogICAg
ICAgaWYgKChiZXN0ID09IE5VTEwpCiAgICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3Qt
Pmxlbmd0aCkKQEAgLTE5NDAsOSArMjAxMSw5IEBAIFNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpB
bGxvY0xhcmdlKExlbmd0aCBuKSB7CiAgIH0KIAogICAvLyBTZWFyY2ggdGhyb3VnaCByZWxlYXNl
ZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAotICBmb3IgKFNwYW4qIHNwYW4gPSBs
YXJnZV8ucmV0dXJuZWQubmV4dCgpOworICBmb3IgKFNwYW4qIHNwYW4gPSBsYXJnZV8ucmV0dXJu
ZWQubmV4dChlbnRyb3B5Xyk7CiAgICAgICAgc3BhbiAhPSAmbGFyZ2VfLnJldHVybmVkOwotICAg
ICAgIHNwYW4gPSBzcGFuLT5uZXh0KCkpIHsKKyAgICAgICBzcGFuID0gc3Bhbi0+bmV4dChlbnRy
b3B5XykpIHsKICAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4pIHsKICAgICAgIGlmICgoYmVzdCA9
PSBOVUxMKQogICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGggPCBiZXN0LT5sZW5ndGgpCkBAIC0x
OTg5LDcgKzIwNjAsNyBAQCBTcGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6U3BsaXQoU3Bhbiogc3Bh
biwgTGVuZ3RoIG4pIHsKIAogaW5saW5lIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OkNhcnZlKFNw
YW4qIHNwYW4sIExlbmd0aCBuLCBib29sIHJlbGVhc2VkKSB7CiAgIEFTU0VSVChuID4gMCk7Ci0g
IERMTF9SZW1vdmUoc3Bhbik7CisgIERMTF9SZW1vdmUoc3BhbiwgZW50cm9weV8pOwogICBzcGFu
LT5mcmVlID0gMDsKICAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKIApAQCAtMjAxNSw3ICsyMDg2LDcg
QEAgaW5saW5lIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OkNhcnZlKFNwYW4qIHNwYW4sIExlbmd0
aCBuLCBib29sIHJlbGVhc2VkKSB7CiAgICAgLy8gUGxhY2UgbGVmdG92ZXIgc3BhbiBvbiBhcHBy
b3ByaWF0ZSBmcmVlIGxpc3QKICAgICBTcGFuTGlzdCogbGlzdHBhaXIgPSAoc3RhdGljX2Nhc3Q8
c2l6ZV90PihleHRyYSkgPCBrTWF4UGFnZXMpID8gJmZyZWVfW2V4dHJhXSA6ICZsYXJnZV87CiAg
ICAgU3BhbiogZHN0ID0gJmxpc3RwYWlyLT5ub3JtYWw7Ci0gICAgRExMX1ByZXBlbmQoZHN0LCBs
ZWZ0b3Zlcik7CisgICAgRExMX1ByZXBlbmQoZHN0LCBsZWZ0b3ZlciwgZW50cm9weV8pOwogCiAg
ICAgc3Bhbi0+bGVuZ3RoID0gbjsKICAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBuIC0g
MSwgc3Bhbik7CkBAIC0yMDY1LDcgKzIxMzYsNyBAQCBpbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6RGVsZXRlKFNwYW4qIHNwYW4pIHsKICAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRT
cGFuc0xlbmd0aCArPSBsZW47CiAjZW5kaWYKICAgICBtZXJnZURlY29tbWl0dGVkU3RhdGVzKHNw
YW4sIHByZXYpOwotICAgIERMTF9SZW1vdmUocHJldik7CisgICAgRExMX1JlbW92ZShwcmV2LCBl
bnRyb3B5Xyk7CiAgICAgRGVsZXRlU3BhbihwcmV2KTsKICAgICBzcGFuLT5zdGFydCAtPSBsZW47
CiAgICAgc3Bhbi0+bGVuZ3RoICs9IGxlbjsKQEAgLTIwODIsNyArMjE1Myw3IEBAIGlubGluZSB2
b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiogc3BhbikgewogICAgICAgICBuZWln
aGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgogICAgIG1lcmdlRGVj
b21taXR0ZWRTdGF0ZXMoc3BhbiwgbmV4dCk7Ci0gICAgRExMX1JlbW92ZShuZXh0KTsKKyAgICBE
TExfUmVtb3ZlKG5leHQsIGVudHJvcHlfKTsKICAgICBEZWxldGVTcGFuKG5leHQpOwogICAgIHNw
YW4tPmxlbmd0aCArPSBsZW47CiAgICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+
bGVuZ3RoIC0gMSwgc3Bhbik7CkBAIC0yMDkzLDE0ICsyMTY0LDE0IEBAIGlubGluZSB2b2lkIFRD
TWFsbG9jX1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiogc3BhbikgewogICBzcGFuLT5mcmVlID0gMTsK
ICAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7CiAgICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQ
YWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5ndGhdLnJldHVybmVkLCBz
cGFuKTsKKyAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5ndGhdLnJldHVybmVkLCBz
cGFuLCBlbnRyb3B5Xyk7CiAgICAgZWxzZQotICAgICAgRExMX1ByZXBlbmQoJmxhcmdlXy5yZXR1
cm5lZCwgc3Bhbik7CisgICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLnJldHVybmVkLCBzcGFuLCBl
bnRyb3B5Xyk7CiAgIH0gZWxzZSB7CiAgICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykK
LSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5ndGhdLm5vcm1hbCwgc3Bhbik7Cisg
ICAgICBETExfUHJlcGVuZCgmZnJlZV9bc3Bhbi0+bGVuZ3RoXS5ub3JtYWwsIHNwYW4sIGVudHJv
cHlfKTsKICAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1hbCwgc3Bhbik7
CisgICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1hbCwgc3BhbiwgZW50cm9weV8pOwogICB9
CiAgIGZyZWVfcGFnZXNfICs9IG47CiAKQEAgLTIxODksMTIgKzIyNjAsMTIgQEAgdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MoU3Bhbiogc3Bhbiwgc2l6ZV90IHNjKSB7
CiBzaXplX3QgVENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdCB7CiAgICAg
c2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBzID0gMDsgcyA8IGtNYXhQYWdl
czsgcysrKSB7Ci0gICAgICAgIGNvbnN0IGludCByX2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVf
W3NdLnJldHVybmVkKTsKKyAgICAgICAgY29uc3QgaW50IHJfbGVuZ3RoID0gRExMX0xlbmd0aCgm
ZnJlZV9bc10ucmV0dXJuZWQsIGVudHJvcHlfKTsKICAgICAgICAgdW5zaWduZWQgcl9wYWdlcyA9
IHMgKiByX2xlbmd0aDsKICAgICAgICAgcmVzdWx0ICs9IHJfcGFnZXMgPDwga1BhZ2VTaGlmdDsK
ICAgICB9CiAgICAgCi0gICAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLnJldHVybmVkLm5leHQoKTsg
cyAhPSAmbGFyZ2VfLnJldHVybmVkOyBzID0gcy0+bmV4dCgpKQorICAgIGZvciAoU3BhbiogcyA9
IGxhcmdlXy5yZXR1cm5lZC5uZXh0KGVudHJvcHlfKTsgcyAhPSAmbGFyZ2VfLnJldHVybmVkOyBz
ID0gcy0+bmV4dChlbnRyb3B5XykpCiAgICAgICAgIHJlc3VsdCArPSBzLT5sZW5ndGggPDwga1Bh
Z2VTaGlmdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjMyMSw4ICsyMzkyLDggQEAgYm9v
bCBUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2soKSB7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFE
X1RPX1NDQVZFTkdFX01FTU9SWQogICBzaXplX3QgdG90YWxGcmVlQ29tbWl0dGVkID0gMDsKICNl
bmRpZgotICBBU1NFUlQoZnJlZV9bMF0ubm9ybWFsLm5leHQoKSA9PSAmZnJlZV9bMF0ubm9ybWFs
KTsKLSAgQVNTRVJUKGZyZWVfWzBdLnJldHVybmVkLm5leHQoKSA9PSAmZnJlZV9bMF0ucmV0dXJu
ZWQpOworICBBU1NFUlQoZnJlZV9bMF0ubm9ybWFsLm5leHQoZW50cm9weV8pID09ICZmcmVlX1sw
XS5ub3JtYWwpOworICBBU1NFUlQoZnJlZV9bMF0ucmV0dXJuZWQubmV4dChlbnRyb3B5XykgPT0g
JmZyZWVfWzBdLnJldHVybmVkKTsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVO
R0VfTUVNT1JZCiAgIHRvdGFsRnJlZUNvbW1pdHRlZCA9IENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1h
bCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CiAjZWxzZQpAQCAtMjM1MCw3ICsyNDIx
LDcgQEAgc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiosIExlbmd0aCwg
TGVuZ3RoLCBib29sKSB7CiAjZWxzZQogc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xp
c3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBk
ZWNvbW1pdHRlZCkgewogICBzaXplX3QgZnJlZUNvdW50ID0gMDsKLSAgZm9yIChTcGFuKiBzID0g
bGlzdC0+bmV4dCgpOyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KCkpIHsKKyAgZm9yIChTcGFuKiBz
ID0gbGlzdC0+bmV4dChlbnRyb3B5Xyk7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQoZW50cm9weV8p
KSB7CiAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOwogICAgIENIRUNLX0NPTkRJVElPTihz
LT5sZW5ndGggPj0gbWluX3BhZ2VzKTsKICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoIDw9
IG1heF9wYWdlcyk7CkBAIC0yMzcwLDEyICsyNDQxLDEyIEBAIHZvaWQgVENNYWxsb2NfUGFnZUhl
YXA6OlJlbGVhc2VGcmVlTGlzdChTcGFuKiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewogICBzaXpl
X3QgZnJlZVBhZ2VSZWR1Y3Rpb24gPSAwOwogI2VuZGlmCiAKLSAgd2hpbGUgKCFETExfSXNFbXB0
eShsaXN0KSkgewotICAgIFNwYW4qIHMgPSBsaXN0LT5wcmV2KCk7CisgIHdoaWxlICghRExMX0lz
RW1wdHkobGlzdCwgZW50cm9weV8pKSB7CisgICAgU3BhbiogcyA9IGxpc3QtPnByZXYoZW50cm9w
eV8pOwogCi0gICAgRExMX1JlbW92ZShzKTsKKyAgICBETExfUmVtb3ZlKHMsIGVudHJvcHlfKTsK
ICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7Ci0gICAgRExMX1ByZXBlbmQocmV0dXJuZWQsIHMp
OworICAgIERMTF9QcmVwZW5kKHJldHVybmVkLCBzLCBlbnRyb3B5Xyk7CiAgICAgVENNYWxsb2Nf
U3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+
bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NB
VkVOR0VfTUVNT1JZCkBAIC0yNDA0LDE1ICsyNDc1LDIwIEBAIHZvaWQgVENNYWxsb2NfUGFnZUhl
YXA6OlJlbGVhc2VGcmVlUGFnZXMoKSB7CiAKIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlX0Zy
ZWVMaXN0IHsKICBwcml2YXRlOgotICB2b2lkKiAgICBsaXN0XzsgICAgICAgLy8gTGlua2VkIGxp
c3Qgb2Ygbm9kZXMKKyAgSGFyZGVuZWRTTEwgbGlzdF87ICAgICAgIC8vIExpbmtlZCBsaXN0IG9m
IG5vZGVzCiAgIHVpbnQxNl90IGxlbmd0aF87ICAgICAvLyBDdXJyZW50IGxlbmd0aAogICB1aW50
MTZfdCBsb3dhdGVyXzsgICAgLy8gTG93IHdhdGVyIG1hcmsgZm9yIGxpc3QgbGVuZ3RoCisgIHVp
bnRwdHJfdCBlbnRyb3B5XzsgICAvLyBFbnRyb3B5IHNvdXJjZSBmb3IgaGFyZGVuaW5nCiAKICBw
dWJsaWM6Ci0gIHZvaWQgSW5pdCgpIHsKLSAgICBsaXN0XyA9IE5VTEw7CisgIHZvaWQgSW5pdCh1
aW50cHRyX3QgZW50cm9weSkgeworICAgIGxpc3RfLnNldFZhbHVlKE5VTEwpOwogICAgIGxlbmd0
aF8gPSAwOwogICAgIGxvd2F0ZXJfID0gMDsKKyAgICBlbnRyb3B5XyA9IGVudHJvcHk7CisjaWYg
RU5BQkxFKFRDTUFMTE9DX0hBUkRFTklORykKKyAgICBBU1NFUlQoZW50cm9weV8pOworI2VuZGlm
CiAgIH0KIAogICAvLyBSZXR1cm4gY3VycmVudCBsZW5ndGggb2YgbGlzdApAQCAtMjQyMiw0MyAr
MjQ5OCw0MyBAQCBjbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdCB7CiAKICAgLy8g
SXMgbGlzdCBlbXB0eT8KICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbGlzdF8g
PT0gTlVMTDsKKyAgICByZXR1cm4gIWxpc3RfOwogICB9CiAKICAgLy8gTG93LXdhdGVyIG1hcmsg
bWFuYWdlbWVudAogICBpbnQgbG93d2F0ZXJtYXJrKCkgY29uc3QgeyByZXR1cm4gbG93YXRlcl87
IH0KICAgdm9pZCBjbGVhcl9sb3d3YXRlcm1hcmsoKSB7IGxvd2F0ZXJfID0gbGVuZ3RoXzsgfQog
Ci0gIEFMV0FZU19JTkxJTkUgdm9pZCBQdXNoKHZvaWQqIHB0cikgewotICAgIFNMTF9QdXNoKCZs
aXN0XywgcHRyKTsKKyAgQUxXQVlTX0lOTElORSB2b2lkIFB1c2goSGFyZGVuZWRTTEwgcHRyKSB7
CisgICAgU0xMX1B1c2goJmxpc3RfLCBwdHIsIGVudHJvcHlfKTsKICAgICBsZW5ndGhfKys7CiAg
IH0KIAotICB2b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkgewot
ICAgIFNMTF9QdXNoUmFuZ2UoJmxpc3RfLCBzdGFydCwgZW5kKTsKKyAgdm9pZCBQdXNoUmFuZ2Uo
aW50IE4sIEhhcmRlbmVkU0xMIHN0YXJ0LCBIYXJkZW5lZFNMTCBlbmQpIHsKKyAgICBTTExfUHVz
aFJhbmdlKCZsaXN0Xywgc3RhcnQsIGVuZCwgZW50cm9weV8pOwogICAgIGxlbmd0aF8gPSBsZW5n
dGhfICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOwogICB9CiAKLSAgdm9pZCBQb3BSYW5nZShp
bnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKSB7Ci0gICAgU0xMX1BvcFJhbmdlKCZsaXN0
XywgTiwgc3RhcnQsIGVuZCk7CisgIHZvaWQgUG9wUmFuZ2UoaW50IE4sIEhhcmRlbmVkU0xMKiBz
dGFydCwgSGFyZGVuZWRTTEwqIGVuZCkgeworICAgIFNMTF9Qb3BSYW5nZSgmbGlzdF8sIE4sIHN0
YXJ0LCBlbmQsIGVudHJvcHlfKTsKICAgICBBU1NFUlQobGVuZ3RoXyA+PSBOKTsKICAgICBsZW5n
dGhfID0gbGVuZ3RoXyAtIHN0YXRpY19jYXN0PHVpbnQxNl90PihOKTsKICAgICBpZiAobGVuZ3Ro
XyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9IGxlbmd0aF87CiAgIH0KIAogICBBTFdBWVNfSU5MSU5F
IHZvaWQqIFBvcCgpIHsKLSAgICBBU1NFUlQobGlzdF8gIT0gTlVMTCk7CisgICAgQVNTRVJUKGxp
c3RfKTsKICAgICBsZW5ndGhfLS07CiAgICAgaWYgKGxlbmd0aF8gPCBsb3dhdGVyXykgbG93YXRl
cl8gPSBsZW5ndGhfOwotICAgIHJldHVybiBTTExfUG9wKCZsaXN0Xyk7CisgICAgcmV0dXJuIFNM
TF9Qb3AoJmxpc3RfLCBlbnRyb3B5XykudmFsdWUoKTsKICAgfQogCiAjaWZkZWYgV1RGX0NIQU5H
RVMKICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgogICB2b2lkIGVudW1l
cmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKICAg
ewotICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7IG5leHRP
YmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPihuZXh0T2JqZWN0KSkpCi0gICAgICAgICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOwor
ICAgICAgZm9yIChIYXJkZW5lZFNMTCBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7IG5l
eHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUluSGFyZGVuZWRMaW5rZWRMaXN0KHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0LnZhbHVlKCkpLCBlbnRyb3B5XykpKQor
ICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZhbHVlKCkpOwogICB9CiAjZW5kaWYK
IH07CkBAIC0yNDg1LDggKzI1NjEsMTAgQEAgY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewog
ICB1aW50MzJfdCAgICAgIHJuZF87ICAgICAgICAgICAgICAgICAgIC8vIENoZWFwIHJhbmRvbSBu
dW1iZXIgZ2VuZXJhdG9yCiAgIHNpemVfdCAgICAgICAgYnl0ZXNfdW50aWxfc2FtcGxlXzsgICAg
Ly8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKIAorICB1aW50cHRyX3QgICAgIGVudHJvcHlf
OyAgICAgICAgICAgICAgIC8vIEVudHJvcHkgdmFsdWUgdXNlZCBmb3IgaGFyZGVuaW5nCisKICAg
Ly8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlSRVM6IHBhZ2VoZWFwX2xvY2sgaXMgaGVsZC4K
LSAgc3RhdGljIGlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogTmV3SGVhcChUaHJlYWRJZGVu
dGlmaWVyIHRpZCk7CisgIHN0YXRpYyBpbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIE5ld0hl
YXAoVGhyZWFkSWRlbnRpZmllciB0aWQsIHVpbnRwdHJfdCBlbnRyb3B5KTsKIAogICAvLyBVc2Ug
b25seSBhcyBwdGhyZWFkIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGZ1bmN0aW9uLgogICBz
dGF0aWMgdm9pZCBEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCogcHRyKTsKQEAgLTI0OTUsNyArMjU3
Myw3IEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlIHsKICAgVENNYWxsb2NfVGhyZWFkQ2Fj
aGUqIG5leHRfOwogICBUQ01hbGxvY19UaHJlYWRDYWNoZSogcHJldl87CiAKLSAgdm9pZCBJbml0
KFRocmVhZElkZW50aWZpZXIgdGlkKTsKKyAgdm9pZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlk
LCB1aW50cHRyX3QgZW50cm9weSk7CiAgIHZvaWQgQ2xlYW51cCgpOwogCiAgIC8vIEFjY2Vzc29y
cyAobW9zdGx5IGp1c3QgZm9yIHByaW50aW5nIHN0YXRzKQpAQCAtMjUwNSw3ICsyNTgzLDcgQEAg
Y2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewogICBzaXplX3QgU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHNpemVfOyB9CiAKICAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0ZShzaXplX3Qgc2l6
ZSk7Ci0gIHZvaWQgRGVhbGxvY2F0ZSh2b2lkKiBwdHIsIHNpemVfdCBzaXplX2NsYXNzKTsKKyAg
dm9pZCBEZWFsbG9jYXRlKEhhcmRlbmVkU0xMIHB0ciwgc2l6ZV90IHNpemVfY2xhc3MpOwogCiAg
IEFMV0FZU19JTkxJTkUgdm9pZCBGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBzaXpl
X3QgYWxsb2NhdGlvblNpemUpOwogICB2b2lkIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShzaXplX3Qg
Y2wsIGludCBOKTsKQEAgLTI3MDMsMTEgKzI3ODEsMTUgQEAgc3RhdGljIHZvbGF0aWxlIHNpemVf
dCBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBrTWF4VGhyZWFkQ2FjaGVTaXplOwogLy8gQ2VudHJh
bCBjYWNoZSBpbXBsZW1lbnRhdGlvbgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdDo6SW5pdChzaXplX3QgY2wpIHsKK3ZvaWQgVENNYWxsb2NfQ2VudHJhbF9G
cmVlTGlzdDo6SW5pdChzaXplX3QgY2wsIHVpbnRwdHJfdCBlbnRyb3B5KSB7CiAgIGxvY2tfLklu
aXQoKTsKICAgc2l6ZV9jbGFzc18gPSBjbDsKLSAgRExMX0luaXQoJmVtcHR5Xyk7Ci0gIERMTF9J
bml0KCZub25lbXB0eV8pOworICBlbnRyb3B5XyA9IGVudHJvcHk7CisjaWYgRU5BQkxFKFRDTUFM
TE9DX0hBUkRFTklORykKKyAgQVNTRVJUKGVudHJvcHlfKTsKKyNlbmRpZgorICBETExfSW5pdCgm
ZW1wdHlfLCBlbnRyb3B5Xyk7CisgIERMTF9Jbml0KCZub25lbXB0eV8sIGVudHJvcHlfKTsKICAg
Y291bnRlcl8gPSAwOwogCiAgIGNhY2hlX3NpemVfID0gMTsKQEAgLTI3MTUsMjQgKzI3OTcsMjQg
QEAgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbml0KHNpemVfdCBjbCkgewogICBB
U1NFUlQoY2FjaGVfc2l6ZV8gPD0ga051bVRyYW5zZmVyRW50cmllcyk7CiB9CiAKLXZvaWQgVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQqIHN0YXJ0KSB7
Cit2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbGVhc2VMaXN0VG9TcGFucyhIYXJk
ZW5lZFNMTCBzdGFydCkgewogICB3aGlsZSAoc3RhcnQpIHsKLSAgICB2b2lkICpuZXh0ID0gU0xM
X05leHQoc3RhcnQpOworICAgIEhhcmRlbmVkU0xMIG5leHQgPSBTTExfTmV4dChzdGFydCwgZW50
cm9weV8pOwogICAgIFJlbGVhc2VUb1NwYW5zKHN0YXJ0KTsKICAgICBzdGFydCA9IG5leHQ7CiAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJl
bGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCkgewotICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3QpID4+IGtQYWdlU2hpZnQ7CitBTFdBWVNfSU5MSU5F
IHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnMoSGFyZGVuZWRT
TEwgb2JqZWN0KSB7CisgIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG9iamVjdC52YWx1ZSgpKSA+PiBrUGFnZVNoaWZ0OwogICBTcGFuKiBzcGFuID0gcGFnZWhl
YXAtPkdldERlc2NyaXB0b3IocCk7CiAgIEFTU0VSVChzcGFuICE9IE5VTEwpOwogICBBU1NFUlQo
c3Bhbi0+cmVmY291bnQgPiAwKTsKIAogICAvLyBJZiBzcGFuIGlzIGVtcHR5LCBtb3ZlIGl0IHRv
IG5vbi1lbXB0eSBsaXN0Ci0gIGlmIChzcGFuLT5vYmplY3RzID09IE5VTEwpIHsKLSAgICBETExf
UmVtb3ZlKHNwYW4pOwotICAgIERMTF9QcmVwZW5kKCZub25lbXB0eV8sIHNwYW4pOworICBpZiAo
IXNwYW4tPm9iamVjdHMpIHsKKyAgICBETExfUmVtb3ZlKHNwYW4sIGVudHJvcHlfKTsKKyAgICBE
TExfUHJlcGVuZCgmbm9uZW1wdHlfLCBzcGFuLCBlbnRyb3B5Xyk7CiAgICAgRXZlbnQoc3Bhbiwg
J04nLCAwKTsKICAgfQogCkBAIC0yNzQwLDggKzI4MjIsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0KSB7
CiAgIGlmIChmYWxzZSkgewogICAgIC8vIENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9jY3Vy
IGluIGxpc3QKICAgICB1bnNpZ25lZCBnb3QgPSAwOwotICAgIGZvciAodm9pZCogcCA9IHNwYW4t
Pm9iamVjdHM7IHAgIT0gTlVMTDsgcCA9ICooKHZvaWQqKikgcCkpIHsKLSAgICAgIEFTU0VSVChw
ICE9IG9iamVjdCk7CisgICAgZm9yIChIYXJkZW5lZFNMTCBwID0gc3Bhbi0+b2JqZWN0czsgIXA7
IFNMTF9OZXh0KHAsIGVudHJvcHlfKSkgeworICAgICAgQVNTRVJUKHAudmFsdWUoKSAhPSBvYmpl
Y3QudmFsdWUoKSk7CiAgICAgICBnb3QrKzsKICAgICB9CiAgICAgQVNTRVJUKGdvdCArIHNwYW4t
PnJlZmNvdW50ID09CkBAIC0yNzUzLDcgKzI4MzUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0KSB7CiAg
IGlmIChzcGFuLT5yZWZjb3VudCA9PSAwKSB7CiAgICAgRXZlbnQoc3BhbiwgJyMnLCAwKTsKICAg
ICBjb3VudGVyXyAtPSAoc3Bhbi0+bGVuZ3RoPDxrUGFnZVNoaWZ0KSAvIEJ5dGVTaXplRm9yQ2xh
c3Moc3Bhbi0+c2l6ZWNsYXNzKTsKLSAgICBETExfUmVtb3ZlKHNwYW4pOworICAgIERMTF9SZW1v
dmUoc3BhbiwgZW50cm9weV8pOwogCiAgICAgLy8gUmVsZWFzZSBjZW50cmFsIGxpc3QgbG9jayB3
aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKICAgICBsb2NrXy5VbmxvY2soKTsKQEAgLTI3NjMs
OCArMjg0NSw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0
OjpSZWxlYXNlVG9TcGFucyh2b2lkKiBvYmplY3QpIHsKICAgICB9CiAgICAgbG9ja18uTG9jaygp
OwogICB9IGVsc2UgewotICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0g
c3Bhbi0+b2JqZWN0czsKLSAgICBzcGFuLT5vYmplY3RzID0gb2JqZWN0OworICAgIFNMTF9TZXRO
ZXh0KG9iamVjdCwgc3Bhbi0+b2JqZWN0cywgZW50cm9weV8pOworICAgIHNwYW4tPm9iamVjdHMu
c2V0VmFsdWUob2JqZWN0LnZhbHVlKCkpOwogICB9CiB9CiAKQEAgLTI4MzgsNyArMjkyMCw3IEBA
IGJvb2wgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9z
aXplX2NsYXNzLCBib29sIGZvcmNlKSB7CiAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3Q6Okluc2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQs
IGludCBOKSB7Cit2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Okluc2VydFJhbmdlKEhh
cmRlbmVkU0xMIHN0YXJ0LCBIYXJkZW5lZFNMTCBlbmQsIGludCBOKSB7CiAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJmxvY2tfKTsKICAgaWYgKE4gPT0gbnVtX29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNz
X10gJiYKICAgICBNYWtlQ2FjaGVTcGFjZSgpKSB7CkBAIC0yODUzLDcgKzI5MzUsNyBAQCB2b2lk
IFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Okluc2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lk
ICplbmQsIGludCBOKSB7CiAgIFJlbGVhc2VMaXN0VG9TcGFucyhzdGFydCk7CiB9CiAKLXZvaWQg
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVtb3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lk
ICoqZW5kLCBpbnQgKk4pIHsKK3ZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVtb3Zl
UmFuZ2UoSGFyZGVuZWRTTEwqIHN0YXJ0LCBIYXJkZW5lZFNMTCogZW5kLCBpbnQgKk4pIHsKICAg
aW50IG51bSA9ICpOOwogICBBU1NFUlQobnVtID4gMCk7CiAKQEAgLTI4NjgsMjEgKzI5NTAsMjEg
QEAgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpSZW1vdmVSYW5nZSh2b2lkICoqc3Rh
cnQsIHZvaWQgKiplbmQsIGludCAqTikgewogICB9CiAKICAgLy8gVE9ETzogUHJlZmV0Y2ggbXVs
dGlwbGUgVENFbnRyaWVzPwotICB2b2lkICp0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7Cisg
IEhhcmRlbmVkU0xMIHRhaWwgPSBGZXRjaEZyb21TcGFuc1NhZmUoKTsKICAgaWYgKCF0YWlsKSB7
CiAgICAgLy8gV2UgYXJlIGNvbXBsZXRlbHkgb3V0IG9mIG1lbW9yeS4KLSAgICAqc3RhcnQgPSAq
ZW5kID0gTlVMTDsKKyAgICAqc3RhcnQgPSAqZW5kID0gSGFyZGVuZWRTTEw6Om51bGwoKTsKICAg
ICAqTiA9IDA7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgU0xMX1NldE5leHQodGFpbCwgTlVMTCk7
Ci0gIHZvaWQgKmhlYWQgPSB0YWlsOworICBTTExfU2V0TmV4dCh0YWlsLCBIYXJkZW5lZFNMTDo6
bnVsbCgpLCBlbnRyb3B5Xyk7CisgIEhhcmRlbmVkU0xMIGhlYWQgPSB0YWlsOwogICBpbnQgY291
bnQgPSAxOwogICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAgICB2b2lkICp0ID0gRmV0Y2hGcm9t
U3BhbnMoKTsKKyAgICBIYXJkZW5lZFNMTCB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKICAgICBpZiAo
IXQpIGJyZWFrOwotICAgIFNMTF9QdXNoKCZoZWFkLCB0KTsKKyAgICBTTExfUHVzaCgmaGVhZCwg
dCwgZW50cm9weV8pOwogICAgIGNvdW50Kys7CiAgIH0KICAgKnN0YXJ0ID0gaGVhZDsKQEAgLTI4
OTEsOCArMjk3Myw4IEBAIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVtb3ZlUmFu
Z2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4pIHsKIH0KIAogCi12b2lkKiBUQ01h
bGxvY19DZW50cmFsX0ZyZWVMaXN0OjpGZXRjaEZyb21TcGFuc1NhZmUoKSB7Ci0gIHZvaWQgKnQg
PSBGZXRjaEZyb21TcGFucygpOworSGFyZGVuZWRTTEwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkgeworICBIYXJkZW5lZFNMTCB0ID0gRmV0Y2hGcm9tU3Bh
bnMoKTsKICAgaWYgKCF0KSB7CiAgICAgUG9wdWxhdGUoKTsKICAgICB0ID0gRmV0Y2hGcm9tU3Bh
bnMoKTsKQEAgLTI5MDAsMTkgKzI5ODIsMTkgQEAgdm9pZCogVENNYWxsb2NfQ2VudHJhbF9GcmVl
TGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkgewogICByZXR1cm4gdDsKIH0KIAotdm9pZCogVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMoKSB7Ci0gIGlmIChETExfSXNF
bXB0eSgmbm9uZW1wdHlfKSkgcmV0dXJuIE5VTEw7Ci0gIFNwYW4qIHNwYW4gPSBub25lbXB0eV8u
bmV4dCgpOworSGFyZGVuZWRTTEwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9t
U3BhbnMoKSB7CisgIGlmIChETExfSXNFbXB0eSgmbm9uZW1wdHlfLCBlbnRyb3B5XykpIHJldHVy
biBIYXJkZW5lZFNMTDo6bnVsbCgpOworICBTcGFuKiBzcGFuID0gbm9uZW1wdHlfLm5leHQoZW50
cm9weV8pOwogCi0gIEFTU0VSVChzcGFuLT5vYmplY3RzICE9IE5VTEwpOworICBBU1NFUlQoc3Bh
bi0+b2JqZWN0cyk7CiAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKTsKICAgc3Bhbi0+cmVm
Y291bnQrKzsKLSAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2JqZWN0czsKLSAgc3Bhbi0+b2JqZWN0
cyA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkpOwotICBpZiAoc3Bhbi0+b2Jq
ZWN0cyA9PSBOVUxMKSB7CisgIEhhcmRlbmVkU0xMIHJlc3VsdCA9IHNwYW4tPm9iamVjdHM7Cisg
IHNwYW4tPm9iamVjdHMgPSBTTExfTmV4dChyZXN1bHQsIGVudHJvcHlfKTsKKyAgaWYgKCFzcGFu
LT5vYmplY3RzKSB7CiAgICAgLy8gTW92ZSB0byBlbXB0eSBsaXN0Ci0gICAgRExMX1JlbW92ZShz
cGFuKTsKLSAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFuKTsKKyAgICBETExfUmVtb3ZlKHNw
YW4sIGVudHJvcHlfKTsKKyAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFuLCBlbnRyb3B5Xyk7
CiAgICAgRXZlbnQoc3BhbiwgJ0UnLCAwKTsKICAgfQogICBjb3VudGVyXy0tOwpAQCAtMjk1Mywy
NSArMzAzNSwyNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dDo6UG9wdWxhdGUoKSB7CiAKICAgLy8gU3BsaXQgdGhlIGJsb2NrIGludG8gcGllY2VzIGFuZCBh
ZGQgdG8gdGhlIGZyZWUtbGlzdAogICAvLyBUT0RPOiBjb2xvcmluZyBvZiBvYmplY3RzIHRvIGF2
b2lkIGNhY2hlIGNvbmZsaWN0cz8KLSAgdm9pZCoqIHRhaWwgPSAmc3Bhbi0+b2JqZWN0czsKLSAg
Y2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VT
aGlmdCk7Ci0gIGNoYXIqIGxpbWl0ID0gcHRyICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KTsKKyAg
SGFyZGVuZWRTTEwgaGVhZCA9IEhhcmRlbmVkU0xMOjpudWxsKCk7CisgIGNoYXIqIHN0YXJ0ID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7CiAgIGNv
bnN0IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplX2NsYXNzXyk7CisgIGNoYXIq
IHB0ciA9IHN0YXJ0ICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KSAtICgobnBhZ2VzIDw8IGtQYWdl
U2hpZnQpICUgc2l6ZSk7CiAgIGludCBudW0gPSAwOwotICBjaGFyKiBucHRyOwotICB3aGlsZSAo
KG5wdHIgPSBwdHIgKyBzaXplKSA8PSBsaW1pdCkgewotICAgICp0YWlsID0gcHRyOwotICAgIHRh
aWwgPSByZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHB0cik7Ci0gICAgcHRyID0gbnB0cjsK
KyAgd2hpbGUgKHB0ciA+IHN0YXJ0KSB7CisgICAgcHRyIC09IHNpemU7CisgICAgSGFyZGVuZWRT
TEwgbm9kZSA9IEhhcmRlbmVkU0xMOjpjcmVhdGUocHRyKTsKKyAgICBTTExfU2V0TmV4dChub2Rl
LCBoZWFkLCBlbnRyb3B5Xyk7CisgICAgaGVhZCA9IG5vZGU7CiAgICAgbnVtKys7CiAgIH0KLSAg
QVNTRVJUKHB0ciA8PSBsaW1pdCk7Ci0gICp0YWlsID0gTlVMTDsKKyAgQVNTRVJUKHB0ciA9PSBz
dGFydCk7CisgIEFTU0VSVChwdHIgPT0gaGVhZC52YWx1ZSgpKTsKKyAgc3Bhbi0+b2JqZWN0cyA9
IGhlYWQ7CisgIEFTU0VSVChzcGFuLT5vYmplY3RzLnZhbHVlKCkgPT0gaGVhZC52YWx1ZSgpKTsK
ICAgc3Bhbi0+cmVmY291bnQgPSAwOyAvLyBObyBzdWItb2JqZWN0IGluIHVzZSB5ZXQKIAogICAv
LyBBZGQgc3BhbiB0byBsaXN0IG9mIG5vbi1lbXB0eSBzcGFucwogICBsb2NrXy5Mb2NrKCk7Ci0g
IERMTF9QcmVwZW5kKCZub25lbXB0eV8sIHNwYW4pOworICBETExfUHJlcGVuZCgmbm9uZW1wdHlf
LCBzcGFuLCBlbnRyb3B5Xyk7CiAgIGNvdW50ZXJfICs9IG51bTsKIH0KIApAQCAtMjk4OSwxNCAr
MzA3MywxOCBAQCBpbmxpbmUgYm9vbCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2Nh
dGlvbihzaXplX3QgaykgewogICB9CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6Oklu
aXQoVGhyZWFkSWRlbnRpZmllciB0aWQpIHsKK3ZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6Oklu
aXQoVGhyZWFkSWRlbnRpZmllciB0aWQsIHVpbnRwdHJfdCBlbnRyb3B5KSB7CiAgIHNpemVfID0g
MDsKICAgbmV4dF8gPSBOVUxMOwogICBwcmV2XyA9IE5VTEw7CiAgIHRpZF8gID0gdGlkOwogICBp
bl9zZXRzcGVjaWZpY18gPSBmYWxzZTsKKyAgZW50cm9weV8gPSBlbnRyb3B5OworI2lmIEVOQUJM
RShUQ01BTExPQ19IQVJERU5JTkcpCisgIEFTU0VSVChlbnRyb3B5Xyk7CisjZW5kaWYKICAgZm9y
IChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgbGlzdF9bY2xd
LkluaXQoKTsKKyAgICBsaXN0X1tjbF0uSW5pdChlbnRyb3B5Xyk7CiAgIH0KIAogICAvLyBJbml0
aWFsaXplIFJORyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVlcwpAQCAt
MzAyOSw3ICszMTE3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkKiBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6QWxsb2NhdGUoc2l6ZV90IHNpemUpIHsKICAgcmV0dXJuIGxpc3QtPlBvcCgpOwogfQogCi1p
bmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RGVhbGxvY2F0ZSh2b2lkKiBwdHIsIHNp
emVfdCBjbCkgeworaW5saW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUo
SGFyZGVuZWRTTEwgcHRyLCBzaXplX3QgY2wpIHsKICAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFz
cyhjbCk7CiAgIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKICAgbGlzdC0+UHVzaChwdHIp
OwpAQCAtMzA0Myw3ICszMTMxLDcgQEAgaW5saW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wpIHsKIC8vIFJlbW92ZSBzb21lIG9iamVj
dHMgb2YgY2xhc3MgImNsIiBmcm9tIGNlbnRyYWwgY2FjaGUgYW5kIGFkZCB0byB0aHJlYWQgaGVh
cAogQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50
cmFsQ2FjaGUoc2l6ZV90IGNsLCBzaXplX3QgYWxsb2NhdGlvblNpemUpIHsKICAgaW50IGZldGNo
X2NvdW50ID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0gIHZvaWQgKnN0YXJ0LCAqZW5kOwor
ICBIYXJkZW5lZFNMTCBzdGFydCwgZW5kOwogICBjZW50cmFsX2NhY2hlW2NsXS5SZW1vdmVSYW5n
ZSgmc3RhcnQsICZlbmQsICZmZXRjaF9jb3VudCk7CiAgIGxpc3RfW2NsXS5QdXNoUmFuZ2UoZmV0
Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwogICBzaXplXyArPSBhbGxvY2F0aW9uU2l6ZSAqIGZldGNo
X2NvdW50OwpAQCAtMzA2MCwxMiArMzE0OCwxMiBAQCBpbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50IE4pIHsKICAgLy8g
VE9ETzogVXNlIHRoZSBzYW1lIGZvcm1hdCBpbnRlcm5hbGx5IGluIHRoZSB0aHJlYWQgY2FjaGVz
PwogICBpbnQgYmF0Y2hfc2l6ZSA9IG51bV9vYmplY3RzX3RvX21vdmVbY2xdOwogICB3aGlsZSAo
TiA+IGJhdGNoX3NpemUpIHsKLSAgICB2b2lkICp0YWlsLCAqaGVhZDsKKyAgICBIYXJkZW5lZFNM
TCB0YWlsLCBoZWFkOwogICAgIHNyYy0+UG9wUmFuZ2UoYmF0Y2hfc2l6ZSwgJmhlYWQsICZ0YWls
KTsKICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFkLCB0YWlsLCBiYXRjaF9z
aXplKTsKICAgICBOIC09IGJhdGNoX3NpemU7CiAgIH0KLSAgdm9pZCAqdGFpbCwgKmhlYWQ7Cisg
IEhhcmRlbmVkU0xMIHRhaWwsIGhlYWQ7CiAgIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWls
KTsKICAgY2VudHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFpbCwgTik7CiB9CkBA
IC0zMTUwLDE4ICszMjM4LDE5IEBAIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1
bGUoKSB7CiAgIC8vIG9iamVjdCBkZWNsYXJlZCBiZWxvdy4KICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBfbG9jayk7CiAgIGlmICghcGhpbml0ZWQpIHsKKyAgICB1aW50cHRyX3QgZW50cm9w
eSA9IEhBUkRFTklOR19FTlRST1BZOwogI2lmZGVmIFdURl9DSEFOR0VTCiAgICAgSW5pdFRTRCgp
OwogI2VuZGlmCiAgICAgSW5pdFNpemVDbGFzc2VzKCk7Ci0gICAgdGhyZWFkaGVhcF9hbGxvY2F0
b3IuSW5pdCgpOwotICAgIHNwYW5fYWxsb2NhdG9yLkluaXQoKTsKKyAgICB0aHJlYWRoZWFwX2Fs
bG9jYXRvci5Jbml0KGVudHJvcHkpOworICAgIHNwYW5fYWxsb2NhdG9yLkluaXQoZW50cm9weSk7
CiAgICAgc3Bhbl9hbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKICAg
ICBzcGFuX2FsbG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZsaWN0cwotICAgIHN0
YWNrdHJhY2VfYWxsb2NhdG9yLkluaXQoKTsKLSAgICBETExfSW5pdCgmc2FtcGxlZF9vYmplY3Rz
KTsKKyAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5Jbml0KGVudHJvcHkpOworICAgIERMTF9Jbml0
KCZzYW1wbGVkX29iamVjdHMsIGVudHJvcHkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a051bUNsYXNzZXM7ICsraSkgewotICAgICAgY2VudHJhbF9jYWNoZVtpXS5Jbml0KGkpOworICAg
ICAgY2VudHJhbF9jYWNoZVtpXS5Jbml0KGksIGVudHJvcHkpOwogICAgIH0KICAgICBwYWdlaGVh
cC0+aW5pdCgpOwogICAgIHBoaW5pdGVkID0gMTsKQEAgLTMxNzEsMTAgKzMyNjAsMTAgQEAgdm9p
ZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpIHsKICAgfQogfQogCi1pbmxpbmUg
VENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpOZXdIZWFwKFRocmVh
ZElkZW50aWZpZXIgdGlkKSB7CitpbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9j
X1RocmVhZENhY2hlOjpOZXdIZWFwKFRocmVhZElkZW50aWZpZXIgdGlkLCB1aW50cHRyX3QgZW50
cm9weSkgewogICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0aGUgbGlua2VkIGxp
c3QKICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUgKmhlYXAgPSB0aHJlYWRoZWFwX2FsbG9jYXRvci5O
ZXcoKTsKLSAgaGVhcC0+SW5pdCh0aWQpOworICBoZWFwLT5Jbml0KHRpZCwgZW50cm9weSk7CiAg
IGhlYXAtPm5leHRfID0gdGhyZWFkX2hlYXBzOwogICBoZWFwLT5wcmV2XyA9IE5VTEw7CiAgIGlm
ICh0aHJlYWRfaGVhcHMgIT0gTlVMTCkgdGhyZWFkX2hlYXBzLT5wcmV2XyA9IGhlYXA7CkBAIC0z
Mjg4LDcgKzMzNzcsNyBAQCBUQ01hbGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2Fj
aGU6OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKSB7CiAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGhlYXAgPT0gTlVMTCkgaGVhcCA9IE5ld0hlYXAobWUpOworICAgIGlmIChoZWFwID09IE5VTEwp
IGhlYXAgPSBOZXdIZWFwKG1lLCBIQVJERU5JTkdfRU5UUk9QWSk7CiAgIH0KIAogICAvLyBXZSBj
YWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5
CkBAIC0zNzkwLDExICszODc5LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJl
ZSh2b2lkKiBwdHIpIHsKICNlbmRpZgogICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0g
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCk7CiAgICAgaWYgKGhlYXAg
IT0gTlVMTCkgewotICAgICAgaGVhcC0+RGVhbGxvY2F0ZShwdHIsIGNsKTsKKyAgICAgIGhlYXAt
PkRlYWxsb2NhdGUoSGFyZGVuZWRTTEw6OmNyZWF0ZShwdHIpLCBjbCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgIC8vIERlbGV0ZSBkaXJlY3RseSBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgICAgIFNMTF9T
ZXROZXh0KHB0ciwgTlVMTCk7Ci0gICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShw
dHIsIHB0ciwgMSk7CisgICAgICBTTExfU2V0TmV4dChIYXJkZW5lZFNMTDo6Y3JlYXRlKHB0ciks
IEhhcmRlbmVkU0xMOjpudWxsKCksIGNlbnRyYWxfY2FjaGVbY2xdLmVudHJvcHkoKSk7CisgICAg
ICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShIYXJkZW5lZFNMTDo6Y3JlYXRlKHB0ciks
IEhhcmRlbmVkU0xMOjpjcmVhdGUocHRyKSwgMSk7CiAgICAgfQogICB9IGVsc2UgewogICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwpAQCAtNDQzNyw4ICs0NTI2LDggQEAgc2l6
ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikKICAgICBpZiAoIXNwYW4gfHwgc3Bh
bi0+ZnJlZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBmb3IgKHZvaWQqIGZyZWUgPSBzcGFu
LT5vYmplY3RzOyBmcmVlICE9IE5VTEw7IGZyZWUgPSAqKCh2b2lkKiopIGZyZWUpKSB7Ci0gICAg
ICAgIGlmIChwdHIgPT0gZnJlZSkKKyAgICBmb3IgKEhhcmRlbmVkU0xMIGZyZWUgPSBzcGFuLT5v
YmplY3RzOyBmcmVlOyBmcmVlID0gU0xMX05leHQoZnJlZSwgSEFSREVOSU5HX0VOVFJPUFkpKSB7
CisgICAgICAgIGlmIChwdHIgPT0gZnJlZS52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCkBAIC00NDUxLDYgKzQ1NDAsMTkgQEAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNv
bnN0IHZvaWQqIHB0cikKIAogI2lmIE9TKERBUldJTikKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitUKiBSZW1vdGVNZW1vcnlSZWFkZXI6Om5leHRFbnRyeUluSGFyZGVuZWRMaW5rZWRMaXN0KFQq
KiByZW1vdGVBZGRyZXNzLCB1aW50cHRyX3QgZW50cm9weSkgY29uc3QKK3sKKyAgICBUKiogbG9j
YWxBZGRyZXNzID0gKCp0aGlzKShyZW1vdGVBZGRyZXNzKTsKKyAgICBBU1NFUlQobG9jYWxBZGRy
ZXNzKTsKKyAgICBpZiAoIWxvY2FsQWRkcmVzcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVCog
aGFyZGVuZWROZXh0ID0gKmxvY2FsQWRkcmVzczsKKyAgICBpZiAoIWhhcmRlbmVkTmV4dCB8fCBo
YXJkZW5lZE5leHQgPT0gKHZvaWQqKWVudHJvcHkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBYT1JfTUFTS19QVFJfV0lUSF9LRVkoaGFyZGVuZWROZXh0LCByZW1vdGVBZGRyZXNzLCBl
bnRyb3B5KTsKK30KKwogY2xhc3MgRnJlZU9iamVjdEZpbmRlciB7CiAgICAgY29uc3QgUmVtb3Rl
TWVtb3J5UmVhZGVyJiBtX3JlYWRlcjsKICAgICBIYXNoU2V0PHZvaWQqPiBtX2ZyZWVPYmplY3Rz
OwpAQCAtNDQ3OSwxMiArNDU4MSwxOCBAQCBwdWJsaWM6CiBjbGFzcyBQYWdlTWFwRnJlZU9iamVj
dEZpbmRlciB7CiAgICAgY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiBtX3JlYWRlcjsKICAgICBG
cmVlT2JqZWN0RmluZGVyJiBtX2ZyZWVPYmplY3RGaW5kZXI7CisgICAgdWludHB0cl90IG1fZW50
cm9weTsKIAogcHVibGljOgotICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyKGNvbnN0IFJlbW90
ZU1lbW9yeVJlYWRlciYgcmVhZGVyLCBGcmVlT2JqZWN0RmluZGVyJiBmcmVlT2JqZWN0RmluZGVy
KQorICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyKGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYg
cmVhZGVyLCBGcmVlT2JqZWN0RmluZGVyJiBmcmVlT2JqZWN0RmluZGVyLCB1aW50cHRyX3QgZW50
cm9weSkKICAgICAgICAgOiBtX3JlYWRlcihyZWFkZXIpCiAgICAgICAgICwgbV9mcmVlT2JqZWN0
RmluZGVyKGZyZWVPYmplY3RGaW5kZXIpCi0gICAgeyB9CisgICAgICAgICwgbV9lbnRyb3B5KGVu
dHJvcHkpCisgICAgeworI2lmIEVOQUJMRShUQ01BTExPQ19IQVJERU5JTkcpCisgICAgICAgIEFT
U0VSVChtX2VudHJvcHkpOworI2VuZGlmCisgICAgfQogCiAgICAgaW50IHZpc2l0KHZvaWQqIHB0
cikgY29uc3QKICAgICB7CkBAIC00NTAwLDggKzQ2MDgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2ZyZWVPYmplY3RGaW5kZXIudmlzaXQocHRyKTsKICAgICAgICAgfSBlbHNlIGlmIChzcGFu
LT5zaXplY2xhc3MpIHsKICAgICAgICAgICAgIC8vIFdhbGsgdGhlIGZyZWUgbGlzdCBvZiB0aGUg
c21hbGwtb2JqZWN0IHNwYW4sIGtlZXBpbmcgdHJhY2sgb2YgZWFjaCBvYmplY3Qgc2VlbgotICAg
ICAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4dE9iamVj
dDsgbmV4dE9iamVjdCA9IG1fcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJl
dF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQotICAgICAgICAgICAgICAgIG1fZnJlZU9iamVj
dEZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICAgICAgICAgIGZvciAoSGFyZGVuZWRTTEwg
bmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3Quc2V0VmFs
dWUobV9yZWFkZXIubmV4dEVudHJ5SW5IYXJkZW5lZExpbmtlZExpc3QocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KG5leHRPYmplY3QudmFsdWUoKSksIG1fZW50cm9weSkpKQorICAgICAgICAgICAg
ICAgIG1fZnJlZU9iamVjdEZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZhbHVlKCkpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBzcGFuLT5sZW5ndGg7CiAgICAgfQpAQCAtNDUzNSwxNSArNDY0
Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVjb3JkUGVuZGluZ1JlZ2lvbnMoKQogICAgIHsK
LSAgICAgICAgU3BhbiogbGFzdFNwYW4gPSBtX2NvYWxlc2NlZFNwYW5zW21fY29hbGVzY2VkU3Bh
bnMuc2l6ZSgpIC0gMV07Ci0gICAgICAgIHZtX3JhbmdlX3QgcHRyUmFuZ2UgPSB7IG1fY29hbGVz
Y2VkU3BhbnNbMF0tPnN0YXJ0IDw8IGtQYWdlU2hpZnQsIDAgfTsKLSAgICAgICAgcHRyUmFuZ2Uu
c2l6ZSA9IChsYXN0U3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCkgLSBwdHJSYW5nZS5hZGRyZXNz
ICsgKGxhc3RTcGFuLT5sZW5ndGggKiBrUGFnZVNpemUpOwotCi0gICAgICAgIC8vIE1hcmsgdGhl
IG1lbW9yeSByZWdpb24gdGhlIHNwYW5zIHJlcHJlc2VudCBhcyBhIGNhbmRpZGF0ZSBmb3IgY29u
dGFpbmluZyBwb2ludGVycwotICAgICAgICBpZiAobV90eXBlTWFzayAmIE1BTExPQ19QVFJfUkVH
SU9OX1JBTkdFX1RZUEUpCi0gICAgICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250
ZXh0LCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFLCAmcHRyUmFuZ2UsIDEpOwotCi0gICAg
ICAgIGlmICghKG1fdHlwZU1hc2sgJiBNQUxMT0NfUFRSX0lOX1VTRV9SQU5HRV9UWVBFKSkgewor
ICAgICAgICBpZiAoIShtX3R5cGVNYXNrICYgKE1BTExPQ19QVFJfSU5fVVNFX1JBTkdFX1RZUEUg
fCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFKSkpIHsKICAgICAgICAgICAgIG1fY29hbGVz
Y2VkU3BhbnMuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDU3
Myw3ICs0NjczLDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgKCptX3JlY29yZGVyKShtX3Rhc2ssIG1fY29udGV4dCwgTUFMTE9DX1BUUl9JTl9VU0VfUkFO
R0VfVFlQRSwgYWxsb2NhdGVkUG9pbnRlcnMuZGF0YSgpLCBhbGxvY2F0ZWRQb2ludGVycy5zaXpl
KCkpOworICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250ZXh0LCBtX3R5cGVNYXNr
ICYgKE1BTExPQ19QVFJfSU5fVVNFX1JBTkdFX1RZUEUgfCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5H
RV9UWVBFKSwgYWxsb2NhdGVkUG9pbnRlcnMuZGF0YSgpLCBhbGxvY2F0ZWRQb2ludGVycy5zaXpl
KCkpOwogCiAgICAgICAgIG1fY29hbGVzY2VkU3BhbnMuY2xlYXIoKTsKICAgICB9CkBAIC00Njc0
LDcgKzQ3NzQsNyBAQCBrZXJuX3JldHVybl90IEZhc3RNYWxsb2Nab25lOjplbnVtZXJhdGUodGFz
a190IHRhc2ssIHZvaWQqIGNvbnRleHQsIHVuc2lnbmVkIHR5cAogICAgIGZpbmRlci5maW5kRnJl
ZU9iamVjdHMoY2VudHJhbENhY2hlcywga051bUNsYXNzZXMsIG16b25lLT5tX2NlbnRyYWxDYWNo
ZXMpOwogCiAgICAgVENNYWxsb2NfUGFnZUhlYXA6OlBhZ2VNYXAqIHBhZ2VNYXAgPSAmcGFnZUhl
YXAtPnBhZ2VtYXBfOwotICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyIHBhZ2VNYXBGaW5kZXIo
bWVtb3J5UmVhZGVyLCBmaW5kZXIpOworICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyIHBhZ2VN
YXBGaW5kZXIobWVtb3J5UmVhZGVyLCBmaW5kZXIsIHBhZ2VIZWFwLT5lbnRyb3B5Xyk7CiAgICAg
cGFnZU1hcC0+dmlzaXRWYWx1ZXMocGFnZU1hcEZpbmRlciwgbWVtb3J5UmVhZGVyKTsKIAogICAg
IFBhZ2VNYXBNZW1vcnlVc2FnZVJlY29yZGVyIHVzYWdlUmVjb3JkZXIodGFzaywgY29udGV4dCwg
dHlwZU1hc2ssIHJlY29yZGVyLCBtZW1vcnlSZWFkZXIsIGZpbmRlcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9NYWxsb2Nab25lU3VwcG9ydC5oIGIvU291cmNlL1dURi93dGYvTWFsbG9j
Wm9uZVN1cHBvcnQuaAppbmRleCA0MzMyZTQwYjg1MmM1NzQzYWZhOWVlY2FmOGEyNDE3ZDM5Mjhi
Nzc5Li5lZTgwOWM1YTI4YjZlMDI3YWEwYTdlNmM4NTMwMjBjYmYyM2MyMTViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9NYWxsb2Nab25lU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01hbGxvY1pvbmVTdXBwb3J0LmgKQEAgLTU5LDEzICs1OSw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBUKiBuZXh0RW50cnlJbkxpbmtlZExpc3Qo
VCoqIGFkZHJlc3MpIGNvbnN0Ci0gICAgewotICAgICAgICBUKiogb3V0cHV0ID0gKCp0aGlzKShh
ZGRyZXNzKTsKLSAgICAgICAgaWYgKCFvdXRwdXQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuICpvdXRwdXQ7Ci0gICAgfQorICAgIFQqIG5leHRFbnRyeUluSGFyZGVuZWRM
aW5rZWRMaXN0KFQqKiBhZGRyZXNzLCB1aW50cHRyX3QgZW50cm9weSkgY29uc3Q7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187692</attachid>
            <date>2013-02-11 15:16:33 -0800</date>
            <delta_ts>2013-02-11 15:51:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109334-20130211151304.patch</filename>
            <type>text/plain</type>
            <size>49971</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdkNzU4Y2RmMGI2MWVhOGM4NTFkN2Ni
OWRlYmUxODA4ZWYzZTU0YjkuLjRmOWNmZTZmZDc2MjU1NzAxNTUyMmVkZWI0ZDRkMTliMjY3N2Qw
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDEzLTAyLTA4ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgSGFyZGVuIEZhc3RNYWxsb2MgKGFnYWluKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MzM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtaW1wbGVtZW50IGhh
cmRlbmluZyBvZiBsaW5rZWQgbGlzdHMgaW4gVENNYWxsb2MuCisKKyAgICAgICAgSW4gb3JkZXIg
dG8ga2VlcCBoZWFwIGludHJvc3BlY3Rpb24gd29ya2luZywgd2UgbmVlZCB0byB0aHJlYWQgdGhl
CisgICAgICAgIGhlYXAgZW50cm9weSBtYW51YWxseSBhcyB0aGUgaW50cm9zcGVjdGlvbiBwcm9j
ZXNzIGNhbid0IHVzZSB0aGUKKyAgICAgICAgYWRkcmVzcyBvZiBhIGdsb2JhbCBpbiBkZXRlcm1p
bmluZyB0aGUgbWFzay4gIEdpdmVuIHdlIG5vdyBoYXZlIHRvCisgICAgICAgIHRocmVhZCBhIHZh
bHVlIHRocm91Z2ggYW55d2F5LCBJJ3ZlIHN0b3BwZWQgcmVseWluZyBvbiBBU0xSIGZvciBlbnRy
b3B5CisgICAgICAgIGFuZCBhbSBzaW1wbHkgdXNpbmcgYXJjNHJhbmRvbSgpIG9uIGRhcndpbiwg
YW5kIHRpbWUgKyBBU0xSIGV2ZXJ5d2hlcmUKKyAgICAgICAgZWxzZS4KKworICAgICAgICBJJ3Zl
IGFsc28gbWFkZSBhbiBleHBsaWNpdCBzdHJ1Y3QgdHlwZSBmb3J0aGUgRmFzdE1hbGxvYyBzaW5n
bHkgbGlua2VkCisgICAgICAgIGxpc3RzLCBhcyBpdCBzZWVtZWQgbGlrZSB0aGUgb25seSB3YXkg
dG8gcmVsaWFibHkgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICAgICAgICB2b2lkKidzIHRoYXQgd2Vy
ZSBsaXN0cyB2cy4gdm9pZCogdGhhdCB3ZXJlIG5vdC4gIFRoaXMgYWxzbyBtYWRlIGl0CisgICAg
ICAgIHNvbWV3aGF0IGVhc2llciB0byByZWFzb24gYWJvdXQgdGhpbmdzIGFjcm9zcyBwcm9jZXNz
ZXMuCisKKyAgICAgICAgVmVyaWZpZWQgdGhhdCBhbGwgdGhlIGludHJvc3BlY3Rpb24gdG9vbHMg
d29yayBhcyBleHBlY3RlZC4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAg
ICAgKFdURjo6aW50ZXJuYWxFbnRyb3B5VmFsdWUpOgorICAgICAgICAoV1RGKToKKyAgICAgICAg
KEhhcmRlbmVkU0xMKToKKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6OkhhcmRlbmVkU0xMOjpudWxsKToKKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6
OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6OnZhbHVlKToKKyAgICAgICAg
KFdURjo6SGFyZGVuZWRTTEw6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkhhcmRlbmVkU0xM
OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFRDRW50cnkpOgorICAg
ICAgICAoV1RGOjpTTExfTmV4dCk6CisgICAgICAgIChXVEY6OlNMTF9TZXROZXh0KToKKyAgICAg
ICAgKFdURjo6U0xMX1B1c2gpOgorICAgICAgICAoV1RGOjpTTExfUG9wKToKKyAgICAgICAgKFdU
Rjo6U0xMX1BvcFJhbmdlKToKKyAgICAgICAgKFdURjo6U0xMX1B1c2hSYW5nZSk6CisgICAgICAg
IChXVEY6OlNMTF9TaXplKToKKyAgICAgICAgKFBhZ2VIZWFwQWxsb2NhdG9yKToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFs
bG9jYXRvcjo6TmV3KToKKyAgICAgICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkRlbGV0ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjpyZWNvcmRBZG1pbmlzdHJhdGl2ZVJl
Z2lvbnMpOgorICAgICAgICAoV1RGOjpTcGFuOjpuZXh0KToKKyAgICAgICAgKFdURjo6U3Bhbjo6
cmVtb3RlTmV4dCk6CisgICAgICAgIChXVEY6OlNwYW46OnByZXYpOgorICAgICAgICAoV1RGOjpT
cGFuOjpzZXROZXh0KToKKyAgICAgICAgKFdURjo6U3Bhbjo6c2V0UHJldik6CisgICAgICAgIChT
cGFuKToKKyAgICAgICAgKFdURjo6RExMX0luaXQpOgorICAgICAgICAoV1RGOjpETExfUmVtb3Zl
KToKKyAgICAgICAgKFdURjo6RExMX0lzRW1wdHkpOgorICAgICAgICAoV1RGOjpETExfTGVuZ3Ro
KToKKyAgICAgICAgKFdURjo6RExMX1ByZXBlbmQpOgorICAgICAgICAoVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OmVu
dW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVl
TGlzdDo6ZW50cm9weSk6CisgICAgICAgIChUQ01hbGxvY19QYWdlSGVhcCk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjppbml0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFn
ZUhlYXA6OnNjYXZlbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6Ok5ldyk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpBbGxvY0xhcmdlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNhcnZlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2Nf
UGFnZUhlYXA6OkRlbGV0ZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpSZXR1
cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrTGlzdCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jX1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QpOgorICAgICAgICAoVENNYWxsb2Nf
VGhyZWFkQ2FjaGVfRnJlZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNo
ZV9GcmVlTGlzdDo6SW5pdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0Zy
ZWVMaXN0OjplbXB0eSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVM
aXN0OjpQdXNoKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3Q6
OlB1c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0
OjpQb3BSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0
OjpQb3ApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW51
bWVyYXRlRnJlZU9iamVjdHMpOgorICAgICAgICAoVENNYWxsb2NfVGhyZWFkQ2FjaGUpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbml0KToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnMpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMp
OgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpQb3B1bGF0ZSk6Cisg
ICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0KToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NfVGhyZWFkQ2FjaGU6OlJlbGVhc2VUb0NlbnRyYWxDYWNoZSk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NfVGhyZWFkQ2FjaGU6Ok5ld0hlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRD
YWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSk6CisgICAgICAgICogd3RmL01hbGxvY1pvbmVT
dXBwb3J0Lmg6CisgICAgICAgIChSZW1vdGVNZW1vcnlSZWFkZXIpOgorCiAyMDEzLTAyLTExICBD
aHJpc3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBTdG9wIHVzaW5nIHNtYXJ0IHBvaW50ZXJzIGZvciBFY29yZV9UaW1lcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFs
bG9jLmNwcAppbmRleCBiNzU1MzJmN2M1Y2FlNzI3MjM4MjNjMjY2ZjE0MzEzMGIwNDlkY2Q5Li40
NTJhNDQyODM4ODc3YTZmZTA4YWRjMDg5Yzg5NTJhZTRhNTkwMTVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9j
LmNwcApAQCAtNzgsNiArNzgsOCBAQAogI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKIAogI2luY2x1
ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorCiAjaW5jbHVkZSA8
bGltaXRzPgogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtMTAyLDcg
KzEwNCw3IEBACiAKIC8vIEhhcmRlbiB0aGUgcG9pbnRlcnMgc3RvcmVkIGluIHRoZSBUQ01hbGxv
YyBsaW5rZWQgbGlzdHMKICNpZiBDT01QSUxFUihHQ0MpCi0jZGVmaW5lIEVOQUJMRV9UQ01BTExP
Q19IQVJERU5JTkcgMAorI2RlZmluZSBFTkFCTEVfVENNQUxMT0NfSEFSREVOSU5HIDEKICNlbmRp
ZgogCiAvLyBVc2UgYSBiYWNrZ3JvdW5kIHRocmVhZCB0byBwZXJpb2RpY2FsbHkgc2NhdmVuZ2Ug
bWVtb3J5IHRvIHJlbGVhc2UgYmFjayB0byB0aGUgc3lzdGVtCkBAIC01MjAsMTMgKzUyMiw0MSBA
QCBuYW1lc3BhY2UgV1RGIHsKICAqLwogc3RhdGljIGNvbnN0IGNoYXIga0xMSGFyZGVuaW5nTWFz
ayA9IDA7CiBlbnVtIHsKLSAgICBNYXNrQWRkclNoaWZ0ID0gOCwKLSAgICBNYXNrS2V5U2hpZnQg
PSA0CisgICAgTWFza0tleVNoaWZ0ID0gMTMKK307CisKK3RlbXBsYXRlIDx1bnNpZ25lZD4gc3Ry
dWN0IEVudHJvcHlTb3VyY2U7Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW50cm9weVNvdXJjZTw0PiB7
CisgICAgc3RhdGljIHVpbnQzMl90IHZhbHVlKCkKKyAgICB7CisjaWYgT1MoREFSV0lOKQorICAg
ICAgICByZXR1cm4gYXJjNHJhbmRvbSgpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGN1cnJlbnRUaW1lKCkgKiAxMDAw
MCkgXiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJmtMTEhhcmRlbmluZ01hc2spKTsKKyNl
bmRpZgorICAgIH0KIH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbnRyb3B5U291cmNlPDg+IHsK
KyAgICBzdGF0aWMgdWludDY0X3QgdmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVudHJv
cHlTb3VyY2U8ND46OnZhbHVlKCkgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEVudHJvcHlTb3Vy
Y2U8ND46OnZhbHVlKCkpIDw8IDMyKTsKKyAgICB9Cit9OworCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB1aW50cHRyX3QgaW50ZXJuYWxFbnRyb3B5VmFsdWUoKSB7CisgICAgc3RhdGljIHVpbnRwdHJf
dCB2YWx1ZSA9IEVudHJvcHlTb3VyY2U8c2l6ZW9mKHVpbnRwdHJfdCk+Ojp2YWx1ZSgpOworICAg
IEFTU0VSVCh2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCisjZGVmaW5lIEhBUkRFTklO
R19FTlRST1BZIGludGVybmFsRW50cm9weVZhbHVlKCkKICNkZWZpbmUgUk9UQVRFX1ZBTFVFKHZh
bHVlLCBhbW91bnQpICgoKHZhbHVlKSA+PiAoYW1vdW50KSkgfCAoKHZhbHVlKSA8PCAoc2l6ZW9m
KHZhbHVlKSAqIDggLSAoYW1vdW50KSkpKQotI2RlZmluZSBYT1JfTUFTS19QVFJfV0lUSF9LRVko
cHRyLCBrZXkpIChyZWludGVycHJldF9jYXN0PHR5cGVvZihwdHIpPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocHRyKV5ST1RBVEVfVkFMVUUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGtleSksIE1hc2tLZXlTaGlmdCleUk9UQVRFX1ZBTFVFKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pigma0xMSGFyZGVuaW5nTWFzayksIE1hc2tBZGRyU2hpZnQpKSkKKyNkZWZpbmUgWE9SX01B
U0tfUFRSX1dJVEhfS0VZKHB0ciwga2V5LCBlbnRyb3B5KSAocmVpbnRlcnByZXRfY2FzdDx0eXBl
b2YocHRyKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cileKFJPVEFURV9WQUxVRShy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oa2V5KSwgTWFza0tleVNoaWZ0KV5lbnRyb3B5KSkp
CisKICNlbHNlCi0jZGVmaW5lIFhPUl9NQVNLX1BUUl9XSVRIX0tFWShwdHIsIGtleSkgKHB0cikK
KyNkZWZpbmUgWE9SX01BU0tfUFRSX1dJVEhfS0VZKHB0ciwga2V5LCBlbnRyb3B5KSAoKCh2b2lk
KWVudHJvcHkpLCAoKHZvaWQpa2V5KSwgcHRyKQorI2RlZmluZSBIQVJERU5JTkdfRU5UUk9QWSAw
CiAjZW5kaWYKIAogCkBAIC02NjIsMTIgKzY5Miw0MCBAQCBzdGF0aWMgc2l6ZV90IGNsYXNzX3Rv
X3NpemVba051bUNsYXNzZXNdOwogLy8gTWFwcGluZyBmcm9tIHNpemUgY2xhc3MgdG8gbnVtYmVy
IG9mIHBhZ2VzIHRvIGFsbG9jYXRlIGF0IGEgdGltZQogc3RhdGljIHNpemVfdCBjbGFzc190b19w
YWdlc1trTnVtQ2xhc3Nlc107CiAKKy8vIEhhcmRlbmVkIHNpbmdseSBsaW5rZWQgbGlzdC4gIFdl
IG1ha2UgdGhpcyBhIHN0cnVjdCB0byBhbGxvdyBjb21waWxlciB0bworLy8gc3RhdGljYWxseSBw
cmV2ZW50IG1pc21hdGNoaW5nIGhhcmRlbmVkIGFuZCBub24taGFyZGVuZWQgbGlzdAorY2xhc3Mg
SGFyZGVuZWRTTEwgeworcHVibGljOgorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEhhcmRlbmVk
U0xMIGNyZWF0ZSh2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhhcmRlbmVkU0xMIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBIYXJkZW5lZFNMTCBudWxsKCkK
KyAgICB7CisgICAgICAgIEhhcmRlbmVkU0xMIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSAwOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXRWYWx1ZSh2b2lkKiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsg
fQorICAgIHR5cGVkZWYgdm9pZCogKEhhcmRlbmVkU0xMOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7
CisgICAgQUxXQVlTX0lOTElORSBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSA/ICZIYXJkZW5lZFNMTDo6bV92YWx1ZSA6IDA7IH0KKworcHJpdmF0
ZToKKyAgICB2b2lkKiBtX3ZhbHVlOworfTsKKwogLy8gVHJhbnNmZXJDYWNoZSBpcyB1c2VkIHRv
IGNhY2hlIHRyYW5zZmVycyBvZiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NdCiAvLyBi
YWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRocmVhZCBjYWNoZXMgYW5kIHRoZSBjZW50cmFsIGNhY2hl
IGZvciBhIGdpdmVuIHNpemUKIC8vIGNsYXNzLgogc3RydWN0IFRDRW50cnkgewotICB2b2lkICpo
ZWFkOyAgLy8gSGVhZCBvZiBjaGFpbiBvZiBvYmplY3RzLgotICB2b2lkICp0YWlsOyAgLy8gVGFp
bCBvZiBjaGFpbiBvZiBvYmplY3RzLgorICBIYXJkZW5lZFNMTCBoZWFkOyAgLy8gSGVhZCBvZiBj
aGFpbiBvZiBvYmplY3RzLgorICBIYXJkZW5lZFNMTCB0YWlsOyAgLy8gVGFpbCBvZiBjaGFpbiBv
ZiBvYmplY3RzLgogfTsKIC8vIEEgY2VudHJhbCBjYWNoZSBmcmVlbGlzdCBjYW4gaGF2ZSBhbnl3
aGVyZSBmcm9tIDAgdG8ga051bVRyYW5zZmVyRW50cmllcwogLy8gc2xvdHMgdG8gcHV0IGxpbmsg
bGlzdCBjaGFpbnMgaW50by4gIFRvIGtlZXAgbWVtb3J5IHVzYWdlIGJvdW5kZWQgdGhlIHRvdGFs
CkBAIC02OTIsNjMgKzc1MCw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBMZ0Zsb29yKHNpemVfdCBu
KSB7CiAgIHJldHVybiBsb2c7CiB9CiAKLS8vIFNvbWUgdmVyeSBiYXNpYyBsaW5rZWQgbGlzdCBm
dW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB1c2luZyB2b2lkICogYXMKLS8vIHN0b3JhZ2UuCi0K
LXN0YXRpYyBpbmxpbmUgdm9pZCAqU0xMX05leHQodm9pZCAqdCkgewotICByZXR1cm4gWE9SX01B
U0tfUFRSX1dJVEhfS0VZKCoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHQpKSwgdCk7CisvLyBG
dW5jdGlvbnMgZm9yIHVzaW5nIG91ciBzaW1wbGUgaGFyZGVuZWQgc2luZ2x5IGxpbmtlZCBsaXN0
CitzdGF0aWMgQUxXQVlTX0lOTElORSBIYXJkZW5lZFNMTCBTTExfTmV4dChIYXJkZW5lZFNMTCB0
LCB1aW50cHRyX3QgZW50cm9weSkgeworICAgIHJldHVybiBIYXJkZW5lZFNMTDo6Y3JlYXRlKFhP
Ul9NQVNLX1BUUl9XSVRIX0tFWSgqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0LnZhbHVlKCkp
KSwgdC52YWx1ZSgpLCBlbnRyb3B5KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBTTExfU2V0
TmV4dCh2b2lkICp0LCB2b2lkICpuKSB7Ci0gICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHQp
KSA9IFhPUl9NQVNLX1BUUl9XSVRIX0tFWShuLCB0KTsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZv
aWQgU0xMX1NldE5leHQoSGFyZGVuZWRTTEwgdCwgSGFyZGVuZWRTTEwgbiwgdWludHB0cl90IGVu
dHJvcHkpIHsKKyAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0LnZhbHVlKCkpKSA9IFhP
Ul9NQVNLX1BUUl9XSVRIX0tFWShuLnZhbHVlKCksIHQudmFsdWUoKSwgZW50cm9weSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBTTExfUHVzaCh2b2lkICoqbGlzdCwgdm9pZCAqZWxlbWVudCkg
ewotICBTTExfU2V0TmV4dChlbGVtZW50LCAqbGlzdCk7CitzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIFNMTF9QdXNoKEhhcmRlbmVkU0xMKiBsaXN0LCBIYXJkZW5lZFNMTCBlbGVtZW50LCB1aW50
cHRyX3QgZW50cm9weSkgeworICBTTExfU2V0TmV4dChlbGVtZW50LCAqbGlzdCwgZW50cm9weSk7
CiAgICpsaXN0ID0gZWxlbWVudDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICpTTExfUG9wKHZv
aWQgKipsaXN0KSB7Ci0gIHZvaWQgKnJlc3VsdCA9ICpsaXN0OwotICAqbGlzdCA9IFNMTF9OZXh0
KCpsaXN0KTsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEhhcmRlbmVkU0xMIFNMTF9Qb3AoSGFyZGVu
ZWRTTEwgKmxpc3QsIHVpbnRwdHJfdCBlbnRyb3B5KSB7CisgIEhhcmRlbmVkU0xMIHJlc3VsdCA9
ICpsaXN0OworICAqbGlzdCA9IFNMTF9OZXh0KCpsaXN0LCBlbnRyb3B5KTsKICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotCiAvLyBSZW1vdmUgTiBlbGVtZW50cyBmcm9tIGEgbGlua2VkIGxpc3QgdG8g
d2hpY2ggaGVhZCBwb2ludHMuICBoZWFkIHdpbGwgYmUKIC8vIG1vZGlmaWVkIHRvIHBvaW50IHRv
IHRoZSBuZXcgaGVhZC4gIHN0YXJ0IGFuZCBlbmQgd2lsbCBwb2ludCB0byB0aGUgZmlyc3QKIC8v
IGFuZCBsYXN0IG5vZGVzIG9mIHRoZSByYW5nZS4gIE5vdGUgdGhhdCBlbmQgd2lsbCBwb2ludCB0
byBOVUxMIGFmdGVyIHRoaXMKIC8vIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLXN0YXRpYyBpbmxpbmUg
dm9pZCBTTExfUG9wUmFuZ2Uodm9pZCAqKmhlYWQsIGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQg
KiplbmQpIHsKKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBTTExfUG9wUmFuZ2UoSGFyZGVu
ZWRTTEwqIGhlYWQsIGludCBOLCBIYXJkZW5lZFNMTCAqc3RhcnQsIEhhcmRlbmVkU0xMICplbmQs
IHVpbnRwdHJfdCBlbnRyb3B5KSB7CiAgIGlmIChOID09IDApIHsKLSAgICAqc3RhcnQgPSBOVUxM
OwotICAgICplbmQgPSBOVUxMOworICAgICpzdGFydCA9IEhhcmRlbmVkU0xMOjpudWxsKCk7Cisg
ICAgKmVuZCA9IEhhcmRlbmVkU0xMOjpudWxsKCk7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgdm9p
ZCAqdG1wID0gKmhlYWQ7CisgIEhhcmRlbmVkU0xMIHRtcCA9ICpoZWFkOwogICBmb3IgKGludCBp
ID0gMTsgaSA8IE47ICsraSkgewotICAgIHRtcCA9IFNMTF9OZXh0KHRtcCk7CisgICAgdG1wID0g
U0xMX05leHQodG1wLCBlbnRyb3B5KTsKICAgfQogCiAgICpzdGFydCA9ICpoZWFkOwogICAqZW5k
ID0gdG1wOwotICAqaGVhZCA9IFNMTF9OZXh0KHRtcCk7CisgICpoZWFkID0gU0xMX05leHQodG1w
LCBlbnRyb3B5KTsKICAgLy8gVW5saW5rIHJhbmdlIGZyb20gbGlzdC4KLSAgU0xMX1NldE5leHQo
dG1wLCBOVUxMKTsKKyAgU0xMX1NldE5leHQodG1wLCBIYXJkZW5lZFNMTDo6bnVsbCgpLCBlbnRy
b3B5KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9QdXNoUmFuZ2Uodm9pZCAqKmhlYWQs
IHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpIHsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgU0xM
X1B1c2hSYW5nZShIYXJkZW5lZFNMTCAqaGVhZCwgSGFyZGVuZWRTTEwgc3RhcnQsIEhhcmRlbmVk
U0xMIGVuZCwgdWludHB0cl90IGVudHJvcHkpIHsKICAgaWYgKCFzdGFydCkgcmV0dXJuOwotICBT
TExfU2V0TmV4dChlbmQsICpoZWFkKTsKKyAgU0xMX1NldE5leHQoZW5kLCAqaGVhZCwgZW50cm9w
eSk7CiAgICpoZWFkID0gc3RhcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IFNMTF9TaXpl
KHZvaWQgKmhlYWQpIHsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHNpemVfdCBTTExfU2l6ZShIYXJk
ZW5lZFNMTCBoZWFkLCB1aW50cHRyX3QgZW50cm9weSkgewogICBpbnQgY291bnQgPSAwOwogICB3
aGlsZSAoaGVhZCkgewogICAgIGNvdW50Kys7Ci0gICAgaGVhZCA9IFNMTF9OZXh0KGhlYWQpOwor
ICAgIGhlYWQgPSBTTExfTmV4dChoZWFkLCBlbnRyb3B5KTsKICAgfQogICByZXR1cm4gY291bnQ7
CiB9CkBAIC05NDIsMzAgKzk5OCwzMiBAQCBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvciB7CiAgIHNp
emVfdCBmcmVlX2F2YWlsXzsKIAogICAvLyBMaW5rZWQgbGlzdCBvZiBhbGwgcmVnaW9ucyBhbGxv
Y2F0ZWQgYnkgdGhpcyBhbGxvY2F0b3IKLSAgdm9pZCogYWxsb2NhdGVkX3JlZ2lvbnNfOworICBI
YXJkZW5lZFNMTCBhbGxvY2F0ZWRfcmVnaW9uc187CiAKICAgLy8gRnJlZSBsaXN0IG9mIGFscmVh
ZHkgY2FydmVkIG9iamVjdHMKLSAgdm9pZCogZnJlZV9saXN0XzsKKyAgSGFyZGVuZWRTTEwgZnJl
ZV9saXN0XzsKIAogICAvLyBOdW1iZXIgb2YgYWxsb2NhdGVkIGJ1dCB1bmZyZWVkIG9iamVjdHMK
ICAgaW50IGludXNlXzsKKyAgdWludHB0cl90IGVudHJvcHlfOwogCiAgcHVibGljOgotICB2b2lk
IEluaXQoKSB7CisgIHZvaWQgSW5pdCh1aW50cHRyX3QgZW50cm9weSkgewogICAgIEFTU0VSVChr
QWxpZ25lZFNpemUgPD0ga0FsbG9jSW5jcmVtZW50KTsKICAgICBpbnVzZV8gPSAwOwotICAgIGFs
bG9jYXRlZF9yZWdpb25zXyA9IDA7CisgICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gSGFyZGVuZWRT
TEw6Om51bGwoKTsKICAgICBmcmVlX2FyZWFfID0gTlVMTDsKICAgICBmcmVlX2F2YWlsXyA9IDA7
Ci0gICAgZnJlZV9saXN0XyA9IE5VTEw7CisgICAgZnJlZV9saXN0Xy5zZXRWYWx1ZShOVUxMKTsK
KyAgICBlbnRyb3B5XyA9IGVudHJvcHk7CiAgIH0KIAogICBUKiBOZXcoKSB7CiAgICAgLy8gQ29u
c3VsdCBmcmVlIGxpc3QKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKGZyZWVfbGlzdF8gIT0g
TlVMTCkgewotICAgICAgcmVzdWx0ID0gZnJlZV9saXN0XzsKLSAgICAgIGZyZWVfbGlzdF8gPSAq
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihyZXN1bHQpKTsKKyAgICBpZiAoZnJlZV9saXN0Xykg
eworICAgICAgcmVzdWx0ID0gZnJlZV9saXN0Xy52YWx1ZSgpOworICAgICAgZnJlZV9saXN0XyA9
IFNMTF9OZXh0KGZyZWVfbGlzdF8sIGVudHJvcHlfKTsKICAgICB9IGVsc2UgewogICAgICAgaWYg
KGZyZWVfYXZhaWxfIDwga0FsaWduZWRTaXplKSB7CiAgICAgICAgIC8vIE5lZWQgbW9yZSByb29t
CkBAIC05NzMsOCArMTAzMSw5IEBAIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKICAgICAgICAg
aWYgKCFuZXdfYWxsb2NhdGlvbikKICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICpyZWlu
dGVycHJldF9jYXN0X3B0cjx2b2lkKio+KG5ld19hbGxvY2F0aW9uKSA9IGFsbG9jYXRlZF9yZWdp
b25zXzsKLSAgICAgICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gbmV3X2FsbG9jYXRpb247CisgICAg
ICAgIEhhcmRlbmVkU0xMIG5ld19oZWFkID0gSGFyZGVuZWRTTEw6OmNyZWF0ZShuZXdfYWxsb2Nh
dGlvbik7CisgICAgICAgIFNMTF9TZXROZXh0KG5ld19oZWFkLCBhbGxvY2F0ZWRfcmVnaW9uc18s
IGVudHJvcHlfKTsKKyAgICAgICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gbmV3X2hlYWQ7CiAgICAg
ICAgIGZyZWVfYXJlYV8gPSBuZXdfYWxsb2NhdGlvbiArIGtBbGlnbmVkU2l6ZTsKICAgICAgICAg
ZnJlZV9hdmFpbF8gPSBrQWxsb2NJbmNyZW1lbnQgLSBrQWxpZ25lZFNpemU7CiAgICAgICB9CkBA
IC05ODcsOCArMTA0Niw5IEBAIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKICAgfQogCiAgIHZv
aWQgRGVsZXRlKFQqIHApIHsKLSAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBm
cmVlX2xpc3RfOwotICAgIGZyZWVfbGlzdF8gPSBwOworICAgIEhhcmRlbmVkU0xMIG5ld19oZWFk
ID0gSGFyZGVuZWRTTEw6OmNyZWF0ZShwKTsKKyAgICBTTExfU2V0TmV4dChuZXdfaGVhZCwgZnJl
ZV9saXN0XywgZW50cm9weV8pOworICAgIGZyZWVfbGlzdF8gPSBuZXdfaGVhZDsKICAgICBpbnVz
ZV8tLTsKICAgfQogCkBAIC05OTgsOCArMTA1OCw4IEBAIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9y
IHsKICAgdGVtcGxhdGUgPGNsYXNzIFJlY29yZGVyPgogICB2b2lkIHJlY29yZEFkbWluaXN0cmF0
aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3JkZXIsIGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYg
cmVhZGVyKQogICB7Ci0gICAgICBmb3IgKHZvaWQqIGFkbWluQWxsb2NhdGlvbiA9IGFsbG9jYXRl
ZF9yZWdpb25zXzsgYWRtaW5BbGxvY2F0aW9uOyBhZG1pbkFsbG9jYXRpb24gPSByZWFkZXIubmV4
dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFsbG9jYXRp
b24pKSkKLSAgICAgICAgICByZWNvcmRlci5yZWNvcmRSZWdpb24ocmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KGFkbWluQWxsb2NhdGlvbiksIGtBbGxvY0luY3JlbWVudCk7CisgICAgICBm
b3IgKEhhcmRlbmVkU0xMIGFkbWluQWxsb2NhdGlvbiA9IGFsbG9jYXRlZF9yZWdpb25zXzsgYWRt
aW5BbGxvY2F0aW9uOyBhZG1pbkFsbG9jYXRpb24uc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUlu
SGFyZGVuZWRMaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFsbG9jYXRp
b24udmFsdWUoKSksIGVudHJvcHlfKSkpCisgICAgICAgICAgcmVjb3JkZXIucmVjb3JkUmVnaW9u
KHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihhZG1pbkFsbG9jYXRpb24udmFsdWUoKSks
IGtBbGxvY0luY3JlbWVudCk7CiAgIH0KICNlbmRpZgogfTsKQEAgLTEwNDAsMTYgKzExMDAsMTcg
QEAgc3RhdGljIHNpemVfdCBBbGxvY2F0aW9uU2l6ZShzaXplX3QgYnl0ZXMpIHsKIHN0cnVjdCBT
cGFuIHsKICAgUGFnZUlEICAgICAgICBzdGFydDsgICAgICAgICAgLy8gU3RhcnRpbmcgcGFnZSBu
dW1iZXIKICAgTGVuZ3RoICAgICAgICBsZW5ndGg7ICAgICAgICAgLy8gTnVtYmVyIG9mIHBhZ2Vz
IGluIHNwYW4KLSAgU3BhbiogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIFhPUl9NQVNLX1BUUl9XSVRI
X0tFWShtX25leHQsIHRoaXMpOyB9Ci0gIFNwYW4qIHByZXYoKSBjb25zdCB7IHJldHVybiBYT1Jf
TUFTS19QVFJfV0lUSF9LRVkobV9wcmV2LCB0aGlzKTsgfQotICB2b2lkIHNldE5leHQoU3Bhbiog
bmV4dCkgeyBtX25leHQgPSBYT1JfTUFTS19QVFJfV0lUSF9LRVkobmV4dCwgdGhpcyk7IH0KLSAg
dm9pZCBzZXRQcmV2KFNwYW4qIHByZXYpIHsgbV9wcmV2ID0gWE9SX01BU0tfUFRSX1dJVEhfS0VZ
KHByZXYsIHRoaXMpOyB9CisgIFNwYW4qIG5leHQodWludHB0cl90IGVudHJvcHkpIGNvbnN0IHsg
cmV0dXJuIFhPUl9NQVNLX1BUUl9XSVRIX0tFWShtX25leHQsIHRoaXMsIGVudHJvcHkpOyB9Cisg
IFNwYW4qIHJlbW90ZU5leHQoY29uc3QgU3BhbiogcmVtb3RlU3BhblBvaW50ZXIsIHVpbnRwdHJf
dCBlbnRyb3B5KSBjb25zdCB7IHJldHVybiBYT1JfTUFTS19QVFJfV0lUSF9LRVkobV9uZXh0LCBy
ZW1vdGVTcGFuUG9pbnRlciwgZW50cm9weSk7IH0KKyAgU3BhbiogcHJldih1aW50cHRyX3QgZW50
cm9weSkgY29uc3QgeyByZXR1cm4gWE9SX01BU0tfUFRSX1dJVEhfS0VZKG1fcHJldiwgdGhpcywg
ZW50cm9weSk7IH0KKyAgdm9pZCBzZXROZXh0KFNwYW4qIG5leHQsIHVpbnRwdHJfdCBlbnRyb3B5
KSB7IG1fbmV4dCA9IFhPUl9NQVNLX1BUUl9XSVRIX0tFWShuZXh0LCB0aGlzLCBlbnRyb3B5KTsg
fQorICB2b2lkIHNldFByZXYoU3BhbiogcHJldiwgdWludHB0cl90IGVudHJvcHkpIHsgbV9wcmV2
ID0gWE9SX01BU0tfUFRSX1dJVEhfS0VZKHByZXYsIHRoaXMsIGVudHJvcHkpOyB9CiAKIHByaXZh
dGU6CiAgIFNwYW4qICAgICAgICAgbV9uZXh0OyAgICAgICAgICAgLy8gVXNlZCB3aGVuIGluIGxp
bmsgbGlzdAogICBTcGFuKiAgICAgICAgIG1fcHJldjsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBp
biBsaW5rIGxpc3QKIHB1YmxpYzoKLSAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8g
TGlua2VkIGxpc3Qgb2YgZnJlZSBvYmplY3RzCisgIEhhcmRlbmVkU0xMICAgIG9iamVjdHM7ICAg
ICAgICAvLyBMaW5rZWQgbGlzdCBvZiBmcmVlIG9iamVjdHMKICAgdW5zaWduZWQgaW50ICBmcmVl
IDogMTsgICAgICAgLy8gSXMgdGhlIHNwYW4gZnJlZQogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1Q
TEVTCiAgIHVuc2lnbmVkIGludCAgc2FtcGxlIDogMTsgICAgIC8vIFNhbXBsZWQgb2JqZWN0PwpA
QCAtMTEwNSwyNSArMTE2NiwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgRGVsZXRlU3BhbihTcGFu
KiBzcGFuKSB7CiAvLyBEb3VibHkgbGlua2VkIGxpc3Qgb2Ygc3BhbnMuCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfSW5pdChTcGFuKiBsaXN0KSB7Ci0gIGxp
c3QtPnNldE5leHQobGlzdCk7Ci0gIGxpc3QtPnNldFByZXYobGlzdCk7CitzdGF0aWMgaW5saW5l
IHZvaWQgRExMX0luaXQoU3BhbiogbGlzdCwgdWludHB0cl90IGVudHJvcHkpIHsKKyAgbGlzdC0+
c2V0TmV4dChsaXN0LCBlbnRyb3B5KTsKKyAgbGlzdC0+c2V0UHJldihsaXN0LCBlbnRyb3B5KTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIERMTF9SZW1vdmUoU3Bhbiogc3BhbikgewotICBzcGFu
LT5wcmV2KCktPnNldE5leHQoc3Bhbi0+bmV4dCgpKTsKLSAgc3Bhbi0+bmV4dCgpLT5zZXRQcmV2
KHNwYW4tPnByZXYoKSk7Ci0gIHNwYW4tPnNldFByZXYoTlVMTCk7Ci0gIHNwYW4tPnNldE5leHQo
TlVMTCk7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMX1JlbW92ZShTcGFuKiBzcGFuLCB1aW50cHRy
X3QgZW50cm9weSkgeworICBzcGFuLT5wcmV2KGVudHJvcHkpLT5zZXROZXh0KHNwYW4tPm5leHQo
ZW50cm9weSksIGVudHJvcHkpOworICBzcGFuLT5uZXh0KGVudHJvcHkpLT5zZXRQcmV2KHNwYW4t
PnByZXYoZW50cm9weSksIGVudHJvcHkpOworICBzcGFuLT5zZXRQcmV2KE5VTEwsIGVudHJvcHkp
OworICBzcGFuLT5zZXROZXh0KE5VTEwsIGVudHJvcHkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIERMTF9Jc0VtcHR5KGNvbnN0IFNwYW4qIGxpc3QpIHsKLSAgcmV0dXJuIGxpc3Qt
Pm5leHQoKSA9PSBsaXN0Oworc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBETExfSXNFbXB0eShj
b25zdCBTcGFuKiBsaXN0LCB1aW50cHRyX3QgZW50cm9weSkgeworICByZXR1cm4gbGlzdC0+bmV4
dChlbnRyb3B5KSA9PSBsaXN0OwogfQogCi1zdGF0aWMgaW50IERMTF9MZW5ndGgoY29uc3QgU3Bh
biogbGlzdCkgeworc3RhdGljIGludCBETExfTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QsIHVpbnRw
dHJfdCBlbnRyb3B5KSB7CiAgIGludCByZXN1bHQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0
LT5uZXh0KCk7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQoKSkgeworICBmb3IgKFNwYW4qIHMgPSBs
aXN0LT5uZXh0KGVudHJvcHkpOyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KGVudHJvcHkpKSB7CiAg
ICAgcmVzdWx0Kys7CiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMzksMTMgKzEyMDAsMTEg
QEAgc3RhdGljIHZvaWQgRExMX1ByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBs
aXN0KSB7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIERMTF9QcmVwZW5kKFNwYW4q
IGxpc3QsIFNwYW4qIHNwYW4pIHsKLSAgQVNTRVJUKHNwYW4tPm5leHQoKSA9PSBOVUxMKTsKLSAg
QVNTRVJUKHNwYW4tPnByZXYoKSA9PSBOVUxMKTsKLSAgc3Bhbi0+c2V0TmV4dChsaXN0LT5uZXh0
KCkpOwotICBzcGFuLT5zZXRQcmV2KGxpc3QpOwotICBsaXN0LT5uZXh0KCktPnNldFByZXYoc3Bh
bik7Ci0gIGxpc3QtPnNldE5leHQoc3Bhbik7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMX1ByZXBl
bmQoU3BhbiogbGlzdCwgU3Bhbiogc3BhbiwgdWludHB0cl90IGVudHJvcHkpIHsKKyAgc3Bhbi0+
c2V0TmV4dChsaXN0LT5uZXh0KGVudHJvcHkpLCBlbnRyb3B5KTsKKyAgc3Bhbi0+c2V0UHJldihs
aXN0LCBlbnRyb3B5KTsKKyAgbGlzdC0+bmV4dChlbnRyb3B5KS0+c2V0UHJldihzcGFuLCBlbnRy
b3B5KTsKKyAgbGlzdC0+c2V0TmV4dChzcGFuLCBlbnRyb3B5KTsKIH0KIAogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0xMTU0LDE2ICsxMjEzLDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBETExfUHJlcGVuZChT
cGFuKiBsaXN0LCBTcGFuKiBzcGFuKSB7CiAKIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3QgewogIHB1YmxpYzoKLSAgdm9pZCBJbml0KHNpemVfdCBjbCk7CisgIHZvaWQgSW5pdChzaXpl
X3QgY2wsIHVpbnRwdHJfdCBlbnRyb3B5KTsKIAogICAvLyBUaGVzZSBtZXRob2RzIGFsbCBkbyBp
bnRlcm5hbCBsb2NraW5nLgogCiAgIC8vIEluc2VydCB0aGUgc3BlY2lmaWVkIHJhbmdlIGludG8g
dGhlIGNlbnRyYWwgZnJlZWxpc3QuICBOIGlzIHRoZSBudW1iZXIgb2YKICAgLy8gZWxlbWVudHMg
aW4gdGhlIHJhbmdlLgotICB2b2lkIEluc2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQs
IGludCBOKTsKKyAgdm9pZCBJbnNlcnRSYW5nZShIYXJkZW5lZFNMTCBzdGFydCwgSGFyZGVuZWRT
TEwgZW5kLCBpbnQgTik7CiAKICAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRj
aGVkIGVsZW1lbnRzIGludG8gTi4KLSAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZv
aWQgKiplbmQsIGludCAqTik7CisgIHZvaWQgUmVtb3ZlUmFuZ2UoSGFyZGVuZWRTTEwqIHN0YXJ0
LCBIYXJkZW5lZFNMTCogZW5kLCBpbnQgKk4pOwogCiAgIC8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCiAgIHNpemVfdCBsZW5ndGgoKSB7CkBAIC0xMTgxLDQz
ICsxMjQwLDUwIEBAIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewogICB0ZW1wbGF0
ZSA8Y2xhc3MgRmluZGVyLCBjbGFzcyBSZWFkZXI+CiAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVj
dHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyLCBUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0KiByZW1vdGVDZW50cmFsRnJlZUxpc3QpCiAgIHsKLSAgICBmb3IgKFNwYW4qIHNw
YW4gPSAmZW1wdHlfOyBzcGFuICYmIHNwYW4gIT0gJmVtcHR5Xzsgc3BhbiA9IChzcGFuLT5uZXh0
KCkgPyByZWFkZXIoc3Bhbi0+bmV4dCgpKSA6IDApKQotICAgICAgQVNTRVJUKCFzcGFuLT5vYmpl
Y3RzKTsKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVtcHR5T2Zmc2V0ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVtcHR5XykgLSByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPih0aGlzKTsKKyAgICAgIFNwYW4qIHJlbW90ZUVtcHR5ID0gcmVpbnRlcnBy
ZXRfY2FzdDxTcGFuKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVM
aXN0KSArIGVtcHR5T2Zmc2V0KTsKKyAgICAgIFNwYW4qIHJlbW90ZVNwYW4gPSBub25lbXB0eV8u
cmVtb3RlTmV4dChyZW1vdGVFbXB0eSwgZW50cm9weV8pOworICAgICAgZm9yIChTcGFuKiBzcGFu
ID0gcmVhZGVyKHJlbW90ZUVtcHR5KTsgc3BhbiAmJiBzcGFuICE9ICZlbXB0eV87IHJlbW90ZVNw
YW4gPSBzcGFuLT5yZW1vdGVOZXh0KHJlbW90ZVNwYW4sIGVudHJvcHlfKSwgc3BhbiA9IChyZW1v
dGVTcGFuID8gcmVhZGVyKHJlbW90ZVNwYW4pIDogMCkpCisgICAgICAgIEFTU0VSVCghc3Bhbi0+
b2JqZWN0cyk7CisgICAgfQogCiAgICAgQVNTRVJUKCFub25lbXB0eV8ub2JqZWN0cyk7CiAgICAg
c3RhdGljIGNvbnN0IHB0cmRpZmZfdCBub25lbXB0eU9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KCZub25lbXB0eV8pIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
dGhpcyk7CiAKICAgICBTcGFuKiByZW1vdGVOb25lbXB0eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bh
bio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkgKyBub25l
bXB0eU9mZnNldCk7Ci0gICAgU3BhbiogcmVtb3RlU3BhbiA9IG5vbmVtcHR5Xy5uZXh0KCk7Cisg
ICAgU3BhbiogcmVtb3RlU3BhbiA9IG5vbmVtcHR5Xy5yZW1vdGVOZXh0KHJlbW90ZU5vbmVtcHR5
LCBlbnRyb3B5Xyk7CiAKLSAgICBmb3IgKFNwYW4qIHNwYW4gPSByZWFkZXIocmVtb3RlU3Bhbik7
IHNwYW4gJiYgcmVtb3RlU3BhbiAhPSByZW1vdGVOb25lbXB0eTsgcmVtb3RlU3BhbiA9IHNwYW4t
Pm5leHQoKSwgc3BhbiA9IChzcGFuLT5uZXh0KCkgPyByZWFkZXIoc3Bhbi0+bmV4dCgpKSA6IDAp
KSB7Ci0gICAgICBmb3IgKHZvaWQqIG5leHRPYmplY3QgPSBzcGFuLT5vYmplY3RzOyBuZXh0T2Jq
ZWN0OyBuZXh0T2JqZWN0ID0gcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJl
dF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQotICAgICAgICBmaW5kZXIudmlzaXQobmV4dE9i
amVjdCk7CisgICAgZm9yIChTcGFuKiBzcGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBzcGFuICYm
IHJlbW90ZVNwYW4gIT0gcmVtb3RlTm9uZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5yZW1vdGVO
ZXh0KHJlbW90ZVNwYW4sIGVudHJvcHlfKSwgc3BhbiA9IChyZW1vdGVTcGFuID8gcmVhZGVyKHJl
bW90ZVNwYW4pIDogMCkpIHsKKyAgICAgIGZvciAoSGFyZGVuZWRTTEwgbmV4dE9iamVjdCA9IHNw
YW4tPm9iamVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRF
bnRyeUluSGFyZGVuZWRMaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2Jq
ZWN0LnZhbHVlKCkpLCBlbnRyb3B5XykpKSB7CisgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2Jq
ZWN0LnZhbHVlKCkpOworICAgICAgfQogICAgIH0KICAgfQogI2VuZGlmCiAKKyAgdWludHB0cl90
IGVudHJvcHkoKSBjb25zdCB7IHJldHVybiBlbnRyb3B5XzsgfQogIHByaXZhdGU6CiAgIC8vIFJF
UVVJUkVTOiBsb2NrXyBpcyBoZWxkCiAgIC8vIFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQg
cmV0dXJuLgogICAvLyBSZXR1cm4gTlVMTCBpZiBubyBmcmVlIGVudHJpZXMgaW4gY2FjaGUuCi0g
IHZvaWQqIEZldGNoRnJvbVNwYW5zKCk7CisgIEhhcmRlbmVkU0xMIEZldGNoRnJvbVNwYW5zKCk7
CiAKICAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKICAgLy8gUmVtb3ZlIG9iamVjdCBmcm9t
IGNhY2hlIGFuZCByZXR1cm4uICBGZXRjaGVzCiAgIC8vIGZyb20gcGFnZWhlYXAgaWYgY2FjaGUg
aXMgZW1wdHkuICBPbmx5IHJldHVybnMKICAgLy8gTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUu
Ci0gIHZvaWQqIEZldGNoRnJvbVNwYW5zU2FmZSgpOworICBIYXJkZW5lZFNMTCBGZXRjaEZyb21T
cGFuc1NhZmUoKTsKIAogICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAogICAvLyBSZWxlYXNl
IGEgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0cyB0byBzcGFucy4KICAgLy8gTWF5IHRlbXBvcmFyaWx5
IHJlbGVhc2UgbG9ja18uCi0gIHZvaWQgUmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsK
KyAgdm9pZCBSZWxlYXNlTGlzdFRvU3BhbnMoSGFyZGVuZWRTTEwgc3RhcnQpOwogCiAgIC8vIFJF
UVVJUkVTOiBsb2NrXyBpcyBoZWxkCiAgIC8vIFJlbGVhc2UgYW4gb2JqZWN0IHRvIHNwYW5zLgog
ICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrXy4KLSAgQUxXQVlTX0lOTElORSB2b2lk
IFJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCk7CisgIEFMV0FZU19JTkxJTkUgdm9pZCBSZWxl
YXNlVG9TcGFucyhIYXJkZW5lZFNMTCBvYmplY3QpOwogCiAgIC8vIFJFUVVJUkVTOiBsb2NrXyBp
cyBoZWxkCiAgIC8vIFBvcHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVh
cC4KQEAgLTEyNjgsNiArMTMzNCw3IEBAIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Qg
ewogICAvLyBhZGFwdGl2ZSB2YWx1ZSB0aGF0IGlzIGluY3JlYXNlZCBpZiB0aGVyZSBpcyBsb3Rz
IG9mIHRyYWZmaWMKICAgLy8gb24gYSBnaXZlbiBzaXplIGNsYXNzLgogICBpbnQzMl90IGNhY2hl
X3NpemVfOworICB1aW50cHRyX3QgZW50cm9weV87CiB9OwogCiAjaWYgQ09NUElMRVIoQ0xBTkcp
ICYmIGRlZmluZWQoX19oYXNfd2FybmluZykKQEAgLTE1ODYsNiArMTY1Myw5IEBAIGNsYXNzIFRD
TWFsbG9jX1BhZ2VIZWFwIHsKICAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0
cwogICB1aW50cHRyX3QgZnJlZV9wYWdlc187CiAKKyAgLy8gVXNlZCBmb3IgaGFyZGVuaW5nCisg
IHVpbnRwdHJfdCBlbnRyb3B5XzsKKwogICAvLyBCeXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0K
ICAgdWludDY0X3Qgc3lzdGVtX2J5dGVzXzsKIApAQCAtMTY3OCw2ICsxNzQ4LDcgQEAgdm9pZCBU
Q01hbGxvY19QYWdlSGVhcDo6aW5pdCgpCiAgIHBhZ2VtYXBfY2FjaGVfID0gUGFnZU1hcENhY2hl
KDApOwogICBmcmVlX3BhZ2VzXyA9IDA7CiAgIHN5c3RlbV9ieXRlc18gPSAwOworICBlbnRyb3B5
XyA9IEhBUkRFTklOR19FTlRST1BZOwogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1ND
QVZFTkdFX01FTU9SWQogICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPSAwOwpAQCAtMTY4OCwxMSAr
MTc1OSwxMSBAQCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0KCkKICAgLy8gU3RhcnQgc2Nh
dmVuZ2luZyBhdCBrTWF4UGFnZXMgbGlzdAogICBzY2F2ZW5nZV9pbmRleF8gPSBrTWF4UGFnZXMt
MTsKICAgQ09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwgUGFnZU1hcENhY2hlOjpr
VmFsdWViaXRzKSwgdmFsdWViaXRzKTsKLSAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwpOwotICBE
TExfSW5pdCgmbGFyZ2VfLnJldHVybmVkKTsKKyAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwsIGVu
dHJvcHlfKTsKKyAgRExMX0luaXQoJmxhcmdlXy5yZXR1cm5lZCwgZW50cm9weV8pOwogICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdlczsgaSsrKSB7Ci0gICAgRExMX0luaXQoJmZyZWVf
W2ldLm5vcm1hbCk7Ci0gICAgRExMX0luaXQoJmZyZWVfW2ldLnJldHVybmVkKTsKKyAgICBETExf
SW5pdCgmZnJlZV9baV0ubm9ybWFsLCBlbnRyb3B5Xyk7CisgICAgRExMX0luaXQoJmZyZWVfW2ld
LnJldHVybmVkLCBlbnRyb3B5Xyk7CiAgIH0KIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9U
T19TQ0FWRU5HRV9NRU1PUlkKQEAgLTE4MzcsMTEgKzE5MDgsMTEgQEAgdm9pZCBUQ01hbGxvY19Q
YWdlSGVhcDo6c2NhdmVuZ2UoKQogICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRp
Y19jYXN0PHNpemVfdD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZV8gOiAmZnJlZV9baV07CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlz
dHNXaXRoU3BhbnMgcGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2Ug
cmV0dXJuIGFsbCBidXQgMSBzcGFuLiAgCiAgICAgICAgICAgICAvLyBSZXR1cm4gb25seSA1MCUg
b2YgYSBzcGFubGlzdCBhdCBhIHRpbWUgc28gc3BhbnMgb2Ygc2l6ZSAxIGFyZSBub3QgdGhlIG9u
bHkgb25lcyBsZWZ0LgotICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IERMTF9MZW5ndGgoJnNs
aXN0LT5ub3JtYWwpOworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IERMTF9MZW5ndGgoJnNs
aXN0LT5ub3JtYWwsIGVudHJvcHlfKTsKICAgICAgICAgICAgIHNpemVfdCBudW1TcGFuc1RvUmV0
dXJuID0gKGkgPiBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zKSA/IGxlbmd0aCA6IGxlbmd0aCAvIDI7
Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgc3RhdGljX2Nhc3Q8c2l6ZV90PihqKSA8IG51
bVNwYW5zVG9SZXR1cm4gJiYgIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSAmJiBmcmVlX2Nv
bW1pdHRlZF9wYWdlc18gPiB0YXJnZXRQYWdlQ291bnQ7IGorKykgewotICAgICAgICAgICAgICAg
IFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXYoKTsKLSAgICAgICAgICAgICAgICBETExfUmVt
b3ZlKHMpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IHN0YXRpY19jYXN0PHNpemVfdD4o
aikgPCBudW1TcGFuc1RvUmV0dXJuICYmICFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1hbCwgZW50
cm9weV8pICYmIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+IHRhcmdldFBhZ2VDb3VudDsgaisrKSB7
CisgICAgICAgICAgICAgICAgU3BhbiogcyA9IHNsaXN0LT5ub3JtYWwucHJldihlbnRyb3B5Xyk7
CisgICAgICAgICAgICAgICAgRExMX1JlbW92ZShzLCBlbnRyb3B5Xyk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFzLT5kZWNvbW1pdHRlZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzLT5kZWNv
bW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLApAQCAtMTg1MCw3
ICsxOTIxLDcgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UoKQogICAgICAgICAg
ICAgICAgICAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gcy0+bGVuZ3RoOwogICAgICAgICAg
ICAgICAgICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIERMTF9QcmVwZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMpOworICAgICAgICAg
ICAgICAgIERMTF9QcmVwZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMsIGVudHJvcHlfKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xODc3LDEwICsxOTQ4LDEwIEBAIGlubGluZSBTcGFu
KiBUQ01hbGxvY19QYWdlSGVhcDo6TmV3KExlbmd0aCBuKSB7CiAgIGZvciAoTGVuZ3RoIHMgPSBu
OyBzIDwga01heFBhZ2VzOyBzKyspIHsKICAgICBTcGFuKiBsbCA9IE5VTEw7CiAgICAgYm9vbCBy
ZWxlYXNlZCA9IGZhbHNlOwotICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5vcm1hbCkp
IHsKKyAgICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5ub3JtYWwsIGVudHJvcHlfKSkgewog
ICAgICAgLy8gRm91bmQgbm9ybWFsIHNwYW4KICAgICAgIGxsID0gJmZyZWVfW3NdLm5vcm1hbDsK
LSAgICB9IGVsc2UgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7CisgICAg
fSBlbHNlIGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLnJldHVybmVkLCBlbnRyb3B5XykpIHsK
ICAgICAgIC8vIEZvdW5kIHJldHVybmVkIHNwYW47IHJlYWxsb2NhdGUgaXQKICAgICAgIGxsID0g
JmZyZWVfW3NdLnJldHVybmVkOwogICAgICAgcmVsZWFzZWQgPSB0cnVlOwpAQCAtMTg4OSw3ICsx
OTYwLDcgQEAgaW5saW5lIFNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pIHsK
ICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIFNwYW4qIHJlc3VsdCA9IGxsLT5uZXh0KCk7
CisgICAgU3BhbiogcmVzdWx0ID0gbGwtPm5leHQoZW50cm9weV8pOwogICAgIENhcnZlKHJlc3Vs
dCwgbiwgcmVsZWFzZWQpOwogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9N
RU1PUlkKICAgICAvLyBUaGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0
aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFuIGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4gIFVwZGF0
ZSB0aGUKQEAgLTE5MjYsOSArMTk5Nyw5IEBAIFNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpBbGxv
Y0xhcmdlKExlbmd0aCBuKSB7CiAgIFNwYW4gKmJlc3QgPSBOVUxMOwogCiAgIC8vIFNlYXJjaCB0
aHJvdWdoIG5vcm1hbCBsaXN0Ci0gIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlXy5ub3JtYWwubmV4
dCgpOworICBmb3IgKFNwYW4qIHNwYW4gPSBsYXJnZV8ubm9ybWFsLm5leHQoZW50cm9weV8pOwog
ICAgICAgIHNwYW4gIT0gJmxhcmdlXy5ub3JtYWw7Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQo
KSkgeworICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KGVudHJvcHlfKSkgewogICAgIGlmIChzcGFu
LT5sZW5ndGggPj0gbikgewogICAgICAgaWYgKChiZXN0ID09IE5VTEwpCiAgICAgICAgICAgfHwg
KHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkKQEAgLTE5NDAsOSArMjAxMSw5IEBAIFNwYW4q
IFRDTWFsbG9jX1BhZ2VIZWFwOjpBbGxvY0xhcmdlKExlbmd0aCBuKSB7CiAgIH0KIAogICAvLyBT
ZWFyY2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAot
ICBmb3IgKFNwYW4qIHNwYW4gPSBsYXJnZV8ucmV0dXJuZWQubmV4dCgpOworICBmb3IgKFNwYW4q
IHNwYW4gPSBsYXJnZV8ucmV0dXJuZWQubmV4dChlbnRyb3B5Xyk7CiAgICAgICAgc3BhbiAhPSAm
bGFyZ2VfLnJldHVybmVkOwotICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KCkpIHsKKyAgICAgICBz
cGFuID0gc3Bhbi0+bmV4dChlbnRyb3B5XykpIHsKICAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4p
IHsKICAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQogICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGgg
PCBiZXN0LT5sZW5ndGgpCkBAIC0xOTg5LDcgKzIwNjAsNyBAQCBTcGFuKiBUQ01hbGxvY19QYWdl
SGVhcDo6U3BsaXQoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKIAogaW5saW5lIHZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OkNhcnZlKFNwYW4qIHNwYW4sIExlbmd0aCBuLCBib29sIHJlbGVhc2VkKSB7
CiAgIEFTU0VSVChuID4gMCk7Ci0gIERMTF9SZW1vdmUoc3Bhbik7CisgIERMTF9SZW1vdmUoc3Bh
biwgZW50cm9weV8pOwogICBzcGFuLT5mcmVlID0gMDsKICAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsK
IApAQCAtMjAxNSw3ICsyMDg2LDcgQEAgaW5saW5lIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OkNh
cnZlKFNwYW4qIHNwYW4sIExlbmd0aCBuLCBib29sIHJlbGVhc2VkKSB7CiAgICAgLy8gUGxhY2Ug
bGVmdG92ZXIgc3BhbiBvbiBhcHByb3ByaWF0ZSBmcmVlIGxpc3QKICAgICBTcGFuTGlzdCogbGlz
dHBhaXIgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihleHRyYSkgPCBrTWF4UGFnZXMpID8gJmZyZWVf
W2V4dHJhXSA6ICZsYXJnZV87CiAgICAgU3BhbiogZHN0ID0gJmxpc3RwYWlyLT5ub3JtYWw7Ci0g
ICAgRExMX1ByZXBlbmQoZHN0LCBsZWZ0b3Zlcik7CisgICAgRExMX1ByZXBlbmQoZHN0LCBsZWZ0
b3ZlciwgZW50cm9weV8pOwogCiAgICAgc3Bhbi0+bGVuZ3RoID0gbjsKICAgICBwYWdlbWFwXy5z
ZXQoc3Bhbi0+c3RhcnQgKyBuIC0gMSwgc3Bhbik7CkBAIC0yMDY1LDcgKzIxMzYsNyBAQCBpbmxp
bmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6RGVsZXRlKFNwYW4qIHNwYW4pIHsKICAgICAgICAg
bmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CiAjZW5kaWYKICAgICBtZXJn
ZURlY29tbWl0dGVkU3RhdGVzKHNwYW4sIHByZXYpOwotICAgIERMTF9SZW1vdmUocHJldik7Cisg
ICAgRExMX1JlbW92ZShwcmV2LCBlbnRyb3B5Xyk7CiAgICAgRGVsZXRlU3BhbihwcmV2KTsKICAg
ICBzcGFuLT5zdGFydCAtPSBsZW47CiAgICAgc3Bhbi0+bGVuZ3RoICs9IGxlbjsKQEAgLTIwODIs
NyArMjE1Myw3IEBAIGlubGluZSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiog
c3BhbikgewogICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsK
ICNlbmRpZgogICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgbmV4dCk7Ci0gICAgRExM
X1JlbW92ZShuZXh0KTsKKyAgICBETExfUmVtb3ZlKG5leHQsIGVudHJvcHlfKTsKICAgICBEZWxl
dGVTcGFuKG5leHQpOwogICAgIHNwYW4tPmxlbmd0aCArPSBsZW47CiAgICAgcGFnZW1hcF8uc2V0
KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7CkBAIC0yMDkzLDE0ICsyMTY0
LDE0IEBAIGlubGluZSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiogc3Bhbikg
ewogICBzcGFuLT5mcmVlID0gMTsKICAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7CiAgICAgaWYg
KHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFu
LT5sZW5ndGhdLnJldHVybmVkLCBzcGFuKTsKKyAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFu
LT5sZW5ndGhdLnJldHVybmVkLCBzcGFuLCBlbnRyb3B5Xyk7CiAgICAgZWxzZQotICAgICAgRExM
X1ByZXBlbmQoJmxhcmdlXy5yZXR1cm5lZCwgc3Bhbik7CisgICAgICBETExfUHJlcGVuZCgmbGFy
Z2VfLnJldHVybmVkLCBzcGFuLCBlbnRyb3B5Xyk7CiAgIH0gZWxzZSB7CiAgICAgaWYgKHNwYW4t
Pmxlbmd0aCA8IGtNYXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5n
dGhdLm5vcm1hbCwgc3Bhbik7CisgICAgICBETExfUHJlcGVuZCgmZnJlZV9bc3Bhbi0+bGVuZ3Ro
XS5ub3JtYWwsIHNwYW4sIGVudHJvcHlfKTsKICAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgm
bGFyZ2VfLm5vcm1hbCwgc3Bhbik7CisgICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1hbCwg
c3BhbiwgZW50cm9weV8pOwogICB9CiAgIGZyZWVfcGFnZXNfICs9IG47CiAKQEAgLTIxODksMTIg
KzIyNjAsMTIgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MoU3Bh
biogc3Bhbiwgc2l6ZV90IHNjKSB7CiBzaXplX3QgVENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVk
Qnl0ZXMoKSBjb25zdCB7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgZm9yICh1bnNpZ25l
ZCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0gICAgICAgIGNvbnN0IGludCByX2xlbmd0
aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLnJldHVybmVkKTsKKyAgICAgICAgY29uc3QgaW50IHJf
bGVuZ3RoID0gRExMX0xlbmd0aCgmZnJlZV9bc10ucmV0dXJuZWQsIGVudHJvcHlfKTsKICAgICAg
ICAgdW5zaWduZWQgcl9wYWdlcyA9IHMgKiByX2xlbmd0aDsKICAgICAgICAgcmVzdWx0ICs9IHJf
cGFnZXMgPDwga1BhZ2VTaGlmdDsKICAgICB9CiAgICAgCi0gICAgZm9yIChTcGFuKiBzID0gbGFy
Z2VfLnJldHVybmVkLm5leHQoKTsgcyAhPSAmbGFyZ2VfLnJldHVybmVkOyBzID0gcy0+bmV4dCgp
KQorICAgIGZvciAoU3BhbiogcyA9IGxhcmdlXy5yZXR1cm5lZC5uZXh0KGVudHJvcHlfKTsgcyAh
PSAmbGFyZ2VfLnJldHVybmVkOyBzID0gcy0+bmV4dChlbnRyb3B5XykpCiAgICAgICAgIHJlc3Vs
dCArPSBzLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
MjMyMSw4ICsyMzkyLDggQEAgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2soKSB7CiAjaWYg
VVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogICBzaXplX3QgdG90YWxG
cmVlQ29tbWl0dGVkID0gMDsKICNlbmRpZgotICBBU1NFUlQoZnJlZV9bMF0ubm9ybWFsLm5leHQo
KSA9PSAmZnJlZV9bMF0ubm9ybWFsKTsKLSAgQVNTRVJUKGZyZWVfWzBdLnJldHVybmVkLm5leHQo
KSA9PSAmZnJlZV9bMF0ucmV0dXJuZWQpOworICBBU1NFUlQoZnJlZV9bMF0ubm9ybWFsLm5leHQo
ZW50cm9weV8pID09ICZmcmVlX1swXS5ub3JtYWwpOworICBBU1NFUlQoZnJlZV9bMF0ucmV0dXJu
ZWQubmV4dChlbnRyb3B5XykgPT0gJmZyZWVfWzBdLnJldHVybmVkKTsKICNpZiBVU0VfQkFDS0dS
T1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCiAgIHRvdGFsRnJlZUNvbW1pdHRlZCA9IENo
ZWNrTGlzdCgmbGFyZ2VfLm5vcm1hbCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CiAj
ZWxzZQpAQCAtMjM1MCw3ICsyNDIxLDcgQEAgc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVj
a0xpc3QoU3BhbiosIExlbmd0aCwgTGVuZ3RoLCBib29sKSB7CiAjZWxzZQogc2l6ZV90IFRDTWFs
bG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVu
Z3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCkgewogICBzaXplX3QgZnJlZUNvdW50ID0g
MDsKLSAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dCgpOyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0
KCkpIHsKKyAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dChlbnRyb3B5Xyk7IHMgIT0gbGlzdDsg
cyA9IHMtPm5leHQoZW50cm9weV8pKSB7CiAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOwog
ICAgIENIRUNLX0NPTkRJVElPTihzLT5sZW5ndGggPj0gbWluX3BhZ2VzKTsKICAgICBDSEVDS19D
T05ESVRJT04ocy0+bGVuZ3RoIDw9IG1heF9wYWdlcyk7CkBAIC0yMzcwLDEyICsyNDQxLDEyIEBA
IHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlTGlzdChTcGFuKiBsaXN0LCBTcGFu
KiByZXR1cm5lZCkgewogICBzaXplX3QgZnJlZVBhZ2VSZWR1Y3Rpb24gPSAwOwogI2VuZGlmCiAK
LSAgd2hpbGUgKCFETExfSXNFbXB0eShsaXN0KSkgewotICAgIFNwYW4qIHMgPSBsaXN0LT5wcmV2
KCk7CisgIHdoaWxlICghRExMX0lzRW1wdHkobGlzdCwgZW50cm9weV8pKSB7CisgICAgU3Bhbiog
cyA9IGxpc3QtPnByZXYoZW50cm9weV8pOwogCi0gICAgRExMX1JlbW92ZShzKTsKKyAgICBETExf
UmVtb3ZlKHMsIGVudHJvcHlfKTsKICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7Ci0gICAgRExM
X1ByZXBlbmQocmV0dXJuZWQsIHMpOworICAgIERMTF9QcmVwZW5kKHJldHVybmVkLCBzLCBlbnRy
b3B5Xyk7CiAgICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHNpemVfdD4ocy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKICNpZiBVU0VfQkFD
S0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCkBAIC0yNDA0LDE1ICsyNDc1LDIwIEBA
IHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMoKSB7CiAKIGNsYXNzIFRD
TWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0IHsKICBwcml2YXRlOgotICB2b2lkKiAgICBsaXN0
XzsgICAgICAgLy8gTGlua2VkIGxpc3Qgb2Ygbm9kZXMKKyAgSGFyZGVuZWRTTEwgbGlzdF87ICAg
ICAgIC8vIExpbmtlZCBsaXN0IG9mIG5vZGVzCiAgIHVpbnQxNl90IGxlbmd0aF87ICAgICAvLyBD
dXJyZW50IGxlbmd0aAogICB1aW50MTZfdCBsb3dhdGVyXzsgICAgLy8gTG93IHdhdGVyIG1hcmsg
Zm9yIGxpc3QgbGVuZ3RoCisgIHVpbnRwdHJfdCBlbnRyb3B5XzsgICAvLyBFbnRyb3B5IHNvdXJj
ZSBmb3IgaGFyZGVuaW5nCiAKICBwdWJsaWM6Ci0gIHZvaWQgSW5pdCgpIHsKLSAgICBsaXN0XyA9
IE5VTEw7CisgIHZvaWQgSW5pdCh1aW50cHRyX3QgZW50cm9weSkgeworICAgIGxpc3RfLnNldFZh
bHVlKE5VTEwpOwogICAgIGxlbmd0aF8gPSAwOwogICAgIGxvd2F0ZXJfID0gMDsKKyAgICBlbnRy
b3B5XyA9IGVudHJvcHk7CisjaWYgRU5BQkxFKFRDTUFMTE9DX0hBUkRFTklORykKKyAgICBBU1NF
UlQoZW50cm9weV8pOworI2VuZGlmCiAgIH0KIAogICAvLyBSZXR1cm4gY3VycmVudCBsZW5ndGgg
b2YgbGlzdApAQCAtMjQyMiw0MyArMjQ5OCw0MyBAQCBjbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNo
ZV9GcmVlTGlzdCB7CiAKICAgLy8gSXMgbGlzdCBlbXB0eT8KICAgYm9vbCBlbXB0eSgpIGNvbnN0
IHsKLSAgICByZXR1cm4gbGlzdF8gPT0gTlVMTDsKKyAgICByZXR1cm4gIWxpc3RfOwogICB9CiAK
ICAgLy8gTG93LXdhdGVyIG1hcmsgbWFuYWdlbWVudAogICBpbnQgbG93d2F0ZXJtYXJrKCkgY29u
c3QgeyByZXR1cm4gbG93YXRlcl87IH0KICAgdm9pZCBjbGVhcl9sb3d3YXRlcm1hcmsoKSB7IGxv
d2F0ZXJfID0gbGVuZ3RoXzsgfQogCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBQdXNoKHZvaWQqIHB0
cikgewotICAgIFNMTF9QdXNoKCZsaXN0XywgcHRyKTsKKyAgQUxXQVlTX0lOTElORSB2b2lkIFB1
c2goSGFyZGVuZWRTTEwgcHRyKSB7CisgICAgU0xMX1B1c2goJmxpc3RfLCBwdHIsIGVudHJvcHlf
KTsKICAgICBsZW5ndGhfKys7CiAgIH0KIAotICB2b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAq
c3RhcnQsIHZvaWQgKmVuZCkgewotICAgIFNMTF9QdXNoUmFuZ2UoJmxpc3RfLCBzdGFydCwgZW5k
KTsKKyAgdm9pZCBQdXNoUmFuZ2UoaW50IE4sIEhhcmRlbmVkU0xMIHN0YXJ0LCBIYXJkZW5lZFNM
TCBlbmQpIHsKKyAgICBTTExfUHVzaFJhbmdlKCZsaXN0Xywgc3RhcnQsIGVuZCwgZW50cm9weV8p
OwogICAgIGxlbmd0aF8gPSBsZW5ndGhfICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOwogICB9
CiAKLSAgdm9pZCBQb3BSYW5nZShpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKSB7Ci0g
ICAgU0xMX1BvcFJhbmdlKCZsaXN0XywgTiwgc3RhcnQsIGVuZCk7CisgIHZvaWQgUG9wUmFuZ2Uo
aW50IE4sIEhhcmRlbmVkU0xMKiBzdGFydCwgSGFyZGVuZWRTTEwqIGVuZCkgeworICAgIFNMTF9Q
b3BSYW5nZSgmbGlzdF8sIE4sIHN0YXJ0LCBlbmQsIGVudHJvcHlfKTsKICAgICBBU1NFUlQobGVu
Z3RoXyA+PSBOKTsKICAgICBsZW5ndGhfID0gbGVuZ3RoXyAtIHN0YXRpY19jYXN0PHVpbnQxNl90
PihOKTsKICAgICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9IGxlbmd0aF87CiAg
IH0KIAogICBBTFdBWVNfSU5MSU5FIHZvaWQqIFBvcCgpIHsKLSAgICBBU1NFUlQobGlzdF8gIT0g
TlVMTCk7CisgICAgQVNTRVJUKGxpc3RfKTsKICAgICBsZW5ndGhfLS07CiAgICAgaWYgKGxlbmd0
aF8gPCBsb3dhdGVyXykgbG93YXRlcl8gPSBsZW5ndGhfOwotICAgIHJldHVybiBTTExfUG9wKCZs
aXN0Xyk7CisgICAgcmV0dXJuIFNMTF9Qb3AoJmxpc3RfLCBlbnRyb3B5XykudmFsdWUoKTsKICAg
fQogCiAjaWZkZWYgV1RGX0NIQU5HRVMKICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3Mg
UmVhZGVyPgogICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25z
dCBSZWFkZXImIHJlYWRlcikKICAgewotICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlz
dF87IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCi0gICAgICAgICAgZmluZGVy
LnZpc2l0KG5leHRPYmplY3QpOworICAgICAgZm9yIChIYXJkZW5lZFNMTCBuZXh0T2JqZWN0ID0g
bGlzdF87IG5leHRPYmplY3Q7IG5leHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUlu
SGFyZGVuZWRMaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0LnZh
bHVlKCkpLCBlbnRyb3B5XykpKQorICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZh
bHVlKCkpOwogICB9CiAjZW5kaWYKIH07CkBAIC0yNDg1LDggKzI1NjEsMTAgQEAgY2xhc3MgVENN
YWxsb2NfVGhyZWFkQ2FjaGUgewogICB1aW50MzJfdCAgICAgIHJuZF87ICAgICAgICAgICAgICAg
ICAgIC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAgIHNpemVfdCAgICAgICAgYnl0
ZXNfdW50aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKIAorICB1
aW50cHRyX3QgICAgIGVudHJvcHlfOyAgICAgICAgICAgICAgIC8vIEVudHJvcHkgdmFsdWUgdXNl
ZCBmb3IgaGFyZGVuaW5nCisKICAgLy8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlSRVM6IHBh
Z2VoZWFwX2xvY2sgaXMgaGVsZC4KLSAgc3RhdGljIGlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNo
ZSogTmV3SGVhcChUaHJlYWRJZGVudGlmaWVyIHRpZCk7CisgIHN0YXRpYyBpbmxpbmUgVENNYWxs
b2NfVGhyZWFkQ2FjaGUqIE5ld0hlYXAoVGhyZWFkSWRlbnRpZmllciB0aWQsIHVpbnRwdHJfdCBl
bnRyb3B5KTsKIAogICAvLyBVc2Ugb25seSBhcyBwdGhyZWFkIHRocmVhZC1zcGVjaWZpYyBkZXN0
cnVjdG9yIGZ1bmN0aW9uLgogICBzdGF0aWMgdm9pZCBEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCog
cHRyKTsKQEAgLTI0OTUsNyArMjU3Myw3IEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlIHsK
ICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIG5leHRfOwogICBUQ01hbGxvY19UaHJlYWRDYWNoZSog
cHJldl87CiAKLSAgdm9pZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsKKyAgdm9pZCBJbml0
KFRocmVhZElkZW50aWZpZXIgdGlkLCB1aW50cHRyX3QgZW50cm9weSk7CiAgIHZvaWQgQ2xlYW51
cCgpOwogCiAgIC8vIEFjY2Vzc29ycyAobW9zdGx5IGp1c3QgZm9yIHByaW50aW5nIHN0YXRzKQpA
QCAtMjUwNSw3ICsyNTgzLDcgQEAgY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewogICBzaXpl
X3QgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfOyB9CiAKICAgQUxXQVlTX0lOTElORSB2b2lk
KiBBbGxvY2F0ZShzaXplX3Qgc2l6ZSk7Ci0gIHZvaWQgRGVhbGxvY2F0ZSh2b2lkKiBwdHIsIHNp
emVfdCBzaXplX2NsYXNzKTsKKyAgdm9pZCBEZWFsbG9jYXRlKEhhcmRlbmVkU0xMIHB0ciwgc2l6
ZV90IHNpemVfY2xhc3MpOwogCiAgIEFMV0FZU19JTkxJTkUgdm9pZCBGZXRjaEZyb21DZW50cmFs
Q2FjaGUoc2l6ZV90IGNsLCBzaXplX3QgYWxsb2NhdGlvblNpemUpOwogICB2b2lkIFJlbGVhc2VU
b0NlbnRyYWxDYWNoZShzaXplX3QgY2wsIGludCBOKTsKQEAgLTI3MDMsMTEgKzI3ODEsMTUgQEAg
c3RhdGljIHZvbGF0aWxlIHNpemVfdCBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBrTWF4VGhyZWFk
Q2FjaGVTaXplOwogLy8gQ2VudHJhbCBjYWNoZSBpbXBsZW1lbnRhdGlvbgogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5pdChzaXplX3QgY2wpIHsKK3Zv
aWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5pdChzaXplX3QgY2wsIHVpbnRwdHJfdCBl
bnRyb3B5KSB7CiAgIGxvY2tfLkluaXQoKTsKICAgc2l6ZV9jbGFzc18gPSBjbDsKLSAgRExMX0lu
aXQoJmVtcHR5Xyk7Ci0gIERMTF9Jbml0KCZub25lbXB0eV8pOworICBlbnRyb3B5XyA9IGVudHJv
cHk7CisjaWYgRU5BQkxFKFRDTUFMTE9DX0hBUkRFTklORykKKyAgQVNTRVJUKGVudHJvcHlfKTsK
KyNlbmRpZgorICBETExfSW5pdCgmZW1wdHlfLCBlbnRyb3B5Xyk7CisgIERMTF9Jbml0KCZub25l
bXB0eV8sIGVudHJvcHlfKTsKICAgY291bnRlcl8gPSAwOwogCiAgIGNhY2hlX3NpemVfID0gMTsK
QEAgLTI3MTUsMjQgKzI3OTcsMjQgQEAgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJ
bml0KHNpemVfdCBjbCkgewogICBBU1NFUlQoY2FjaGVfc2l6ZV8gPD0ga051bVRyYW5zZmVyRW50
cmllcyk7CiB9CiAKLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZUxpc3RU
b1NwYW5zKHZvaWQqIHN0YXJ0KSB7Cit2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJl
bGVhc2VMaXN0VG9TcGFucyhIYXJkZW5lZFNMTCBzdGFydCkgewogICB3aGlsZSAoc3RhcnQpIHsK
LSAgICB2b2lkICpuZXh0ID0gU0xMX05leHQoc3RhcnQpOworICAgIEhhcmRlbmVkU0xMIG5leHQg
PSBTTExfTmV4dChzdGFydCwgZW50cm9weV8pOwogICAgIFJlbGVhc2VUb1NwYW5zKHN0YXJ0KTsK
ICAgICBzdGFydCA9IG5leHQ7CiAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9j
X0NlbnRyYWxfRnJlZUxpc3Q6OlJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCkgewotICBjb25z
dCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3QpID4+IGtQYWdl
U2hpZnQ7CitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVs
ZWFzZVRvU3BhbnMoSGFyZGVuZWRTTEwgb2JqZWN0KSB7CisgIGNvbnN0IFBhZ2VJRCBwID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9iamVjdC52YWx1ZSgpKSA+PiBrUGFnZVNoaWZ0Owog
ICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCk7CiAgIEFTU0VSVChzcGFu
ICE9IE5VTEwpOwogICBBU1NFUlQoc3Bhbi0+cmVmY291bnQgPiAwKTsKIAogICAvLyBJZiBzcGFu
IGlzIGVtcHR5LCBtb3ZlIGl0IHRvIG5vbi1lbXB0eSBsaXN0Ci0gIGlmIChzcGFuLT5vYmplY3Rz
ID09IE5VTEwpIHsKLSAgICBETExfUmVtb3ZlKHNwYW4pOwotICAgIERMTF9QcmVwZW5kKCZub25l
bXB0eV8sIHNwYW4pOworICBpZiAoIXNwYW4tPm9iamVjdHMpIHsKKyAgICBETExfUmVtb3ZlKHNw
YW4sIGVudHJvcHlfKTsKKyAgICBETExfUHJlcGVuZCgmbm9uZW1wdHlfLCBzcGFuLCBlbnRyb3B5
Xyk7CiAgICAgRXZlbnQoc3BhbiwgJ04nLCAwKTsKICAgfQogCkBAIC0yNzQwLDggKzI4MjIsOCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRv
U3BhbnModm9pZCogb2JqZWN0KSB7CiAgIGlmIChmYWxzZSkgewogICAgIC8vIENoZWNrIHRoYXQg
b2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKICAgICB1bnNpZ25lZCBnb3QgPSAwOwotICAg
IGZvciAodm9pZCogcCA9IHNwYW4tPm9iamVjdHM7IHAgIT0gTlVMTDsgcCA9ICooKHZvaWQqKikg
cCkpIHsKLSAgICAgIEFTU0VSVChwICE9IG9iamVjdCk7CisgICAgZm9yIChIYXJkZW5lZFNMTCBw
ID0gc3Bhbi0+b2JqZWN0czsgIXA7IFNMTF9OZXh0KHAsIGVudHJvcHlfKSkgeworICAgICAgQVNT
RVJUKHAudmFsdWUoKSAhPSBvYmplY3QudmFsdWUoKSk7CiAgICAgICBnb3QrKzsKICAgICB9CiAg
ICAgQVNTRVJUKGdvdCArIHNwYW4tPnJlZmNvdW50ID09CkBAIC0yNzUzLDcgKzI4MzUsNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3Bh
bnModm9pZCogb2JqZWN0KSB7CiAgIGlmIChzcGFuLT5yZWZjb3VudCA9PSAwKSB7CiAgICAgRXZl
bnQoc3BhbiwgJyMnLCAwKTsKICAgICBjb3VudGVyXyAtPSAoc3Bhbi0+bGVuZ3RoPDxrUGFnZVNo
aWZ0KSAvIEJ5dGVTaXplRm9yQ2xhc3Moc3Bhbi0+c2l6ZWNsYXNzKTsKLSAgICBETExfUmVtb3Zl
KHNwYW4pOworICAgIERMTF9SZW1vdmUoc3BhbiwgZW50cm9weV8pOwogCiAgICAgLy8gUmVsZWFz
ZSBjZW50cmFsIGxpc3QgbG9jayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKICAgICBsb2Nr
Xy5VbmxvY2soKTsKQEAgLTI3NjMsOCArMjg0NSw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBUQ01h
bGxvY19DZW50cmFsX0ZyZWVMaXN0OjpSZWxlYXNlVG9TcGFucyh2b2lkKiBvYmplY3QpIHsKICAg
ICB9CiAgICAgbG9ja18uTG9jaygpOwogICB9IGVsc2UgewotICAgICoocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+b2JqZWN0czsKLSAgICBzcGFuLT5vYmplY3RzID0g
b2JqZWN0OworICAgIFNMTF9TZXROZXh0KG9iamVjdCwgc3Bhbi0+b2JqZWN0cywgZW50cm9weV8p
OworICAgIHNwYW4tPm9iamVjdHMuc2V0VmFsdWUob2JqZWN0LnZhbHVlKCkpOwogICB9CiB9CiAK
QEAgLTI4MzgsNyArMjkyMCw3IEBAIGJvb2wgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6U2hy
aW5rQ2FjaGUoaW50IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKSB7CiAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Okluc2VydFJhbmdlKHZv
aWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKSB7Cit2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJl
ZUxpc3Q6Okluc2VydFJhbmdlKEhhcmRlbmVkU0xMIHN0YXJ0LCBIYXJkZW5lZFNMTCBlbmQsIGlu
dCBOKSB7CiAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsKICAgaWYgKE4gPT0gbnVtX29iamVj
dHNfdG9fbW92ZVtzaXplX2NsYXNzX10gJiYKICAgICBNYWtlQ2FjaGVTcGFjZSgpKSB7CkBAIC0y
ODUzLDcgKzI5MzUsNyBAQCB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Okluc2VydFJh
bmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKSB7CiAgIFJlbGVhc2VMaXN0VG9TcGFu
cyhzdGFydCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVtb3ZlUmFu
Z2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4pIHsKK3ZvaWQgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdDo6UmVtb3ZlUmFuZ2UoSGFyZGVuZWRTTEwqIHN0YXJ0LCBIYXJkZW5lZFNM
TCogZW5kLCBpbnQgKk4pIHsKICAgaW50IG51bSA9ICpOOwogICBBU1NFUlQobnVtID4gMCk7CiAK
QEAgLTI4NjgsMjEgKzI5NTAsMjEgQEAgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpS
ZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTikgewogICB9CiAKICAg
Ly8gVE9ETzogUHJlZmV0Y2ggbXVsdGlwbGUgVENFbnRyaWVzPwotICB2b2lkICp0YWlsID0gRmV0
Y2hGcm9tU3BhbnNTYWZlKCk7CisgIEhhcmRlbmVkU0xMIHRhaWwgPSBGZXRjaEZyb21TcGFuc1Nh
ZmUoKTsKICAgaWYgKCF0YWlsKSB7CiAgICAgLy8gV2UgYXJlIGNvbXBsZXRlbHkgb3V0IG9mIG1l
bW9yeS4KLSAgICAqc3RhcnQgPSAqZW5kID0gTlVMTDsKKyAgICAqc3RhcnQgPSAqZW5kID0gSGFy
ZGVuZWRTTEw6Om51bGwoKTsKICAgICAqTiA9IDA7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgU0xM
X1NldE5leHQodGFpbCwgTlVMTCk7Ci0gIHZvaWQgKmhlYWQgPSB0YWlsOworICBTTExfU2V0TmV4
dCh0YWlsLCBIYXJkZW5lZFNMTDo6bnVsbCgpLCBlbnRyb3B5Xyk7CisgIEhhcmRlbmVkU0xMIGhl
YWQgPSB0YWlsOwogICBpbnQgY291bnQgPSAxOwogICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAg
ICB2b2lkICp0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAgICBIYXJkZW5lZFNMTCB0ID0gRmV0Y2hG
cm9tU3BhbnMoKTsKICAgICBpZiAoIXQpIGJyZWFrOwotICAgIFNMTF9QdXNoKCZoZWFkLCB0KTsK
KyAgICBTTExfUHVzaCgmaGVhZCwgdCwgZW50cm9weV8pOwogICAgIGNvdW50Kys7CiAgIH0KICAg
KnN0YXJ0ID0gaGVhZDsKQEAgLTI4OTEsOCArMjk3Myw4IEBAIHZvaWQgVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdDo6UmVtb3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4p
IHsKIH0KIAogCi12b2lkKiBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpGZXRjaEZyb21TcGFu
c1NhZmUoKSB7Ci0gIHZvaWQgKnQgPSBGZXRjaEZyb21TcGFucygpOworSGFyZGVuZWRTTEwgVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkgeworICBIYXJkZW5l
ZFNMTCB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKICAgaWYgKCF0KSB7CiAgICAgUG9wdWxhdGUoKTsK
ICAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKQEAgLTI5MDAsMTkgKzI5ODIsMTkgQEAgdm9pZCog
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkgewogICByZXR1
cm4gdDsKIH0KIAotdm9pZCogVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3Bh
bnMoKSB7Ci0gIGlmIChETExfSXNFbXB0eSgmbm9uZW1wdHlfKSkgcmV0dXJuIE5VTEw7Ci0gIFNw
YW4qIHNwYW4gPSBub25lbXB0eV8ubmV4dCgpOworSGFyZGVuZWRTTEwgVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMoKSB7CisgIGlmIChETExfSXNFbXB0eSgmbm9uZW1w
dHlfLCBlbnRyb3B5XykpIHJldHVybiBIYXJkZW5lZFNMTDo6bnVsbCgpOworICBTcGFuKiBzcGFu
ID0gbm9uZW1wdHlfLm5leHQoZW50cm9weV8pOwogCi0gIEFTU0VSVChzcGFuLT5vYmplY3RzICE9
IE5VTEwpOworICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyk7CiAgIEFTU0VSVF9TUEFOX0NPTU1JVFRF
RChzcGFuKTsKICAgc3Bhbi0+cmVmY291bnQrKzsKLSAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2Jq
ZWN0czsKLSAgc3Bhbi0+b2JqZWN0cyA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3Vs
dCkpOwotICBpZiAoc3Bhbi0+b2JqZWN0cyA9PSBOVUxMKSB7CisgIEhhcmRlbmVkU0xMIHJlc3Vs
dCA9IHNwYW4tPm9iamVjdHM7CisgIHNwYW4tPm9iamVjdHMgPSBTTExfTmV4dChyZXN1bHQsIGVu
dHJvcHlfKTsKKyAgaWYgKCFzcGFuLT5vYmplY3RzKSB7CiAgICAgLy8gTW92ZSB0byBlbXB0eSBs
aXN0Ci0gICAgRExMX1JlbW92ZShzcGFuKTsKLSAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFu
KTsKKyAgICBETExfUmVtb3ZlKHNwYW4sIGVudHJvcHlfKTsKKyAgICBETExfUHJlcGVuZCgmZW1w
dHlfLCBzcGFuLCBlbnRyb3B5Xyk7CiAgICAgRXZlbnQoc3BhbiwgJ0UnLCAwKTsKICAgfQogICBj
b3VudGVyXy0tOwpAQCAtMjk1MywyNSArMzAzNSwyNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UG9wdWxhdGUoKSB7CiAKICAgLy8gU3BsaXQgdGhlIGJs
b2NrIGludG8gcGllY2VzIGFuZCBhZGQgdG8gdGhlIGZyZWUtbGlzdAogICAvLyBUT0RPOiBjb2xv
cmluZyBvZiBvYmplY3RzIHRvIGF2b2lkIGNhY2hlIGNvbmZsaWN0cz8KLSAgdm9pZCoqIHRhaWwg
PSAmc3Bhbi0+b2JqZWN0czsKLSAgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7Ci0gIGNoYXIqIGxpbWl0ID0gcHRyICsgKG5wYWdl
cyA8PCBrUGFnZVNoaWZ0KTsKKyAgSGFyZGVuZWRTTEwgaGVhZCA9IEhhcmRlbmVkU0xMOjpudWxs
KCk7CisgIGNoYXIqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQg
PDwga1BhZ2VTaGlmdCk7CiAgIGNvbnN0IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhz
aXplX2NsYXNzXyk7CisgIGNoYXIqIHB0ciA9IHN0YXJ0ICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0
KSAtICgobnBhZ2VzIDw8IGtQYWdlU2hpZnQpICUgc2l6ZSk7CiAgIGludCBudW0gPSAwOwotICBj
aGFyKiBucHRyOwotICB3aGlsZSAoKG5wdHIgPSBwdHIgKyBzaXplKSA8PSBsaW1pdCkgewotICAg
ICp0YWlsID0gcHRyOwotICAgIHRhaWwgPSByZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHB0
cik7Ci0gICAgcHRyID0gbnB0cjsKKyAgd2hpbGUgKHB0ciA+IHN0YXJ0KSB7CisgICAgcHRyIC09
IHNpemU7CisgICAgSGFyZGVuZWRTTEwgbm9kZSA9IEhhcmRlbmVkU0xMOjpjcmVhdGUocHRyKTsK
KyAgICBTTExfU2V0TmV4dChub2RlLCBoZWFkLCBlbnRyb3B5Xyk7CisgICAgaGVhZCA9IG5vZGU7
CiAgICAgbnVtKys7CiAgIH0KLSAgQVNTRVJUKHB0ciA8PSBsaW1pdCk7Ci0gICp0YWlsID0gTlVM
TDsKKyAgQVNTRVJUKHB0ciA9PSBzdGFydCk7CisgIEFTU0VSVChwdHIgPT0gaGVhZC52YWx1ZSgp
KTsKKyAgc3Bhbi0+b2JqZWN0cyA9IGhlYWQ7CisgIEFTU0VSVChzcGFuLT5vYmplY3RzLnZhbHVl
KCkgPT0gaGVhZC52YWx1ZSgpKTsKICAgc3Bhbi0+cmVmY291bnQgPSAwOyAvLyBObyBzdWItb2Jq
ZWN0IGluIHVzZSB5ZXQKIAogICAvLyBBZGQgc3BhbiB0byBsaXN0IG9mIG5vbi1lbXB0eSBzcGFu
cwogICBsb2NrXy5Mb2NrKCk7Ci0gIERMTF9QcmVwZW5kKCZub25lbXB0eV8sIHNwYW4pOworICBE
TExfUHJlcGVuZCgmbm9uZW1wdHlfLCBzcGFuLCBlbnRyb3B5Xyk7CiAgIGNvdW50ZXJfICs9IG51
bTsKIH0KIApAQCAtMjk4OSwxNCArMzA3MywxOCBAQCBpbmxpbmUgYm9vbCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlvbihzaXplX3QgaykgewogICB9CiB9CiAKLXZvaWQgVENN
YWxsb2NfVGhyZWFkQ2FjaGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpIHsKK3ZvaWQgVENN
YWxsb2NfVGhyZWFkQ2FjaGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQsIHVpbnRwdHJfdCBl
bnRyb3B5KSB7CiAgIHNpemVfID0gMDsKICAgbmV4dF8gPSBOVUxMOwogICBwcmV2XyA9IE5VTEw7
CiAgIHRpZF8gID0gdGlkOwogICBpbl9zZXRzcGVjaWZpY18gPSBmYWxzZTsKKyAgZW50cm9weV8g
PSBlbnRyb3B5OworI2lmIEVOQUJMRShUQ01BTExPQ19IQVJERU5JTkcpCisgIEFTU0VSVChlbnRy
b3B5Xyk7CisjZW5kaWYKICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyAr
K2NsKSB7Ci0gICAgbGlzdF9bY2xdLkluaXQoKTsKKyAgICBsaXN0X1tjbF0uSW5pdChlbnRyb3B5
Xyk7CiAgIH0KIAogICAvLyBJbml0aWFsaXplIFJORyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdl
dCB0byBnb29kIHZhbHVlcwpAQCAtMzAyOSw3ICszMTE3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
KiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QWxsb2NhdGUoc2l6ZV90IHNpemUpIHsKICAgcmV0dXJu
IGxpc3QtPlBvcCgpOwogfQogCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RGVh
bGxvY2F0ZSh2b2lkKiBwdHIsIHNpemVfdCBjbCkgeworaW5saW5lIHZvaWQgVENNYWxsb2NfVGhy
ZWFkQ2FjaGU6OkRlYWxsb2NhdGUoSGFyZGVuZWRTTEwgcHRyLCBzaXplX3QgY2wpIHsKICAgc2l6
ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CiAgIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2Ns
XTsKICAgbGlzdC0+UHVzaChwdHIpOwpAQCAtMzA0Myw3ICszMTMxLDcgQEAgaW5saW5lIHZvaWQg
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wpIHsK
IC8vIFJlbW92ZSBzb21lIG9iamVjdHMgb2YgY2xhc3MgImNsIiBmcm9tIGNlbnRyYWwgY2FjaGUg
YW5kIGFkZCB0byB0aHJlYWQgaGVhcAogQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1RocmVh
ZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBzaXplX3QgYWxsb2NhdGlv
blNpemUpIHsKICAgaW50IGZldGNoX2NvdW50ID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0g
IHZvaWQgKnN0YXJ0LCAqZW5kOworICBIYXJkZW5lZFNMTCBzdGFydCwgZW5kOwogICBjZW50cmFs
X2NhY2hlW2NsXS5SZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaF9jb3VudCk7CiAgIGxp
c3RfW2NsXS5QdXNoUmFuZ2UoZmV0Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwogICBzaXplXyArPSBh
bGxvY2F0aW9uU2l6ZSAqIGZldGNoX2NvdW50OwpAQCAtMzA2MCwxMiArMzE0OCwxMiBAQCBpbmxp
bmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVf
dCBjbCwgaW50IE4pIHsKICAgLy8gVE9ETzogVXNlIHRoZSBzYW1lIGZvcm1hdCBpbnRlcm5hbGx5
IGluIHRoZSB0aHJlYWQgY2FjaGVzPwogICBpbnQgYmF0Y2hfc2l6ZSA9IG51bV9vYmplY3RzX3Rv
X21vdmVbY2xdOwogICB3aGlsZSAoTiA+IGJhdGNoX3NpemUpIHsKLSAgICB2b2lkICp0YWlsLCAq
aGVhZDsKKyAgICBIYXJkZW5lZFNMTCB0YWlsLCBoZWFkOwogICAgIHNyYy0+UG9wUmFuZ2UoYmF0
Y2hfc2l6ZSwgJmhlYWQsICZ0YWlsKTsKICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5n
ZShoZWFkLCB0YWlsLCBiYXRjaF9zaXplKTsKICAgICBOIC09IGJhdGNoX3NpemU7CiAgIH0KLSAg
dm9pZCAqdGFpbCwgKmhlYWQ7CisgIEhhcmRlbmVkU0xMIHRhaWwsIGhlYWQ7CiAgIHNyYy0+UG9w
UmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKICAgY2VudHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2Uo
aGVhZCwgdGFpbCwgTik7CiB9CkBAIC0zMTUwLDE4ICszMjM4LDE5IEBAIHZvaWQgVENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKSB7CiAgIC8vIG9iamVjdCBkZWNsYXJlZCBiZWxvdy4K
ICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CiAgIGlmICghcGhpbml0ZWQpIHsK
KyAgICB1aW50cHRyX3QgZW50cm9weSA9IEhBUkRFTklOR19FTlRST1BZOwogI2lmZGVmIFdURl9D
SEFOR0VTCiAgICAgSW5pdFRTRCgpOwogI2VuZGlmCiAgICAgSW5pdFNpemVDbGFzc2VzKCk7Ci0g
ICAgdGhyZWFkaGVhcF9hbGxvY2F0b3IuSW5pdCgpOwotICAgIHNwYW5fYWxsb2NhdG9yLkluaXQo
KTsKKyAgICB0aHJlYWRoZWFwX2FsbG9jYXRvci5Jbml0KGVudHJvcHkpOworICAgIHNwYW5fYWxs
b2NhdG9yLkluaXQoZW50cm9weSk7CiAgICAgc3Bhbl9hbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVj
ZSBjYWNoZSBjb25mbGljdHMKICAgICBzcGFuX2FsbG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNh
Y2hlIGNvbmZsaWN0cwotICAgIHN0YWNrdHJhY2VfYWxsb2NhdG9yLkluaXQoKTsKLSAgICBETExf
SW5pdCgmc2FtcGxlZF9vYmplY3RzKTsKKyAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5Jbml0KGVu
dHJvcHkpOworICAgIERMTF9Jbml0KCZzYW1wbGVkX29iamVjdHMsIGVudHJvcHkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga051bUNsYXNzZXM7ICsraSkgewotICAgICAgY2VudHJhbF9j
YWNoZVtpXS5Jbml0KGkpOworICAgICAgY2VudHJhbF9jYWNoZVtpXS5Jbml0KGksIGVudHJvcHkp
OwogICAgIH0KICAgICBwYWdlaGVhcC0+aW5pdCgpOwogICAgIHBoaW5pdGVkID0gMTsKQEAgLTMx
NzEsMTAgKzMyNjAsMTAgQEAgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgp
IHsKICAgfQogfQogCi1pbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVh
ZENhY2hlOjpOZXdIZWFwKFRocmVhZElkZW50aWZpZXIgdGlkKSB7CitpbmxpbmUgVENNYWxsb2Nf
VGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpOZXdIZWFwKFRocmVhZElkZW50aWZp
ZXIgdGlkLCB1aW50cHRyX3QgZW50cm9weSkgewogICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFk
ZCBpdCB0byB0aGUgbGlua2VkIGxpc3QKICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUgKmhlYXAgPSB0
aHJlYWRoZWFwX2FsbG9jYXRvci5OZXcoKTsKLSAgaGVhcC0+SW5pdCh0aWQpOworICBoZWFwLT5J
bml0KHRpZCwgZW50cm9weSk7CiAgIGhlYXAtPm5leHRfID0gdGhyZWFkX2hlYXBzOwogICBoZWFw
LT5wcmV2XyA9IE5VTEw7CiAgIGlmICh0aHJlYWRfaGVhcHMgIT0gTlVMTCkgdGhyZWFkX2hlYXBz
LT5wcmV2XyA9IGhlYXA7CkBAIC0zMjg4LDcgKzMzNzcsNyBAQCBUQ01hbGxvY19UaHJlYWRDYWNo
ZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKSB7CiAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGhlYXAgPT0gTlVMTCkgaGVhcCA9IE5ld0hlYXAobWUpOwor
ICAgIGlmIChoZWFwID09IE5VTEwpIGhlYXAgPSBOZXdIZWFwKG1lLCBIQVJERU5JTkdfRU5UUk9Q
WSk7CiAgIH0KIAogICAvLyBXZSBjYWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRo
ZSBsb2NrIGJlY2F1c2UgaXQgbWF5CkBAIC0zNzkwLDExICszODc5LDExIEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9fZnJlZSh2b2lkKiBwdHIpIHsKICNlbmRpZgogICAgIFRDTWFsbG9j
X1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVz
ZW50KCk7CiAgICAgaWYgKGhlYXAgIT0gTlVMTCkgewotICAgICAgaGVhcC0+RGVhbGxvY2F0ZShw
dHIsIGNsKTsKKyAgICAgIGhlYXAtPkRlYWxsb2NhdGUoSGFyZGVuZWRTTEw6OmNyZWF0ZShwdHIp
LCBjbCk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIERlbGV0ZSBkaXJlY3RseSBpbnRvIGNlbnRy
YWwgY2FjaGUKLSAgICAgIFNMTF9TZXROZXh0KHB0ciwgTlVMTCk7Ci0gICAgICBjZW50cmFsX2Nh
Y2hlW2NsXS5JbnNlcnRSYW5nZShwdHIsIHB0ciwgMSk7CisgICAgICBTTExfU2V0TmV4dChIYXJk
ZW5lZFNMTDo6Y3JlYXRlKHB0ciksIEhhcmRlbmVkU0xMOjpudWxsKCksIGNlbnRyYWxfY2FjaGVb
Y2xdLmVudHJvcHkoKSk7CisgICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShIYXJk
ZW5lZFNMTDo6Y3JlYXRlKHB0ciksIEhhcmRlbmVkU0xMOjpjcmVhdGUocHRyKSwgMSk7CiAgICAg
fQogICB9IGVsc2UgewogICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwpAQCAt
NDQzNyw4ICs0NTI2LDggQEAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikK
ICAgICBpZiAoIXNwYW4gfHwgc3Bhbi0+ZnJlZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBm
b3IgKHZvaWQqIGZyZWUgPSBzcGFuLT5vYmplY3RzOyBmcmVlICE9IE5VTEw7IGZyZWUgPSAqKCh2
b2lkKiopIGZyZWUpKSB7Ci0gICAgICAgIGlmIChwdHIgPT0gZnJlZSkKKyAgICBmb3IgKEhhcmRl
bmVkU0xMIGZyZWUgPSBzcGFuLT5vYmplY3RzOyBmcmVlOyBmcmVlID0gU0xMX05leHQoZnJlZSwg
SEFSREVOSU5HX0VOVFJPUFkpKSB7CisgICAgICAgIGlmIChwdHIgPT0gZnJlZS52YWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00NDUxLDYgKzQ1NDAsMTkgQEAgc2l6
ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikKIAogI2lmIE9TKERBUldJTikKIAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUKiBSZW1vdGVNZW1vcnlSZWFkZXI6Om5leHRFbnRyeUlu
SGFyZGVuZWRMaW5rZWRMaXN0KFQqKiByZW1vdGVBZGRyZXNzLCB1aW50cHRyX3QgZW50cm9weSkg
Y29uc3QKK3sKKyAgICBUKiogbG9jYWxBZGRyZXNzID0gKCp0aGlzKShyZW1vdGVBZGRyZXNzKTsK
KyAgICBBU1NFUlQobG9jYWxBZGRyZXNzKTsKKyAgICBpZiAoIWxvY2FsQWRkcmVzcykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgVCogaGFyZGVuZWROZXh0ID0gKmxvY2FsQWRkcmVzczsKKyAgICBp
ZiAoIWhhcmRlbmVkTmV4dCB8fCBoYXJkZW5lZE5leHQgPT0gKHZvaWQqKWVudHJvcHkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBYT1JfTUFTS19QVFJfV0lUSF9LRVkoaGFyZGVuZWRO
ZXh0LCByZW1vdGVBZGRyZXNzLCBlbnRyb3B5KTsKK30KKwogY2xhc3MgRnJlZU9iamVjdEZpbmRl
ciB7CiAgICAgY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiBtX3JlYWRlcjsKICAgICBIYXNoU2V0
PHZvaWQqPiBtX2ZyZWVPYmplY3RzOwpAQCAtNDQ3OSwxMiArNDU4MSwxOCBAQCBwdWJsaWM6CiBj
bGFzcyBQYWdlTWFwRnJlZU9iamVjdEZpbmRlciB7CiAgICAgY29uc3QgUmVtb3RlTWVtb3J5UmVh
ZGVyJiBtX3JlYWRlcjsKICAgICBGcmVlT2JqZWN0RmluZGVyJiBtX2ZyZWVPYmplY3RGaW5kZXI7
CisgICAgdWludHB0cl90IG1fZW50cm9weTsKIAogcHVibGljOgotICAgIFBhZ2VNYXBGcmVlT2Jq
ZWN0RmluZGVyKGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyLCBGcmVlT2JqZWN0Rmlu
ZGVyJiBmcmVlT2JqZWN0RmluZGVyKQorICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyKGNvbnN0
IFJlbW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyLCBGcmVlT2JqZWN0RmluZGVyJiBmcmVlT2JqZWN0
RmluZGVyLCB1aW50cHRyX3QgZW50cm9weSkKICAgICAgICAgOiBtX3JlYWRlcihyZWFkZXIpCiAg
ICAgICAgICwgbV9mcmVlT2JqZWN0RmluZGVyKGZyZWVPYmplY3RGaW5kZXIpCi0gICAgeyB9Cisg
ICAgICAgICwgbV9lbnRyb3B5KGVudHJvcHkpCisgICAgeworI2lmIEVOQUJMRShUQ01BTExPQ19I
QVJERU5JTkcpCisgICAgICAgIEFTU0VSVChtX2VudHJvcHkpOworI2VuZGlmCisgICAgfQogCiAg
ICAgaW50IHZpc2l0KHZvaWQqIHB0cikgY29uc3QKICAgICB7CkBAIC00NTAwLDggKzQ2MDgsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ZyZWVPYmplY3RGaW5kZXIudmlzaXQocHRyKTsKICAg
ICAgICAgfSBlbHNlIGlmIChzcGFuLT5zaXplY2xhc3MpIHsKICAgICAgICAgICAgIC8vIFdhbGsg
dGhlIGZyZWUgbGlzdCBvZiB0aGUgc21hbGwtb2JqZWN0IHNwYW4sIGtlZXBpbmcgdHJhY2sgb2Yg
ZWFjaCBvYmplY3Qgc2VlbgotICAgICAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bh
bi0+b2JqZWN0czsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9IG1fcmVhZGVyLm5leHRFbnRyeUlu
TGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQotICAgICAg
ICAgICAgICAgIG1fZnJlZU9iamVjdEZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICAgICAg
ICAgIGZvciAoSGFyZGVuZWRTTEwgbmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRPYmpl
Y3Q7IG5leHRPYmplY3Quc2V0VmFsdWUobV9yZWFkZXIubmV4dEVudHJ5SW5IYXJkZW5lZExpbmtl
ZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5leHRPYmplY3QudmFsdWUoKSksIG1fZW50
cm9weSkpKQorICAgICAgICAgICAgICAgIG1fZnJlZU9iamVjdEZpbmRlci52aXNpdChuZXh0T2Jq
ZWN0LnZhbHVlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGFuLT5sZW5ndGg7CiAg
ICAgfQpAQCAtNDUzNSwxNSArNDY0Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVjb3JkUGVu
ZGluZ1JlZ2lvbnMoKQogICAgIHsKLSAgICAgICAgU3BhbiogbGFzdFNwYW4gPSBtX2NvYWxlc2Nl
ZFNwYW5zW21fY29hbGVzY2VkU3BhbnMuc2l6ZSgpIC0gMV07Ci0gICAgICAgIHZtX3JhbmdlX3Qg
cHRyUmFuZ2UgPSB7IG1fY29hbGVzY2VkU3BhbnNbMF0tPnN0YXJ0IDw8IGtQYWdlU2hpZnQsIDAg
fTsKLSAgICAgICAgcHRyUmFuZ2Uuc2l6ZSA9IChsYXN0U3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlm
dCkgLSBwdHJSYW5nZS5hZGRyZXNzICsgKGxhc3RTcGFuLT5sZW5ndGggKiBrUGFnZVNpemUpOwot
Ci0gICAgICAgIC8vIE1hcmsgdGhlIG1lbW9yeSByZWdpb24gdGhlIHNwYW5zIHJlcHJlc2VudCBh
cyBhIGNhbmRpZGF0ZSBmb3IgY29udGFpbmluZyBwb2ludGVycwotICAgICAgICBpZiAobV90eXBl
TWFzayAmIE1BTExPQ19QVFJfUkVHSU9OX1JBTkdFX1RZUEUpCi0gICAgICAgICAgICAoKm1fcmVj
b3JkZXIpKG1fdGFzaywgbV9jb250ZXh0LCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFLCAm
cHRyUmFuZ2UsIDEpOwotCi0gICAgICAgIGlmICghKG1fdHlwZU1hc2sgJiBNQUxMT0NfUFRSX0lO
X1VTRV9SQU5HRV9UWVBFKSkgeworICAgICAgICBpZiAoIShtX3R5cGVNYXNrICYgKE1BTExPQ19Q
VFJfSU5fVVNFX1JBTkdFX1RZUEUgfCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFKSkpIHsK
ICAgICAgICAgICAgIG1fY29hbGVzY2VkU3BhbnMuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtNDU3Myw3ICs0NjczLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgKCptX3JlY29yZGVyKShtX3Rhc2ssIG1fY29udGV4dCwg
TUFMTE9DX1BUUl9JTl9VU0VfUkFOR0VfVFlQRSwgYWxsb2NhdGVkUG9pbnRlcnMuZGF0YSgpLCBh
bGxvY2F0ZWRQb2ludGVycy5zaXplKCkpOworICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywg
bV9jb250ZXh0LCBtX3R5cGVNYXNrICYgKE1BTExPQ19QVFJfSU5fVVNFX1JBTkdFX1RZUEUgfCBN
QUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFKSwgYWxsb2NhdGVkUG9pbnRlcnMuZGF0YSgpLCBh
bGxvY2F0ZWRQb2ludGVycy5zaXplKCkpOwogCiAgICAgICAgIG1fY29hbGVzY2VkU3BhbnMuY2xl
YXIoKTsKICAgICB9CkBAIC00Njc0LDcgKzQ3NzQsNyBAQCBrZXJuX3JldHVybl90IEZhc3RNYWxs
b2Nab25lOjplbnVtZXJhdGUodGFza190IHRhc2ssIHZvaWQqIGNvbnRleHQsIHVuc2lnbmVkIHR5
cAogICAgIGZpbmRlci5maW5kRnJlZU9iamVjdHMoY2VudHJhbENhY2hlcywga051bUNsYXNzZXMs
IG16b25lLT5tX2NlbnRyYWxDYWNoZXMpOwogCiAgICAgVENNYWxsb2NfUGFnZUhlYXA6OlBhZ2VN
YXAqIHBhZ2VNYXAgPSAmcGFnZUhlYXAtPnBhZ2VtYXBfOwotICAgIFBhZ2VNYXBGcmVlT2JqZWN0
RmluZGVyIHBhZ2VNYXBGaW5kZXIobWVtb3J5UmVhZGVyLCBmaW5kZXIpOworICAgIFBhZ2VNYXBG
cmVlT2JqZWN0RmluZGVyIHBhZ2VNYXBGaW5kZXIobWVtb3J5UmVhZGVyLCBmaW5kZXIsIHBhZ2VI
ZWFwLT5lbnRyb3B5Xyk7CiAgICAgcGFnZU1hcC0+dmlzaXRWYWx1ZXMocGFnZU1hcEZpbmRlciwg
bWVtb3J5UmVhZGVyKTsKIAogICAgIFBhZ2VNYXBNZW1vcnlVc2FnZVJlY29yZGVyIHVzYWdlUmVj
b3JkZXIodGFzaywgY29udGV4dCwgdHlwZU1hc2ssIHJlY29yZGVyLCBtZW1vcnlSZWFkZXIsIGZp
bmRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWxsb2Nab25lU3VwcG9ydC5oIGIv
U291cmNlL1dURi93dGYvTWFsbG9jWm9uZVN1cHBvcnQuaAppbmRleCA0MzMyZTQwYjg1MmM1NzQz
YWZhOWVlY2FmOGEyNDE3ZDM5MjhiNzc5Li5lZTgwOWM1YTI4YjZlMDI3YWEwYTdlNmM4NTMwMjBj
YmYyM2MyMTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWxsb2Nab25lU3VwcG9ydC5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL01hbGxvY1pvbmVTdXBwb3J0LmgKQEAgLTU5LDEzICs1OSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBUKiBu
ZXh0RW50cnlJbkxpbmtlZExpc3QoVCoqIGFkZHJlc3MpIGNvbnN0Ci0gICAgewotICAgICAgICBU
Kiogb3V0cHV0ID0gKCp0aGlzKShhZGRyZXNzKTsKLSAgICAgICAgaWYgKCFvdXRwdXQpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICpvdXRwdXQ7Ci0gICAgfQorICAgIFQq
IG5leHRFbnRyeUluSGFyZGVuZWRMaW5rZWRMaXN0KFQqKiBhZGRyZXNzLCB1aW50cHRyX3QgZW50
cm9weSkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
</data>
<flag name="review"
          id="207582"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>