<?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>182563</bug_id>
          
          <creation_ts>2018-02-06 20:04:17 -0800</creation_ts>
          <short_desc>Experiment with alternative implementation of memcpy/memset</short_desc>
          <delta_ts>2018-02-16 14:06:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jlewis3</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1397081</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-06 20:04:17 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397082</commentid>
    <comment_count>1</comment_count>
      <attachid>333260</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-06 20:05:22 -0800</bug_when>
    <thetext>Created attachment 333260
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397347</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-07 15:50:28 -0800</bug_when>
    <thetext>Looks like a 1.00882x speed-up on PLT with p = 0.0973514.

Gonna test some more benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397568</commentid>
    <comment_count>3</comment_count>
      <attachid>333383</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 10:08:42 -0800</bug_when>
    <thetext>Created attachment 333383
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397570</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 10:11:46 -0800</bug_when>
    <thetext>Attachment 333383 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Algorithm.h:190:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:203:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:210:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:231:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:238:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:259:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:265:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:301:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:313:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:314:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:314:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:320:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:339:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:340:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:340:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:365:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:366:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:366:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:371:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:51:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:77:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:78:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:78:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:103:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:104:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:104:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:80:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:87:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:108:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 108 in 41 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>1397574</commentid>
    <comment_count>5</comment_count>
      <attachid>333386</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 10:20:15 -0800</bug_when>
    <thetext>Created attachment 333386
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397577</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 10:23:07 -0800</bug_when>
    <thetext>Attachment 333386 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Algorithm.h:190:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:203:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:210:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:231:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:238:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:259:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:265:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:301:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:313:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:314:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:314:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:320:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:339:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:340:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:340:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:365:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:366:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:366:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:371:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:51:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:77:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:78:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:78:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:103:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:104:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:104:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:80:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:87:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:108:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 108 in 43 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>1397603</commentid>
    <comment_count>7</comment_count>
      <attachid>333386</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-02-08 11:21:32 -0800</bug_when>
    <thetext>Comment on attachment 333386
the patch

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

r=me.  Did you consider implementing only in bmalloc and then a forward reference in WTF?

&gt; Source/WTF/ChangeLog:36
&gt; +        reasoning. But that&apos;s not quite right, since then we would lose inlining in the unknonw-size

Spelling *unknonw-size*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397644</commentid>
    <comment_count>8</comment_count>
      <attachid>333386</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-02-08 12:20:30 -0800</bug_when>
    <thetext>Comment on attachment 333386
the patch

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

FYI, I did my review from the bottom up (since the fastCopy and fastZeroFill implementations are located towards the bottom).  It might make more sense to read my comments backwards.

&gt; Source/WTF/wtf/FastCopy.h:33
&gt; +template&lt;typename T&gt;
&gt; +void fastCopy(T* dst, const T* src, size_t length)

I assume this is identical to the bmalloc version below and didn&apos;t review this thoroughly.

&gt; Source/WTF/wtf/FastCopy.h:143
&gt; +inline void fastCopyBytes(void* dst, const void* src, size_t bytes)

At first, I was pondering whether we can rename this to just be fastCopy.  After doing the entire review, I am strongly of the opinion that we should NOT rename this to fastCopy.  There&apos;s a strong need to distinguish fastCopy and fastCopyBytes apart.

One of the class of errors that can arise from fastCopy() taking a count of T to copy instead of size_t bytes is that if someone edits the code later and innocently changes the type of the pointer, an error may silently creep in.  Consider this scenario:

Initially, let&apos;s say we have this contrived code in a class:

       void foo(Stuff* myStuff, Stuff* other, int numberOfStuff) {
           m_myStuff = myStuff;
           m_other = other;
           m_length = numberOfStuff;
           bar(); // where bar contains ... fastCopy(m_myStuff, m_other, m_length);  // &lt;======== this is correct.
       }

       Stuff m_myStuff;
       Stuff m_other;
       size_t m_length;

Some time later, for reasons, someone decides to change type of the pointers like so:

       void* m_myStuff;
       void* m_other;
       size_t m_length;

The person making the change may not notice that bar() relies on typeof m_myStuff and m_other not being void*.  If you can be sure that calling fastCopy() with void* pointers will result in a build error, then this error will not go unnoticed.  I think we&apos;re fine, but can you please do a quick test to make sure that this is indeed the case i.e. we should get build errors if fastCopy() is called with void* pointers.

This is also why it is good to name fastCopyBytes() differently than fastCopy().

&gt; Source/WTF/wtf/FastMalloc.cpp:83
&gt; +    fastZeroFill(static_cast&lt;char*&gt;(result), n);

Let&apos;s just call fastZeroFillBytes() and do away with the cast instead.

&gt; Source/WTF/wtf/FastMalloc.cpp:100
&gt; +    fastZeroFill(static_cast&lt;char*&gt;(result), n);

Let&apos;s just call fastZeroFillBytes() and do away with the cast instead.

&gt; Source/WTF/wtf/FastZeroFill.h:33
&gt; +void fastZeroFill(T* dst, size_t length)

I assume this is identical to the bmalloc version below and didn&apos;t review this thoroughly.

&gt; Source/WTF/wtf/FastZeroFill.h:136
&gt; +inline void fastZeroFillBytes(void* dst, size_t bytes)

Ditto: same issue as with fastCopyBytes() above.

&gt; Source/WTF/wtf/MD5.cpp:5
&gt; - * Copyright (C) 2015 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2015-2018 Apple Inc. All rights reserved.

Why is this needed?

&gt; Source/WTF/wtf/text/StringConcatenate.h:161
&gt; +        fastCopy(destination, m_characters, m_length * sizeof(UChar));

This is wrong.  You should remove the &quot;* sizeof(UChar)&quot;.

&gt; Source/bmalloc/bmalloc/Algorithm.h:218
&gt; +            &quot;movq (%%rsi, %%rcx), %%rax\n\t&quot;
&gt; +            &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;

Ditto with assumption about alignment being a non-issue (see below).

&gt; Source/bmalloc/bmalloc/Algorithm.h:229
&gt; +            &quot;addq $4, %%rcx\n\t&quot;
&gt; +            &quot;4:\n\t&quot;
&gt; +            &quot;movl (%%rsi, %%rcx), %%eax\n\t&quot;
&gt; +            &quot;movl %%eax, (%%rdi, %%rcx)\n\t&quot;
&gt; +            &quot;subq $4, %%rcx\n\t&quot;
&gt; +            &quot;jae 4b\n\t&quot;

Same as below: no need for addq, subq, and jae.  This reduces to:
    &quot;movl (%%rsi), %%eax\n\t&quot;
    &quot;movl %%eax, (%%rdi)\n\t&quot;

&gt; Source/bmalloc/bmalloc/Algorithm.h:246
&gt; +            &quot;movq (%%rsi, %%rcx), %%rax\n\t&quot;
&gt; +            &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;

Ditto with assumption about alignment being a non-issue (see below).

&gt; Source/bmalloc/bmalloc/Algorithm.h:272
&gt; +        &quot;movq (%%rsi, %%rcx), %%rax\n\t&quot;
&gt; +        &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;

Ditto with assumption about alignment being a non-issue (see below).

&gt; Source/bmalloc/bmalloc/Algorithm.h:324
&gt; +            &quot;rep stosl\n\t&quot;

I presume the CPU&apos;s implementation of stosl will do the equivalent of stosq for the parts that are 8 byte aligned?  Can you confirm?

&gt; Source/bmalloc/bmalloc/Algorithm.h:330
&gt; +            &quot;1:\n\t&quot;
&gt; +            &quot;subq $8, %%rcx\n\t&quot;
&gt; +            &quot;jae 3b\n\t&quot;

It looks like you&apos;re assuming that fastZeroFill() will only every be called on a dst that is aligned on a 8 byte boundary because you&apos;re not checking for the potential of a leading 4 bytes here.  Or are you relying on x86 support for unaligned access and just taking the hit if it turns out to be unaligned?

&gt; Source/bmalloc/bmalloc/Algorithm.h:337
&gt; +            &quot;addq $4, %%rcx\n\t&quot;
&gt; +            &quot;4:\n\t&quot;
&gt; +            &quot;movl %%eax, (%%rdi, %%rcx)\n\t&quot;
&gt; +            &quot;subq $4, %%rcx\n\t&quot;
&gt; +            &quot;jae 4b\n\t&quot;

We already know that sizeof(T) % sizeof(uint32_t) == 0.  Hence, the only way that we can get here (%rcx != -8) is if there&apos;s one 4 byte word to write.  I think you can remove this addq, subq, and jae.  This reduces to:
    &quot;movl %%eax, (%%rdi)\n\t&quot;

&gt; Source/bmalloc/bmalloc/Algorithm.h:353
&gt; +            &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;

Ditto with assumption about alignment being a non-issue.

&gt; Source/bmalloc/bmalloc/Algorithm.h:377
&gt; +        &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;

Ditto with assumption about alignment being a non-issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397663</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 12:49:50 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; Comment on attachment 333386 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333386&amp;action=review
&gt; 
&gt; FYI, I did my review from the bottom up (since the fastCopy and fastZeroFill
&gt; implementations are located towards the bottom).  It might make more sense
&gt; to read my comments backwards.
&gt; 
&gt; &gt; Source/WTF/wtf/FastCopy.h:33
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +void fastCopy(T* dst, const T* src, size_t length)
&gt; 
&gt; I assume this is identical to the bmalloc version below and didn&apos;t review
&gt; this thoroughly.
&gt; 
&gt; &gt; Source/WTF/wtf/FastCopy.h:143
&gt; &gt; +inline void fastCopyBytes(void* dst, const void* src, size_t bytes)
&gt; 
&gt; At first, I was pondering whether we can rename this to just be fastCopy. 
&gt; After doing the entire review, I am strongly of the opinion that we should
&gt; NOT rename this to fastCopy.  There&apos;s a strong need to distinguish fastCopy
&gt; and fastCopyBytes apart.
&gt; 
&gt; One of the class of errors that can arise from fastCopy() taking a count of
&gt; T to copy instead of size_t bytes is that if someone edits the code later
&gt; and innocently changes the type of the pointer, an error may silently creep
&gt; in.  Consider this scenario:
&gt; 
&gt; Initially, let&apos;s say we have this contrived code in a class:
&gt; 
&gt;        void foo(Stuff* myStuff, Stuff* other, int numberOfStuff) {
&gt;            m_myStuff = myStuff;
&gt;            m_other = other;
&gt;            m_length = numberOfStuff;
&gt;            bar(); // where bar contains ... fastCopy(m_myStuff, m_other,
&gt; m_length);  // &lt;======== this is correct.
&gt;        }
&gt; 
&gt;        Stuff m_myStuff;
&gt;        Stuff m_other;
&gt;        size_t m_length;
&gt; 
&gt; Some time later, for reasons, someone decides to change type of the pointers
&gt; like so:
&gt; 
&gt;        void* m_myStuff;
&gt;        void* m_other;
&gt;        size_t m_length;
&gt; 
&gt; The person making the change may not notice that bar() relies on typeof
&gt; m_myStuff and m_other not being void*.  If you can be sure that calling
&gt; fastCopy() with void* pointers will result in a build error, then this error
&gt; will not go unnoticed.  I think we&apos;re fine, but can you please do a quick
&gt; test to make sure that this is indeed the case i.e. we should get build
&gt; errors if fastCopy() is called with void* pointers.

We do not get build errors if fastCopy() is called with void*.

&gt; 
&gt; This is also why it is good to name fastCopyBytes() differently than
&gt; fastCopy().
&gt; 
&gt; &gt; Source/WTF/wtf/FastMalloc.cpp:83
&gt; &gt; +    fastZeroFill(static_cast&lt;char*&gt;(result), n);
&gt; 
&gt; Let&apos;s just call fastZeroFillBytes() and do away with the cast instead.

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/FastMalloc.cpp:100
&gt; &gt; +    fastZeroFill(static_cast&lt;char*&gt;(result), n);
&gt; 
&gt; Let&apos;s just call fastZeroFillBytes() and do away with the cast instead.

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/FastZeroFill.h:33
&gt; &gt; +void fastZeroFill(T* dst, size_t length)
&gt; 
&gt; I assume this is identical to the bmalloc version below and didn&apos;t review
&gt; this thoroughly.

Yeah.

&gt; 
&gt; &gt; Source/WTF/wtf/FastZeroFill.h:136
&gt; &gt; +inline void fastZeroFillBytes(void* dst, size_t bytes)
&gt; 
&gt; Ditto: same issue as with fastCopyBytes() above.

Yeah.

&gt; 
&gt; &gt; Source/WTF/wtf/MD5.cpp:5
&gt; &gt; - * Copyright (C) 2015 Apple Inc. All rights reserved.
&gt; &gt; + * Copyright (C) 2015-2018 Apple Inc. All rights reserved.
&gt; 
&gt; Why is this needed?

Reverted.

An earlier version replaced memcpy/memset in this file, but later I noticed it was being used to copy constant-size things, so I reverted.

&gt; 
&gt; &gt; Source/WTF/wtf/text/StringConcatenate.h:161
&gt; &gt; +        fastCopy(destination, m_characters, m_length * sizeof(UChar));
&gt; 
&gt; This is wrong.  You should remove the &quot;* sizeof(UChar)&quot;.

Fixed!

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:218
&gt; &gt; +            &quot;movq (%%rsi, %%rcx), %%rax\n\t&quot;
&gt; &gt; +            &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;
&gt; 
&gt; Ditto with assumption about alignment being a non-issue (see below).

I confirmed that alignment is a non-issue!

It appears that doing a misaligned 64-bit word load/store is always faster than doing 8 8-bit loads/stores.

Also, other memcpy&apos;s that I&apos;ve seen for x86 do the same thing.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:229
&gt; &gt; +            &quot;addq $4, %%rcx\n\t&quot;
&gt; &gt; +            &quot;4:\n\t&quot;
&gt; &gt; +            &quot;movl (%%rsi, %%rcx), %%eax\n\t&quot;
&gt; &gt; +            &quot;movl %%eax, (%%rdi, %%rcx)\n\t&quot;
&gt; &gt; +            &quot;subq $4, %%rcx\n\t&quot;
&gt; &gt; +            &quot;jae 4b\n\t&quot;
&gt; 
&gt; Same as below: no need for addq, subq, and jae.  This reduces to:
&gt;     &quot;movl (%%rsi), %%eax\n\t&quot;
&gt;     &quot;movl %%eax, (%%rdi)\n\t&quot;

Clever.  I&apos;ll leave a comment and fix in another patch: https://bugs.webkit.org/show_bug.cgi?id=182617

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:246
&gt; &gt; +            &quot;movq (%%rsi, %%rcx), %%rax\n\t&quot;
&gt; &gt; +            &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;
&gt; 
&gt; Ditto with assumption about alignment being a non-issue (see below).

Will leave fixme.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:272
&gt; &gt; +        &quot;movq (%%rsi, %%rcx), %%rax\n\t&quot;
&gt; &gt; +        &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;
&gt; 
&gt; Ditto with assumption about alignment being a non-issue (see below).

Will leave fixme.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:324
&gt; &gt; +            &quot;rep stosl\n\t&quot;
&gt; 
&gt; I presume the CPU&apos;s implementation of stosl will do the equivalent of stosq
&gt; for the parts that are 8 byte aligned?  Can you confirm?
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:330
&gt; &gt; +            &quot;1:\n\t&quot;
&gt; &gt; +            &quot;subq $8, %%rcx\n\t&quot;
&gt; &gt; +            &quot;jae 3b\n\t&quot;
&gt; 
&gt; It looks like you&apos;re assuming that fastZeroFill() will only every be called
&gt; on a dst that is aligned on a 8 byte boundary because you&apos;re not checking
&gt; for the potential of a leading 4 bytes here.  Or are you relying on x86
&gt; support for unaligned access and just taking the hit if it turns out to be
&gt; unaligned?

Relying on x86 to be awesome. ;-)

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:337
&gt; &gt; +            &quot;addq $4, %%rcx\n\t&quot;
&gt; &gt; +            &quot;4:\n\t&quot;
&gt; &gt; +            &quot;movl %%eax, (%%rdi, %%rcx)\n\t&quot;
&gt; &gt; +            &quot;subq $4, %%rcx\n\t&quot;
&gt; &gt; +            &quot;jae 4b\n\t&quot;
&gt; 
&gt; We already know that sizeof(T) % sizeof(uint32_t) == 0.  Hence, the only way
&gt; that we can get here (%rcx != -8) is if there&apos;s one 4 byte word to write.  I
&gt; think you can remove this addq, subq, and jae.  This reduces to:
&gt;     &quot;movl %%eax, (%%rdi)\n\t&quot;

That&apos;s a really good observation. https://bugs.webkit.org/show_bug.cgi?id=182617

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:353
&gt; &gt; +            &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;
&gt; 
&gt; Ditto with assumption about alignment being a non-issue.

Not an issue.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:377
&gt; &gt; +        &quot;movq %%rax, (%%rdi, %%rcx)\n\t&quot;
&gt; 
&gt; Ditto with assumption about alignment being a non-issue.

Not an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397667</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 12:52:00 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #9)
&gt; (In reply to Mark Lam from comment #8)
&gt; &gt; Comment on attachment 333386 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=333386&amp;action=review
&gt; &gt; 
&gt; &gt; FYI, I did my review from the bottom up (since the fastCopy and fastZeroFill
&gt; &gt; implementations are located towards the bottom).  It might make more sense
&gt; &gt; to read my comments backwards.
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/FastCopy.h:33
&gt; &gt; &gt; +template&lt;typename T&gt;
&gt; &gt; &gt; +void fastCopy(T* dst, const T* src, size_t length)
&gt; &gt; 
&gt; &gt; I assume this is identical to the bmalloc version below and didn&apos;t review
&gt; &gt; this thoroughly.
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/FastCopy.h:143
&gt; &gt; &gt; +inline void fastCopyBytes(void* dst, const void* src, size_t bytes)
&gt; &gt; 
&gt; &gt; At first, I was pondering whether we can rename this to just be fastCopy. 
&gt; &gt; After doing the entire review, I am strongly of the opinion that we should
&gt; &gt; NOT rename this to fastCopy.  There&apos;s a strong need to distinguish fastCopy
&gt; &gt; and fastCopyBytes apart.
&gt; &gt; 
&gt; &gt; One of the class of errors that can arise from fastCopy() taking a count of
&gt; &gt; T to copy instead of size_t bytes is that if someone edits the code later
&gt; &gt; and innocently changes the type of the pointer, an error may silently creep
&gt; &gt; in.  Consider this scenario:
&gt; &gt; 
&gt; &gt; Initially, let&apos;s say we have this contrived code in a class:
&gt; &gt; 
&gt; &gt;        void foo(Stuff* myStuff, Stuff* other, int numberOfStuff) {
&gt; &gt;            m_myStuff = myStuff;
&gt; &gt;            m_other = other;
&gt; &gt;            m_length = numberOfStuff;
&gt; &gt;            bar(); // where bar contains ... fastCopy(m_myStuff, m_other,
&gt; &gt; m_length);  // &lt;======== this is correct.
&gt; &gt;        }
&gt; &gt; 
&gt; &gt;        Stuff m_myStuff;
&gt; &gt;        Stuff m_other;
&gt; &gt;        size_t m_length;
&gt; &gt; 
&gt; &gt; Some time later, for reasons, someone decides to change type of the pointers
&gt; &gt; like so:
&gt; &gt; 
&gt; &gt;        void* m_myStuff;
&gt; &gt;        void* m_other;
&gt; &gt;        size_t m_length;
&gt; &gt; 
&gt; &gt; The person making the change may not notice that bar() relies on typeof
&gt; &gt; m_myStuff and m_other not being void*.  If you can be sure that calling
&gt; &gt; fastCopy() with void* pointers will result in a build error, then this error
&gt; &gt; will not go unnoticed.  I think we&apos;re fine, but can you please do a quick
&gt; &gt; test to make sure that this is indeed the case i.e. we should get build
&gt; &gt; errors if fastCopy() is called with void* pointers.
&gt; 
&gt; We do not get build errors if fastCopy() is called with void*.

I was wrong.  We totally do, because of sizeof(void).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397672</commentid>
    <comment_count>11</comment_count>
      <attachid>333413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 12:57:04 -0800</bug_when>
    <thetext>Created attachment 333413
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397674</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-08 12:59:56 -0800</bug_when>
    <thetext>Attachment 333413 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Algorithm.h:190:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:203:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:210:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:231:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:238:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:259:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:265:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:285:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:290:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:295:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:301:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:313:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:314:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:314:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:320:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:339:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:340:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:340:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:346:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:365:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:366:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:366:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:371:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:389:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:390:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/bmalloc/bmalloc/Algorithm.h:394:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:51:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:77:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:78:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:78:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:103:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:104:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:104:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastZeroFill.h:136:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:39:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:52:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:80:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:87:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:108:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FastCopy.h:134:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:139:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/FastCopy.h:143:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 108 in 42 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>1397676</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-02-08 13:01:44 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #10)
&gt; (In reply to Filip Pizlo from comment #9)
&gt; &gt; We do not get build errors if fastCopy() is called with void*.
&gt; 
&gt; I was wrong.  We totally do, because of sizeof(void).

Excellent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397680</commentid>
    <comment_count>14</comment_count>
      <attachid>333413</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-02-08 13:04:52 -0800</bug_when>
    <thetext>Comment on attachment 333413
patch for landing

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

&gt; Source/WTF/wtf/FastCopy.h:101
&gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617

Wrong place.  This comment belongs on the uint32_t case above.

&gt; Source/WTF/wtf/FastZeroFill.h:97
&gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617

Wrong place.  This comment belongs on the uint32_t case above.

&gt; Source/bmalloc/bmalloc/Algorithm.h:252
&gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617

Wrong place.  This comment belongs on the uint32_t case above.

&gt; Source/bmalloc/bmalloc/Algorithm.h:359
&gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617

Wrong place.  This comment belongs on the uint32_t case above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397794</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 18:11:45 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #14)
&gt; Comment on attachment 333413 [details]
&gt; patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333413&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/FastCopy.h:101
&gt; &gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617
&gt; 
&gt; Wrong place.  This comment belongs on the uint32_t case above.
&gt; 
&gt; &gt; Source/WTF/wtf/FastZeroFill.h:97
&gt; &gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617
&gt; 
&gt; Wrong place.  This comment belongs on the uint32_t case above.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:252
&gt; &gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617
&gt; 
&gt; Wrong place.  This comment belongs on the uint32_t case above.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Algorithm.h:359
&gt; &gt; +            &quot;addq $6, %%rcx\n\t&quot; // FIXME: This isn&apos;t really a loop. https://bugs.webkit.org/show_bug.cgi?id=182617
&gt; 
&gt; Wrong place.  This comment belongs on the uint32_t case above.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397797</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 18:13:45 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/228306/webkit

Saam and I will watch the bots to see if this is really a speed-up.  It&apos;s hard to tell.  When I retested PLT, I didn&apos;t see anything.  But a Speedometer run did see a maybe-speed-up.  So who knows!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397798</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-08 18:14:01 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/228306/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397800</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-08 18:14:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/37374970&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397906</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-02-09 05:21:30 -0800</bug_when>
    <thetext>This seems to have broken Linux 32-bit (ARMv7) builds:

- Log from Linux GTK ARMv7 (thumb2) bot: https://build.webkit.org/builders/GTK%20Linux%20ARM%20Release/builds/2258/steps/compile-webkit/logs/stdio/text
- Log from Linux JSCOnly ARMv7 (thumb2) bot: https://build.webkit.org/builders/JSCOnly%20Linux%20ARMv7%20Thumb2%20Release/builds/3206/steps/compile-webkit/logs/stdio/text
- Log from Linux JSCOnly ARMv7 (traditional) bot: https://build.webkit.org/builders/JSCOnly%20Linux%20ARMv7%20Traditional%20Release/builds/2487/steps/compile-webkit/logs/stdio/text</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397915</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-02-09 05:37:49 -0800</bug_when>
    <thetext>Committed r228317: &lt;https://trac.webkit.org/changeset/228317&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397917</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-02-09 05:50:47 -0800</bug_when>
    <thetext>Committed r228318: &lt;https://trac.webkit.org/changeset/228318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397939</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-02-09 08:07:32 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #20)
&gt; Committed r228317: &lt;https://trac.webkit.org/changeset/228317&gt;

We should avoid architecture-specific #includes whenever possible. Adding one #include &lt;string.h&gt; is not going to slow down the build very much at all; it&apos;s not worth the cost of the include guards, IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397955</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-02-09 09:04:31 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #22)
&gt; (In reply to Carlos Alberto Lopez Perez from comment #20)
&gt; &gt; Committed r228317: &lt;https://trac.webkit.org/changeset/228317&gt;
&gt; 
&gt; We should avoid architecture-specific #includes whenever possible. Adding
&gt; one #include &lt;string.h&gt; is not going to slow down the build very much at
&gt; all; it&apos;s not worth the cost of the include guards, IMO.

Thanks for the suggestion. I have uploaded a patch for this to bug 182642</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400029</commentid>
    <comment_count>24</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-02-16 14:06:37 -0800</bug_when>
    <thetext>Reverted r228318 for reason:

The patch that this attempted to fix was rolled out already.

Committed r228582: &lt;https://trac.webkit.org/changeset/228582&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333260</attachid>
            <date>2018-02-06 20:05:22 -0800</date>
            <delta_ts>2018-02-08 10:08:42 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55360</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJC
dWZmZXIuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzYsNyAr
Mjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIWlzQXZhaWxhYmxlKHNp
emUpKQogICAgICAgICAgICAgICAgIGdyb3coc2l6ZSk7CiAKLSAgICAgICAgICAgIG1lbWNweSht
X3N0b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCBkYXRhLCBzaXplKTsKKyAgICAgICAgICAgIGZh
c3RDb3B5Qnl0ZXMobV9zdG9yYWdlLmJ1ZmZlcigpICsgbV9pbmRleCwgZGF0YSwgc2l6ZSk7CiAg
ICAgICAgICAgICBtX2luZGV4ICs9IHNpemU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMjI4MjE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZSh1bgogICAgIH0KICAgICAKICAgICBpZiAocG9saWN5ID09IFplcm9Jbml0aWFs
aXplKQotICAgICAgICBtZW1zZXQobV9kYXRhLmdldCgpLCAwLCBzaXplKTsKKyAgICAgICAgZmFz
dFplcm9GaWxsQnl0ZXMobV9kYXRhLmdldCgpLCBzaXplKTsKIAogICAgIG1fc2l6ZUluQnl0ZXMg
PSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKICAgICBtX2Rlc3RydWN0b3IgPSBbXSAo
dm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBwKTsgfTsKQEAg
LTE0MSw3ICsxNDEsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmNvcHlUbyhBcnJheUJ1
CiAgICAgb3RoZXIudHJ5QWxsb2NhdGUobV9zaXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CiAgICAgaWYgKCFvdGhlci5tX2RhdGEp
CiAgICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkob3RoZXIubV9kYXRhLmdldCgpLCBtX2RhdGEu
Z2V0KCksIG1fc2l6ZUluQnl0ZXMpOworICAgIGZhc3RDb3B5Qnl0ZXMob3RoZXIubV9kYXRhLmdl
dCgpLCBtX2RhdGEuZ2V0KCksIG1fc2l6ZUluQnl0ZXMpOwogICAgIG90aGVyLm1fc2l6ZUluQnl0
ZXMgPSBtX3NpemVJbkJ5dGVzOwogfQogCkBAIC0yNDYsNyArMjQ2LDcgQEAgUmVmPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlSW50ZQogewogICAgIEFTU0VSVCghYnl0ZUxlbmd0aCB8
fCBzb3VyY2UpOwogICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihX
VEZNb3ZlKGNvbnRlbnRzKSkpOwotICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBi
eXRlTGVuZ3RoKTsKKyAgICBmYXN0Q29weUJ5dGVzKGJ1ZmZlci0+ZGF0YSgpLCBzb3VyY2UsIGJ5
dGVMZW5ndGgpOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJv
UmFuZ2VJbXBsKHVuc2kKICAgICB9CiAgICAgCiAgICAgdWludDhfdCogYmFzZSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihiYXNlQWRkcmVzcygpKTsKLSAgICBtZW1zZXQoYmFzZSArIGJ5dGVPZmZz
ZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7CisgICAgZmFzdFplcm9GaWxsQnl0ZXMoYmFzZSArIGJ5
dGVPZmZzZXQsIHJhbmdlQnl0ZUxlbmd0aCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMu
Y3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjEgKzMxLDYgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLXZvaWQgY2xlYXJBcnJheU1lbXNl
dChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJhc2UsIHVuc2lnbmVkIGNvdW50KQotewotI2lmIENQ
VShYODZfNjQpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSAgICB1aW50NjRfdCB6ZXJvID0g
MDsKLSAgICBhc20gdm9sYXRpbGUgKAotICAgICAgICAicmVwIHN0b3NxXG5cdCIKLSAgICAgICAg
OiAiK0QiKGJhc2UpLCAiK2MiKGNvdW50KQotICAgICAgICA6ICJhIih6ZXJvKQotICAgICAgICA6
ICJtZW1vcnkiCi0gICAgICAgICk7Ci0jZWxzZSAvLyBub3QgQ1BVKFg4Nl82NCkKLSAgICBtZW1z
ZXQoYmFzZSwgMCwgY291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci0jZW5k
aWYgLy8gZ2VuZXJpYyBDUFUKLX0KLQogdm9pZCBjbGVhckFycmF5TWVtc2V0KGRvdWJsZSogYmFz
ZSwgdW5zaWduZWQgY291bnQpCiB7CiAjaWYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoR0NDX09S
X0NMQU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMjIgKzEx
NywxNyBAQCBpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyCiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckFycmF5TWVtc2V0
KFdyaXRlQmFycmllcjxVbmtub3duPiogYmFzZSwgdW5zaWduZWQgY291bnQpOwogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjbGVhckFycmF5TWVtc2V0KGRvdWJsZSogYmFzZSwgdW5zaWduZWQgY291
bnQpOwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVh
ckFycmF5KFdyaXRlQmFycmllcjxVbmtub3duPiogYmFzZSwgdW5zaWduZWQgY291bnQpCiB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjb25zdCB1bnNpZ25lZCBtaW5Db3VudEZvck1lbXNldCA9
IDEwMDsKLSAgICBpZiAoY291bnQgPj0gbWluQ291bnRGb3JNZW1zZXQpIHsKLSAgICAgICAgY2xl
YXJBcnJheU1lbXNldChiYXNlLCBjb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLSAgICAKKyAgICBmYXN0WmVyb0ZpbGwoYmFzZSwgY291bnQpOworI2Vsc2UKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBjb3VudDsgaS0tOykKICAgICAgICAgYmFzZVtpXS5jbGVhcigpOworI2Vu
ZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckFycmF5KGRvdWJsZSogYmFzZSwgdW5z
aWduZWQgY291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzks
MTkgKzEzMzksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUAog
ICAgIAogICAgIGlmICh0eXBlID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICBkb3VibGUq
IGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7
Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGZpcnN0QnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBmaXJzdEFycmF5U2l6ZSk7Ci0gICAgICAgIG1l
bWNweShidWZmZXIgKyBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBzZWNvbmRBcnJheVNpemUpOworICAg
ICAgICBmYXN0Q29weShidWZmZXIsIGZpcnN0QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCku
ZGF0YSgpLCBmaXJzdEFycmF5U2l6ZSk7CisgICAgICAgIGZhc3RDb3B5KGJ1ZmZlciArIGZpcnN0
QXJyYXlTaXplLCBzZWNvbmRCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNl
Y29uZEFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlICE9IEFycmF5V2l0aFVuZGVjaWRl
ZCkgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJ1ZmZlciA9IHJlc3VsdC0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CiAgICAgICAgIAogICAgICAgICBhdXRvIGNv
cHkgPSBbJl0gKHVuc2lnbmVkIG9mZnNldCwgdm9pZCogc291cmNlLCB1bnNpZ25lZCBzaXplLCBJ
bmRleGluZ1R5cGUgdHlwZSkgewogICAgICAgICAgICAgaWYgKHR5cGUgIT0gQXJyYXlXaXRoVW5k
ZWNpZGVkKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciArIG9mZnNldCwgc291cmNl
LCBzaXplb2YoSlNWYWx1ZSkgKiBzaXplKTsKKyAgICAgICAgICAgICAgICBmYXN0Q29weShidWZm
ZXIgKyBvZmZzZXQsIHN0YXRpY19jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KHNvdXJjZSks
IHNpemUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZTsgaS0tOykKLSAgICAgICAg
ICAgICAgICBidWZmZXJbaSArIG9mZnNldF0uY2xlYXIoKTsKKyAgICAgICAgICAgIGNsZWFyQXJy
YXkoYnVmZmVyICsgb2Zmc2V0LCBzaXplKTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAg
IGNvcHkoMCwgZmlyc3RCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGZpcnN0QXJyYXlT
aXplLCBmaXJzdFR5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTMsNyArOTMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnRyeUNyZWF0ZShWCiAg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICAqcmVzdWx0
LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7Ci0gICAgbWVtc2V0KHJlc3VsdC0+
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LCAwLCBwcm9wZXJ0eUNhcGFjaXR5
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZmFzdFplcm9GaWxsKHJlc3VsdC0+cHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjksMTQgKzEyOSwxMyBAQCBpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3JvCiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9
IHN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIoaW50ZW5kZWRPd25lcik7CiAgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAogICAgICAgICB2bSwgaW50ZW5kZWRP
d25lciwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgbWVtY3B5KAorICAgIGZhc3RDb3B5
Qnl0ZXMoCiAgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAogICAgICAgICBvbGRCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJv
cGVydHlDYXBhY2l0eSwKICAgICAgICAgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOwotICAgIG1l
bXNldCgKKyAgICBmYXN0WmVyb0ZpbGwoCiAgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdl
KCkgLSBuZXdQcm9wZXJ0eUNhcGFjaXR5LAotICAgICAgICAwLAotICAgICAgICAobmV3UHJvcGVy
dHlDYXBhY2l0eSAtIG9sZFByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CisgICAgICAgIG5ld1Byb3BlcnR5Q2FwYWNpdHkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjgsOCArMTY3LDcgQEAgaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIG5ld1NpemUs
IG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFu
ZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBGSVhNRTogVGhpcyBwcm9i
YWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCi0gICAgbWVtY3B5KG5ld0Jhc2UsIHRoZUJhc2Us
IG9sZFNpemUpOworICAgIGZhc3RDb3B5Qnl0ZXMobmV3QmFzZSwgdGhlQmFzZSwgb2xkU2l6ZSk7
CiAgICAgcmV0dXJuIGZyb21CYXNlKG5ld0Jhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogfQog
CkBAIC0xOTksNyArMTk3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVB
cnJheQogICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCiAgICAgICAgIHRvdGFsU2l6ZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpLAogICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7Ci0gICAg
bWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICBmYXN0Q29weUJ5dGVzKHRvLCBmcm9tLCBzaXpl
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
CShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIs
NyBAQCBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiBHCiAgICAgY29uc3Qg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiByZXN1bHQgPSBjcmVhdGUobGVuZ3RoKTsKLSAg
ICBtZW1jcHkocmVzdWx0LT5kYXRhKCksIGFycmF5LCBsZW5ndGggKiBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSkpOworICAgIGZhc3RDb3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVu
Z3RoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw5ICs1
NTMsOSBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShFeGVjU3RhdGUqIGV4CiAgICAgICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKS5hdCh0aGlzLCBpKS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICBtZW1jcHkoYnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBvdGhlckFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJMZW5n
dGgpOworICAgICAgICBmYXN0Q29weShidXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRh
dGEoKSArIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpLCBvdGhlckxlbmd0aCk7CiAgICAgZWxzZQotICAgICAgICBtZW1jcHkoYnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBvdGhlckFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJM
ZW5ndGgpOworICAgICAgICBmYXN0Q29weShidXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0
YSgpLCBvdGhlckxlbmd0aCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTc2MSw5ICs3NjEs
OSBAQCBKU0FycmF5KiBKU0FycmF5OjpmYXN0U2xpY2UoRXhlY1N0YXRlJiBlCiAKICAgICAgICAg
YXV0byYgcmVzdWx0QnV0dGVyZmx5ID0gKnJlc3VsdEFycmF5LT5idXR0ZXJmbHkoKTsKICAgICAg
ICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheVdpdGhEb3VibGUpCi0gICAgICAgICAgICBtZW1jcHko
cmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5j
b250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICog
Y291bnQpOworICAgICAgICAgICAgZmFzdENvcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsg
c3RhcnRJbmRleCwgY291bnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1jcHkocmVz
dWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
KCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAg
ICAgICAgZmFzdENvcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRl
cmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgY291bnQpOwogICAgICAg
ICByZXN1bHRCdXR0ZXJmbHkuc2V0UHVibGljTGVuZ3RoKGNvdW50KTsKIAogICAgICAgICByZXR1
cm4gcmVzdWx0QXJyYXk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRl
eHQ6OgogICAgIGlmICghbV92ZWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobW9kZSA9
PSBaZXJvRmlsbCkKLSAgICAgICAgbWVtc2V0KG1fdmVjdG9yLmdldCgpLCAwLCBzaXplKTsKKyAg
ICAgICAgZmFzdFplcm9GaWxsQnl0ZXMobV92ZWN0b3IuZ2V0KCksIHNpemUpOwogICAgIAogICAg
IHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpICogZWxlbWVudFNpemUpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYs
NyArMjQ2LDcgQEAgYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cwogCiAg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKHZtKTsKICAgICBpZiAo
Y2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUpIHsKLSAgICAg
ICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3Jl
IHRoZSBzYW1lIHR5cGUuCisgICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNhc2U6IHdlIGNhbiBq
dXN0IG1lbW1vdmUgc2luY2Ugd2UncmUgdGhlIHNhbWUgdHlwZS4KICAgICAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIG90aGVyID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
b2JqZWN0KTsKICAgICAgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3Ro
KCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3OCwxMCArMTE3OCwxMCBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0CiAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCiAgICAgICAgIHZt
LCB0aGlzLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bmVlZGVkTGVuZ3RoKSk7CiAgICAgCi0gICAgbWVtY3B5KAorICAgIGZhc3RDb3B5KAogICAgICAg
ICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAogICAgICAg
ICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCi0gICAgICAg
IHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICBwcm9wZXJ0
eVNpemUpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKG5lZWRl
ZExlbmd0aCk7CkBAIC0zNTgwLDcgKzM1ODAsNyBAQCB2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRl
cmZseUFmdGVyRmxhdHRlCiAgICAgdm9pZCogY3VycmVudEJhc2UgPSBvbGRCdXR0ZXJmbHktPmJh
c2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAgICAgdm9pZCogbmV3QmFzZSA9IG5ld0J1
dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAotICAgIG1lbWNweShu
ZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2Fw
YWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSk7CisgICAgZmFzdENvcHlCeXRlcyhuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CiAgICAgCiAgICAgc2V0QnV0dGVyZmx5KHZtLCBu
ZXdCdXR0ZXJmbHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3
ICs3NCw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBjb24KIHsKICAg
ICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwogCi0gICAgbWVtY3B5KG1faW5kZXgs
IG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOworICAgIGZhc3RDb3B5Qnl0ZXMobV9pbmRleCwg
b3RoZXIubV9pbmRleCwgZGF0YVNpemUoKSk7CiAKICAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5l
bmQoKTsKICAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKQpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDkgQEAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDEsNyArNDMsNyBAQCB2b2lkIEJp
dFZlY3Rvcjo6c2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImCiAgICAgICAgIG5ld0JpdHNPclBvaW50
ZXIgPSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CiAgICAgZWxzZSB7CiAgICAgICAgIE91dE9mTGlu
ZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6
ZSgpKTsKLSAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0
cygpLCBieXRlQ291bnQob3RoZXIuc2l6ZSgpKSk7CisgICAgICAgIGZhc3RDb3B5KG5ld091dE9m
TGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCB3b3JkQ291bnQob3RoZXIuc2l6ZSgpKSk7
CiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdP
dXRPZkxpbmVCaXRzKSA+PiAxOwogICAgIH0KICAgICBpZiAoIWlzSW5saW5lKCkgJiYgIWlzRW1w
dHlPckRlbGV0ZWRWYWx1ZSgpKQpAQCAtNjksNyArNzEsNyBAQCB2b2lkIEJpdFZlY3Rvcjo6Y2xl
YXJBbGwoKQogICAgIGlmIChpc0lubGluZSgpKQogICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBt
YWtlSW5saW5lQml0cygwKTsKICAgICBlbHNlCi0gICAgICAgIG1lbXNldChvdXRPZkxpbmVCaXRz
KCktPmJpdHMoKSwgMCwgYnl0ZUNvdW50KHNpemUoKSkpOworICAgICAgICBmYXN0WmVyb0ZpbGwo
b3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIHdvcmRDb3VudChzaXplKCkpKTsKIH0KIAogQml0VmVj
dG9yOjpPdXRPZkxpbmVCaXRzKiBCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZShzaXpl
X3QgbnVtQml0cykKQEAgLTkzLDE0ICs5NSwxNCBAQCB2b2lkIEJpdFZlY3Rvcjo6cmVzaXplT3V0
T2ZMaW5lKHNpemVfdCBuCiAgICAgaWYgKGlzSW5saW5lKCkpIHsKICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgYWxsIG9mIHRoZSBiaXRzIGFyZSB6ZXJvIGluIGNhc2Ugd2UgZG8gYSBuby1vcCBy
ZXNpemUuCiAgICAgICAgICpuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgPSBtX2JpdHNPclBvaW50
ZXIgJiB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKLSAg
ICAgICAgbWVtc2V0KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSArIDEsIDAsIChuZXdOdW1Xb3Jk
cyAtIDEpICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgIGZhc3RaZXJvRmlsbChuZXdPdXRPZkxp
bmVCaXRzLT5iaXRzKCkgKyAxLCBuZXdOdW1Xb3JkcyAtIDEpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChudW1CaXRzID4gc2l6ZSgpKSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xkTnVtV29y
ZHMgPSBvdXRPZkxpbmVCaXRzKCktPm51bVdvcmRzKCk7Ci0gICAgICAgICAgICBtZW1jcHkobmV3
T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgb2xkTnVtV29y
ZHMgKiBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgICAgIG1lbXNldChuZXdPdXRPZkxpbmVCaXRz
LT5iaXRzKCkgKyBvbGROdW1Xb3JkcywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMpICog
c2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICBmYXN0Q29weShuZXdPdXRPZkxpbmVCaXRzLT5i
aXRzKCksIG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBvbGROdW1Xb3Jkcyk7CisgICAgICAgICAg
ICBmYXN0WmVyb0ZpbGwobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpICsgb2xkTnVtV29yZHMsIG5l
d051bVdvcmRzIC0gb2xkTnVtV29yZHMpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1l
bWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBu
ZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3JkcygpICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAg
ICBmYXN0Q29weShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJpdHMoKS0+Yml0
cygpLCBuZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3JkcygpKTsKICAgICAgICAgT3V0T2ZMaW5lQml0
czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwogICAgIH0KICAgICBtX2JpdHNPclBvaW50ZXIg
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAxOwpJbmRleDog
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDExIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiAoYml0Q291bnQgKyA3KSA+PiAzOwogICAgIH0KIAorICAgIHN0YXRpYyBzaXplX3Qg
d29yZENvdW50KHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChiaXRzICsg
Yml0c0luUG9pbnRlcigpIC0gMSkgLyBiaXRzSW5Qb2ludGVyKCk7CisgICAgfQorICAgIAogICAg
IHN0YXRpYyB1aW50cHRyX3QgbWFrZUlubGluZUJpdHModWludHB0cl90IGJpdHMpCiAgICAgewog
ICAgICAgICBBU1NFUlQoIShiaXRzICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4
SW5saW5lQml0cygpKSkpOwpAQCAtNDE4LDcgKzQyMyw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3Mg
T3V0T2ZMaW5lQml0cyB7CiAgICAgcHVibGljOgogICAgICAgICBzaXplX3QgbnVtQml0cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQotICAgICAgICBzaXplX3QgbnVtV29yZHMoKSBjb25z
dCB7IHJldHVybiAobV9udW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgLyBiaXRzSW5Qb2lu
dGVyKCk7IH0KKyAgICAgICAgc2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1cm4gd29yZENv
dW50KG1fbnVtQml0cyk7IH0KICAgICAgICAgdWludHB0cl90KiBiaXRzKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsgfQogICAgICAgICBjb25zdCB1aW50cHRy
X3QqIGJpdHMoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4o
dGhpcyArIDEpOyB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAko
cmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RDb3B5Lmg+CiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQXJyYXkqIG5l
d0FycmF5ID0gY3JlYXRlQXJyYXkobmV3U2l6ZSk7CiAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVz
IHRvIGRvIENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+LgogICAgICAgICBpZiAo
YXJyYXkpCi0gICAgICAgICAgICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFycmF5LT5kYXRhLCBz
aXplb2YoVCkgKiBhcnJheS0+c2l6ZSk7CisgICAgICAgICAgICBmYXN0Q29weShuZXdBcnJheS0+
ZGF0YSwgYXJyYXktPmRhdGEsIGFycmF5LT5zaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGFycmF5ID8gYXJyYXktPnNpemUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICAgICAg
bmV3IChuZXdBcnJheS0+ZGF0YSArIGkpIFQoKTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNv
dXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw3ICsyNyw5IEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtOTUsNyArOTcsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChhcnJheUxlbmd0aCgpICE9IG90aGVyLmFycmF5TGVuZ3Ro
KCkpCiAgICAgICAgICAgICBzZXRFcXVhbHNTbG93KG90aGVyKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBtZW1jcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAq
IHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgZmFzdENvcHkobV93b3Jkcywgb3RoZXIu
bV93b3JkcywgYXJyYXlMZW5ndGgoKSk7CiAgICAgICAgICAgICBtX251bUJpdHMgPSBvdGhlci5t
X251bUJpdHM7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTE1LDEzICsx
MTcsMTMgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYXJBbGwoKQogICAgIHsKLSAgICAg
ICAgbWVtc2V0KG1fd29yZHMsIDAsIGFycmF5TGVuZ3RoKCkgKiBzaXplb2YodWludDMyX3QpKTsK
KyAgICAgICAgZmFzdFplcm9GaWxsKG1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldChjb25zdCBGYXN0Qml0VmVjdG9yV29yZE93bmVyJiBvdGhlcikKICAg
ICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fbnVtQml0cyA9
PSBvdGhlci5tX251bUJpdHMpOwotICAgICAgICBtZW1jcHkobV93b3Jkcywgb3RoZXIubV93b3Jk
cywgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBmYXN0Q29weSht
X3dvcmRzLCBvdGhlci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAg
c2l6ZV90IG51bUJpdHMoKSBjb25zdApJbmRleDogU291cmNlL1dURi93dGYvRmFzdENvcHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Q29weS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XVEYvd3RmL0Zhc3RDb3B5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBmYXN0Q29weShUKiBkc3QsIGNvbnN0IFQq
IHNyYywgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCisgICAgdWludDY0X3QgdG1wID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5n
dGggKiBzaXplb2YoVCk7CisgICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkp
IHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4
XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVy
Y3hcblx0IgorICAgICAgICAgICAgInJlcCBtb3ZzcVxuXHQiCisgICAgICAgICAgICAiam1wIDJm
XG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAoJSVyc2ksICUl
cmN4KSwgJSVyYXhcblx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gp
XG5cdCIKKyAgICAgICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hc
blx0IgorICAgICAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAg
ICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQor
ICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMy
X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwg
JSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQy
LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIG1vdnNsXG5cdCIKKyAgICAgICAgICAgICJq
bXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJz
aSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAl
JXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAl
JXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQt
OCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRx
ICQ0LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwg
KCUlcnNpLCAlJXJjeCksICUlZWF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVy
ZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImphZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAi
K0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAg
OgorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAg
ICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQi
CisgICAgICAgICAgICAicmVwIG1vdnN3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0Igor
ICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAl
JXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0Igor
ICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisg
ICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0
IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ2LCAlJXJjeFxu
XHQiCisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdncgKCUlcnNpLCAlJXJj
eCksICUlYXhcblx0IgorICAgICAgICAgICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0
IgorICAgICAgICAgICAgInN1YnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJc
blx0IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK1Mi
KHNyYyksICIrYyIoY291bnQpLCAiK2EiKHRtcCkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAg
IDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
YXNtIHZvbGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAi
amIgMWZcblx0IgorICAgICAgICAicmVwIG1vdnNiXG5cdCIKKyAgICAgICAgImptcCAyZlxuXHQi
CisgICAgICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxu
XHQiCisgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIx
OlxuXHQiCisgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0
IgorICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAg
ICAgICAgImFkZHEgJDcsICUlcmN4XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1v
dmIgKCUlcnNpLCAlJXJjeCksICUlYWxcblx0IgorICAgICAgICAibW92YiAlJWFsLCAoJSVyZGks
ICUlcmN4KVxuXHQiCisgICAgICAgICJzdWJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUg
NGJcblx0IgorICAgICAgICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMp
LCAiK2MiKGNvdW50KSwgIithIih0bXApCisgICAgICAgIDoKKyAgICAgICAgOiAibWVtb3J5Igor
ICAgICAgICApOworI2Vsc2UKKyAgICBtZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCAqIHNpemVvZihU
KSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgZmFzdENvcHlCeXRlcyh2b2lkKiBkc3QsIGNv
bnN0IHZvaWQqIHNyYywgc2l6ZV90IGJ5dGVzKQoreworICAgIGZhc3RDb3B5KHN0YXRpY19jYXN0
PGNoYXIqPihkc3QpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3JjKSwgYnl0ZXMpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpmYXN0Q29weTsKK3VzaW5nIFdURjo6
ZmFzdENvcHlCeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICog
YXJlIG1ldDoKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENv
cHkuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFplcm9GaWxsLmg+CiAKICNpZiBPUyhXSU5ET1dTKQog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTc4LDcgKzgwLDcgQEAgdm9pZCBmYXN0U2V0TWF4U2lu
Z2xlQWxsb2NhdGlvblNpemUoc2l6ZQogdm9pZCogZmFzdFplcm9lZE1hbGxvYyhzaXplX3Qgbikg
CiB7CiAgICAgdm9pZCogcmVzdWx0ID0gZmFzdE1hbGxvYyhuKTsKLSAgICBtZW1zZXQocmVzdWx0
LCAwLCBuKTsKKyAgICBmYXN0WmVyb0ZpbGwoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCksIG4p
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg2LDcgKzg4LDcgQEAgY2hhciogZmFzdFN0
ckR1cChjb25zdCBjaGFyKiBzcmMpCiB7CiAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzcmMpICsg
MTsKICAgICBjaGFyKiBkdXAgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhsZW4pKTsK
LSAgICBtZW1jcHkoZHVwLCBzcmMsIGxlbik7CisgICAgZmFzdENvcHkoZHVwLCBzcmMsIGxlbik7
CiAgICAgcmV0dXJuIGR1cDsKIH0KIApAQCAtOTUsNyArOTcsNyBAQCBUcnlNYWxsb2NSZXR1cm5W
YWx1ZSB0cnlGYXN0WmVyb2VkTWFsbG9jCiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmICghdHJ5
RmFzdE1hbGxvYyhuKS5nZXRWYWx1ZShyZXN1bHQpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBt
ZW1zZXQocmVzdWx0LCAwLCBuKTsKKyAgICBmYXN0WmVyb0ZpbGwoc3RhdGljX2Nhc3Q8Y2hhcio+
KHJlc3VsdCksIG4pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0Zhc3RaZXJvRmlsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJv
RmlsbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv
aWQgZmFzdFplcm9GaWxsKFQqIGRzdCwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBDUFUoWDg2XzY0
KSAmJiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisgICAgdWludDY0X3QgemVybyA9IDA7CisgICAg
c2l6ZV90IGNvdW50ID0gbGVuZ3RoICogc2l6ZW9mKFQpOworICAgIGlmICghKHNpemVvZihUKSAl
IHNpemVvZih1aW50NjRfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAg
ICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0IgorICAgICAg
ICAgICAgInNocnEgJDMsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgc3Rvc3Fcblx0Igor
ICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAgICAgICAg
ICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICIxOlxuXHQi
CisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSAzYlxu
XHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrYyIo
Y291bnQpCisgICAgICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAibWVtb3J5Igor
ICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2Yo
VCkgJSBzaXplb2YodWludDMyX3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAg
ICAgICAgICAgICJzaHJxICQyLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIHN0b3NsXG5c
dCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAg
ICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAiMTpc
blx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUg
M2Jcblx0IgorICAgICAgICAgICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
amUgMmZcblx0IgorICAgICAgICAgICAgImFkZHEgJDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAg
ICI0OlxuXHQiCisgICAgICAgICAgICAibW92bCAlJWVheCwgKCUlcmRpLCAlJXJjeClcblx0Igor
ICAgICAgICAgICAgInN1YnEgJDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0
IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNv
dW50KQorICAgICAgICAgICAgOiAiYSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAg
ICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCEoc2l6ZW9mKFQp
ICUgc2l6ZW9mKHVpbnQxNl90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAg
ICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAg
ICAgICAgICAic2hycSAkMSwgJSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBzdG9zd1xuXHQi
CisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAg
ICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5c
dCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNi
XG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpl
IDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
NDpcblx0IgorICAgICAgICAgICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAg
ICAgICAgICAgInN1YnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0Igor
ICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50
KQorICAgICAgICAgICAgOiAiYSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAg
ICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAg
ICAicmVwIHN0b3NiXG5cdCIKKyAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQi
CisgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxu
XHQiCisgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0Igor
ICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAg
ICAgImFkZHEgJDcsICUlcmN4XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIg
JSVhbCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAic3ViICQxLCAlJXJjeFxuXHQiCisg
ICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0
KSwgIitjIihjb3VudCkKKyAgICAgICAgOiAiYSIoemVybykKKyAgICAgICAgOiAibWVtb3J5Igor
ICAgICAgICApOworI2Vsc2UKKyAgICBtZW1zZXQoZHN0LCAwLCBsZW5ndGggKiBzaXplb2YoVCkp
OworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIGZhc3RaZXJvRmlsbEJ5dGVzKHZvaWQqIGRzdCwg
c2l6ZV90IGJ5dGVzKQoreworICAgIGZhc3RaZXJvRmlsbChzdGF0aWNfY2FzdDxjaGFyKj4oZHN0
KSwgYnl0ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpmYXN0WmVy
b0ZpbGw7Cit1c2luZyBXVEY6OmZhc3RaZXJvRmlsbEJ5dGVzOwpJbmRleDogU291cmNlL1dURi93
dGYvTUQ1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCShyZXZpc2lv
biAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogLy8gTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAwNiBHb29nbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQpJbmRleDogU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RG
L3d0Zi9PU0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUg
T1NBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9GYXN0
Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC05
MCw3ICs5MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogT1NBbGxvY2F0b3I6
OnJlYWxsb2NhdGVDb21taXR0ZWQoVCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQogewog
ICAgIHZvaWQqIG5ld0Jhc2UgPSByZXNlcnZlQW5kQ29tbWl0KG5ld1NpemUsIHVzYWdlLCB3cml0
YWJsZSwgZXhlY3V0YWJsZSk7Ci0gICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIHN0ZDo6bWlu
KG9sZFNpemUsIG5ld1NpemUpKTsKKyAgICBmYXN0Q29weUJ5dGVzKG5ld0Jhc2UsIG9sZEJhc2Us
IHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUpKTsKICAgICBkZWNvbW1pdEFuZFJlbGVhc2Uob2xk
QmFzZSwgb2xkU2l6ZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihuZXdCYXNlKTsKIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDIyODIxNykK
KysrIFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTExOSw3ICsxMjAsNyBAQCB2b2lkIFN0cmluZ1ByaW50
U3RyZWFtOjppbmNyZWFzZVNpemUoc2l6CiAgICAgLy8gZmFzdFJlYWxsb2Mgd2lsbCBqdXN0IGRv
IG1hbGxvYytmcmVlIGFueXdheS4gQWxzbywgdGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIHNpbmNl
CiAgICAgLy8gd2UgY2FuJ3QgcmVhbGxvYyB0aGUgaW5saW5lIGJ1ZmZlci4KICAgICBjaGFyKiBu
ZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtX3NpemUpKTsKLSAgICBt
ZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9uZXh0ICsgMSk7CisgICAgZmFzdENvcHkobmV3
QnVmZmVyLCBtX2J1ZmZlciwgbV9uZXh0ICsgMSk7CiAgICAgaWYgKG1fYnVmZmVyICE9IG1faW5s
aW5lQnVmZmVyKQogICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CiAgICAgbV9idWZmZXIgPSBu
ZXdCdWZmZXI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93
dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlIDx0
eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJp
dGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CkBAIC04Niw3ICs4OCw3IEBAIHN0cnVjdCBWZWN0b3JJbml0aWFsaXplcjx0cnVl
LCB0cnVlLCBUPgogewogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVCogYmVnaW4sIFQqIGVu
ZCkgCiAgICAgewotICAgICAgICBtZW1zZXQoYmVnaW4sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGVuZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihiZWdpbikpOworICAgICAgICBmYXN0
WmVyb0ZpbGwoYmVnaW4sIGVuZCAtIGJlZ2luKTsKICAgICB9CiB9OwogCkBAIC0xMjYsNyArMTI4
LDcgQEAgc3RydWN0IFZlY3Rvck1vdmVyPHRydWUsIFQ+CiB7CiAgICAgc3RhdGljIHZvaWQgbW92
ZShjb25zdCBUKiBzcmMsIGNvbnN0IFQqIHNyY0VuZCwgVCogZHN0KSAKICAgICB7Ci0gICAgICAg
IG1lbWNweShkc3QsIHNyYywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3JjRW5kKSAt
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNyYykpOworICAgICAgICBmYXN0Q29weShk
c3QsIHNyYywgc3JjRW5kIC0gc3JjKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgbW92ZU92ZXJs
YXBwaW5nKGNvbnN0IFQqIHNyYywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpIAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5j
cHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnREZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIERl
Y29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50CiAgICAgaWYgKCFidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1j
cHkoZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CisgICAgZmFzdENvcHkoZGF0YSwgbV9i
dWZmZXJQb3NpdGlvbiwgc2l6ZSk7CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCiAg
ICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIu
Y3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJz
aXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29ucwogICAgIHVwZGF0ZUNoZWNrc3VtRm9y
RGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOwogCiAgICAgdWludDhfdCogYnVmZmVyID0gZ3Jvdyhz
aXplKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICBmYXN0Q29weShidWZm
ZXIsIGRhdGEsIHNpemUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0NTdHJpbmcuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0NTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkNTdHJpbmcuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
Q29weS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIHZvaWQgQ1N0cmluZzo6
aW5pdChjb25zdCBjaGFyKiBzdHIsIHNpemUKICAgICBBU1NFUlQoc3RyKTsKIAogICAgIG1fYnVm
ZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgIG1l
bWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKKyAgICBmYXN0Q29w
eShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKICAgICBtX2J1ZmZlci0+
bXV0YWJsZURhdGEoKVtsZW5ndGhdID0gJ1wwJzsKIH0KIApAQCAtOTYsNyArOTcsNyBAQCB2b2lk
IENTdHJpbmc6OmNvcHlCdWZmZXJJZk5lZWRlZCgpCiAgICAgUmVmUHRyPENTdHJpbmdCdWZmZXI+
IGJ1ZmZlciA9IFdURk1vdmUobV9idWZmZXIpOwogICAgIHNpemVfdCBsZW5ndGggPSBidWZmZXIt
Pmxlbmd0aCgpOwogICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFs
aXplZChsZW5ndGgpOwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgYnVmZmVy
LT5kYXRhKCksIGxlbmd0aCArIDEpOworICAgIGZhc3RDb3B5KG1fYnVmZmVyLT5tdXRhYmxlRGF0
YSgpLCBidWZmZXItPmRhdGEoKSwgbGVuZ3RoICsgMSk7CiB9CiAKIGJvb2wgQ1N0cmluZzo6aXNT
YWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAkocmV2aXNpb24gMjI4MjE3KQorKysg
U291cmNlL1dURi93dGYvdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0WmVyb0Zp
bGwuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgpAQCAtNTEsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmICghdXRmOExvY2FsZS5sZW5ndGgoKSkKICAgICAgICAgICAg
IHJldHVybiBsb2NhbGU7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBzY3JhdGNoQnVmZmVyKHV0ZjhM
b2NhbGUubGVuZ3RoKCkgKyAxMSwgMCk7Ci0gICAgICAgIG1lbWNweShzY3JhdGNoQnVmZmVyLmRh
dGEoKSwgdXRmOExvY2FsZS5kYXRhKCksIHV0ZjhMb2NhbGUubGVuZ3RoKCkpOworICAgICAgICBm
YXN0Q29weShzY3JhdGNoQnVmZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5kYXRhKCksIHV0ZjhMb2Nh
bGUubGVuZ3RoKCkpOwogCiAgICAgICAgIGNvbnN0IGNoYXIqIGtleXdvcmRWYWx1ZSA9IG51bGxw
dHI7CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewpAQCAtNzUsNyArNzcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChzY3JhdGNoQnVmZmVyLmRh
dGEoKSwgbGVuZ3RoTmVlZGVkKTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVS
RkxPV19FUlJPUikgewogICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlci5ncm93KGxlbmd0aE5lZWRl
ZCArIDEpOwotICAgICAgICAgICAgbWVtc2V0KHNjcmF0Y2hCdWZmZXIuZGF0YSgpICsgdXRmOExv
Y2FsZS5sZW5ndGgoKSwgMCwgc2NyYXRjaEJ1ZmZlci5zaXplKCkgLSB1dGY4TG9jYWxlLmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIGZhc3RaZXJvRmlsbChzY3JhdGNoQnVmZmVyLmRhdGEoKSArIHV0
ZjhMb2NhbGUubGVuZ3RoKCksIHNjcmF0Y2hCdWZmZXIuc2l6ZSgpIC0gdXRmOExvY2FsZS5sZW5n
dGgoKSk7CiAgICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgICAgICBp
bnQzMl90IGxlbmd0aE5lZWRlZDIgPSB1bG9jX3NldEtleXdvcmRWYWx1ZSgibGIiLCBrZXl3b3Jk
VmFsdWUsIHNjcmF0Y2hCdWZmZXIuZGF0YSgpLCBzY3JhdGNoQnVmZmVyLnNpemUoKSwgJnN0YXR1
cyk7CiAgICAgICAgICAgICBpZiAoIVVfU1VDQ0VTUyhzdGF0dXMpIHx8IGxlbmd0aE5lZWRlZCAh
PSBsZW5ndGhOZWVkZWQyKQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3Bw
CShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6
YWxsb2NhdGVCdWZmZXIoY29uc3QKICAgICBBU1NFUlQobV9pczhCaXQpOwogICAgIC8vIENvcHkg
dGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQg
dG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KICAgICBhdXRvIGJ1ZmZlciA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFj
dGVyczgpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50Q2hhcmFjdGVy
cywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsgLy8gVGhp
cyBjYW4ndCBvdmVyZmxvdy4KKyAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJy
ZW50Q2hhcmFjdGVycywgbV9sZW5ndGgpOwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRl
ciBzdGF0ZS4KICAgICBtX2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKQEAgLTExNCw3ICsxMTQs
NyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAgICAgQVNTRVJU
KCFtX2lzOEJpdCk7CiAgICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1
ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRh
LgogICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1
aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIG1lbWNweShtX2J1ZmZlckNo
YXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5n
dGgpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCisgICAgZmFzdENv
cHkobV9idWZmZXJDaGFyYWN0ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aCk7CiAg
ICAgCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gV1RG
TW92ZShidWZmZXIpOwpAQCAtMjc2LDEwICsyNzYsMTAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjph
cHBlbmQoY29uc3QgVUNoYXIqIAogICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQo
bV9zdHJpbmcuaXNOdWxsKCkgPyAwIDogbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgZXhwYW5kZWRD
YXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVyczE2ICsgbV9sZW5ndGgsIGNoYXJhY3RlcnMsIHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBmYXN0
Q29weShtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
OwogICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwogICAgIH0gZWxzZQotICAgICAg
ICBtZW1jcHkoYXBwZW5kVW5pbml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKSwgY2hhcmFjdGVycywg
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGZh
c3RDb3B5KGFwcGVuZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCksIGNoYXJhY3RlcnMsIGxl
bmd0aCk7CiAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CiB9CiAK
QEAgLTI5MSwxMyArMjkxLDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgTENo
YXIqIAogCiAgICAgaWYgKG1faXM4Qml0KSB7CiAgICAgICAgIExDaGFyKiBkZXN0ID0gYXBwZW5k
VW5pbml0aWFsaXplZDxMQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDgpCi0g
ICAgICAgICAgICBtZW1jcHkoZGVzdCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29u
c3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgICAgICAgICB3aGlsZSAo
Y2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKGNoYXJhY3Rl
cnMrKyk7Ci0gICAgICAgIH0KKyAgICAgICAgZmFzdENvcHkoZGVzdCwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKICAgICB9IGVsc2UgewogICAgICAgICBVQ2hhciogZGVzdCA9IGFwcGVuZFVuaW5pdGlh
bGl6ZWQ8VUNoYXI+KGxlbmd0aCk7CiAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0
ZXJzICsgbGVuZ3RoOwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUu
aAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cmluZ0Nv
bmNhdGVuYXRlX2gKIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29w
eS5oPgogCiAjaWZuZGVmIEF0b21pY1N0cmluZ19oCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CkBAIC0xNTcsNyArMTU4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cml0ZVRv
KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5h
dGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBm
YXN0Q29weShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hh
cikpOwogICAgIH0KIAogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZyhtX2NoYXJhY3RlcnMsIG1fbGVuZ3RoKTsgfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2LDcgKzEwNjYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBpbmxpbmUgCiAgICAgICAgICpkZXN0aW5hdGlvbiA9ICpzb3VyY2U7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51
bUNoYXJhY3RlcnMgKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpOworICAgIGZhc3RDb3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG51bUNoYXJhY3RlcnMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBMQ2hh
ciogc291cmNlLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKQpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9pY3UvVVRleHRQcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
dGV4dC9pY3UvVVRleHRQcm92aWRlci5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9X
VEYvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RDb3B5Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC01NSwxMCAr
NTYsMTAgQEAgVVRleHQqIHVUZXh0Q2xvbmVJbXBsKFVUZXh0KiBkZXN0aW5hdGlvbgogICAgIHZv
aWQqIGV4dHJhTmV3ID0gZGVzdGluYXRpb24tPnBFeHRyYTsKICAgICBpbnQzMl90IGZsYWdzID0g
ZGVzdGluYXRpb24tPmZsYWdzOwogICAgIGludCBzaXplVG9Db3B5ID0gc3RkOjptaW4oc291cmNl
LT5zaXplT2ZTdHJ1Y3QsIGRlc3RpbmF0aW9uLT5zaXplT2ZTdHJ1Y3QpOwotICAgIG1lbWNweShk
ZXN0aW5hdGlvbiwgc291cmNlLCBzaXplVG9Db3B5KTsKKyAgICBmYXN0Q29weUJ5dGVzKGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHNpemVUb0NvcHkpOwogICAgIGRlc3RpbmF0aW9uLT5wRXh0cmEgPSBl
eHRyYU5ldzsKICAgICBkZXN0aW5hdGlvbi0+ZmxhZ3MgPSBmbGFnczsKLSAgICBtZW1jcHkoZGVz
dGluYXRpb24tPnBFeHRyYSwgc291cmNlLT5wRXh0cmEsIGV4dHJhU2l6ZSk7CisgICAgZmFzdENv
cHlCeXRlcyhkZXN0aW5hdGlvbi0+cEV4dHJhLCBzb3VyY2UtPnBFeHRyYSwgZXh0cmFTaXplKTsK
ICAgICBmaXhQb2ludGVyKHNvdXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5jb250ZXh0
KTsKICAgICBmaXhQb2ludGVyKHNvdXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5wKTsK
ICAgICBmaXhQb2ludGVyKHNvdXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5xKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3Bw
CShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3Zp
ZGVyTGF0aW4xLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlVUZXh0UHJvdmlkZXJMYXRpbjEuaCIKIAogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXIuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdFplcm9GaWxsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1w
bC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTgyLDcgKzgzLDcgQEAgc3RhdGljIFVUZXh0KiB1
VGV4dExhdGluMUNsb25lKFVUZXh0KiBkZQogICAgIHJlc3VsdC0+YSA9IHNvdXJjZS0+YTsKICAg
ICByZXN1bHQtPnBGdW5jcyA9ICZ1VGV4dExhdGluMUZ1bmNzOwogICAgIHJlc3VsdC0+Y2h1bmtD
b250ZW50cyA9IChVQ2hhciopcmVzdWx0LT5wRXh0cmE7Ci0gICAgbWVtc2V0KGNvbnN0X2Nhc3Q8
VUNoYXIqPihyZXN1bHQtPmNodW5rQ29udGVudHMpLCAwLCBzaXplb2YoVUNoYXIpICogVVRleHRX
aXRoQnVmZmVySW5saW5lQ2FwYWNpdHkpOworICAgIGZhc3RaZXJvRmlsbChjb25zdF9jYXN0PFVD
aGFyKj4ocmVzdWx0LT5jaHVua0NvbnRlbnRzKSwgVVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNp
dHkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIyOCw3ICsyMjksNyBAQCBVVGV4dCog
b3BlbkxhdGluMVVUZXh0UHJvdmlkZXIoVVRleHRXaXRoCiAgICAgdGV4dC0+YSA9IGxlbmd0aDsK
ICAgICB0ZXh0LT5wRnVuY3MgPSAmdVRleHRMYXRpbjFGdW5jczsKICAgICB0ZXh0LT5jaHVua0Nv
bnRlbnRzID0gKFVDaGFyKil0ZXh0LT5wRXh0cmE7Ci0gICAgbWVtc2V0KGNvbnN0X2Nhc3Q8VUNo
YXIqPih0ZXh0LT5jaHVua0NvbnRlbnRzKSwgMCwgc2l6ZW9mKFVDaGFyKSAqIFVUZXh0V2l0aEJ1
ZmZlcklubGluZUNhcGFjaXR5KTsKKyAgICBmYXN0WmVyb0ZpbGwoY29uc3RfY2FzdDxVQ2hhcio+
KHRleHQtPmNodW5rQ29udGVudHMpLCBVVGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSk7CiAK
ICAgICByZXR1cm4gdGV4dDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFs
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAko
cmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIGtlcm5fcmV0dXJuX3QgY2F0Y2hfbWFj
aF9leGNlcHRpb25fcmFpc2UKICAgICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNlcHRpb24o
ZXhjZXB0aW9uVHlwZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5r
bm93bik7CiAKLSAgICBtZW1jcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNp
emVvZihpblN0YXRlWzBdKSk7CisgICAgZmFzdENvcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3Rh
dGVDb3VudCk7CiAgICAgKm91dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CiAKICNpZiBDUFUo
WDg2XzY0KQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMjgy
MTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODAsNiArMTgwLDIyMSBAQCBib29sIGZpbmRCaXRJbldvcmQoVCB3b3JkLCBzaXplX3Qm
IGluZGV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBmYXN0Q29weShUKiBkc3QsIFQqIHNyYywgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBCQ1BVKFg4
Nl82NCkKKyAgICB1aW50NjRfdCB0bXAgPSAwOworICAgIHNpemVfdCBjb3VudCA9IGxlbmd0aCAq
IHNpemVvZihUKTsKKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDY0X3QpKSkgewor
ICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0
IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQzLCAlJXJjeFxu
XHQiCisgICAgICAgICAgICAicmVwIG1vdnNxXG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0
IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gp
LCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0
IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQi
CisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAg
ICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIithIih0bXApCisgICAg
ICAgICAgICA6CisgICAgICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICAgICApOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghKHNpemVvZihUKSAlIHNpemVvZih1aW50MzJfdCkp
KSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJj
eFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAgICAgInNocnEgJDIsICUl
cmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgbW92c2xcblx0IgorICAgICAgICAgICAgImptcCAy
ZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUlcnNpLCAl
JXJjeCksICUlcmF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4
KVxuXHQiCisgICAgICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4
XG5cdCIKKyAgICAgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAgImNtcHEgJC04LCAl
JXJjeFxuXHQiCisgICAgICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAgICAgImFkZHEgJDQs
ICUlcmN4XG5cdCIKKyAgICAgICAgICAgICI0OlxuXHQiCisgICAgICAgICAgICAibW92bCAoJSVy
c2ksICUlcmN4KSwgJSVlYXhcblx0IgorICAgICAgICAgICAgIm1vdmwgJSVlYXgsICglJXJkaSwg
JSVyY3gpXG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ0LCAlJXJjeFxuXHQiCisgICAgICAgICAg
ICAiamFlIDRiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIo
ZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIithIih0bXApCisgICAgICAgICAgICA6Cisg
ICAgICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghKHNpemVvZihUKSAlIHNpemVvZih1aW50MTZfdCkpKSB7CisgICAgICAg
IGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAgICAgInNocnEgJDEsICUlcmN4XG5cdCIKKyAg
ICAgICAgICAgICJyZXAgbW92c3dcblx0IgorICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAg
ICAgICAgICAiMzpcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUlcnNpLCAlJXJjeCksICUlcmF4
XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAg
ICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAg
ICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisg
ICAgICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAgICAgImFkZHEgJDYsICUlcmN4XG5cdCIK
KyAgICAgICAgICAgICI0OlxuXHQiCisgICAgICAgICAgICAibW92dyAoJSVyc2ksICUlcmN4KSwg
JSVheFxuXHQiCisgICAgICAgICAgICAibW92dyAlJWF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisg
ICAgICAgICAgICAic3VicSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSA0YlxuXHQi
CisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3Jj
KSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAi
bWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhc20g
dm9sYXRpbGUgKAorICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICJqYiAx
ZlxuXHQiCisgICAgICAgICJyZXAgbW92c2Jcblx0IgorICAgICAgICAiam1wIDJmXG5cdCIKKyAg
ICAgICAgIjM6XG5cdCIKKyAgICAgICAgIm1vdnEgKCUlcnNpLCAlJXJjeCksICUlcmF4XG5cdCIK
KyAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgIjE6XG5c
dCIKKyAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgImphZSAzYlxuXHQiCisg
ICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAiamUgMmZcblx0IgorICAgICAg
ICAiYWRkcSAkNywgJSVyY3hcblx0IgorICAgICAgICAiNDpcblx0IgorICAgICAgICAibW92YiAo
JSVyc2ksICUlcmN4KSwgJSVhbFxuXHQiCisgICAgICAgICJtb3ZiICUlYWwsICglJXJkaSwgJSVy
Y3gpXG5cdCIKKyAgICAgICAgInN1YnEgJDEsICUlcmN4XG5cdCIKKyAgICAgICAgImphZSA0Ylxu
XHQiCisgICAgICAgICIyOlxuXHQiCisgICAgICAgIDogIitEIihkc3QpLCAiK1MiKHNyYyksICIr
YyIoY291bnQpLCAiK2EiKHRtcCkKKyAgICAgICAgOgorICAgICAgICA6ICJtZW1vcnkiCisgICAg
ICAgICk7CisjZWxzZQorICAgIG1lbWNweShkc3QsIHNyYywgbGVuZ3RoICogc2l6ZW9mKFQpKTsK
KyNlbmRpZgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBmYXN0WmVyb0ZpbGwoVCog
ZHN0LCBzaXplX3QgbGVuZ3RoKQoreworI2lmIEJDUFUoWDg2XzY0KQorICAgIHVpbnQ2NF90IHpl
cm8gPSAwOworICAgIHNpemVfdCBjb3VudCA9IGxlbmd0aCAqIHNpemVvZihUKTsKKyAgICBpZiAo
IShzaXplb2YoVCkgJSBzaXplb2YodWludDY0X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUg
KAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFm
XG5cdCIKKyAgICAgICAgICAgICJzaHJxICQzLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVw
IHN0b3NxXG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5c
dCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAg
ICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAg
ICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitE
Iihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAgOiAiYSIoemVybykKKyAgICAgICAgICAg
IDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQzMl90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0
aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJq
YiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAg
InJlcCBzdG9zbFxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIz
OlxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAg
ICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAlJXJjeFxuXHQi
CisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgJSVlYXgsICglJXJkaSwg
JSVyY3gpXG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ0LCAlJXJjeFxuXHQiCisgICAgICAgICAg
ICAiamFlIDRiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIo
ZHN0KSwgIitjIihjb3VudCkKKyAgICAgICAgICAgIDogImEiKHplcm8pCisgICAgICAgICAgICA6
ICJtZW1vcnkiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghKHNpemVvZihUKSAlIHNpemVvZih1aW50MTZfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGls
ZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIg
MWZcblx0IgorICAgICAgICAgICAgInNocnEgJDEsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJy
ZXAgc3Rvc3dcblx0IgorICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpc
blx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAg
ICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAg
ICAgICAgICAgICJqZSAyZlxuXHQiCisgICAgICAgICAgICAiYWRkcSAkNiwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgICAgICJtb3Z3ICUlYXgsICglJXJkaSwgJSVy
Y3gpXG5cdCIKKyAgICAgICAgICAgICJzdWJxICQyLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
amFlIDRiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIoZHN0
KSwgIitjIihjb3VudCkKKyAgICAgICAgICAgIDogImEiKHplcm8pCisgICAgICAgICAgICA6ICJt
ZW1vcnkiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFzbSB2
b2xhdGlsZSAoCisgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgImpiIDFm
XG5cdCIKKyAgICAgICAgInJlcCBzdG9zYlxuXHQiCisgICAgICAgICJqbXAgMmZcblx0IgorICAg
ICAgICAiMzpcblx0IgorICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0Igor
ICAgICAgICAiMTpcblx0IgorICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAi
amFlIDNiXG5cdCIKKyAgICAgICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAgICAgICJqZSAy
ZlxuXHQiCisgICAgICAgICJhZGRxICQ3LCAlJXJjeFxuXHQiCisgICAgICAgICI0OlxuXHQiCisg
ICAgICAgICJtb3ZiICUlYWwsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgInN1YiAkMSwg
JSVyY3hcblx0IgorICAgICAgICAiamFlIDRiXG5cdCIKKyAgICAgICAgIjI6XG5cdCIKKyAgICAg
ICAgOiAiK0QiKGRzdCksICIrYyIoY291bnQpCisgICAgICAgIDogImEiKHplcm8pCisgICAgICAg
IDogIm1lbW9yeSIKKyAgICAgICAgKTsKKyNlbHNlCisgICAgbWVtc2V0KGRzdCwgMCwgbGVuZ3Ro
ICogc2l6ZW9mKFQpKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNl
bmRpZiAvLyBBbGdvcml0aG1faApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCogQWxsb2NhdG9yOjpy
ZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogCiAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdGUobmV3
U2l6ZSk7CiAgICAgc2l6ZV90IGNvcHlTaXplID0gc3RkOjptaW4ob2xkU2l6ZSwgbmV3U2l6ZSk7
Ci0gICAgbWVtY3B5KHJlc3VsdCwgb2JqZWN0LCBjb3B5U2l6ZSk7CisgICAgZmFzdENvcHkoc3Rh
dGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCksIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpLCBjb3B5
U2l6ZSk7CiAgICAgbV9kZWFsbG9jYXRvci5kZWFsbG9jYXRlKG9iamVjdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQml0cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQml0cy5oCShyZXZpc2lvbiAyMjgyMTcpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyAr
ODAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQml0c1dvcmRPd25lciYgb3BlcmF0b3I9KGNvbnN0
IEJpdHNXb3JkT3duZXImIG90aGVyKQogICAgIHsKLSAgICAgICAgbWVtY3B5KG1fd29yZHMsIG90
aGVyLm1fd29yZHMsIGFycmF5TGVuZ3RoKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAg
ZmFzdENvcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSk7CiAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICB9CiAgICAgCkBAIC05MSwxMiArOTEsMTIgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgY2xlYXJBbGwoKQogICAgIHsKLSAgICAgICAgbWVtc2V0KG1fd29yZHMs
IDAsIGFycmF5TGVuZ3RoKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgZmFzdFplcm9G
aWxsKG1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChj
b25zdCBCaXRzV29yZE93bmVyJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweShtX3dvcmRz
LCBvdGhlci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ICAgIGZhc3RDb3B5KG1fd29yZHMsIG90aGVyLm1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAg
IH0KICAgICAKICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBA
QCBJc29QYWdlPENvbmZpZz46Oklzb1BhZ2UoSXNvRGlyZWN0b3J5QmFzCiAgICAgOiBtX2RpcmVj
dG9yeShkaXJlY3RvcnkpCiAgICAgLCBtX2luZGV4KGluZGV4KQogewotICAgIG1lbXNldChtX2Fs
bG9jQml0cywgMCwgc2l6ZW9mKG1fYWxsb2NCaXRzKSk7CisgICAgZmFzdFplcm9GaWxsKG1fYWxs
b2NCaXRzLCBiaXRzQXJyYXlMZW5ndGgobnVtT2JqZWN0cykpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb25maWc+CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwMyw3ICsyMDMsNyBAQCB2b2lkIFZlY3RvcjxUPjo6cmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3Qg
CiAgICAgc2l6ZV90IHZtU2l6ZSA9IGJtYWxsb2M6OnZtU2l6ZShuZXdDYXBhY2l0eSAqIHNpemVv
ZihUKSk7CiAgICAgVCogbmV3QnVmZmVyID0gdm1TaXplID8gc3RhdGljX2Nhc3Q8VCo+KHZtQWxs
b2NhdGUodm1TaXplKSkgOiBudWxscHRyOwogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBz
dGQ6Om1lbWNweShuZXdCdWZmZXIsIG1fYnVmZmVyLCBtX3NpemUgKiBzaXplb2YoVCkpOworICAg
ICAgICBmYXN0Q29weShuZXdCdWZmZXIsIG1fYnVmZmVyLCBtX3NpemUpOwogICAgICAgICB2bURl
YWxsb2NhdGUobV9idWZmZXIsIGJtYWxsb2M6OnZtU2l6ZShtX2NhcGFjaXR5ICogc2l6ZW9mKFQp
KSk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333383</attachid>
            <date>2018-02-08 10:08:42 -0800</date>
            <delta_ts>2018-02-08 10:20:15 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67898</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE4LTAyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RXhwZXJpbWVudCB3aXRoIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweS9tZW1z
ZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU2
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhZG9wdHMgbmV3IGZhc3RDb3B5L2Zhc3RaZXJvRmlsbCBjYWxscyBmb3IgY2FsbHMg
dG8gbWVtY3B5L21lbXNldCB0aGF0IGRvIG5vdCB0YWtlIGEKKyAgICAgICAgY29uc3RhbnQgc2l6
ZSBhcmd1bWVudC4KKworICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlB
bGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmNvcHlUbyk6Cisg
ICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVJbnRlcm5hbCk6CisgICAgICAgICogcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojp6
ZXJvUmFuZ2VJbXBsKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29udmVudGlvbnMuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOgorICAgICAgICAoSlNDOjpjbGVh
ckFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KToKKyAgICAgICAgKiBydW50
aW1lL0J1dHRlcmZseUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVh
dGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmFwcGVuZE1lbWNweSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmZhc3RTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpD
b25zdHJ1Y3Rpb25Db250ZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRl
ckZsYXR0ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHA6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUpOgorCiAyMDE4LTAyLTA2ICBC
cmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBy
b3RvY29sIGdlbmVyYXRvciBzaG91bGQgYXV0b21hdGljYWxseSBkZWR1Y2UgdGhlIGNvcnJlY3Qg
aW5jbHVkZSBzdHlsZSB0byB1c2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNzYsNyArMjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBpZiAoIWlzQXZhaWxhYmxlKHNpemUpKQogICAgICAgICAgICAgICAgIGdyb3coc2l6ZSk7CiAK
LSAgICAgICAgICAgIG1lbWNweShtX3N0b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCBkYXRhLCBz
aXplKTsKKyAgICAgICAgICAgIGZhc3RDb3B5Qnl0ZXMobV9zdG9yYWdlLmJ1ZmZlcigpICsgbV9p
bmRleCwgZGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICBtX2luZGV4ICs9IHNpemU7CiAgICAgICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgIH0KICAgICAKICAgICBpZiAo
cG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBtZW1zZXQobV9kYXRhLmdldCgpLCAw
LCBzaXplKTsKKyAgICAgICAgZmFzdFplcm9GaWxsQnl0ZXMobV9kYXRhLmdldCgpLCBzaXplKTsK
IAogICAgIG1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKICAg
ICBtX2Rlc3RydWN0b3IgPSBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6
UHJpbWl0aXZlLCBwKTsgfTsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29u
dGVudHM6OmNvcHlUbyhBcnJheUJ1CiAgICAgb3RoZXIudHJ5QWxsb2NhdGUobV9zaXplSW5CeXRl
cywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CiAg
ICAgaWYgKCFvdGhlci5tX2RhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkob3RoZXIu
bV9kYXRhLmdldCgpLCBtX2RhdGEuZ2V0KCksIG1fc2l6ZUluQnl0ZXMpOworICAgIGZhc3RDb3B5
Qnl0ZXMob3RoZXIubV9kYXRhLmdldCgpLCBtX2RhdGEuZ2V0KCksIG1fc2l6ZUluQnl0ZXMpOwog
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwogfQogCkBAIC0yNDYsNyAr
MjQ2LDcgQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlSW50ZQogewogICAg
IEFTU0VSVCghYnl0ZUxlbmd0aCB8fCBzb3VyY2UpOwogICAgIGF1dG8gYnVmZmVyID0gYWRvcHRS
ZWYoKm5ldyBBcnJheUJ1ZmZlcihXVEZNb3ZlKGNvbnRlbnRzKSkpOwotICAgIG1lbWNweShidWZm
ZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKKyAgICBmYXN0Q29weUJ5dGVzKGJ1ZmZl
ci0+ZGF0YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmll
dy5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wg
QXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJbXBsKHVuc2kKICAgICB9CiAgICAgCiAgICAgdWlu
dDhfdCogYmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihiYXNlQWRkcmVzcygpKTsKLSAgICBt
ZW1zZXQoYmFzZSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7CisgICAgZmFzdFpl
cm9GaWxsQnl0ZXMoYmFzZSArIGJ5dGVPZmZzZXQsIHJhbmdlQnl0ZUxlbmd0aCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29udmVudGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMjEgKzMxLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LXZvaWQgY2xlYXJBcnJheU1lbXNldChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJhc2UsIHVuc2ln
bmVkIGNvdW50KQotewotI2lmIENQVShYODZfNjQpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykK
LSAgICB1aW50NjRfdCB6ZXJvID0gMDsKLSAgICBhc20gdm9sYXRpbGUgKAotICAgICAgICAicmVw
IHN0b3NxXG5cdCIKLSAgICAgICAgOiAiK0QiKGJhc2UpLCAiK2MiKGNvdW50KQotICAgICAgICA6
ICJhIih6ZXJvKQotICAgICAgICA6ICJtZW1vcnkiCi0gICAgICAgICk7Ci0jZWxzZSAvLyBub3Qg
Q1BVKFg4Nl82NCkKLSAgICBtZW1zZXQoYmFzZSwgMCwgY291bnQgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSk7Ci0jZW5kaWYgLy8gZ2VuZXJpYyBDUFUKLX0KLQogdm9pZCBjbGVhckFy
cmF5TWVtc2V0KGRvdWJsZSogYmFzZSwgdW5zaWduZWQgY291bnQpCiB7CiAjaWYgQ1BVKFg4Nl82
NCkgJiYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMjI4MjE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsMjIgKzExNywxNyBAQCBpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUlu
ZGV4aW5nSGVhZGVyCiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjbGVhckFycmF5TWVtc2V0KFdyaXRlQmFycmllcjxVbmtub3duPiogYmFzZSwgdW5zaWdu
ZWQgY291bnQpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckFycmF5TWVtc2V0KGRvdWJs
ZSogYmFzZSwgdW5zaWduZWQgY291bnQpOwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBjbGVhckFycmF5KFdyaXRlQmFycmllcjxVbmtub3duPiogYmFzZSwg
dW5zaWduZWQgY291bnQpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjb25zdCB1bnNpZ25l
ZCBtaW5Db3VudEZvck1lbXNldCA9IDEwMDsKLSAgICBpZiAoY291bnQgPj0gbWluQ291bnRGb3JN
ZW1zZXQpIHsKLSAgICAgICAgY2xlYXJBcnJheU1lbXNldChiYXNlLCBjb3VudCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICAKKyAgICBmYXN0WmVyb0ZpbGwoYmFzZSwgY291
bnQpOworI2Vsc2UKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb3VudDsgaS0tOykKICAgICAgICAg
YmFzZVtpXS5jbGVhcigpOworI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckFy
cmF5KGRvdWJsZSogYmFzZSwgdW5zaWduZWQgY291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMzksMTkgKzEzMzksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvUAogICAgIAogICAgIGlmICh0eXBlID09IEFycmF5V2l0aERvdWJs
ZSkgewogICAgICAgICBkb3VibGUqIGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGZpcnN0QnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBmaXJzdEFy
cmF5U2l6ZSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIgKyBmaXJzdEFycmF5U2l6ZSwgc2Vjb25k
QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBz
ZWNvbmRBcnJheVNpemUpOworICAgICAgICBmYXN0Q29weShidWZmZXIsIGZpcnN0QnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBmaXJzdEFycmF5U2l6ZSk7CisgICAgICAgIGZh
c3RDb3B5KGJ1ZmZlciArIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKS5kYXRhKCksIHNlY29uZEFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIGlmICh0eXBl
ICE9IEFycmF5V2l0aFVuZGVjaWRlZCkgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CiAgICAg
ICAgIAogICAgICAgICBhdXRvIGNvcHkgPSBbJl0gKHVuc2lnbmVkIG9mZnNldCwgdm9pZCogc291
cmNlLCB1bnNpZ25lZCBzaXplLCBJbmRleGluZ1R5cGUgdHlwZSkgewogICAgICAgICAgICAgaWYg
KHR5cGUgIT0gQXJyYXlXaXRoVW5kZWNpZGVkKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGJ1
ZmZlciArIG9mZnNldCwgc291cmNlLCBzaXplb2YoSlNWYWx1ZSkgKiBzaXplKTsKKyAgICAgICAg
ICAgICAgICBmYXN0Q29weShidWZmZXIgKyBvZmZzZXQsIHN0YXRpY19jYXN0PFdyaXRlQmFycmll
cjxVbmtub3duPio+KHNvdXJjZSksIHNpemUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZTsgaS0tOykKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIG9mZnNldF0uY2xlYXIoKTsK
KyAgICAgICAgICAgIGNsZWFyQXJyYXkoYnVmZmVyICsgb2Zmc2V0LCBzaXplKTsKICAgICAgICAg
fTsKICAgICAgICAgCiAgICAgICAgIGNvcHkoMCwgZmlyc3RCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KS5kYXRhKCksIGZpcnN0QXJyYXlTaXplLCBmaXJzdFR5cGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI4
MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsNyArOTMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnRyeUNyZWF0ZShWCiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNl
LCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVh
ZGVyKQogICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7
Ci0gICAgbWVtc2V0KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5
LCAwLCBwcm9wZXJ0eUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZmFz
dFplcm9GaWxsKHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjksMTQgKzEy
OSwxMyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3JvCiAgICAgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciA9IHN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIoaW50ZW5k
ZWRPd25lcik7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAog
ICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
bWVtY3B5KAorICAgIGZhc3RDb3B5Qnl0ZXMoCiAgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9y
YWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBvbGRCdXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgdG90YWxTaXplKDAs
IG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOwotICAgIG1lbXNldCgKKyAgICBmYXN0WmVyb0ZpbGwoCiAgICAgICAgIHJl
c3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBuZXdQcm9wZXJ0eUNhcGFjaXR5LAotICAgICAgICAw
LAotICAgICAgICAobmV3UHJvcGVydHlDYXBhY2l0eSAtIG9sZFByb3BlcnR5Q2FwYWNpdHkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG5ld1Byb3BlcnR5Q2FwYWNpdHkgLSBv
bGRQcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjgsOCAr
MTY3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZv
aWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwodm0sIG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCi0gICAgbWVt
Y3B5KG5ld0Jhc2UsIHRoZUJhc2UsIG9sZFNpemUpOworICAgIGZhc3RDb3B5Qnl0ZXMobmV3QmFz
ZSwgdGhlQmFzZSwgb2xkU2l6ZSk7CiAgICAgcmV0dXJuIGZyb21CYXNlKG5ld0Jhc2UsIDAsIHBy
b3BlcnR5Q2FwYWNpdHkpOwogfQogCkBAIC0xOTksNyArMTk3LDcgQEAgaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5OjpyZXNpemVBcnJheQogICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCiAg
ICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRl
ciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAogICAgICAgICB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSk7Ci0gICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICBmYXN0Q29w
eUJ5dGVzKHRvLCBmcm9tLCBzaXplKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+PiBHCiAgICAgY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiByZXN1bHQg
PSBjcmVhdGUobGVuZ3RoKTsKLSAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCksIGFycmF5LCBsZW5n
dGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIGZhc3RDb3B5KHJlc3Vs
dC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI4
MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1Myw5ICs1NTMsOSBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShF
eGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIo
KS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICBtZW1j
cHkoYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBv
dGhlckFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9m
KEpTVmFsdWUpICogb3RoZXJMZW5ndGgpOworICAgICAgICBmYXN0Q29weShidXR0ZXJmbHkoKS0+
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBvdGhlckxlbmd0aCk7CiAgICAgZWxz
ZQotICAgICAgICBtZW1jcHkoYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFy
dEluZGV4LCBvdGhlckFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSwgc2l6
ZW9mKEpTVmFsdWUpICogb3RoZXJMZW5ndGgpOworICAgICAgICBmYXN0Q29weShidXR0ZXJmbHko
KS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXktPmJ1dHRlcmZs
eSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBvdGhlckxlbmd0aCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTc2MSw5ICs3NjEsOSBAQCBKU0FycmF5KiBKU0FycmF5OjpmYXN0U2xpY2UoRXhl
Y1N0YXRlJiBlCiAKICAgICAgICAgYXV0byYgcmVzdWx0QnV0dGVyZmx5ID0gKnJlc3VsdEFycmF5
LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheVdpdGhEb3VibGUp
Ci0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5k
YXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRl
eCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgZmFzdENvcHkocmVzdWx0
QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1
b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgY291bnQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1
dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFs
dWUpICogY291bnQpOworICAgICAgICAgICAgZmFzdENvcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRp
Z3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJ
bmRleCwgY291bnQpOwogICAgICAgICByZXN1bHRCdXR0ZXJmbHkuc2V0UHVibGljTGVuZ3RoKGNv
dW50KTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgSlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIGlmICghbV92ZWN0b3IpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkKLSAgICAgICAgbWVtc2V0KG1fdmVjdG9y
LmdldCgpLCAwLCBzaXplKTsKKyAgICAgICAgZmFzdFplcm9GaWxsQnl0ZXMobV92ZWN0b3IuZ2V0
KCksIHNpemUpOwogICAgIAogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNpemUpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6cwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xh
c3NJbmZvKHZtKTsKICAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9y
Ojp0eXBlVmFsdWUpIHsKLSAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1
c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIC8vIFRoZSBzdXBl
ciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbW1vdmUgc2luY2Ugd2UncmUgdGhlIHNhbWUgdHlw
ZS4KICAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIG90aGVyID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKICAgICAgICAgbGVuZ3RoID0gc3RkOjptaW4o
bGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE3OCwxMCArMTE3OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252
ZXJ0CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoCiAgICAgICAgIHZtLCB0aGlzLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CiAgICAgCi0gICAgbWVtY3B5KAor
ICAgIGZhc3RDb3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlTaXplLAogICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBw
cm9wZXJ0eVNpemUsCi0gICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgICAgICBwcm9wZXJ0eVNpemUpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3
U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgbmV3U3RvcmFnZS0+
c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExlbmd0aCk7CkBAIC0zNTgwLDcgKzM1ODAsNyBAQCB2b2lk
IEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlCiAgICAgdm9pZCogY3VycmVudEJh
c2UgPSBvbGRCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAgICAg
dm9pZCogbmV3QmFzZSA9IG5ld0J1dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFm
dGVyKTsKIAotICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgZmFzdENvcHlCeXRlcyhuZXdCYXNlLCBjdXJy
ZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CiAgICAgCiAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFi
bGUoVk0mIHZtLCBjb24KIHsKICAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwog
Ci0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOworICAgIGZh
c3RDb3B5Qnl0ZXMobV9pbmRleCwgb3RoZXIubV9pbmRleCwgZGF0YVNpemUoKSk7CiAKICAgICBp
dGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKICAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODIxNykKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBACisyMDE4
LTAyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRXhwZXJp
bWVudCB3aXRoIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweS9tZW1zZXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRk
cyBhIGZhc3RlciB4ODZfNjQtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgbWVtY3B5IGFuZCBt
ZW1zZXQuIFRoZXNlIHZlcnNpb25zIGdvIGJ5CisgICAgICAgIGRpZmZlcmVudCBuYW1lcyB0aGFu
IG1lbWNweS9tZW1zZXQgYW5kIGhhdmUgYSBkaWZmZXJlbnQgQVBJOgorICAgICAgICAKKyAgICAg
ICAgV1RGOjpmYXN0Q29weTxUPihUKiBkc3QsIFQqIHNyYywgc2l6ZV90IE4pOiBjb3BpZXMgTiB2
YWx1ZXMgb2YgdHlwZSBUIGZyb20gc3JjIHRvIGRzdC4KKyAgICAgICAgV1RGOjpmYXN0WmVyb0Zp
bGwoVCogZHN0LCBzaXplX1QgTik6IHdyaXRlcyBOICogc2l6ZW9mKFQpIHplcm9lcyB0byBkc3Qu
CisgICAgICAgIAorICAgICAgICBUaGVyZSBhcmUgYWxzbyAqQnl0ZXMgdmFyaWFudHMgdGhhdCB0
YWtlIHZvaWQqIGZvciBkc3QgYW5kIHNyYyBhbmQgc2l6ZV90IG51bUJ5dGVzLiBUaG9zZSBhcmUK
KyAgICAgICAgbW9zdCBhcHByb3ByaWF0ZSBpbiBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgaXMgYWxy
ZWFkeSBjb21wdXRpbmcgYnl0ZXMuCisgICAgICAgIAorICAgICAgICBUaGVzZSB3aWxsIGp1c3Qg
Y2FsbCBtZW1jcHkvbWVtc2V0IG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgb3B0aW1pemVkIHZlcnNp
b25zIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgICAgICAKKyAgICAgICAgVGhlc2UgbmV3IGZ1bmN0
aW9ucyBhcmUgbm90IGtub3duIHRvIHRoZSBjb21waWxlciB0byBiZSBtZW1jcHkvbWVtc2V0LiBU
aGlzIGhhcyB0aGUgZWZmZWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbXBpbGVyIHdpbGwgbm90IHRy
eSB0byByZXBsYWNlIHRoZW0gd2l0aCBhbnl0aGluZyBlbHNlLiBUaGlzIGNvdWxkIGJlIGdvb2Qg
b3IgYmFkOgorICAgICAgICAKKyAgICAgICAgLSBJdCdzICpnb29kKiBpZiB0aGUgc2l6ZSBpcyAq
bm90IGtub3duKiBhdCBjb21waWxlIHRpbWUuIEluIHRoYXQgY2FzZSwgYnkgbXkgYmVuY2htYXJr
cywgdGhlc2UKKyAgICAgICAgICB2ZXJzaW9ucyBhcmUgZmFzdGVyIHRoYW4gZWl0aGVyIHRoZSBt
ZW1jcHkvbWVtc2V0IGNhbGwgb3Igd2hhdGV2ZXIgZWxzZSB0aGUgY29tcGlsZXIgY291bGQKKyAg
ICAgICAgICBlbWl0LiBUaGlzIGlzIGJlY2F1c2Ugb2YgYSBjb21iaW5hdGlvbiBvZiBpbmxpbmlu
ZyBhbmQgdGhlIGFsZ29yaXRobSBpdHNlbGYgKHNlZSBiZWxvdykuCisgICAgICAgIAorICAgICAg
ICAtIEl0J3MgKmJhZCogaWYgdGhlIHNpemUgaXMgKmtub3duKiBhdCBjb21waWxlIHRpbWUuIElu
IHRoYXQgY2FzZSwgdGhlIGNvbXBpbGVyIGNvdWxkCisgICAgICAgICAgcG90ZW50aWFsbHkgZW1p
dCBhIGZ1bGx5IHVucm9sbGVkIG1lbWNweS9tZW1zZXQuIFRoYXQgbWlnaHQgbm90IGhhcHBlbiBp
ZiB0aGUgc2l6ZSBpcyBsYXJnZQorICAgICAgICAgIChldmVuIGlmIGl0J3Mga25vd24pLCBidXQg
aW4gdGhpcyBwYXRjaCBJIGF2b2lkIHJlcGxhY2luZyBhbnkgbWVtY3B5L21lbXNldCBjYWxscyB3
aGVuIHRoZQorICAgICAgICAgIHNpemUgaXMgYSBjb25zdGFudC4gSW4gcGFydGljdWxhciwgdGhp
cyB0b3RhbGx5IGF2b2lkcyB0aGUgY2FsbCBvdmVyaGVhZCAtLSBpZiB0aGUgc2l6ZSBpcworICAg
ICAgICAgIHNtYWxsLCB0aGVuIHRoZSBjb21waWxlciB3aWxsIGVtaXQgYSBuaWNlIGlubGluZWQg
Y29weSBvciBzZXQuIElmIHRoZSBzaXplIGlzIGxhcmdlLCB0aGVuIHRoZQorICAgICAgICAgIG1v
c3Qgb3B0aW1hbCB0aGluZyB0byBkbyBpcyBlbWl0IHRoZSBzaG9ydGVzdCBwaWVjZSBvZiBjb2Rl
IHBvc3NpYmxlLCBhbmQgdGhhdCdzIGEgY2FsbCB0bworICAgICAgICAgIG1lbWNweS9tZW1zZXQu
CisgICAgICAgIAorICAgICAgICBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgeW91IGhhdmUgdG8gY2hv
b3NlIGJldHdlZW4gdGhlbSBvbiB5b3VyIG93bi4gT25lIHdheSB0byBhdm9pZCB0aGF0IG1pZ2h0
CisgICAgICAgIGhhdmUgYmVlbiB0byBvdmVycmlkZSB0aGUgbWVtY3B5L21lbXNldCBzeW1ib2xz
LCBzbyB0aGF0IHRoZSBjb21waWxlciBjYW4gc3RpbGwgZG8gaXRzCisgICAgICAgIHJlYXNvbmlu
Zy4gQnV0IHRoYXQncyBub3QgcXVpdGUgcmlnaHQsIHNpbmNlIHRoZW4gd2Ugd291bGQgbG9zZSBp
bmxpbmluZyBpbiB0aGUgdW5rbm9udy1zaXplCisgICAgICAgIGNhc2UuIEFsc28sIGl0J3MgcG9z
c2libGUgdGhhdCBmb3Igc29tZSB1bmtub3duLXNpemUgY2FzZXMsIHRoZSBjb21waWxlciBjb3Vs
ZCBjaG9vc2UgdG8gZW1pdAorICAgICAgICBzb21ldGhpbmcgb24gaXRzIG93biBiZWNhdXNlIGl0
IG1pZ2h0IHRoaW5rIHRoYXQgc29tZSBwcm9wZXJ0eSBvZiBhbGlhc2luZyBvciBhbGlnbm1lbnQg
Y291bGQKKyAgICAgICAgaGVscCBpdC4gSSB0aGluayBpdCdzIGEgYml0IGJldHRlciB0byB1c2Ug
b3VyIG93biBjb3B5L3NldCBpbXBsZW1lbnRhdGlvbnMgZXZlbiBpbiB0aG9zZSBjYXNlcy4KKyAg
ICAgICAgQW5vdGhlciB3YXkgdGhhdCBJIHRyaWVkIGF2b2lkaW5nIHRoaXMgaXMgdG8gZGV0ZWN0
IGluc2lkZSBmYXN0Q29weS9mYXN0WmVyb0ZpbGwgaWYgdGhlIHNpemUgaXMKKyAgICAgICAgY29u
c3RhbnQuIEJ1dCB0aGVyZSBpcyBubyBnb29kIHdheSB0byBkbyB0aGF0IGluIEMrKy4gVGhlcmUg
aXMgYSBidWlsdGluIGZvciBkb2luZyB0aGF0IGluc2lkZSBhCisgICAgICAgIG1hY3JvLCBidXQg
dGhhdCBmZWVscyBqYW5reSwgc28gSSBkaWRuJ3Qgd2FudCB0byBkbyBpdCBpbiB0aGlzIHBhdGNo
LgorICAgICAgICAKKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgdGhlc2UgbmV3IGZhc3RDb3B5L2Zh
c3RaZXJvRmlsbCBmdW5jdGlvbnMgYXJlIGZhc3RlciBpcyB0aGF0OgorICAgICAgICAKKyAgICAg
ICAgLSBUaGV5IGNhbiBiZSBpbmxpbmVkLiBUaGVyZSBpcyBubyBmdW5jdGlvbiBjYWxsLiBPbmx5
IGEgZmV3IHJlZ2lzdGVycyBnZXQgY2xvYmJlcmVkLiBTbywgdGhlCisgICAgICAgICAgaW1wYWN0
IG9uIHRoZSBxdWFsaXR5IG9mIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBtZW1jcHkvbWVtc2V0
IGlzIHNtYWxsZXIuCisgICAgICAgIAorICAgICAgICAtIFRoZXkgdXNlIHR5cGUgaW5mb3JtYXRp
b24gdG8gc2VsZWN0IHRoZSBpbXBsZW1lbnRhdGlvbi4gRm9yIHNpemVzIHRoYXQgYXJlIG11bHRp
cGxlcyBvZiAyLCA0LAorICAgICAgICAgIG9yIDgsIHRoZSByZXN1bHRpbmcgY29kZSBwZXJmb3Jt
cyBkcmFtYXRpY2FsbHkgYmV0dGVyIG9uIHNtYWxsIGFycmF5cyB0aGFuIG1lbWNweSBiZWNhdXNl
IGl0CisgICAgICAgICAgdXNlcyBmZXdlciBjeWNsZXMuIFRoZSBkaWZmZXJlbmNlIGlzIGdyZWF0
ZXN0IGZvciAyIGFuZCA0IGJ5dGUgdHlwZXMsIHNpbmNlIG1lbWNweSB1c3VhbGx5CisgICAgICAg
ICAgaGFuZGxlcyBzbWFsbCBhcnJheXMgYnkgdGllcmluZyBmcm9tIGEgOC1ieXRlIHdvcmQgY29w
eSBsb29wIHRvIGEgYnl0ZSBjb3B5IGxvb3AuIFNvLCBmb3IgMgorICAgICAgICAgIG9yIDQgYnl0
ZSBhcnJheXMsIHdlIHVzZSBhbiBhbGdvcml0aG0gdGhhdCB0aWVycyBmcm9tIDgtYnl0ZSB3b3Jk
IGRvd24gdG8gYSAyLWJ5dGUgb3IgNC1ieXRlCisgICAgICAgICAgKGRlcGVuZGluZyBvbiB0eXBl
KSBjb3B5IGxvb3AuIFNvLCBmb3IgZXhhbXBsZSwgd2hlbiBjb3B5aW5nIGEgMTYtYml0IHN0cmlu
ZyB0aGF0IGhhcyAxLCAyLCBvcgorICAgICAgICAgIDMgY2hhcmFjdGVycywgdGhpcyBtZWFucyBk
b2luZyAxLCAyLCBvciAzIHdvcmQgY29waWVzIHJhdGhlciB0aGFuIDIsIDQsIG9yIDYgYnl0ZSBj
b3BpZXMuIEZvcgorICAgICAgICAgIDgtYnl0ZSB0eXBlcywgdGhlIHJlc3VsdGluZyBzYXZpbmdz
IGFyZSBtYWlubHkgdGhhdCB0aGVyZSBpcyBubyBjaGVjayB0byBzZWUgaWYgYSB0aWVyLWRvd24g
dG8KKyAgICAgICAgICB0aGUgYnl0ZS1jb3B5IGxvb3AgaXMgbmVlZGVkIC0tIHNvIHJlYWxseSB0
aGF0IG1lYW5zIHJlZHVjaW5nIGNvZGUgc2l6ZS4gMS1ieXRlIHR5cGVzIGRvbid0CisgICAgICAg
ICAgZ2V0IHRoaXMgaW5oZXJlbnQgYWR2YW50YWdlIG92ZXIgbWVtY3B5L21lbXNldCwgYnV0IHRo
ZXkgc3RpbGwgYmVuZWZpdCBmcm9tIGFsbCBvZiB0aGUgb3RoZXIKKyAgICAgICAgICBhZHZhbnRh
Z2VzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gT2YgY291cnNlLCB0aGlzIGFkdmFudGFnZSBpc24ndCBp
bmhlcmVudCB0byBvdXIgYXBwcm9hY2guIFRoZQorICAgICAgICAgIGNvbXBpbGVyIGNvdWxkIGFs
c28gbm90aWNlIHRoYXQgdGhlIGFyZ3VtZW50cyB0byBtZW1jcHkvbWVtc2V0IGhhdmUgc29tZSBh
bGlnbm1lbnQgcHJvcGVydGllcy4KKyAgICAgICAgICBJdCBjb3VsZCBkbyBpdCBldmVuIG1vcmUg
Z2VuZXJhbGx5IHRoYW4gd2UgZG8gLSBmb3IgZXhhbXBsZSBhIGNvcHkgb3ZlciBieXRlcyB3aGVy
ZSB0aGUgc2l6ZQorICAgICAgICAgIGlzIGEgbXVsdGlwbGUgb2YgNCBjYW4gdXNlIHRoZSA0LWJ5
dGUgd29yZCBhbGdvcml0aG0uIEJ1dCBiYXNlZCBvbiBteSB0ZXN0cywgdGhlIGNvbXBpbGVyIGRv
ZXMKKyAgICAgICAgICBub3QgZG8gdGhpcyAoZXZlbiB0aG91Z2ggaXQgZG9lcyBvdGhlciB0aGlu
Z3MsIGxpa2UgdHVybiBhIG1lbXNldCBjYWxsIHdpdGggYSB6ZXJvIHZhbHVlCisgICAgICAgICAg
YXJndW1lbnQgaW50byBhIGJ6ZXJvIGNhbGwpLgorICAgICAgICAKKyAgICAgICAgLSBUaGV5IHVz
ZSBhIHZlcnkgbmljZWx5IHdyaXR0ZW4gd29yZCBjb3B5L3NldCBsb29wIGZvciBzbWFsbCBhcnJh
eXMuIEkgc3BlbnQgYSBsb3Qgb2YgdGltZQorICAgICAgICAgIGdldHRpbmcgdGhlIGFzc2VtYmx5
IGp1c3QgcmlnaHQuIFdoZW4gd2UgdXNlIG1lbWNweS9tZW1zZXQsIHNvbWV0aW1lcyB3ZSB3b3Vs
ZCBvcHRpbWl6ZSB0aGUKKyAgICAgICAgICBjYWxsIGJ5IGhhdmluZyBhIGZhc3QgcGF0aCB3b3Jk
IGNvcHkgbG9vcCBmb3Igc21hbGwgc2l6ZXMuIFRoYXQncyBub3QgbmVjZXNzYXJ5IHdpdGggdGhp
cworICAgICAgICAgIGltcGxlbWVudGF0aW9uLCBzaW5jZSB0aGUgYXNzZW1ibHkgY29weSBsb29w
IGdldHMgaW5saW5lZC4KKyAgICAgICAgCisgICAgICAgIC0gVGhleSB1c2UgYHJlcCBtb3ZzYCBv
ciBgcmVwIHN0b3NgIGZvciBjb3BpZXMgb2YgMjAwIGJ5dGVzIG9yIG1vcmUuIFRoaXMgZGVjaXNp
b24gYmVuY2htYXJrcworICAgICAgICAgIHBvb3JseSBvbiBldmVyeSBzeW50aGV0aWMgbWVtY3B5
L21lbXNldCBiZW5jaG1hcmsgSSBoYXZlIGJ1aWx0LCBhbmQgc28gdW5zdXJwcmlzaW5nbHksIGl0
J3MKKyAgICAgICAgICBub3Qgd2hhdCBzeXN0ZW0gbWVtY3B5L21lbXNldCBkb2VzLiBNb3N0IHN5
c3RlbSBtZW1jcHkvbWVtc2V0IGltcGxlbWVudGF0aW9ucyBlbmQgdXAgZG9pbmcKKyAgICAgICAg
ICBzb21lIFNTRSBmb3IgbWVkaXVtLXNpemVkIGNvcGllcywuIEhvd2V2ZXIsIEkgcHJldmlvdXNs
eSBmb3VuZCB0aGF0IHRoaXMgZGVjaXNpb24gaXMgYmFkIGZvcgorICAgICAgICAgIG9uZSBvZiB0
aGUgbWVtc2V0IGNhbGxzIGluIEdDIChzZWUgY2xlYXJBcnJheSgpIGFuZCBmcmllbmRzIGluIEFy
cmF5Q29udmVudGlvbnMuaHxjcHApIC0gSSB3YXMKKyAgICAgICAgICBhYmxlIHRvIG1ha2UgdGhl
IG92ZXJoZWFkIG9mIHRoYXQgY2FsbCB2aXJ0dWFsbHkgZGlzYXBwZWFyIGJ5IGRvaW5nIGByZXAg
c3Rvc2AgbW9yZQorICAgICAgICAgIGFnZ3Jlc3NpdmVseS4gVGhlIHRoZW9yeSBiZWhpbmQgdGhp
cyBjaGFuZ2UgaXMgdGhhdCBpdCdzIG5vdCBqdXN0IHRoZSBHQyB0aGF0IHByZWZlcnMgc21hbGxl
cgorICAgICAgICAgIGByZXBgIHRocmVzaG9sZCBhbmQgbm8gU1NFLiBJIGFtIGJldHRpbmcgdGhh
dCBgcmVwYGluZyBtb3JlIGlzIGJldHRlciB3aGVuIHRoZSBoZWFwIGdldHMKKyAgICAgICAgICBj
aGFvdGljIGFuZCB0aGUgZGF0YSBiZWluZyBjb3BpZWQgaXMgdXNlZCBpbiBpbnRlcmVzdGluZyB3
YXlzIC0tIGhlbmNlLCBzeW50aGV0aWMKKyAgICAgICAgICBtZW1jcHkvbWVtc2V0IGJlbmNobWFy
a3MgdGhpbmsgaXQncyBiYWQgKHRoZXkgZG9uJ3QgZG8gZW5vdWdoIGNoYW90aWMgbWVtb3J5IGFj
Y2Vzc2VzKSB3aGlsZQorICAgICAgICAgIGl0J3MgZ29vZCBmb3IgcmVhbC13b3JsZCB1c2VzLiBB
bHNvLCB3aGVuIEkgcHJldmlvdXNseSB3b3JrZWQgb24gSlZNcywgSSBoYWQgZm91bmQgdGhhdCB0
aGUKKyAgICAgICAgICBiZXN0IG1lbWNweS9tZW1zZXQgaGV1cmlzdGljcyB3aGVuIGRlYWxpbmcg
d2l0aCBHQydkIG9iamVjdHMgaW4gYSBjcmF6eSBoZWFwIHdlcmUgZGlmZmVyZW50CisgICAgICAg
ICAgdGhhbiBhbnkgbWVtY3B5L21lbXNldCBpbiBhbnkgc3lzdGVtIGxpYnJhcnkuCisgICAgICAg
IAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgYSAwLjklIHNwZWVkLXVwIG9uIFBMVC4gSSdt
IG5vdCBzdXJlIGlmIGl0J3MgbW9yZSBiZWNhdXNlIG9mIHRoZSBpbmxpbmluZyBvcgorICAgICAg
ICB0aGUgYHJlcGAuIEkgdGhpbmsgaXQncyBib3RoLiBJJ2xsIGxlYXZlIGZpZ3VyaW5nIG91dCB0
aGUgZXhhY3QgdHVuaW5nIGZvciBmdXR1cmUgcGF0Y2hlcy4KKworICAgICAgICAqIHd0Zi9CaXRW
ZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldFNsb3cpOgorICAgICAgICAo
V1RGOjpCaXRWZWN0b3I6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpyZXNp
emVPdXRPZkxpbmUpOgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjp3b3JkQ291bnQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGlu
ZUJpdHM6Om51bVdvcmRzIGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudEJ1ZmZlci5o
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpncm93RXhhY3QpOgorICAgICAgICAq
IHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3JXb3JkT3du
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3JXb3JkT3duZXI6OmNs
ZWFyQWxsKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3RvcldvcmRPd25lcjo6c2V0KToKKyAg
ICAgICAgKiB3dGYvRmFzdENvcHkuaDogQWRkZWQuCisgICAgICAgIChXVEY6OmZhc3RDb3B5KToK
KyAgICAgICAgKFdURjo6ZmFzdENvcHlCeXRlcyk6CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2Mu
Y3BwOgorICAgICAgICAoV1RGOjpmYXN0WmVyb2VkTWFsbG9jKToKKyAgICAgICAgKFdURjo6ZmFz
dFN0ckR1cCk6CisgICAgICAgIChXVEY6OnRyeUZhc3RaZXJvZWRNYWxsb2MpOgorICAgICAgICAq
IHd0Zi9GYXN0WmVyb0ZpbGwuaDogQWRkZWQuCisgICAgICAgIChXVEY6OmZhc3RaZXJvRmlsbCk6
CisgICAgICAgIChXVEY6OmZhc3RaZXJvRmlsbEJ5dGVzKToKKyAgICAgICAgKiB3dGYvTUQ1LmNw
cDoKKyAgICAgICAgKiB3dGYvT1NBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6T1NBbGxvY2F0
b3I6OnJlYWxsb2NhdGVDb21taXR0ZWQpOgorICAgICAgICAqIHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ1ByaW50U3RyZWFtOjppbmNyZWFzZVNpemUpOgor
ICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudERlY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6ZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dEVuY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDoKKyAgICAg
ICAgKFdURjo6Q1N0cmluZzo6aW5pdCk6CisgICAgICAgIChXVEY6OkNTdHJpbmc6OmNvcHlCdWZm
ZXJJZk5lZWRlZCk6CisgICAgICAgICogd3RmL3RleHQvTGluZUJyZWFrSXRlcmF0b3JQb29sSUNV
Lmg6CisgICAgICAgIChXVEY6OkxpbmVCcmVha0l0ZXJhdG9yUG9vbDo6bWFrZUxvY2FsZVdpdGhC
cmVha0tleXdvcmQpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKToKKyAgICAgICAgKiB3dGYvdGV4dC9pY3UvVVRl
eHRQcm92aWRlci5jcHA6CisgICAgICAgIChXVEY6OnVUZXh0Q2xvbmVJbXBsKToKKyAgICAgICAg
KiB3dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHA6CisgICAgICAgIChXVEY6OnVU
ZXh0TGF0aW4xQ2xvbmUpOgorICAgICAgICAoV1RGOjpvcGVuTGF0aW4xVVRleHRQcm92aWRlcik6
CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5jcHA6CisKIDIwMTgtMDItMDYgIEZ1amlp
IEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0dUS10gZmFz
dC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTQuaHRtbCBpcyBmbGFreQpJbmRleDogU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDkgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdENvcHkuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtNDEsNyArNDMsNyBAQCB2b2lkIEJpdFZlY3Rvcjo6c2V0U2xvdyhj
b25zdCBCaXRWZWN0b3ImCiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNP
clBvaW50ZXI7CiAgICAgZWxzZSB7CiAgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGlu
ZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgbWVt
Y3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBieXRlQ291bnQob3Ro
ZXIuc2l6ZSgpKSk7CisgICAgICAgIGZhc3RDb3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwg
b3RoZXIuYml0cygpLCB3b3JkQ291bnQob3RoZXIuc2l6ZSgpKSk7CiAgICAgICAgIG5ld0JpdHNP
clBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAx
OwogICAgIH0KICAgICBpZiAoIWlzSW5saW5lKCkgJiYgIWlzRW1wdHlPckRlbGV0ZWRWYWx1ZSgp
KQpAQCAtNjksNyArNzEsNyBAQCB2b2lkIEJpdFZlY3Rvcjo6Y2xlYXJBbGwoKQogICAgIGlmIChp
c0lubGluZSgpKQogICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBtYWtlSW5saW5lQml0cygwKTsK
ICAgICBlbHNlCi0gICAgICAgIG1lbXNldChvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgMCwgYnl0
ZUNvdW50KHNpemUoKSkpOworICAgICAgICBmYXN0WmVyb0ZpbGwob3V0T2ZMaW5lQml0cygpLT5i
aXRzKCksIHdvcmRDb3VudChzaXplKCkpKTsKIH0KIAogQml0VmVjdG9yOjpPdXRPZkxpbmVCaXRz
KiBCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZShzaXplX3QgbnVtQml0cykKQEAgLTkz
LDE0ICs5NSwxNCBAQCB2b2lkIEJpdFZlY3Rvcjo6cmVzaXplT3V0T2ZMaW5lKHNpemVfdCBuCiAg
ICAgaWYgKGlzSW5saW5lKCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRo
ZSBiaXRzIGFyZSB6ZXJvIGluIGNhc2Ugd2UgZG8gYSBuby1vcCByZXNpemUuCiAgICAgICAgICpu
ZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgPSBtX2JpdHNPclBvaW50ZXIgJiB+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKLSAgICAgICAgbWVtc2V0KG5ld091
dE9mTGluZUJpdHMtPmJpdHMoKSArIDEsIDAsIChuZXdOdW1Xb3JkcyAtIDEpICogc2l6ZW9mKHZv
aWQqKSk7CisgICAgICAgIGZhc3RaZXJvRmlsbChuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyAx
LCBuZXdOdW1Xb3JkcyAtIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChudW1CaXRzID4g
c2l6ZSgpKSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xkTnVtV29yZHMgPSBvdXRPZkxpbmVCaXRz
KCktPm51bVdvcmRzKCk7Ci0gICAgICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0
cygpLCBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgb2xkTnVtV29yZHMgKiBzaXplb2Yodm9pZCop
KTsKLSAgICAgICAgICAgIG1lbXNldChuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyBvbGROdW1X
b3JkcywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMpICogc2l6ZW9mKHZvaWQqKSk7Cisg
ICAgICAgICAgICBmYXN0Q29weShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJp
dHMoKS0+Yml0cygpLCBvbGROdW1Xb3Jkcyk7CisgICAgICAgICAgICBmYXN0WmVyb0ZpbGwobmV3
T3V0T2ZMaW5lQml0cy0+Yml0cygpICsgb2xkTnVtV29yZHMsIG5ld051bVdvcmRzIC0gb2xkTnVt
V29yZHMpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVC
aXRzLT5iaXRzKCksIG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBuZXdPdXRPZkxpbmVCaXRzLT5u
dW1Xb3JkcygpICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICBmYXN0Q29weShuZXdPdXRP
ZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBuZXdPdXRPZkxpbmVC
aXRzLT5udW1Xb3JkcygpKTsKICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxp
bmVCaXRzKCkpOwogICAgIH0KICAgICBtX2JpdHNPclBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAxOwpJbmRleDogU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlz
aW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTQsNiArMzU0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAoYml0Q291bnQg
KyA3KSA+PiAzOwogICAgIH0KIAorICAgIHN0YXRpYyBzaXplX3Qgd29yZENvdW50KHVpbnRwdHJf
dCBiaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChiaXRzICsgYml0c0luUG9pbnRlcigpIC0g
MSkgLyBiaXRzSW5Qb2ludGVyKCk7CisgICAgfQorICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3Qg
bWFrZUlubGluZUJpdHModWludHB0cl90IGJpdHMpCiAgICAgewogICAgICAgICBBU1NFUlQoIShi
aXRzICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKSkpOwpA
QCAtNDE4LDcgKzQyMyw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgT3V0T2ZMaW5lQml0cyB7CiAg
ICAgcHVibGljOgogICAgICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
Qml0czsgfQotICAgICAgICBzaXplX3QgbnVtV29yZHMoKSBjb25zdCB7IHJldHVybiAobV9udW1C
aXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgLyBiaXRzSW5Qb2ludGVyKCk7IH0KKyAgICAgICAg
c2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1cm4gd29yZENvdW50KG1fbnVtQml0cyk7IH0K
ICAgICAgICAgdWludHB0cl90KiBiaXRzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dCo+KHRoaXMgKyAxKTsgfQogICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdCB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4odGhpcyArIDEpOyB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkocmV2aXNpb24gMjI4MjE3KQor
KysgU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RDb3B5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC02
NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQXJyYXkqIG5ld0FycmF5ID0gY3JlYXRlQXJy
YXkobmV3U2l6ZSk7CiAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGRvIENvbmN1cnJlbnRC
dWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+LgogICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgICAg
ICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFycmF5LT5kYXRhLCBzaXplb2YoVCkgKiBhcnJheS0+
c2l6ZSk7CisgICAgICAgICAgICBmYXN0Q29weShuZXdBcnJheS0+ZGF0YSwgYXJyYXktPmRhdGEs
IGFycmF5LT5zaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGFycmF5ID8gYXJyYXktPnNp
emUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICAgICAgbmV3IChuZXdBcnJheS0+ZGF0
YSArIGkpIFQoKTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9G
YXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RC
aXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw5IEBACiAKICNp
bmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtOTUsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChhcnJheUxlbmd0aCgpICE9IG90aGVyLmFycmF5TGVuZ3RoKCkpCiAgICAgICAgICAgICBz
ZXRFcXVhbHNTbG93KG90aGVyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtZW1jcHko
bV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICAgICAgZmFzdENvcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5n
dGgoKSk7CiAgICAgICAgICAgICBtX251bUJpdHMgPSBvdGhlci5tX251bUJpdHM7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTE1LDEzICsxMTcsMTMgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgY2xlYXJBbGwoKQogICAgIHsKLSAgICAgICAgbWVtc2V0KG1fd29yZHMs
IDAsIGFycmF5TGVuZ3RoKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgZmFzdFplcm9G
aWxsKG1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChj
b25zdCBGYXN0Qml0VmVjdG9yV29yZE93bmVyJiBvdGhlcikKICAgICB7CiAgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fbnVtQml0cyA9PSBvdGhlci5tX251bUJpdHMp
OwotICAgICAgICBtZW1jcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAq
IHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBmYXN0Q29weShtX3dvcmRzLCBvdGhlci5tX3dv
cmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IG51bUJpdHMoKSBj
b25zdApJbmRleDogU291cmNlL1dURi93dGYvRmFzdENvcHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0Q29weS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zh
c3RDb3B5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBmYXN0Q29weShUKiBkc3QsIGNvbnN0IFQqIHNyYywgc2l6ZV90IGxlbmd0
aCkKK3sKKyNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisgICAgdWlu
dDY0X3QgdG1wID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggKiBzaXplb2YoVCk7Cisg
ICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAgICAgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAg
ICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVyY3hcblx0IgorICAgICAgICAg
ICAgInJlcCBtb3ZzcVxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAg
ICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAoJSVyc2ksICUlcmN4KSwgJSVyYXhcblx0Igor
ICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAg
ICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAg
ImphZSAzYlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRz
dCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAg
ICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMyX3QpKSkgeworICAgICAgICBh
c20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQyLCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAicmVwIG1vdnNsXG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAg
ICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxu
XHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAg
ICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAg
ICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAg
ICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAlJXJjeFxuXHQiCisg
ICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgKCUlcnNpLCAlJXJjeCksICUl
ZWF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisg
ICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSA0YlxuXHQi
CisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3Jj
KSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAi
bWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUg
KAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFm
XG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVw
IG1vdnN3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5c
dCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAg
ICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5c
dCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNi
XG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpl
IDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
NDpcblx0IgorICAgICAgICAgICAgIm1vdncgKCUlcnNpLCAlJXJjeCksICUlYXhcblx0IgorICAg
ICAgICAgICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1
YnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAg
IjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK1MiKHNyYyksICIrYyIoY291bnQp
LCAiK2EiKHRtcCkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAg
ICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAg
ICAicmVwIG1vdnNiXG5cdCIKKyAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQi
CisgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAgICJtb3Zx
ICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQiCisgICAgICAgICJz
dWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAiY21wcSAk
LTgsICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgImFkZHEgJDcsICUl
cmN4XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgKCUlcnNpLCAlJXJjeCks
ICUlYWxcblx0IgorICAgICAgICAibW92YiAlJWFsLCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAg
ICAgICJzdWJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAi
Mjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIith
Iih0bXApCisgICAgICAgIDoKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworI2Vsc2UK
KyAgICBtZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCAqIHNpemVvZihUKSk7CisjZW5kaWYKK30KKwor
aW5saW5lIHZvaWQgZmFzdENvcHlCeXRlcyh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IGJ5dGVzKQoreworICAgIGZhc3RDb3B5KHN0YXRpY19jYXN0PGNoYXIqPihkc3QpLCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3JjKSwgYnl0ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpmYXN0Q29weTsKK3VzaW5nIFdURjo6ZmFzdENvcHlCeXRlczsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKQEAgLTMxLDYg
KzMxLDggQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdFplcm9GaWxsLmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KQEAgLTc4LDcgKzgwLDcgQEAgdm9pZCBmYXN0U2V0TWF4U2luZ2xlQWxsb2NhdGlvblNpemUo
c2l6ZQogdm9pZCogZmFzdFplcm9lZE1hbGxvYyhzaXplX3QgbikgCiB7CiAgICAgdm9pZCogcmVz
dWx0ID0gZmFzdE1hbGxvYyhuKTsKLSAgICBtZW1zZXQocmVzdWx0LCAwLCBuKTsKKyAgICBmYXN0
WmVyb0ZpbGwoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCksIG4pOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTg2LDcgKzg4LDcgQEAgY2hhciogZmFzdFN0ckR1cChjb25zdCBjaGFyKiBz
cmMpCiB7CiAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzcmMpICsgMTsKICAgICBjaGFyKiBkdXAg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhsZW4pKTsKLSAgICBtZW1jcHkoZHVwLCBz
cmMsIGxlbik7CisgICAgZmFzdENvcHkoZHVwLCBzcmMsIGxlbik7CiAgICAgcmV0dXJuIGR1cDsK
IH0KIApAQCAtOTUsNyArOTcsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0WmVyb2Vk
TWFsbG9jCiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmICghdHJ5RmFzdE1hbGxvYyhuKS5nZXRW
YWx1ZShyZXN1bHQpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtZW1zZXQocmVzdWx0LCAwLCBu
KTsKKyAgICBmYXN0WmVyb0ZpbGwoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCksIG4pOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZmFzdFplcm9GaWxsKFQq
IGRzdCwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCisgICAgdWludDY0X3QgemVybyA9IDA7CisgICAgc2l6ZV90IGNvdW50ID0gbGVu
Z3RoICogc2l6ZW9mKFQpOworICAgIGlmICghKHNpemVvZihUKSAlIHNpemVvZih1aW50NjRfdCkp
KSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJj
eFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAgICAgInNocnEgJDMsICUl
cmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgc3Rvc3Fcblx0IgorICAgICAgICAgICAgImptcCAy
ZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICgl
JXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3Vi
cSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAi
Mjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrYyIoY291bnQpCisgICAgICAgICAg
ICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMy
X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwg
JSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQy
LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIHN0b3NsXG5cdCIKKyAgICAgICAgICAgICJq
bXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4
LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAg
InN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAg
ICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamUgMmZcblx0IgorICAgICAg
ICAgICAgImFkZHEgJDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICI0OlxuXHQiCisgICAgICAg
ICAgICAibW92bCAlJWVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1YnEg
JDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAgIjI6
XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAg
OiAiYSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQxNl90
KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUl
cmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMSwg
JSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBzdG9zd1xuXHQiCisgICAgICAgICAgICAiam1w
IDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwg
KCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJz
dWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAg
ICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAg
ICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAg
ICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1YnEgJDIs
ICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAgIjI6XG5c
dCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAgOiAi
YSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwg
JSVyY3hcblx0IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAicmVwIHN0b3NiXG5cdCIK
KyAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICUl
cmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQiCisgICAgICAgICJzdWJx
ICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAiY21wcSAkLTgs
ICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgImFkZHEgJDcsICUlcmN4
XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgJSVhbCwgKCUlcmRpLCAlJXJj
eClcblx0IgorICAgICAgICAic3ViICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0
IgorICAgICAgICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitjIihjb3VudCkKKyAg
ICAgICAgOiAiYSIoemVybykKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworI2Vsc2UK
KyAgICBtZW1zZXQoZHN0LCAwLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIGZhc3RaZXJvRmlsbEJ5dGVzKHZvaWQqIGRzdCwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIGZhc3RaZXJvRmlsbChzdGF0aWNfY2FzdDxjaGFyKj4oZHN0KSwgYnl0ZXMpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpmYXN0WmVyb0ZpbGw7Cit1c2luZyBXVEY6
OmZhc3RaZXJvRmlsbEJ5dGVzOwpJbmRleDogU291cmNlL1dURi93dGYvTUQ1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9NRDUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogLy8gTW9k
aWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAwNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpJbmRleDogU291cmNlL1dU
Ri93dGYvT1NBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgT1NBbGxvY2F0b3JfaAogCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUg
PHd0Zi9WTVRhZ3MuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC05MCw3ICs5MSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogT1NBbGxvY2F0b3I6OnJlYWxsb2NhdGVDb21taXR0
ZWQoVCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQogewogICAgIHZvaWQqIG5ld0Jhc2Ug
PSByZXNlcnZlQW5kQ29tbWl0KG5ld1NpemUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7
Ci0gICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUp
KTsKKyAgICBmYXN0Q29weUJ5dGVzKG5ld0Jhc2UsIG9sZEJhc2UsIHN0ZDo6bWluKG9sZFNpemUs
IG5ld1NpemUpKTsKICAgICBkZWNvbW1pdEFuZFJlbGVhc2Uob2xkQmFzZSwgb2xkU2l6ZSk7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihuZXdCYXNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
dHJpbmdQcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdENvcHkuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTExOSw3ICsxMjAsNyBAQCB2b2lkIFN0cmluZ1ByaW50U3RyZWFtOjppbmNyZWFzZVNp
emUoc2l6CiAgICAgLy8gZmFzdFJlYWxsb2Mgd2lsbCBqdXN0IGRvIG1hbGxvYytmcmVlIGFueXdh
eS4gQWxzbywgdGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIHNpbmNlCiAgICAgLy8gd2UgY2FuJ3Qg
cmVhbGxvYyB0aGUgaW5saW5lIGJ1ZmZlci4KICAgICBjaGFyKiBuZXdCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtX3NpemUpKTsKLSAgICBtZW1jcHkobmV3QnVmZmVyLCBt
X2J1ZmZlciwgbV9uZXh0ICsgMSk7CisgICAgZmFzdENvcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwg
bV9uZXh0ICsgMSk7CiAgICAgaWYgKG1fYnVmZmVyICE9IG1faW5saW5lQnVmZmVyKQogICAgICAg
ICBmYXN0RnJlZShtX2J1ZmZlcik7CiAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0
b3IuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNs
dWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1
ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC04Niw3
ICs4OCw3IEBAIHN0cnVjdCBWZWN0b3JJbml0aWFsaXplcjx0cnVlLCB0cnVlLCBUPgogewogICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVCogYmVnaW4sIFQqIGVuZCkgCiAgICAgewotICAgICAg
ICBtZW1zZXQoYmVnaW4sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkgLSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihiZWdpbikpOworICAgICAgICBmYXN0WmVyb0ZpbGwoYmVnaW4sIGVu
ZCAtIGJlZ2luKTsKICAgICB9CiB9OwogCkBAIC0xMjYsNyArMTI4LDcgQEAgc3RydWN0IFZlY3Rv
ck1vdmVyPHRydWUsIFQ+CiB7CiAgICAgc3RhdGljIHZvaWQgbW92ZShjb25zdCBUKiBzcmMsIGNv
bnN0IFQqIHNyY0VuZCwgVCogZHN0KSAKICAgICB7Ci0gICAgICAgIG1lbWNweShkc3QsIHNyYywg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3JjRW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHNyYykpOworICAgICAgICBmYXN0Q29weShkc3QsIHNyYywgc3JjRW5kIC0g
c3JjKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgbW92ZU92ZXJsYXBwaW5nKGNvbnN0IFQqIHNy
YywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpIAogICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHAJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIERlY29kZXI6OmRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh1aW50CiAgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNp
emUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQ
b3NpdGlvbiwgc2l6ZSk7CisgICAgZmFzdENvcHkoZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6
ZSk7CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCShyZXZpc2lvbiAyMjgy
MTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29ucwogICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEs
IHNpemUpOwogCiAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHko
YnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICBmYXN0Q29weShidWZmZXIsIGRhdGEsIHNpemUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9D
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3Bw
CShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAog
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxv
Yy5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIHZvaWQgQ1N0cmluZzo6aW5pdChjb25zdCBjaGFyKiBz
dHIsIHNpemUKICAgICBBU1NFUlQoc3RyKTsKIAogICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZl
cjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0
YWJsZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKKyAgICBmYXN0Q29weShtX2J1ZmZlci0+bXV0YWJs
ZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKICAgICBtX2J1ZmZlci0+bXV0YWJsZURhdGEoKVtsZW5n
dGhdID0gJ1wwJzsKIH0KIApAQCAtOTYsNyArOTcsNyBAQCB2b2lkIENTdHJpbmc6OmNvcHlCdWZm
ZXJJZk5lZWRlZCgpCiAgICAgUmVmUHRyPENTdHJpbmdCdWZmZXI+IGJ1ZmZlciA9IFdURk1vdmUo
bV9idWZmZXIpOwogICAgIHNpemVfdCBsZW5ndGggPSBidWZmZXItPmxlbmd0aCgpOwogICAgIG1f
YnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAg
IG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGxlbmd0aCAr
IDEpOworICAgIGZhc3RDb3B5KG1fYnVmZmVyLT5tdXRhYmxlRGF0YSgpLCBidWZmZXItPmRhdGEo
KSwgbGVuZ3RoICsgMSk7CiB9CiAKIGJvb2wgQ1N0cmluZzo6aXNTYWZlVG9TZW5kVG9Bbm90aGVy
VGhyZWFkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvTGluZUJyZWFrSXRlcmF0
b3JQb29sSUNVLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9MaW5lQnJlYWtJ
dGVyYXRvclBvb2xJQ1UuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0Q29weS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgpAQCAtNTEsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGlmICghdXRmOExvY2FsZS5sZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7CiAg
ICAgICAgIFZlY3RvcjxjaGFyPiBzY3JhdGNoQnVmZmVyKHV0ZjhMb2NhbGUubGVuZ3RoKCkgKyAx
MSwgMCk7Ci0gICAgICAgIG1lbWNweShzY3JhdGNoQnVmZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5k
YXRhKCksIHV0ZjhMb2NhbGUubGVuZ3RoKCkpOworICAgICAgICBmYXN0Q29weShzY3JhdGNoQnVm
ZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5kYXRhKCksIHV0ZjhMb2NhbGUubGVuZ3RoKCkpOwogCiAg
ICAgICAgIGNvbnN0IGNoYXIqIGtleXdvcmRWYWx1ZSA9IG51bGxwdHI7CiAgICAgICAgIHN3aXRj
aCAobW9kZSkgewpAQCAtNzUsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
QXRvbWljU3RyaW5nOjpmcm9tVVRGOChzY3JhdGNoQnVmZmVyLmRhdGEoKSwgbGVuZ3RoTmVlZGVk
KTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikgewogICAg
ICAgICAgICAgc2NyYXRjaEJ1ZmZlci5ncm93KGxlbmd0aE5lZWRlZCArIDEpOwotICAgICAgICAg
ICAgbWVtc2V0KHNjcmF0Y2hCdWZmZXIuZGF0YSgpICsgdXRmOExvY2FsZS5sZW5ndGgoKSwgMCwg
c2NyYXRjaEJ1ZmZlci5zaXplKCkgLSB1dGY4TG9jYWxlLmxlbmd0aCgpKTsKKyAgICAgICAgICAg
IGZhc3RaZXJvRmlsbChzY3JhdGNoQnVmZmVyLmRhdGEoKSArIHV0ZjhMb2NhbGUubGVuZ3RoKCks
IHNjcmF0Y2hCdWZmZXIuc2l6ZSgpIC0gdXRmOExvY2FsZS5sZW5ndGgoKSk7CiAgICAgICAgICAg
ICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aE5lZWRl
ZDIgPSB1bG9jX3NldEtleXdvcmRWYWx1ZSgibGIiLCBrZXl3b3JkVmFsdWUsIHNjcmF0Y2hCdWZm
ZXIuZGF0YSgpLCBzY3JhdGNoQnVmZmVyLnNpemUoKSwgJnN0YXR1cyk7CiAgICAgICAgICAgICBp
ZiAoIVVfU1VDQ0VTUyhzdGF0dXMpIHx8IGxlbmd0aE5lZWRlZCAhPSBsZW5ndGhOZWVkZWQyKQpJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29u
c3QKICAgICBBU1NFUlQobV9pczhCaXQpOwogICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEg
aW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUg
ZXhpc3RpbmcgZGF0YS4KICAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAgIG1lbWNw
eShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4K
KyAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50Q2hhcmFjdGVycywgbV9s
ZW5ndGgpOwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KICAgICBtX2J1
ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFN0cmluZ0J1
aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAgICAgQVNTRVJUKCFtX2lzOEJpdCk7CiAgICAg
Ly8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0
byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgogICAgIGF1dG8gYnVmZmVy
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZm
ZXJDaGFyYWN0ZXJzMTYpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVu
dENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFy
KSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCisgICAgZmFzdENvcHkobV9idWZmZXJDaGFyYWN0
ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aCk7CiAgICAgCiAgICAgLy8gVXBkYXRl
IHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwpAQCAt
Mjc2LDEwICsyNzYsMTAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgVUNoYXIq
IAogICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9zdHJpbmcuaXNOdWxsKCkg
PyAwIDogbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgp
LCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICB9CiAKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVy
Q2hhcmFjdGVyczE2ICsgbV9sZW5ndGgsIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4o
bGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJh
Y3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgICAgICBtX2xlbmd0
aCA9IHJlcXVpcmVkTGVuZ3RoOwogICAgIH0gZWxzZQotICAgICAgICBtZW1jcHkoYXBwZW5kVW5p
bml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90
PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGZhc3RDb3B5KGFwcGVuZFVuaW5p
dGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgQVNTRVJU
KG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CiB9CiAKQEAgLTI5MSwxMyArMjkxLDcg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgTENoYXIqIAogCiAgICAgaWYgKG1f
aXM4Qml0KSB7CiAgICAgICAgIExDaGFyKiBkZXN0ID0gYXBwZW5kVW5pbml0aWFsaXplZDxMQ2hh
cj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDgpCi0gICAgICAgICAgICBtZW1jcHko
ZGVzdCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKExD
aGFyKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkK
LSAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKGNoYXJhY3RlcnMrKyk7Ci0gICAgICAgIH0K
KyAgICAgICAgZmFzdENvcHkoZGVzdCwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBVQ2hhciogZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0
aCk7CiAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAkocmV2aXNpb24gMjI4MjE3
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cmluZ0NvbmNhdGVuYXRlX2gKIAogI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogCiAjaWZuZGVmIEF0
b21pY1N0cmluZ19oCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC0xNTcs
NyArMTU4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlv
bikgY29uc3QKICAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJz
LCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBmYXN0Q29weShkZXN0aW5hdGlv
biwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgIH0KIAogICAg
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZyhtX2NoYXJhY3RlcnMsIG1f
bGVuZ3RoKTsgfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDY2LDcgKzEwNjYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgCiAgICAgICAgICpkZXN0aW5hdGlvbiA9ICpzb3VyY2U7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51bUNoYXJhY3RlcnMgKiBzaXpl
b2YoQ2hhcmFjdGVyVHlwZSkpOworICAgIGZhc3RDb3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51
bUNoYXJhY3RlcnMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RyaW5nSW1wbDo6Y29weUNo
YXJhY3RlcnMoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBMQ2hhciogc291cmNlLCB1bnNpZ25l
ZCBudW1DaGFyYWN0ZXJzKQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92
aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92
aWRlci5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1VU
ZXh0UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RD
b3B5Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC01NSwxMCArNTYsMTAgQEAgVVRleHQqIHVU
ZXh0Q2xvbmVJbXBsKFVUZXh0KiBkZXN0aW5hdGlvbgogICAgIHZvaWQqIGV4dHJhTmV3ID0gZGVz
dGluYXRpb24tPnBFeHRyYTsKICAgICBpbnQzMl90IGZsYWdzID0gZGVzdGluYXRpb24tPmZsYWdz
OwogICAgIGludCBzaXplVG9Db3B5ID0gc3RkOjptaW4oc291cmNlLT5zaXplT2ZTdHJ1Y3QsIGRl
c3RpbmF0aW9uLT5zaXplT2ZTdHJ1Y3QpOwotICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNl
LCBzaXplVG9Db3B5KTsKKyAgICBmYXN0Q29weUJ5dGVzKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHNp
emVUb0NvcHkpOwogICAgIGRlc3RpbmF0aW9uLT5wRXh0cmEgPSBleHRyYU5ldzsKICAgICBkZXN0
aW5hdGlvbi0+ZmxhZ3MgPSBmbGFnczsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24tPnBFeHRyYSwg
c291cmNlLT5wRXh0cmEsIGV4dHJhU2l6ZSk7CisgICAgZmFzdENvcHlCeXRlcyhkZXN0aW5hdGlv
bi0+cEV4dHJhLCBzb3VyY2UtPnBFeHRyYSwgZXh0cmFTaXplKTsKICAgICBmaXhQb2ludGVyKHNv
dXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5jb250ZXh0KTsKICAgICBmaXhQb2ludGVy
KHNvdXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5wKTsKICAgICBmaXhQb2ludGVyKHNv
dXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5xKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXJMYXRp
bjEuaCIKIAogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdFpl
cm9GaWxsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTgyLDcgKzgzLDcgQEAgc3RhdGljIFVUZXh0KiB1VGV4dExhdGluMUNsb25lKFVU
ZXh0KiBkZQogICAgIHJlc3VsdC0+YSA9IHNvdXJjZS0+YTsKICAgICByZXN1bHQtPnBGdW5jcyA9
ICZ1VGV4dExhdGluMUZ1bmNzOwogICAgIHJlc3VsdC0+Y2h1bmtDb250ZW50cyA9IChVQ2hhciop
cmVzdWx0LT5wRXh0cmE7Ci0gICAgbWVtc2V0KGNvbnN0X2Nhc3Q8VUNoYXIqPihyZXN1bHQtPmNo
dW5rQ29udGVudHMpLCAwLCBzaXplb2YoVUNoYXIpICogVVRleHRXaXRoQnVmZmVySW5saW5lQ2Fw
YWNpdHkpOworICAgIGZhc3RaZXJvRmlsbChjb25zdF9jYXN0PFVDaGFyKj4ocmVzdWx0LT5jaHVu
a0NvbnRlbnRzKSwgVVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHkpOwogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTIyOCw3ICsyMjksNyBAQCBVVGV4dCogb3BlbkxhdGluMVVUZXh0UHJv
dmlkZXIoVVRleHRXaXRoCiAgICAgdGV4dC0+YSA9IGxlbmd0aDsKICAgICB0ZXh0LT5wRnVuY3Mg
PSAmdVRleHRMYXRpbjFGdW5jczsKICAgICB0ZXh0LT5jaHVua0NvbnRlbnRzID0gKFVDaGFyKil0
ZXh0LT5wRXh0cmE7Ci0gICAgbWVtc2V0KGNvbnN0X2Nhc3Q8VUNoYXIqPih0ZXh0LT5jaHVua0Nv
bnRlbnRzKSwgMCwgc2l6ZW9mKFVDaGFyKSAqIFVUZXh0V2l0aEJ1ZmZlcklubGluZUNhcGFjaXR5
KTsKKyAgICBmYXN0WmVyb0ZpbGwoY29uc3RfY2FzdDxVQ2hhcio+KHRleHQtPmNodW5rQ29udGVu
dHMpLCBVVGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSk7CiAKICAgICByZXR1cm4gdGV4dDsK
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAkocmV2aXNpb24gMjI4MjE3KQor
KysgU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDcgKzE3Miw3IEBAIGtlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UK
ICAgICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CiAKLSAgICBtZW1j
cHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRlWzBdKSk7
CisgICAgZmFzdENvcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCk7CiAgICAgKm91
dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CiAKICNpZiBDUFUoWDg2XzY0KQpJbmRleDogU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjI4Mjc0KQorKysgU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTgtMDItMDggIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBlcmltZW50IHdpdGggYWx0ZXJuYXRpdmUgaW1w
bGVtZW50YXRpb24gb2YgbWVtY3B5L21lbXNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgYSBmYXN0ZXIgeDg2XzY0LXNwZWNpZmlj
IGltcGxlbWVudGF0aW9uIG9mIG1lbWNweSBhbmQgbWVtc2V0LiBJZGVhbGx5LCB0aGlzIHdvdWxk
IGp1c3QgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gV1RGLCBidXQgd2UgaGF2ZSB0byBjb3B5
IGl0IGludG8gYm1hbGxvYyBzaW5jZSBibWFsbG9jIHNpdHMgYmVsb3cgV1RGIG9uIHRoZQorICAg
ICAgICBzdGFjay4KKworICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6CisgICAgICAgIChi
bWFsbG9jOjpmYXN0Q29weSk6CisgICAgICAgIChibWFsbG9jOjpmYXN0WmVyb0ZpbGwpOgorICAg
ICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZSk6CisgICAgICAgICogYm1hbGxvYy9CaXRzLmg6CisgICAgICAgIChibWFs
bG9jOjpCaXRzV29yZE93bmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoYm1hbGxvYzo6Qml0c1dv
cmRPd25lcjo6Y2xlYXJBbGwpOgorICAgICAgICAoYm1hbGxvYzo6Qml0c1dvcmRPd25lcjo6c2V0
KToKKyAgICAgICAgKiBibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmg6CisgICAgICAgIChibWFsbG9j
OjpJc29QYWdlPENvbmZpZz46Oklzb1BhZ2UpOgorICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIpOgorCiAyMDE4
LTAyLTA1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBHaWdh
Y2FnZTogZW5hYmxlIG9ubHkgZm9yIFdlYkNvbnRlbnQgcHJvY2VzcyBhbmQgdG9rZW4gZXhlY3V0
YWJsZXMKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGhtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkocmV2aXNpb24gMjI4MjE3
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDYgKzE4MCwyMjEgQEAgYm9vbCBmaW5kQml0SW5Xb3JkKFQgd29yZCwgc2l6ZV90JiBp
bmRleAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQg
ZmFzdENvcHkoVCogZHN0LCBUKiBzcmMsIHNpemVfdCBsZW5ndGgpCit7CisjaWYgQkNQVShYODZf
NjQpCisgICAgdWludDY0X3QgdG1wID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggKiBz
aXplb2YoVCk7CisgICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAg
ICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIK
KyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVyY3hcblx0
IgorICAgICAgICAgICAgInJlcCBtb3ZzcVxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIK
KyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAoJSVyc2ksICUlcmN4KSwg
JSVyYXhcblx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIK
KyAgICAgICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAg
ICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAg
ICAgICAgOgorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMyX3QpKSkg
eworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hc
blx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQyLCAlJXJj
eFxuXHQiCisgICAgICAgICAgICAicmVwIG1vdnNsXG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZc
blx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVy
Y3gpLCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClc
blx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxu
XHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVy
Y3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAl
JXJjeFxuXHQiCisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgKCUlcnNp
LCAlJXJjeCksICUlZWF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVyZGksICUl
cmN4KVxuXHQiCisgICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAgICAgICAg
ImphZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRz
dCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAg
ICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAgICAgICBh
c20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAicmVwIG1vdnN3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAg
ICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxu
XHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAg
ICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAg
ICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAg
ICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisg
ICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdncgKCUlcnNpLCAlJXJjeCksICUl
YXhcblx0IgorICAgICAgICAgICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAg
ICAgICAgICAgInN1YnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0Igor
ICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK1MiKHNyYyks
ICIrYyIoY291bnQpLCAiK2EiKHRtcCkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIm1l
bW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAiamIgMWZc
blx0IgorICAgICAgICAicmVwIG1vdnNiXG5cdCIKKyAgICAgICAgImptcCAyZlxuXHQiCisgICAg
ICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisg
ICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQi
CisgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAg
ICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAg
ImFkZHEgJDcsICUlcmN4XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgKCUl
cnNpLCAlJXJjeCksICUlYWxcblx0IgorICAgICAgICAibW92YiAlJWFsLCAoJSVyZGksICUlcmN4
KVxuXHQiCisgICAgICAgICJzdWJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0
IgorICAgICAgICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2Mi
KGNvdW50KSwgIithIih0bXApCisgICAgICAgIDoKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAg
ICApOworI2Vsc2UKKyAgICBtZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCAqIHNpemVvZihUKSk7Cisj
ZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZmFzdFplcm9GaWxsKFQqIGRz
dCwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBCQ1BVKFg4Nl82NCkKKyAgICB1aW50NjRfdCB6ZXJv
ID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggKiBzaXplb2YoVCk7CisgICAgaWYgKCEo
c2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgK
KyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxu
XHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBz
dG9zcVxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQi
CisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAg
ICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAg
ICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIo
ZHN0KSwgIitjIihjb3VudCkKKyAgICAgICAgICAgIDogImEiKHplcm8pCisgICAgICAgICAgICA6
ICJtZW1vcnkiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghKHNpemVvZihUKSAlIHNpemVvZih1aW50MzJfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGls
ZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIg
MWZcblx0IgorICAgICAgICAgICAgInNocnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJy
ZXAgc3Rvc2xcblx0IgorICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpc
blx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAg
ICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAg
ICAgICAgICAgICJqZSAyZlxuXHQiCisgICAgICAgICAgICAiYWRkcSAkNCwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVyZGksICUl
cmN4KVxuXHQiCisgICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAgICAgICAg
ImphZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRz
dCksICIrYyIoY291bnQpCisgICAgICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAi
bWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUg
KAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFm
XG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVw
IHN0b3N3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5c
dCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAg
ICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAg
ICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAgICAgImFkZHEgJDYsICUlcmN4XG5cdCIKKyAg
ICAgICAgICAgICI0OlxuXHQiCisgICAgICAgICAgICAibW92dyAlJWF4LCAoJSVyZGksICUlcmN4
KVxuXHQiCisgICAgICAgICAgICAic3VicSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAgImph
ZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCks
ICIrYyIoY291bnQpCisgICAgICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAibWVt
b3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhc20gdm9s
YXRpbGUgKAorICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICJqYiAxZlxu
XHQiCisgICAgICAgICJyZXAgc3Rvc2Jcblx0IgorICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAg
ICAgIjM6XG5cdCIKKyAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAg
ICAgICAgIjE6XG5cdCIKKyAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgImph
ZSAzYlxuXHQiCisgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAiamUgMmZc
blx0IgorICAgICAgICAiYWRkcSAkNywgJSVyY3hcblx0IgorICAgICAgICAiNDpcblx0IgorICAg
ICAgICAibW92YiAlJWFsLCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICJzdWIgJDEsICUl
cmN4XG5cdCIKKyAgICAgICAgImphZSA0YlxuXHQiCisgICAgICAgICIyOlxuXHQiCisgICAgICAg
IDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICA6
ICJtZW1vcnkiCisgICAgICAgICk7CisjZWxzZQorICAgIG1lbXNldChkc3QsIDAsIGxlbmd0aCAq
IHNpemVvZihUKSk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5k
aWYgLy8gQWxnb3JpdGhtX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQqIEFsbG9jYXRvcjo6cmVh
bGxvY2F0ZSh2b2lkKiBvYmplY3QKIAogICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRlKG5ld1Np
emUpOwogICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUpOwot
ICAgIG1lbWNweShyZXN1bHQsIG9iamVjdCwgY29weVNpemUpOworICAgIGZhc3RDb3B5KHN0YXRp
Y19jYXN0PGNoYXIqPihyZXN1bHQpLCBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSwgY29weVNp
emUpOwogICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShvYmplY3QpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAkocmV2aXNpb24gMjI4MjE3KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9CaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgcHVibGljOgogICAgIAogICAgIEJpdHNXb3JkT3duZXImIG9wZXJhdG9yPShjb25zdCBC
aXRzV29yZE93bmVyJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweShtX3dvcmRzLCBvdGhl
ci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZh
c3RDb3B5KG1fd29yZHMsIG90aGVyLm1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIApAQCAtOTEsMTIgKzkxLDEyIEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGNsZWFyQWxsKCkKICAgICB7Ci0gICAgICAgIG1lbXNldChtX3dvcmRzLCAw
LCBhcnJheUxlbmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZhc3RaZXJvRmls
bChtX3dvcmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoY29u
c3QgQml0c1dvcmRPd25lciYgb3RoZXIpCiAgICAgewotICAgICAgICBtZW1jcHkobV93b3Jkcywg
b3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50MzJfdCkpOworICAgICAg
ICBmYXN0Q29weShtX3dvcmRzLCBvdGhlci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9
CiAgICAgCiAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdApJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvUGFnZUlubGluZXMuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDcgQEAg
SXNvUGFnZTxDb25maWc+OjpJc29QYWdlKElzb0RpcmVjdG9yeUJhcwogICAgIDogbV9kaXJlY3Rv
cnkoZGlyZWN0b3J5KQogICAgICwgbV9pbmRleChpbmRleCkKIHsKLSAgICBtZW1zZXQobV9hbGxv
Y0JpdHMsIDAsIHNpemVvZihtX2FsbG9jQml0cykpOworICAgIGZhc3RaZXJvRmlsbChtX2FsbG9j
Qml0cywgYml0c0FycmF5TGVuZ3RoKG51bU9iamVjdHMpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29uZmlnPgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDMsNyArMjAzLDcgQEAgdm9pZCBWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IAog
ICAgIHNpemVfdCB2bVNpemUgPSBibWFsbG9jOjp2bVNpemUobmV3Q2FwYWNpdHkgKiBzaXplb2Yo
VCkpOwogICAgIFQqIG5ld0J1ZmZlciA9IHZtU2l6ZSA/IHN0YXRpY19jYXN0PFQqPih2bUFsbG9j
YXRlKHZtU2l6ZSkpIDogbnVsbHB0cjsKICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgc3Rk
OjptZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplICogc2l6ZW9mKFQpKTsKKyAgICAg
ICAgZmFzdENvcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplKTsKICAgICAgICAgdm1EZWFs
bG9jYXRlKG1fYnVmZmVyLCBibWFsbG9jOjp2bVNpemUobV9jYXBhY2l0eSAqIHNpemVvZihUKSkp
OwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333386</attachid>
            <date>2018-02-08 10:20:15 -0800</date>
            <delta_ts>2018-02-08 12:57:04 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70634</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE4LTAyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RXhwZXJpbWVudCB3aXRoIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweS9tZW1z
ZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU2
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhZG9wdHMgbmV3IGZhc3RDb3B5L2Zhc3RaZXJvRmlsbCBjYWxscyBmb3IgY2FsbHMg
dG8gbWVtY3B5L21lbXNldCB0aGF0IGRvIG5vdCB0YWtlIGEKKyAgICAgICAgY29uc3RhbnQgc2l6
ZSBhcmd1bWVudC4KKworICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlB
bGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmNvcHlUbyk6Cisg
ICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVJbnRlcm5hbCk6CisgICAgICAgICogcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojp6
ZXJvUmFuZ2VJbXBsKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29udmVudGlvbnMuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOgorICAgICAgICAoSlNDOjpjbGVh
ckFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5KToKKyAgICAgICAgKiBydW50
aW1lL0J1dHRlcmZseUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVh
dGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmFwcGVuZE1lbWNweSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmZhc3RTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpD
b25zdHJ1Y3Rpb25Db250ZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRl
ckZsYXR0ZW5pbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHA6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUpOgorCiAyMDE4LTAyLTA2ICBC
cmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBy
b3RvY29sIGdlbmVyYXRvciBzaG91bGQgYXV0b21hdGljYWxseSBkZWR1Y2UgdGhlIGNvcnJlY3Qg
aW5jbHVkZSBzdHlsZSB0byB1c2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNzYsNyArMjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBpZiAoIWlzQXZhaWxhYmxlKHNpemUpKQogICAgICAgICAgICAgICAgIGdyb3coc2l6ZSk7CiAK
LSAgICAgICAgICAgIG1lbWNweShtX3N0b3JhZ2UuYnVmZmVyKCkgKyBtX2luZGV4LCBkYXRhLCBz
aXplKTsKKyAgICAgICAgICAgIGZhc3RDb3B5Qnl0ZXMobV9zdG9yYWdlLmJ1ZmZlcigpICsgbV9p
bmRleCwgZGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICBtX2luZGV4ICs9IHNpemU7CiAgICAgICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgIH0KICAgICAKICAgICBpZiAo
cG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBtZW1zZXQobV9kYXRhLmdldCgpLCAw
LCBzaXplKTsKKyAgICAgICAgZmFzdFplcm9GaWxsQnl0ZXMobV9kYXRhLmdldCgpLCBzaXplKTsK
IAogICAgIG1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKICAg
ICBtX2Rlc3RydWN0b3IgPSBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShHaWdhY2FnZTo6
UHJpbWl0aXZlLCBwKTsgfTsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29u
dGVudHM6OmNvcHlUbyhBcnJheUJ1CiAgICAgb3RoZXIudHJ5QWxsb2NhdGUobV9zaXplSW5CeXRl
cywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CiAg
ICAgaWYgKCFvdGhlci5tX2RhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkob3RoZXIu
bV9kYXRhLmdldCgpLCBtX2RhdGEuZ2V0KCksIG1fc2l6ZUluQnl0ZXMpOworICAgIGZhc3RDb3B5
Qnl0ZXMob3RoZXIubV9kYXRhLmdldCgpLCBtX2RhdGEuZ2V0KCksIG1fc2l6ZUluQnl0ZXMpOwog
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwogfQogCkBAIC0yNDYsNyAr
MjQ2LDcgQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlSW50ZQogewogICAg
IEFTU0VSVCghYnl0ZUxlbmd0aCB8fCBzb3VyY2UpOwogICAgIGF1dG8gYnVmZmVyID0gYWRvcHRS
ZWYoKm5ldyBBcnJheUJ1ZmZlcihXVEZNb3ZlKGNvbnRlbnRzKSkpOwotICAgIG1lbWNweShidWZm
ZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKKyAgICBmYXN0Q29weUJ5dGVzKGJ1ZmZl
ci0+ZGF0YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmll
dy5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wg
QXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJbXBsKHVuc2kKICAgICB9CiAgICAgCiAgICAgdWlu
dDhfdCogYmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihiYXNlQWRkcmVzcygpKTsKLSAgICBt
ZW1zZXQoYmFzZSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7CisgICAgZmFzdFpl
cm9GaWxsQnl0ZXMoYmFzZSArIGJ5dGVPZmZzZXQsIHJhbmdlQnl0ZUxlbmd0aCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29udmVudGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMjEgKzMxLDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LXZvaWQgY2xlYXJBcnJheU1lbXNldChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJhc2UsIHVuc2ln
bmVkIGNvdW50KQotewotI2lmIENQVShYODZfNjQpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykK
LSAgICB1aW50NjRfdCB6ZXJvID0gMDsKLSAgICBhc20gdm9sYXRpbGUgKAotICAgICAgICAicmVw
IHN0b3NxXG5cdCIKLSAgICAgICAgOiAiK0QiKGJhc2UpLCAiK2MiKGNvdW50KQotICAgICAgICA6
ICJhIih6ZXJvKQotICAgICAgICA6ICJtZW1vcnkiCi0gICAgICAgICk7Ci0jZWxzZSAvLyBub3Qg
Q1BVKFg4Nl82NCkKLSAgICBtZW1zZXQoYmFzZSwgMCwgY291bnQgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSk7Ci0jZW5kaWYgLy8gZ2VuZXJpYyBDUFUKLX0KLQogdm9pZCBjbGVhckFy
cmF5TWVtc2V0KGRvdWJsZSogYmFzZSwgdW5zaWduZWQgY291bnQpCiB7CiAjaWYgQ1BVKFg4Nl82
NCkgJiYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMjI4MjE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsMjIgKzExNywxNyBAQCBpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUlu
ZGV4aW5nSGVhZGVyCiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjbGVhckFycmF5TWVtc2V0KFdyaXRlQmFycmllcjxVbmtub3duPiogYmFzZSwgdW5zaWdu
ZWQgY291bnQpOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckFycmF5TWVtc2V0KGRvdWJs
ZSogYmFzZSwgdW5zaWduZWQgY291bnQpOwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBjbGVhckFycmF5KFdyaXRlQmFycmllcjxVbmtub3duPiogYmFzZSwg
dW5zaWduZWQgY291bnQpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjb25zdCB1bnNpZ25l
ZCBtaW5Db3VudEZvck1lbXNldCA9IDEwMDsKLSAgICBpZiAoY291bnQgPj0gbWluQ291bnRGb3JN
ZW1zZXQpIHsKLSAgICAgICAgY2xlYXJBcnJheU1lbXNldChiYXNlLCBjb3VudCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICAKKyAgICBmYXN0WmVyb0ZpbGwoYmFzZSwgY291
bnQpOworI2Vsc2UKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb3VudDsgaS0tOykKICAgICAgICAg
YmFzZVtpXS5jbGVhcigpOworI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckFy
cmF5KGRvdWJsZSogYmFzZSwgdW5zaWduZWQgY291bnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMzksMTkgKzEzMzksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvUAogICAgIAogICAgIGlmICh0eXBlID09IEFycmF5V2l0aERvdWJs
ZSkgewogICAgICAgICBkb3VibGUqIGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIGZpcnN0QnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBmaXJzdEFy
cmF5U2l6ZSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIgKyBmaXJzdEFycmF5U2l6ZSwgc2Vjb25k
QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBz
ZWNvbmRBcnJheVNpemUpOworICAgICAgICBmYXN0Q29weShidWZmZXIsIGZpcnN0QnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBmaXJzdEFycmF5U2l6ZSk7CisgICAgICAgIGZh
c3RDb3B5KGJ1ZmZlciArIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKS5kYXRhKCksIHNlY29uZEFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIGlmICh0eXBl
ICE9IEFycmF5V2l0aFVuZGVjaWRlZCkgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGJ1ZmZlciA9IHJlc3VsdC0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CiAgICAg
ICAgIAogICAgICAgICBhdXRvIGNvcHkgPSBbJl0gKHVuc2lnbmVkIG9mZnNldCwgdm9pZCogc291
cmNlLCB1bnNpZ25lZCBzaXplLCBJbmRleGluZ1R5cGUgdHlwZSkgewogICAgICAgICAgICAgaWYg
KHR5cGUgIT0gQXJyYXlXaXRoVW5kZWNpZGVkKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGJ1
ZmZlciArIG9mZnNldCwgc291cmNlLCBzaXplb2YoSlNWYWx1ZSkgKiBzaXplKTsKKyAgICAgICAg
ICAgICAgICBmYXN0Q29weShidWZmZXIgKyBvZmZzZXQsIHN0YXRpY19jYXN0PFdyaXRlQmFycmll
cjxVbmtub3duPio+KHNvdXJjZSksIHNpemUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c2l6ZTsgaS0tOykKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIG9mZnNldF0uY2xlYXIoKTsK
KyAgICAgICAgICAgIGNsZWFyQXJyYXkoYnVmZmVyICsgb2Zmc2V0LCBzaXplKTsKICAgICAgICAg
fTsKICAgICAgICAgCiAgICAgICAgIGNvcHkoMCwgZmlyc3RCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KS5kYXRhKCksIGZpcnN0QXJyYXlTaXplLCBmaXJzdFR5cGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI4
MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsNyArOTMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnRyeUNyZWF0ZShWCiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNl
LCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVh
ZGVyKQogICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7
Ci0gICAgbWVtc2V0KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5
LCAwLCBwcm9wZXJ0eUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgZmFz
dFplcm9GaWxsKHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjksMTQgKzEy
OSwxMyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3JvCiAgICAgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciA9IHN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIoaW50ZW5k
ZWRPd25lcik7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAog
ICAgICAgICB2bSwgaW50ZW5kZWRPd25lciwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
bWVtY3B5KAorICAgIGZhc3RDb3B5Qnl0ZXMoCiAgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9y
YWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBvbGRCdXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgdG90YWxTaXplKDAs
IG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOwotICAgIG1lbXNldCgKKyAgICBmYXN0WmVyb0ZpbGwoCiAgICAgICAgIHJl
c3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBuZXdQcm9wZXJ0eUNhcGFjaXR5LAotICAgICAgICAw
LAotICAgICAgICAobmV3UHJvcGVydHlDYXBhY2l0eSAtIG9sZFByb3BlcnR5Q2FwYWNpdHkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG5ld1Byb3BlcnR5Q2FwYWNpdHkgLSBv
bGRQcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjgsOCAr
MTY3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZv
aWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwodm0sIG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCi0gICAgbWVt
Y3B5KG5ld0Jhc2UsIHRoZUJhc2UsIG9sZFNpemUpOworICAgIGZhc3RDb3B5Qnl0ZXMobmV3QmFz
ZSwgdGhlQmFzZSwgb2xkU2l6ZSk7CiAgICAgcmV0dXJuIGZyb21CYXNlKG5ld0Jhc2UsIDAsIHBy
b3BlcnR5Q2FwYWNpdHkpOwogfQogCkBAIC0xOTksNyArMTk3LDcgQEAgaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5OjpyZXNpemVBcnJheQogICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCiAg
ICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRl
ciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAogICAgICAgICB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSk7Ci0gICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICBmYXN0Q29w
eUJ5dGVzKHRvLCBmcm9tLCBzaXplKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+PiBHCiAgICAgY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiByZXN1bHQg
PSBjcmVhdGUobGVuZ3RoKTsKLSAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCksIGFycmF5LCBsZW5n
dGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIGZhc3RDb3B5KHJlc3Vs
dC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI4
MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1Myw5ICs1NTMsOSBAQCBib29sIEpTQXJyYXk6OmFwcGVuZE1lbWNweShF
eGVjU3RhdGUqIGV4CiAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIo
KS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICBtZW1j
cHkoYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBv
dGhlckFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9m
KEpTVmFsdWUpICogb3RoZXJMZW5ndGgpOworICAgICAgICBmYXN0Q29weShidXR0ZXJmbHkoKS0+
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBvdGhlckxlbmd0aCk7CiAgICAgZWxz
ZQotICAgICAgICBtZW1jcHkoYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFy
dEluZGV4LCBvdGhlckFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSwgc2l6
ZW9mKEpTVmFsdWUpICogb3RoZXJMZW5ndGgpOworICAgICAgICBmYXN0Q29weShidXR0ZXJmbHko
KS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIG90aGVyQXJyYXktPmJ1dHRlcmZs
eSgpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBvdGhlckxlbmd0aCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTc2MSw5ICs3NjEsOSBAQCBKU0FycmF5KiBKU0FycmF5OjpmYXN0U2xpY2UoRXhl
Y1N0YXRlJiBlCiAKICAgICAgICAgYXV0byYgcmVzdWx0QnV0dGVyZmx5ID0gKnJlc3VsdEFycmF5
LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheVdpdGhEb3VibGUp
Ci0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5k
YXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRl
eCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgZmFzdENvcHkocmVzdWx0
QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1
b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgY291bnQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1
dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFs
dWUpICogY291bnQpOworICAgICAgICAgICAgZmFzdENvcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRp
Z3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseSgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJ
bmRleCwgY291bnQpOwogICAgICAgICByZXN1bHRCdXR0ZXJmbHkuc2V0UHVibGljTGVuZ3RoKGNv
dW50KTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgSlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIGlmICghbV92ZWN0b3IpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkKLSAgICAgICAgbWVtc2V0KG1fdmVjdG9y
LmdldCgpLCAwLCBzaXplKTsKKyAgICAgICAgZmFzdFplcm9GaWxsQnl0ZXMobV92ZWN0b3IuZ2V0
KCksIHNpemUpOwogICAgIAogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNpemUpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6cwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xh
c3NJbmZvKHZtKTsKICAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9y
Ojp0eXBlVmFsdWUpIHsKLSAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1
c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIC8vIFRoZSBzdXBl
ciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbW1vdmUgc2luY2Ugd2UncmUgdGhlIHNhbWUgdHlw
ZS4KICAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIG90aGVyID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKICAgICAgICAgbGVuZ3RoID0gc3RkOjptaW4o
bGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE3OCwxMCArMTE3OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252
ZXJ0CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoCiAgICAgICAgIHZtLCB0aGlzLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CiAgICAgCi0gICAgbWVtY3B5KAor
ICAgIGZhc3RDb3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlTaXplLAogICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBw
cm9wZXJ0eVNpemUsCi0gICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgICAgICBwcm9wZXJ0eVNpemUpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3
U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgbmV3U3RvcmFnZS0+
c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExlbmd0aCk7CkBAIC0zNTgwLDcgKzM1ODAsNyBAQCB2b2lk
IEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlCiAgICAgdm9pZCogY3VycmVudEJh
c2UgPSBvbGRCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAgICAg
dm9pZCogbmV3QmFzZSA9IG5ld0J1dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFm
dGVyKTsKIAotICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgZmFzdENvcHlCeXRlcyhuZXdCYXNlLCBjdXJy
ZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CiAgICAgCiAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFi
bGUoVk0mIHZtLCBjb24KIHsKICAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwog
Ci0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOworICAgIGZh
c3RDb3B5Qnl0ZXMobV9pbmRleCwgb3RoZXIubV9pbmRleCwgZGF0YVNpemUoKSk7CiAKICAgICBp
dGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKICAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODIxNykKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBACisyMDE4
LTAyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRXhwZXJp
bWVudCB3aXRoIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweS9tZW1zZXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRk
cyBhIGZhc3RlciB4ODZfNjQtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgbWVtY3B5IGFuZCBt
ZW1zZXQuIFRoZXNlIHZlcnNpb25zIGdvIGJ5CisgICAgICAgIGRpZmZlcmVudCBuYW1lcyB0aGFu
IG1lbWNweS9tZW1zZXQgYW5kIGhhdmUgYSBkaWZmZXJlbnQgQVBJOgorICAgICAgICAKKyAgICAg
ICAgV1RGOjpmYXN0Q29weTxUPihUKiBkc3QsIFQqIHNyYywgc2l6ZV90IE4pOiBjb3BpZXMgTiB2
YWx1ZXMgb2YgdHlwZSBUIGZyb20gc3JjIHRvIGRzdC4KKyAgICAgICAgV1RGOjpmYXN0WmVyb0Zp
bGwoVCogZHN0LCBzaXplX1QgTik6IHdyaXRlcyBOICogc2l6ZW9mKFQpIHplcm9lcyB0byBkc3Qu
CisgICAgICAgIAorICAgICAgICBUaGVyZSBhcmUgYWxzbyAqQnl0ZXMgdmFyaWFudHMgdGhhdCB0
YWtlIHZvaWQqIGZvciBkc3QgYW5kIHNyYyBhbmQgc2l6ZV90IG51bUJ5dGVzLiBUaG9zZSBhcmUK
KyAgICAgICAgbW9zdCBhcHByb3ByaWF0ZSBpbiBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgaXMgYWxy
ZWFkeSBjb21wdXRpbmcgYnl0ZXMuCisgICAgICAgIAorICAgICAgICBUaGVzZSB3aWxsIGp1c3Qg
Y2FsbCBtZW1jcHkvbWVtc2V0IG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgb3B0aW1pemVkIHZlcnNp
b25zIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgICAgICAKKyAgICAgICAgVGhlc2UgbmV3IGZ1bmN0
aW9ucyBhcmUgbm90IGtub3duIHRvIHRoZSBjb21waWxlciB0byBiZSBtZW1jcHkvbWVtc2V0LiBU
aGlzIGhhcyB0aGUgZWZmZWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbXBpbGVyIHdpbGwgbm90IHRy
eSB0byByZXBsYWNlIHRoZW0gd2l0aCBhbnl0aGluZyBlbHNlLiBUaGlzIGNvdWxkIGJlIGdvb2Qg
b3IgYmFkOgorICAgICAgICAKKyAgICAgICAgLSBJdCdzICpnb29kKiBpZiB0aGUgc2l6ZSBpcyAq
bm90IGtub3duKiBhdCBjb21waWxlIHRpbWUuIEluIHRoYXQgY2FzZSwgYnkgbXkgYmVuY2htYXJr
cywgdGhlc2UKKyAgICAgICAgICB2ZXJzaW9ucyBhcmUgZmFzdGVyIHRoYW4gZWl0aGVyIHRoZSBt
ZW1jcHkvbWVtc2V0IGNhbGwgb3Igd2hhdGV2ZXIgZWxzZSB0aGUgY29tcGlsZXIgY291bGQKKyAg
ICAgICAgICBlbWl0LiBUaGlzIGlzIGJlY2F1c2Ugb2YgYSBjb21iaW5hdGlvbiBvZiBpbmxpbmlu
ZyBhbmQgdGhlIGFsZ29yaXRobSBpdHNlbGYgKHNlZSBiZWxvdykuCisgICAgICAgIAorICAgICAg
ICAtIEl0J3MgKmJhZCogaWYgdGhlIHNpemUgaXMgKmtub3duKiBhdCBjb21waWxlIHRpbWUuIElu
IHRoYXQgY2FzZSwgdGhlIGNvbXBpbGVyIGNvdWxkCisgICAgICAgICAgcG90ZW50aWFsbHkgZW1p
dCBhIGZ1bGx5IHVucm9sbGVkIG1lbWNweS9tZW1zZXQuIFRoYXQgbWlnaHQgbm90IGhhcHBlbiBp
ZiB0aGUgc2l6ZSBpcyBsYXJnZQorICAgICAgICAgIChldmVuIGlmIGl0J3Mga25vd24pLCBidXQg
aW4gdGhpcyBwYXRjaCBJIGF2b2lkIHJlcGxhY2luZyBhbnkgbWVtY3B5L21lbXNldCBjYWxscyB3
aGVuIHRoZQorICAgICAgICAgIHNpemUgaXMgYSBjb25zdGFudC4gSW4gcGFydGljdWxhciwgdGhp
cyB0b3RhbGx5IGF2b2lkcyB0aGUgY2FsbCBvdmVyaGVhZCAtLSBpZiB0aGUgc2l6ZSBpcworICAg
ICAgICAgIHNtYWxsLCB0aGVuIHRoZSBjb21waWxlciB3aWxsIGVtaXQgYSBuaWNlIGlubGluZWQg
Y29weSBvciBzZXQuIElmIHRoZSBzaXplIGlzIGxhcmdlLCB0aGVuIHRoZQorICAgICAgICAgIG1v
c3Qgb3B0aW1hbCB0aGluZyB0byBkbyBpcyBlbWl0IHRoZSBzaG9ydGVzdCBwaWVjZSBvZiBjb2Rl
IHBvc3NpYmxlLCBhbmQgdGhhdCdzIGEgY2FsbCB0bworICAgICAgICAgIG1lbWNweS9tZW1zZXQu
CisgICAgICAgIAorICAgICAgICBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgeW91IGhhdmUgdG8gY2hv
b3NlIGJldHdlZW4gdGhlbSBvbiB5b3VyIG93bi4gT25lIHdheSB0byBhdm9pZCB0aGF0IG1pZ2h0
CisgICAgICAgIGhhdmUgYmVlbiB0byBvdmVycmlkZSB0aGUgbWVtY3B5L21lbXNldCBzeW1ib2xz
LCBzbyB0aGF0IHRoZSBjb21waWxlciBjYW4gc3RpbGwgZG8gaXRzCisgICAgICAgIHJlYXNvbmlu
Zy4gQnV0IHRoYXQncyBub3QgcXVpdGUgcmlnaHQsIHNpbmNlIHRoZW4gd2Ugd291bGQgbG9zZSBp
bmxpbmluZyBpbiB0aGUgdW5rbm9udy1zaXplCisgICAgICAgIGNhc2UuIEFsc28sIGl0J3MgcG9z
c2libGUgdGhhdCBmb3Igc29tZSB1bmtub3duLXNpemUgY2FzZXMsIHRoZSBjb21waWxlciBjb3Vs
ZCBjaG9vc2UgdG8gZW1pdAorICAgICAgICBzb21ldGhpbmcgb24gaXRzIG93biBiZWNhdXNlIGl0
IG1pZ2h0IHRoaW5rIHRoYXQgc29tZSBwcm9wZXJ0eSBvZiBhbGlhc2luZyBvciBhbGlnbm1lbnQg
Y291bGQKKyAgICAgICAgaGVscCBpdC4gSSB0aGluayBpdCdzIGEgYml0IGJldHRlciB0byB1c2Ug
b3VyIG93biBjb3B5L3NldCBpbXBsZW1lbnRhdGlvbnMgZXZlbiBpbiB0aG9zZSBjYXNlcy4KKyAg
ICAgICAgQW5vdGhlciB3YXkgdGhhdCBJIHRyaWVkIGF2b2lkaW5nIHRoaXMgaXMgdG8gZGV0ZWN0
IGluc2lkZSBmYXN0Q29weS9mYXN0WmVyb0ZpbGwgaWYgdGhlIHNpemUgaXMKKyAgICAgICAgY29u
c3RhbnQuIEJ1dCB0aGVyZSBpcyBubyBnb29kIHdheSB0byBkbyB0aGF0IGluIEMrKy4gVGhlcmUg
aXMgYSBidWlsdGluIGZvciBkb2luZyB0aGF0IGluc2lkZSBhCisgICAgICAgIG1hY3JvLCBidXQg
dGhhdCBmZWVscyBqYW5reSwgc28gSSBkaWRuJ3Qgd2FudCB0byBkbyBpdCBpbiB0aGlzIHBhdGNo
LgorICAgICAgICAKKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgdGhlc2UgbmV3IGZhc3RDb3B5L2Zh
c3RaZXJvRmlsbCBmdW5jdGlvbnMgYXJlIGZhc3RlciBpcyB0aGF0OgorICAgICAgICAKKyAgICAg
ICAgLSBUaGV5IGNhbiBiZSBpbmxpbmVkLiBUaGVyZSBpcyBubyBmdW5jdGlvbiBjYWxsLiBPbmx5
IGEgZmV3IHJlZ2lzdGVycyBnZXQgY2xvYmJlcmVkLiBTbywgdGhlCisgICAgICAgICAgaW1wYWN0
IG9uIHRoZSBxdWFsaXR5IG9mIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBtZW1jcHkvbWVtc2V0
IGlzIHNtYWxsZXIuCisgICAgICAgIAorICAgICAgICAtIFRoZXkgdXNlIHR5cGUgaW5mb3JtYXRp
b24gdG8gc2VsZWN0IHRoZSBpbXBsZW1lbnRhdGlvbi4gRm9yIHNpemVzIHRoYXQgYXJlIG11bHRp
cGxlcyBvZiAyLCA0LAorICAgICAgICAgIG9yIDgsIHRoZSByZXN1bHRpbmcgY29kZSBwZXJmb3Jt
cyBkcmFtYXRpY2FsbHkgYmV0dGVyIG9uIHNtYWxsIGFycmF5cyB0aGFuIG1lbWNweSBiZWNhdXNl
IGl0CisgICAgICAgICAgdXNlcyBmZXdlciBjeWNsZXMuIFRoZSBkaWZmZXJlbmNlIGlzIGdyZWF0
ZXN0IGZvciAyIGFuZCA0IGJ5dGUgdHlwZXMsIHNpbmNlIG1lbWNweSB1c3VhbGx5CisgICAgICAg
ICAgaGFuZGxlcyBzbWFsbCBhcnJheXMgYnkgdGllcmluZyBmcm9tIGEgOC1ieXRlIHdvcmQgY29w
eSBsb29wIHRvIGEgYnl0ZSBjb3B5IGxvb3AuIFNvLCBmb3IgMgorICAgICAgICAgIG9yIDQgYnl0
ZSBhcnJheXMsIHdlIHVzZSBhbiBhbGdvcml0aG0gdGhhdCB0aWVycyBmcm9tIDgtYnl0ZSB3b3Jk
IGRvd24gdG8gYSAyLWJ5dGUgb3IgNC1ieXRlCisgICAgICAgICAgKGRlcGVuZGluZyBvbiB0eXBl
KSBjb3B5IGxvb3AuIFNvLCBmb3IgZXhhbXBsZSwgd2hlbiBjb3B5aW5nIGEgMTYtYml0IHN0cmlu
ZyB0aGF0IGhhcyAxLCAyLCBvcgorICAgICAgICAgIDMgY2hhcmFjdGVycywgdGhpcyBtZWFucyBk
b2luZyAxLCAyLCBvciAzIHdvcmQgY29waWVzIHJhdGhlciB0aGFuIDIsIDQsIG9yIDYgYnl0ZSBj
b3BpZXMuIEZvcgorICAgICAgICAgIDgtYnl0ZSB0eXBlcywgdGhlIHJlc3VsdGluZyBzYXZpbmdz
IGFyZSBtYWlubHkgdGhhdCB0aGVyZSBpcyBubyBjaGVjayB0byBzZWUgaWYgYSB0aWVyLWRvd24g
dG8KKyAgICAgICAgICB0aGUgYnl0ZS1jb3B5IGxvb3AgaXMgbmVlZGVkIC0tIHNvIHJlYWxseSB0
aGF0IG1lYW5zIHJlZHVjaW5nIGNvZGUgc2l6ZS4gMS1ieXRlIHR5cGVzIGRvbid0CisgICAgICAg
ICAgZ2V0IHRoaXMgaW5oZXJlbnQgYWR2YW50YWdlIG92ZXIgbWVtY3B5L21lbXNldCwgYnV0IHRo
ZXkgc3RpbGwgYmVuZWZpdCBmcm9tIGFsbCBvZiB0aGUgb3RoZXIKKyAgICAgICAgICBhZHZhbnRh
Z2VzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gT2YgY291cnNlLCB0aGlzIGFkdmFudGFnZSBpc24ndCBp
bmhlcmVudCB0byBvdXIgYXBwcm9hY2guIFRoZQorICAgICAgICAgIGNvbXBpbGVyIGNvdWxkIGFs
c28gbm90aWNlIHRoYXQgdGhlIGFyZ3VtZW50cyB0byBtZW1jcHkvbWVtc2V0IGhhdmUgc29tZSBh
bGlnbm1lbnQgcHJvcGVydGllcy4KKyAgICAgICAgICBJdCBjb3VsZCBkbyBpdCBldmVuIG1vcmUg
Z2VuZXJhbGx5IHRoYW4gd2UgZG8gLSBmb3IgZXhhbXBsZSBhIGNvcHkgb3ZlciBieXRlcyB3aGVy
ZSB0aGUgc2l6ZQorICAgICAgICAgIGlzIGEgbXVsdGlwbGUgb2YgNCBjYW4gdXNlIHRoZSA0LWJ5
dGUgd29yZCBhbGdvcml0aG0uIEJ1dCBiYXNlZCBvbiBteSB0ZXN0cywgdGhlIGNvbXBpbGVyIGRv
ZXMKKyAgICAgICAgICBub3QgZG8gdGhpcyAoZXZlbiB0aG91Z2ggaXQgZG9lcyBvdGhlciB0aGlu
Z3MsIGxpa2UgdHVybiBhIG1lbXNldCBjYWxsIHdpdGggYSB6ZXJvIHZhbHVlCisgICAgICAgICAg
YXJndW1lbnQgaW50byBhIGJ6ZXJvIGNhbGwpLgorICAgICAgICAKKyAgICAgICAgLSBUaGV5IHVz
ZSBhIHZlcnkgbmljZWx5IHdyaXR0ZW4gd29yZCBjb3B5L3NldCBsb29wIGZvciBzbWFsbCBhcnJh
eXMuIEkgc3BlbnQgYSBsb3Qgb2YgdGltZQorICAgICAgICAgIGdldHRpbmcgdGhlIGFzc2VtYmx5
IGp1c3QgcmlnaHQuIFdoZW4gd2UgdXNlIG1lbWNweS9tZW1zZXQsIHNvbWV0aW1lcyB3ZSB3b3Vs
ZCBvcHRpbWl6ZSB0aGUKKyAgICAgICAgICBjYWxsIGJ5IGhhdmluZyBhIGZhc3QgcGF0aCB3b3Jk
IGNvcHkgbG9vcCBmb3Igc21hbGwgc2l6ZXMuIFRoYXQncyBub3QgbmVjZXNzYXJ5IHdpdGggdGhp
cworICAgICAgICAgIGltcGxlbWVudGF0aW9uLCBzaW5jZSB0aGUgYXNzZW1ibHkgY29weSBsb29w
IGdldHMgaW5saW5lZC4KKyAgICAgICAgCisgICAgICAgIC0gVGhleSB1c2UgYHJlcCBtb3ZzYCBv
ciBgcmVwIHN0b3NgIGZvciBjb3BpZXMgb2YgMjAwIGJ5dGVzIG9yIG1vcmUuIFRoaXMgZGVjaXNp
b24gYmVuY2htYXJrcworICAgICAgICAgIHBvb3JseSBvbiBldmVyeSBzeW50aGV0aWMgbWVtY3B5
L21lbXNldCBiZW5jaG1hcmsgSSBoYXZlIGJ1aWx0LCBhbmQgc28gdW5zdXJwcmlzaW5nbHksIGl0
J3MKKyAgICAgICAgICBub3Qgd2hhdCBzeXN0ZW0gbWVtY3B5L21lbXNldCBkb2VzLiBNb3N0IHN5
c3RlbSBtZW1jcHkvbWVtc2V0IGltcGxlbWVudGF0aW9ucyBlbmQgdXAgZG9pbmcKKyAgICAgICAg
ICBzb21lIFNTRSBmb3IgbWVkaXVtLXNpemVkIGNvcGllcywuIEhvd2V2ZXIsIEkgcHJldmlvdXNs
eSBmb3VuZCB0aGF0IHRoaXMgZGVjaXNpb24gaXMgYmFkIGZvcgorICAgICAgICAgIG9uZSBvZiB0
aGUgbWVtc2V0IGNhbGxzIGluIEdDIChzZWUgY2xlYXJBcnJheSgpIGFuZCBmcmllbmRzIGluIEFy
cmF5Q29udmVudGlvbnMuaHxjcHApIC0gSSB3YXMKKyAgICAgICAgICBhYmxlIHRvIG1ha2UgdGhl
IG92ZXJoZWFkIG9mIHRoYXQgY2FsbCB2aXJ0dWFsbHkgZGlzYXBwZWFyIGJ5IGRvaW5nIGByZXAg
c3Rvc2AgbW9yZQorICAgICAgICAgIGFnZ3Jlc3NpdmVseS4gVGhlIHRoZW9yeSBiZWhpbmQgdGhp
cyBjaGFuZ2UgaXMgdGhhdCBpdCdzIG5vdCBqdXN0IHRoZSBHQyB0aGF0IHByZWZlcnMgc21hbGxl
cgorICAgICAgICAgIGByZXBgIHRocmVzaG9sZCBhbmQgbm8gU1NFLiBJIGFtIGJldHRpbmcgdGhh
dCBgcmVwYGluZyBtb3JlIGlzIGJldHRlciB3aGVuIHRoZSBoZWFwIGdldHMKKyAgICAgICAgICBj
aGFvdGljIGFuZCB0aGUgZGF0YSBiZWluZyBjb3BpZWQgaXMgdXNlZCBpbiBpbnRlcmVzdGluZyB3
YXlzIC0tIGhlbmNlLCBzeW50aGV0aWMKKyAgICAgICAgICBtZW1jcHkvbWVtc2V0IGJlbmNobWFy
a3MgdGhpbmsgaXQncyBiYWQgKHRoZXkgZG9uJ3QgZG8gZW5vdWdoIGNoYW90aWMgbWVtb3J5IGFj
Y2Vzc2VzKSB3aGlsZQorICAgICAgICAgIGl0J3MgZ29vZCBmb3IgcmVhbC13b3JsZCB1c2VzLiBB
bHNvLCB3aGVuIEkgcHJldmlvdXNseSB3b3JrZWQgb24gSlZNcywgSSBoYWQgZm91bmQgdGhhdCB0
aGUKKyAgICAgICAgICBiZXN0IG1lbWNweS9tZW1zZXQgaGV1cmlzdGljcyB3aGVuIGRlYWxpbmcg
d2l0aCBHQydkIG9iamVjdHMgaW4gYSBjcmF6eSBoZWFwIHdlcmUgZGlmZmVyZW50CisgICAgICAg
ICAgdGhhbiBhbnkgbWVtY3B5L21lbXNldCBpbiBhbnkgc3lzdGVtIGxpYnJhcnkuCisgICAgICAg
IAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUgYSAwLjklIHNwZWVkLXVwIG9uIFBMVC4gSSdt
IG5vdCBzdXJlIGlmIGl0J3MgbW9yZSBiZWNhdXNlIG9mIHRoZSBpbmxpbmluZyBvcgorICAgICAg
ICB0aGUgYHJlcGAuIEkgdGhpbmsgaXQncyBib3RoLiBJJ2xsIGxlYXZlIGZpZ3VyaW5nIG91dCB0
aGUgZXhhY3QgdHVuaW5nIGZvciBmdXR1cmUgcGF0Y2hlcy4KKworICAgICAgICAqIHd0Zi9CaXRW
ZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldFNsb3cpOgorICAgICAgICAo
V1RGOjpCaXRWZWN0b3I6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpyZXNp
emVPdXRPZkxpbmUpOgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjp3b3JkQ291bnQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGlu
ZUJpdHM6Om51bVdvcmRzIGNvbnN0KToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudEJ1ZmZlci5o
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpncm93RXhhY3QpOgorICAgICAgICAq
IHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3JXb3JkT3du
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3JXb3JkT3duZXI6OmNs
ZWFyQWxsKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3RvcldvcmRPd25lcjo6c2V0KToKKyAg
ICAgICAgKiB3dGYvRmFzdENvcHkuaDogQWRkZWQuCisgICAgICAgIChXVEY6OmZhc3RDb3B5KToK
KyAgICAgICAgKFdURjo6ZmFzdENvcHlCeXRlcyk6CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2Mu
Y3BwOgorICAgICAgICAoV1RGOjpmYXN0WmVyb2VkTWFsbG9jKToKKyAgICAgICAgKFdURjo6ZmFz
dFN0ckR1cCk6CisgICAgICAgIChXVEY6OnRyeUZhc3RaZXJvZWRNYWxsb2MpOgorICAgICAgICAq
IHd0Zi9GYXN0WmVyb0ZpbGwuaDogQWRkZWQuCisgICAgICAgIChXVEY6OmZhc3RaZXJvRmlsbCk6
CisgICAgICAgIChXVEY6OmZhc3RaZXJvRmlsbEJ5dGVzKToKKyAgICAgICAgKiB3dGYvTUQ1LmNw
cDoKKyAgICAgICAgKiB3dGYvT1NBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6T1NBbGxvY2F0
b3I6OnJlYWxsb2NhdGVDb21taXR0ZWQpOgorICAgICAgICAqIHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ1ByaW50U3RyZWFtOjppbmNyZWFzZVNpemUpOgor
ICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lz
dGVudERlY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rlcjo6ZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dEVuY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rlcjo6ZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDoKKyAgICAg
ICAgKFdURjo6Q1N0cmluZzo6aW5pdCk6CisgICAgICAgIChXVEY6OkNTdHJpbmc6OmNvcHlCdWZm
ZXJJZk5lZWRlZCk6CisgICAgICAgICogd3RmL3RleHQvTGluZUJyZWFrSXRlcmF0b3JQb29sSUNV
Lmg6CisgICAgICAgIChXVEY6OkxpbmVCcmVha0l0ZXJhdG9yUG9vbDo6bWFrZUxvY2FsZVdpdGhC
cmVha0tleXdvcmQpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6
OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKToKKyAgICAgICAgKiB3dGYvdGV4dC9pY3UvVVRl
eHRQcm92aWRlci5jcHA6CisgICAgICAgIChXVEY6OnVUZXh0Q2xvbmVJbXBsKToKKyAgICAgICAg
KiB3dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHA6CisgICAgICAgIChXVEY6OnVU
ZXh0TGF0aW4xQ2xvbmUpOgorICAgICAgICAoV1RGOjpvcGVuTGF0aW4xVVRleHRQcm92aWRlcik6
CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5jcHA6CisKIDIwMTgtMDItMDYgIEZ1amlp
IEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0dUS10gZmFz
dC9ldmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTQuaHRtbCBpcyBmbGFreQpJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjgyMTcpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYsNiArMjA2LDggQEAKIAkJMEY1RjNENjgxRjNGRUJBNjAwQjExNUEyIC8qIENhZ2VkVW5p
cXVlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhZ2VkVW5pcXVlUHRyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0
cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrZWRQcmlu
dFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJFMURGQ0JE
MUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2NrZWRQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjYyQThBNjIwMkNDQzE0MDA3Qjg2MjMgLyogRmFzdENvcHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdENvcHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MkE4QTcyMDJDQ0MxNTAwN0I4NjIzIC8qIEZhc3RaZXJvRmlsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0WmVyb0ZpbGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9ja1R5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xv
Y2tUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsb2NrVHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2QjI4MjFEQzk3QkFCMDA0QTFEM0YgLyog
TW9ub3RvbmljVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
b25vdG9uaWNUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2NCw5ICs4
NjYsMTEgQEAKIAkJCQlBOEE0NzI5RjE1MUE4MjVBMDA0MTIzRkYgLyogRXhwb3J0TWFjcm9zLmgg
Ki8sCiAJCQkJMEY3QzVGQjUxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwICov
LAogCQkJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8sCisJ
CQkJMEY2MkE4QTYyMDJDQ0MxNDAwN0I4NjIzIC8qIEZhc3RDb3B5LmggKi8sCiAJCQkJQThBNDcy
QTExNTFBODI1QTAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuY3BwICovLAogCQkJCUE4QTQ3MkEyMTUx
QTgyNUEwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmggKi8sCiAJCQkJMEY3OUM3QzMxRTczNTExODAw
RUIzNEQxIC8qIEZhc3RUTFMuaCAqLywKKwkJCQkwRjYyQThBNzIwMkNDQzE1MDA3Qjg2MjMgLyog
RmFzdFplcm9GaWxsLmggKi8sCiAJCQkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1
cmVEZWZpbmVzLmggKi8sCiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmlu
dFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmlu
dFN0cmVhbS5oICovLApJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDkg
QEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDEsNyArNDMsNyBA
QCB2b2lkIEJpdFZlY3Rvcjo6c2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImCiAgICAgICAgIG5ld0Jp
dHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CiAgICAgZWxzZSB7CiAgICAgICAg
IE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUo
b3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwg
b3RoZXIuYml0cygpLCBieXRlQ291bnQob3RoZXIuc2l6ZSgpKSk7CisgICAgICAgIGZhc3RDb3B5
KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCB3b3JkQ291bnQob3RoZXIu
c2l6ZSgpKSk7CiAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAxOwogICAgIH0KICAgICBpZiAoIWlzSW5saW5lKCkg
JiYgIWlzRW1wdHlPckRlbGV0ZWRWYWx1ZSgpKQpAQCAtNjksNyArNzEsNyBAQCB2b2lkIEJpdFZl
Y3Rvcjo6Y2xlYXJBbGwoKQogICAgIGlmIChpc0lubGluZSgpKQogICAgICAgICBtX2JpdHNPclBv
aW50ZXIgPSBtYWtlSW5saW5lQml0cygwKTsKICAgICBlbHNlCi0gICAgICAgIG1lbXNldChvdXRP
ZkxpbmVCaXRzKCktPmJpdHMoKSwgMCwgYnl0ZUNvdW50KHNpemUoKSkpOworICAgICAgICBmYXN0
WmVyb0ZpbGwob3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIHdvcmRDb3VudChzaXplKCkpKTsKIH0K
IAogQml0VmVjdG9yOjpPdXRPZkxpbmVCaXRzKiBCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNy
ZWF0ZShzaXplX3QgbnVtQml0cykKQEAgLTkzLDE0ICs5NSwxNCBAQCB2b2lkIEJpdFZlY3Rvcjo6
cmVzaXplT3V0T2ZMaW5lKHNpemVfdCBuCiAgICAgaWYgKGlzSW5saW5lKCkpIHsKICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBiaXRzIGFyZSB6ZXJvIGluIGNhc2Ugd2UgZG8g
YSBuby1vcCByZXNpemUuCiAgICAgICAgICpuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgPSBtX2Jp
dHNPclBvaW50ZXIgJiB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0
cygpKTsKLSAgICAgICAgbWVtc2V0KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSArIDEsIDAsIChu
ZXdOdW1Xb3JkcyAtIDEpICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgIGZhc3RaZXJvRmlsbChu
ZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyAxLCBuZXdOdW1Xb3JkcyAtIDEpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChudW1CaXRzID4gc2l6ZSgpKSB7CiAgICAgICAgICAgICBzaXplX3Qg
b2xkTnVtV29yZHMgPSBvdXRPZkxpbmVCaXRzKCktPm51bVdvcmRzKCk7Ci0gICAgICAgICAgICBt
ZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwg
b2xkTnVtV29yZHMgKiBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgICAgIG1lbXNldChuZXdPdXRP
ZkxpbmVCaXRzLT5iaXRzKCkgKyBvbGROdW1Xb3JkcywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVt
V29yZHMpICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICBmYXN0Q29weShuZXdPdXRPZkxp
bmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBvbGROdW1Xb3Jkcyk7Cisg
ICAgICAgICAgICBmYXN0WmVyb0ZpbGwobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpICsgb2xkTnVt
V29yZHMsIG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJpdHMoKS0+
Yml0cygpLCBuZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3JkcygpICogc2l6ZW9mKHZvaWQqKSk7Cisg
ICAgICAgICAgICBmYXN0Q29weShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGluZUJp
dHMoKS0+Yml0cygpLCBuZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3JkcygpKTsKICAgICAgICAgT3V0
T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwogICAgIH0KICAgICBtX2JpdHNP
clBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKSA+PiAx
OwpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDExIEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiAoYml0Q291bnQgKyA3KSA+PiAzOwogICAgIH0KIAorICAgIHN0YXRp
YyBzaXplX3Qgd29yZENvdW50KHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IChiaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgLyBiaXRzSW5Qb2ludGVyKCk7CisgICAgfQor
ICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZUlubGluZUJpdHModWludHB0cl90IGJpdHMp
CiAgICAgewogICAgICAgICBBU1NFUlQoIShiaXRzICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgbWF4SW5saW5lQml0cygpKSkpOwpAQCAtNDE4LDcgKzQyMyw3IEBAIHByaXZhdGU6CiAg
ICAgY2xhc3MgT3V0T2ZMaW5lQml0cyB7CiAgICAgcHVibGljOgogICAgICAgICBzaXplX3QgbnVt
Qml0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQotICAgICAgICBzaXplX3QgbnVtV29y
ZHMoKSBjb25zdCB7IHJldHVybiAobV9udW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgLyBi
aXRzSW5Qb2ludGVyKCk7IH0KKyAgICAgICAgc2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1
cm4gd29yZENvdW50KG1fbnVtQml0cyk7IH0KICAgICAgICAgdWludHB0cl90KiBiaXRzKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsgfQogICAgICAgICBjb25z
dCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdWlu
dHB0cl90Kj4odGhpcyArIDEpOyB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw4ICs1OSwxMCBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBFeHBlY3Rl
ZC5oCiAgICAgRXhwb3J0TWFjcm9zLmgKICAgICBGYXN0Qml0VmVjdG9yLmgKKyAgICBGYXN0Q29w
eS5oCiAgICAgRmFzdE1hbGxvYy5oCiAgICAgRmFzdFRMUy5oCisgICAgRmFzdFplcm9GaWxsLmgK
ICAgICBGZWF0dXJlRGVmaW5lcy5oCiAgICAgRmlsZVByaW50U3RyZWFtLmgKICAgICBGbGlwQnl0
ZXMuaApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkocmV2aXNpb24gMjI4MjE3KQor
KysgU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RDb3B5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC02
NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQXJyYXkqIG5ld0FycmF5ID0gY3JlYXRlQXJy
YXkobmV3U2l6ZSk7CiAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGRvIENvbmN1cnJlbnRC
dWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+LgogICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgICAg
ICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFycmF5LT5kYXRhLCBzaXplb2YoVCkgKiBhcnJheS0+
c2l6ZSk7CisgICAgICAgICAgICBmYXN0Q29weShuZXdBcnJheS0+ZGF0YSwgYXJyYXktPmRhdGEs
IGFycmF5LT5zaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGFycmF5ID8gYXJyYXktPnNp
emUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICAgICAgbmV3IChuZXdBcnJheS0+ZGF0
YSArIGkpIFQoKTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9G
YXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RC
aXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw5IEBACiAKICNp
bmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtOTUsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChhcnJheUxlbmd0aCgpICE9IG90aGVyLmFycmF5TGVuZ3RoKCkpCiAgICAgICAgICAgICBz
ZXRFcXVhbHNTbG93KG90aGVyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtZW1jcHko
bV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICAgICAgZmFzdENvcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5n
dGgoKSk7CiAgICAgICAgICAgICBtX251bUJpdHMgPSBvdGhlci5tX251bUJpdHM7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTE1LDEzICsxMTcsMTMgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgY2xlYXJBbGwoKQogICAgIHsKLSAgICAgICAgbWVtc2V0KG1fd29yZHMs
IDAsIGFycmF5TGVuZ3RoKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgZmFzdFplcm9G
aWxsKG1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChj
b25zdCBGYXN0Qml0VmVjdG9yV29yZE93bmVyJiBvdGhlcikKICAgICB7CiAgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fbnVtQml0cyA9PSBvdGhlci5tX251bUJpdHMp
OwotICAgICAgICBtZW1jcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAq
IHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBmYXN0Q29weShtX3dvcmRzLCBvdGhlci5tX3dv
cmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgc2l6ZV90IG51bUJpdHMoKSBj
b25zdApJbmRleDogU291cmNlL1dURi93dGYvRmFzdENvcHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0Q29weS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zh
c3RDb3B5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBmYXN0Q29weShUKiBkc3QsIGNvbnN0IFQqIHNyYywgc2l6ZV90IGxlbmd0
aCkKK3sKKyNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisgICAgdWlu
dDY0X3QgdG1wID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggKiBzaXplb2YoVCk7Cisg
ICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAgICAgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAg
ICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVyY3hcblx0IgorICAgICAgICAg
ICAgInJlcCBtb3ZzcVxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAg
ICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAoJSVyc2ksICUlcmN4KSwgJSVyYXhcblx0Igor
ICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAg
ICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAg
ImphZSAzYlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRz
dCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAg
ICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMyX3QpKSkgeworICAgICAgICBh
c20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQyLCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAicmVwIG1vdnNsXG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAg
ICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxu
XHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAg
ICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAg
ICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAg
ICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAlJXJjeFxuXHQiCisg
ICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgKCUlcnNpLCAlJXJjeCksICUl
ZWF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisg
ICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSA0YlxuXHQi
CisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3Jj
KSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAi
bWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUg
KAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFm
XG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVw
IG1vdnN3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5c
dCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAg
ICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5c
dCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNi
XG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpl
IDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
NDpcblx0IgorICAgICAgICAgICAgIm1vdncgKCUlcnNpLCAlJXJjeCksICUlYXhcblx0IgorICAg
ICAgICAgICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1
YnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAg
IjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK1MiKHNyYyksICIrYyIoY291bnQp
LCAiK2EiKHRtcCkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAg
ICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAg
ICAicmVwIG1vdnNiXG5cdCIKKyAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQi
CisgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAgICJtb3Zx
ICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQiCisgICAgICAgICJz
dWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAiY21wcSAk
LTgsICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgImFkZHEgJDcsICUl
cmN4XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgKCUlcnNpLCAlJXJjeCks
ICUlYWxcblx0IgorICAgICAgICAibW92YiAlJWFsLCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAg
ICAgICJzdWJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAi
Mjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIith
Iih0bXApCisgICAgICAgIDoKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworI2Vsc2UK
KyAgICBtZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCAqIHNpemVvZihUKSk7CisjZW5kaWYKK30KKwor
aW5saW5lIHZvaWQgZmFzdENvcHlCeXRlcyh2b2lkKiBkc3QsIGNvbnN0IHZvaWQqIHNyYywgc2l6
ZV90IGJ5dGVzKQoreworICAgIGZhc3RDb3B5KHN0YXRpY19jYXN0PGNoYXIqPihkc3QpLCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3JjKSwgYnl0ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpmYXN0Q29weTsKK3VzaW5nIFdURjo6ZmFzdENvcHlCeXRlczsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKQEAgLTMxLDYg
KzMxLDggQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdFplcm9GaWxsLmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KQEAgLTc4LDcgKzgwLDcgQEAgdm9pZCBmYXN0U2V0TWF4U2luZ2xlQWxsb2NhdGlvblNpemUo
c2l6ZQogdm9pZCogZmFzdFplcm9lZE1hbGxvYyhzaXplX3QgbikgCiB7CiAgICAgdm9pZCogcmVz
dWx0ID0gZmFzdE1hbGxvYyhuKTsKLSAgICBtZW1zZXQocmVzdWx0LCAwLCBuKTsKKyAgICBmYXN0
WmVyb0ZpbGwoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCksIG4pOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTg2LDcgKzg4LDcgQEAgY2hhciogZmFzdFN0ckR1cChjb25zdCBjaGFyKiBz
cmMpCiB7CiAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzcmMpICsgMTsKICAgICBjaGFyKiBkdXAg
PSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhsZW4pKTsKLSAgICBtZW1jcHkoZHVwLCBz
cmMsIGxlbik7CisgICAgZmFzdENvcHkoZHVwLCBzcmMsIGxlbik7CiAgICAgcmV0dXJuIGR1cDsK
IH0KIApAQCAtOTUsNyArOTcsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0WmVyb2Vk
TWFsbG9jCiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmICghdHJ5RmFzdE1hbGxvYyhuKS5nZXRW
YWx1ZShyZXN1bHQpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtZW1zZXQocmVzdWx0LCAwLCBu
KTsKKyAgICBmYXN0WmVyb0ZpbGwoc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdCksIG4pOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RaZXJvRmlsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZmFzdFplcm9GaWxsKFQq
IGRzdCwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCisgICAgdWludDY0X3QgemVybyA9IDA7CisgICAgc2l6ZV90IGNvdW50ID0gbGVu
Z3RoICogc2l6ZW9mKFQpOworICAgIGlmICghKHNpemVvZihUKSAlIHNpemVvZih1aW50NjRfdCkp
KSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJj
eFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAgICAgInNocnEgJDMsICUl
cmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgc3Rvc3Fcblx0IgorICAgICAgICAgICAgImptcCAy
ZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICgl
JXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3Vi
cSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAi
Mjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrYyIoY291bnQpCisgICAgICAgICAg
ICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMy
X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwg
JSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQy
LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIHN0b3NsXG5cdCIKKyAgICAgICAgICAgICJq
bXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4
LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAg
InN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAg
ICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamUgMmZcblx0IgorICAgICAg
ICAgICAgImFkZHEgJDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICI0OlxuXHQiCisgICAgICAg
ICAgICAibW92bCAlJWVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1YnEg
JDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAgIjI6
XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAg
OiAiYSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQxNl90
KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUl
cmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMSwg
JSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBzdG9zd1xuXHQiCisgICAgICAgICAgICAiam1w
IDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwg
KCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJz
dWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAg
ICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAg
ICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAg
ICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1YnEgJDIs
ICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAgIjI6XG5c
dCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAgOiAi
YSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwg
JSVyY3hcblx0IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAicmVwIHN0b3NiXG5cdCIK
KyAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICUl
cmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQiCisgICAgICAgICJzdWJx
ICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAiY21wcSAkLTgs
ICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgImFkZHEgJDcsICUlcmN4
XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgJSVhbCwgKCUlcmRpLCAlJXJj
eClcblx0IgorICAgICAgICAic3ViICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0
IgorICAgICAgICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitjIihjb3VudCkKKyAg
ICAgICAgOiAiYSIoemVybykKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworI2Vsc2UK
KyAgICBtZW1zZXQoZHN0LCAwLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIGZhc3RaZXJvRmlsbEJ5dGVzKHZvaWQqIGRzdCwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIGZhc3RaZXJvRmlsbChzdGF0aWNfY2FzdDxjaGFyKj4oZHN0KSwgYnl0ZXMpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpmYXN0WmVyb0ZpbGw7Cit1c2luZyBXVEY6
OmZhc3RaZXJvRmlsbEJ5dGVzOwpJbmRleDogU291cmNlL1dURi93dGYvTUQ1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9NRDUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogLy8gTW9k
aWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAwNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpJbmRleDogU291cmNlL1dU
Ri93dGYvT1NBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgT1NBbGxvY2F0b3JfaAogCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUg
PHd0Zi9WTVRhZ3MuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC05MCw3ICs5MSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogT1NBbGxvY2F0b3I6OnJlYWxsb2NhdGVDb21taXR0
ZWQoVCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQogewogICAgIHZvaWQqIG5ld0Jhc2Ug
PSByZXNlcnZlQW5kQ29tbWl0KG5ld1NpemUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7
Ci0gICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUp
KTsKKyAgICBmYXN0Q29weUJ5dGVzKG5ld0Jhc2UsIG9sZEJhc2UsIHN0ZDo6bWluKG9sZFNpemUs
IG5ld1NpemUpKTsKICAgICBkZWNvbW1pdEFuZFJlbGVhc2Uob2xkQmFzZSwgb2xkU2l6ZSk7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihuZXdCYXNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
dHJpbmdQcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdENvcHkuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTExOSw3ICsxMjAsNyBAQCB2b2lkIFN0cmluZ1ByaW50U3RyZWFtOjppbmNyZWFzZVNp
emUoc2l6CiAgICAgLy8gZmFzdFJlYWxsb2Mgd2lsbCBqdXN0IGRvIG1hbGxvYytmcmVlIGFueXdh
eS4gQWxzbywgdGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIHNpbmNlCiAgICAgLy8gd2UgY2FuJ3Qg
cmVhbGxvYyB0aGUgaW5saW5lIGJ1ZmZlci4KICAgICBjaGFyKiBuZXdCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtX3NpemUpKTsKLSAgICBtZW1jcHkobmV3QnVmZmVyLCBt
X2J1ZmZlciwgbV9uZXh0ICsgMSk7CisgICAgZmFzdENvcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwg
bV9uZXh0ICsgMSk7CiAgICAgaWYgKG1fYnVmZmVyICE9IG1faW5saW5lQnVmZmVyKQogICAgICAg
ICBmYXN0RnJlZShtX2J1ZmZlcik7CiAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0
b3IuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNs
dWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1
ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC04Niw3
ICs4OCw3IEBAIHN0cnVjdCBWZWN0b3JJbml0aWFsaXplcjx0cnVlLCB0cnVlLCBUPgogewogICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVCogYmVnaW4sIFQqIGVuZCkgCiAgICAgewotICAgICAg
ICBtZW1zZXQoYmVnaW4sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVuZCkgLSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihiZWdpbikpOworICAgICAgICBmYXN0WmVyb0ZpbGwoYmVnaW4sIGVu
ZCAtIGJlZ2luKTsKICAgICB9CiB9OwogCkBAIC0xMjYsNyArMTI4LDcgQEAgc3RydWN0IFZlY3Rv
ck1vdmVyPHRydWUsIFQ+CiB7CiAgICAgc3RhdGljIHZvaWQgbW92ZShjb25zdCBUKiBzcmMsIGNv
bnN0IFQqIHNyY0VuZCwgVCogZHN0KSAKICAgICB7Ci0gICAgICAgIG1lbWNweShkc3QsIHNyYywg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3JjRW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHNyYykpOworICAgICAgICBmYXN0Q29weShkc3QsIHNyYywgc3JjRW5kIC0g
c3JjKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQgbW92ZU92ZXJsYXBwaW5nKGNvbnN0IFQqIHNy
YywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpIAogICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHAJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIERlY29kZXI6OmRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh1aW50CiAgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNp
emUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQ
b3NpdGlvbiwgc2l6ZSk7CisgICAgZmFzdENvcHkoZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6
ZSk7CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuY3BwCShyZXZpc2lvbiAyMjgy
MTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhl
ZExlbmd0aERhdGEoY29ucwogICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEs
IHNpemUpOwogCiAgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHko
YnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICBmYXN0Q29weShidWZmZXIsIGRhdGEsIHNpemUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9D
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3Bw
CShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAog
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxv
Yy5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIHZvaWQgQ1N0cmluZzo6aW5pdChjb25zdCBjaGFyKiBz
dHIsIHNpemUKICAgICBBU1NFUlQoc3RyKTsKIAogICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZl
cjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0
YWJsZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKKyAgICBmYXN0Q29weShtX2J1ZmZlci0+bXV0YWJs
ZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKICAgICBtX2J1ZmZlci0+bXV0YWJsZURhdGEoKVtsZW5n
dGhdID0gJ1wwJzsKIH0KIApAQCAtOTYsNyArOTcsNyBAQCB2b2lkIENTdHJpbmc6OmNvcHlCdWZm
ZXJJZk5lZWRlZCgpCiAgICAgUmVmUHRyPENTdHJpbmdCdWZmZXI+IGJ1ZmZlciA9IFdURk1vdmUo
bV9idWZmZXIpOwogICAgIHNpemVfdCBsZW5ndGggPSBidWZmZXItPmxlbmd0aCgpOwogICAgIG1f
YnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAg
IG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGxlbmd0aCAr
IDEpOworICAgIGZhc3RDb3B5KG1fYnVmZmVyLT5tdXRhYmxlRGF0YSgpLCBidWZmZXItPmRhdGEo
KSwgbGVuZ3RoICsgMSk7CiB9CiAKIGJvb2wgQ1N0cmluZzo6aXNTYWZlVG9TZW5kVG9Bbm90aGVy
VGhyZWFkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvTGluZUJyZWFrSXRlcmF0
b3JQb29sSUNVLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9MaW5lQnJlYWtJ
dGVyYXRvclBvb2xJQ1UuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0Q29weS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgpAQCAtNTEsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGlmICghdXRmOExvY2FsZS5sZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7CiAg
ICAgICAgIFZlY3RvcjxjaGFyPiBzY3JhdGNoQnVmZmVyKHV0ZjhMb2NhbGUubGVuZ3RoKCkgKyAx
MSwgMCk7Ci0gICAgICAgIG1lbWNweShzY3JhdGNoQnVmZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5k
YXRhKCksIHV0ZjhMb2NhbGUubGVuZ3RoKCkpOworICAgICAgICBmYXN0Q29weShzY3JhdGNoQnVm
ZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5kYXRhKCksIHV0ZjhMb2NhbGUubGVuZ3RoKCkpOwogCiAg
ICAgICAgIGNvbnN0IGNoYXIqIGtleXdvcmRWYWx1ZSA9IG51bGxwdHI7CiAgICAgICAgIHN3aXRj
aCAobW9kZSkgewpAQCAtNzUsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
QXRvbWljU3RyaW5nOjpmcm9tVVRGOChzY3JhdGNoQnVmZmVyLmRhdGEoKSwgbGVuZ3RoTmVlZGVk
KTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikgewogICAg
ICAgICAgICAgc2NyYXRjaEJ1ZmZlci5ncm93KGxlbmd0aE5lZWRlZCArIDEpOwotICAgICAgICAg
ICAgbWVtc2V0KHNjcmF0Y2hCdWZmZXIuZGF0YSgpICsgdXRmOExvY2FsZS5sZW5ndGgoKSwgMCwg
c2NyYXRjaEJ1ZmZlci5zaXplKCkgLSB1dGY4TG9jYWxlLmxlbmd0aCgpKTsKKyAgICAgICAgICAg
IGZhc3RaZXJvRmlsbChzY3JhdGNoQnVmZmVyLmRhdGEoKSArIHV0ZjhMb2NhbGUubGVuZ3RoKCks
IHNjcmF0Y2hCdWZmZXIuc2l6ZSgpIC0gdXRmOExvY2FsZS5sZW5ndGgoKSk7CiAgICAgICAgICAg
ICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aE5lZWRl
ZDIgPSB1bG9jX3NldEtleXdvcmRWYWx1ZSgibGIiLCBrZXl3b3JkVmFsdWUsIHNjcmF0Y2hCdWZm
ZXIuZGF0YSgpLCBzY3JhdGNoQnVmZmVyLnNpemUoKSwgJnN0YXR1cyk7CiAgICAgICAgICAgICBp
ZiAoIVVfU1VDQ0VTUyhzdGF0dXMpIHx8IGxlbmd0aE5lZWRlZCAhPSBsZW5ndGhOZWVkZWQyKQpJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29u
c3QKICAgICBBU1NFUlQobV9pczhCaXQpOwogICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEg
aW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUg
ZXhpc3RpbmcgZGF0YS4KICAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAgIG1lbWNw
eShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4K
KyAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50Q2hhcmFjdGVycywgbV9s
ZW5ndGgpOwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KICAgICBtX2J1
ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFN0cmluZ0J1
aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAgICAgQVNTRVJUKCFtX2lzOEJpdCk7CiAgICAg
Ly8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0
byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgogICAgIGF1dG8gYnVmZmVy
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZm
ZXJDaGFyYWN0ZXJzMTYpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVu
dENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFy
KSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCisgICAgZmFzdENvcHkobV9idWZmZXJDaGFyYWN0
ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xlbmd0aCk7CiAgICAgCiAgICAgLy8gVXBkYXRl
IHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwpAQCAt
Mjc2LDEwICsyNzYsMTAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgVUNoYXIq
IAogICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9zdHJpbmcuaXNOdWxsKCkg
PyAwIDogbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgp
LCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICB9CiAKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVy
Q2hhcmFjdGVyczE2ICsgbV9sZW5ndGgsIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4o
bGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJh
Y3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgICAgICBtX2xlbmd0
aCA9IHJlcXVpcmVkTGVuZ3RoOwogICAgIH0gZWxzZQotICAgICAgICBtZW1jcHkoYXBwZW5kVW5p
bml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90
PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGZhc3RDb3B5KGFwcGVuZFVuaW5p
dGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCksIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgQVNTRVJU
KG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CiB9CiAKQEAgLTI5MSwxMyArMjkxLDcg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgTENoYXIqIAogCiAgICAgaWYgKG1f
aXM4Qml0KSB7CiAgICAgICAgIExDaGFyKiBkZXN0ID0gYXBwZW5kVW5pbml0aWFsaXplZDxMQ2hh
cj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDgpCi0gICAgICAgICAgICBtZW1jcHko
ZGVzdCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKExD
aGFyKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkK
LSAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKGNoYXJhY3RlcnMrKyk7Ci0gICAgICAgIH0K
KyAgICAgICAgZmFzdENvcHkoZGVzdCwgY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBVQ2hhciogZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0
aCk7CiAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAkocmV2aXNpb24gMjI4MjE3
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cmluZ0NvbmNhdGVuYXRlX2gKIAogI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogCiAjaWZuZGVmIEF0
b21pY1N0cmluZ19oCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC0xNTcs
NyArMTU4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlv
bikgY29uc3QKICAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJz
LCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBmYXN0Q29weShkZXN0aW5hdGlv
biwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgIH0KIAogICAg
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZyhtX2NoYXJhY3RlcnMsIG1f
bGVuZ3RoKTsgfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDY2LDcgKzEwNjYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgCiAgICAgICAgICpkZXN0aW5hdGlvbiA9ICpzb3VyY2U7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51bUNoYXJhY3RlcnMgKiBzaXpl
b2YoQ2hhcmFjdGVyVHlwZSkpOworICAgIGZhc3RDb3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51
bUNoYXJhY3RlcnMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RyaW5nSW1wbDo6Y29weUNo
YXJhY3RlcnMoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBMQ2hhciogc291cmNlLCB1bnNpZ25l
ZCBudW1DaGFyYWN0ZXJzKQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92
aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92
aWRlci5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1VU
ZXh0UHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RD
b3B5Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC01NSwxMCArNTYsMTAgQEAgVVRleHQqIHVU
ZXh0Q2xvbmVJbXBsKFVUZXh0KiBkZXN0aW5hdGlvbgogICAgIHZvaWQqIGV4dHJhTmV3ID0gZGVz
dGluYXRpb24tPnBFeHRyYTsKICAgICBpbnQzMl90IGZsYWdzID0gZGVzdGluYXRpb24tPmZsYWdz
OwogICAgIGludCBzaXplVG9Db3B5ID0gc3RkOjptaW4oc291cmNlLT5zaXplT2ZTdHJ1Y3QsIGRl
c3RpbmF0aW9uLT5zaXplT2ZTdHJ1Y3QpOwotICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNl
LCBzaXplVG9Db3B5KTsKKyAgICBmYXN0Q29weUJ5dGVzKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHNp
emVUb0NvcHkpOwogICAgIGRlc3RpbmF0aW9uLT5wRXh0cmEgPSBleHRyYU5ldzsKICAgICBkZXN0
aW5hdGlvbi0+ZmxhZ3MgPSBmbGFnczsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24tPnBFeHRyYSwg
c291cmNlLT5wRXh0cmEsIGV4dHJhU2l6ZSk7CisgICAgZmFzdENvcHlCeXRlcyhkZXN0aW5hdGlv
bi0+cEV4dHJhLCBzb3VyY2UtPnBFeHRyYSwgZXh0cmFTaXplKTsKICAgICBmaXhQb2ludGVyKHNv
dXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5jb250ZXh0KTsKICAgICBmaXhQb2ludGVy
KHNvdXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5wKTsKICAgICBmaXhQb2ludGVyKHNv
dXJjZSwgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLT5xKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXJMYXRp
bjEuaCIKIAogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdFpl
cm9GaWxsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTgyLDcgKzgzLDcgQEAgc3RhdGljIFVUZXh0KiB1VGV4dExhdGluMUNsb25lKFVU
ZXh0KiBkZQogICAgIHJlc3VsdC0+YSA9IHNvdXJjZS0+YTsKICAgICByZXN1bHQtPnBGdW5jcyA9
ICZ1VGV4dExhdGluMUZ1bmNzOwogICAgIHJlc3VsdC0+Y2h1bmtDb250ZW50cyA9IChVQ2hhciop
cmVzdWx0LT5wRXh0cmE7Ci0gICAgbWVtc2V0KGNvbnN0X2Nhc3Q8VUNoYXIqPihyZXN1bHQtPmNo
dW5rQ29udGVudHMpLCAwLCBzaXplb2YoVUNoYXIpICogVVRleHRXaXRoQnVmZmVySW5saW5lQ2Fw
YWNpdHkpOworICAgIGZhc3RaZXJvRmlsbChjb25zdF9jYXN0PFVDaGFyKj4ocmVzdWx0LT5jaHVu
a0NvbnRlbnRzKSwgVVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHkpOwogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTIyOCw3ICsyMjksNyBAQCBVVGV4dCogb3BlbkxhdGluMVVUZXh0UHJv
dmlkZXIoVVRleHRXaXRoCiAgICAgdGV4dC0+YSA9IGxlbmd0aDsKICAgICB0ZXh0LT5wRnVuY3Mg
PSAmdVRleHRMYXRpbjFGdW5jczsKICAgICB0ZXh0LT5jaHVua0NvbnRlbnRzID0gKFVDaGFyKil0
ZXh0LT5wRXh0cmE7Ci0gICAgbWVtc2V0KGNvbnN0X2Nhc3Q8VUNoYXIqPih0ZXh0LT5jaHVua0Nv
bnRlbnRzKSwgMCwgc2l6ZW9mKFVDaGFyKSAqIFVUZXh0V2l0aEJ1ZmZlcklubGluZUNhcGFjaXR5
KTsKKyAgICBmYXN0WmVyb0ZpbGwoY29uc3RfY2FzdDxVQ2hhcio+KHRleHQtPmNodW5rQ29udGVu
dHMpLCBVVGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSk7CiAKICAgICByZXR1cm4gdGV4dDsK
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAkocmV2aXNpb24gMjI4MjE3KQor
KysgU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDcgKzE3Miw3IEBAIGtlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UK
ICAgICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CiAKLSAgICBtZW1j
cHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRlWzBdKSk7
CisgICAgZmFzdENvcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCk7CiAgICAgKm91
dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CiAKICNpZiBDUFUoWDg2XzY0KQpJbmRleDogU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjI4Mjc0KQorKysgU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTgtMDItMDggIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBlcmltZW50IHdpdGggYWx0ZXJuYXRpdmUgaW1w
bGVtZW50YXRpb24gb2YgbWVtY3B5L21lbXNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgYSBmYXN0ZXIgeDg2XzY0LXNwZWNpZmlj
IGltcGxlbWVudGF0aW9uIG9mIG1lbWNweSBhbmQgbWVtc2V0LiBJZGVhbGx5LCB0aGlzIHdvdWxk
IGp1c3QgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gV1RGLCBidXQgd2UgaGF2ZSB0byBjb3B5
IGl0IGludG8gYm1hbGxvYyBzaW5jZSBibWFsbG9jIHNpdHMgYmVsb3cgV1RGIG9uIHRoZQorICAg
ICAgICBzdGFjay4KKworICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6CisgICAgICAgIChi
bWFsbG9jOjpmYXN0Q29weSk6CisgICAgICAgIChibWFsbG9jOjpmYXN0WmVyb0ZpbGwpOgorICAg
ICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZSk6CisgICAgICAgICogYm1hbGxvYy9CaXRzLmg6CisgICAgICAgIChibWFs
bG9jOjpCaXRzV29yZE93bmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoYm1hbGxvYzo6Qml0c1dv
cmRPd25lcjo6Y2xlYXJBbGwpOgorICAgICAgICAoYm1hbGxvYzo6Qml0c1dvcmRPd25lcjo6c2V0
KToKKyAgICAgICAgKiBibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmg6CisgICAgICAgIChibWFsbG9j
OjpJc29QYWdlPENvbmZpZz46Oklzb1BhZ2UpOgorICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIpOgorCiAyMDE4
LTAyLTA1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBHaWdh
Y2FnZTogZW5hYmxlIG9ubHkgZm9yIFdlYkNvbnRlbnQgcHJvY2VzcyBhbmQgdG9rZW4gZXhlY3V0
YWJsZXMKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGhtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkocmV2aXNpb24gMjI4MjE3
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDYgKzE4MCwyMjEgQEAgYm9vbCBmaW5kQml0SW5Xb3JkKFQgd29yZCwgc2l6ZV90JiBp
bmRleAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQg
ZmFzdENvcHkoVCogZHN0LCBUKiBzcmMsIHNpemVfdCBsZW5ndGgpCit7CisjaWYgQkNQVShYODZf
NjQpCisgICAgdWludDY0X3QgdG1wID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggKiBz
aXplb2YoVCk7CisgICAgaWYgKCEoc2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAg
ICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIK
KyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVyY3hcblx0
IgorICAgICAgICAgICAgInJlcCBtb3ZzcVxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIK
KyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAgICAgICAibW92cSAoJSVyc2ksICUlcmN4KSwg
JSVyYXhcblx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIK
KyAgICAgICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAg
ICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAg
ICAgICAgOgorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDMyX3QpKSkg
eworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hc
blx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQyLCAlJXJj
eFxuXHQiCisgICAgICAgICAgICAicmVwIG1vdnNsXG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZc
blx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVy
Y3gpLCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClc
blx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxu
XHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVy
Y3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAl
JXJjeFxuXHQiCisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgKCUlcnNp
LCAlJXJjeCksICUlZWF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVyZGksICUl
cmN4KVxuXHQiCisgICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAgICAgICAg
ImphZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRz
dCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAg
ICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAgICAgICBh
c20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAicmVwIG1vdnN3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAg
ICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxu
XHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAg
ICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAg
ICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAg
ICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ2LCAlJXJjeFxuXHQiCisg
ICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdncgKCUlcnNpLCAlJXJjeCksICUl
YXhcblx0IgorICAgICAgICAgICAgIm1vdncgJSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAg
ICAgICAgICAgInN1YnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0Igor
ICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAiK1MiKHNyYyks
ICIrYyIoY291bnQpLCAiK2EiKHRtcCkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgIDogIm1l
bW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXNtIHZv
bGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAiamIgMWZc
blx0IgorICAgICAgICAicmVwIG1vdnNiXG5cdCIKKyAgICAgICAgImptcCAyZlxuXHQiCisgICAg
ICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisg
ICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQi
CisgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAg
ICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAg
ImFkZHEgJDcsICUlcmN4XG5cdCIKKyAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgKCUl
cnNpLCAlJXJjeCksICUlYWxcblx0IgorICAgICAgICAibW92YiAlJWFsLCAoJSVyZGksICUlcmN4
KVxuXHQiCisgICAgICAgICJzdWJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0
IgorICAgICAgICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2Mi
KGNvdW50KSwgIithIih0bXApCisgICAgICAgIDoKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAg
ICApOworI2Vsc2UKKyAgICBtZW1jcHkoZHN0LCBzcmMsIGxlbmd0aCAqIHNpemVvZihUKSk7Cisj
ZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZmFzdFplcm9GaWxsKFQqIGRz
dCwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBCQ1BVKFg4Nl82NCkKKyAgICB1aW50NjRfdCB6ZXJv
ID0gMDsKKyAgICBzaXplX3QgY291bnQgPSBsZW5ndGggKiBzaXplb2YoVCk7CisgICAgaWYgKCEo
c2l6ZW9mKFQpICUgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgK
KyAgICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxu
XHQiCisgICAgICAgICAgICAic2hycSAkMywgJSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBz
dG9zcVxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQi
CisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAg
ICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAg
ICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIo
ZHN0KSwgIitjIihjb3VudCkKKyAgICAgICAgICAgIDogImEiKHplcm8pCisgICAgICAgICAgICA6
ICJtZW1vcnkiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghKHNpemVvZihUKSAlIHNpemVvZih1aW50MzJfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGls
ZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIg
MWZcblx0IgorICAgICAgICAgICAgInNocnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJy
ZXAgc3Rvc2xcblx0IgorICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpc
blx0IgorICAgICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAg
ICAgICAgICIxOlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAg
ICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAg
ICAgICAgICAgICJqZSAyZlxuXHQiCisgICAgICAgICAgICAiYWRkcSAkNCwgJSVyY3hcblx0Igor
ICAgICAgICAgICAgIjQ6XG5cdCIKKyAgICAgICAgICAgICJtb3ZsICUlZWF4LCAoJSVyZGksICUl
cmN4KVxuXHQiCisgICAgICAgICAgICAic3VicSAkNCwgJSVyY3hcblx0IgorICAgICAgICAgICAg
ImphZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRz
dCksICIrYyIoY291bnQpCisgICAgICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAi
bWVtb3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IShzaXplb2YoVCkgJSBzaXplb2YodWludDE2X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUg
KAorICAgICAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFm
XG5cdCIKKyAgICAgICAgICAgICJzaHJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVw
IHN0b3N3XG5cdCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5c
dCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAg
ICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAg
ICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAgImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAg
ICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAgICAgImFkZHEgJDYsICUlcmN4XG5cdCIKKyAg
ICAgICAgICAgICI0OlxuXHQiCisgICAgICAgICAgICAibW92dyAlJWF4LCAoJSVyZGksICUlcmN4
KVxuXHQiCisgICAgICAgICAgICAic3VicSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAgImph
ZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCks
ICIrYyIoY291bnQpCisgICAgICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICAgICAgOiAibWVt
b3J5IgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhc20gdm9s
YXRpbGUgKAorICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICJqYiAxZlxu
XHQiCisgICAgICAgICJyZXAgc3Rvc2Jcblx0IgorICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAg
ICAgIjM6XG5cdCIKKyAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAg
ICAgICAgIjE6XG5cdCIKKyAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgImph
ZSAzYlxuXHQiCisgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAiamUgMmZc
blx0IgorICAgICAgICAiYWRkcSAkNywgJSVyY3hcblx0IgorICAgICAgICAiNDpcblx0IgorICAg
ICAgICAibW92YiAlJWFsLCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICJzdWIgJDEsICUl
cmN4XG5cdCIKKyAgICAgICAgImphZSA0YlxuXHQiCisgICAgICAgICIyOlxuXHQiCisgICAgICAg
IDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICA6ICJhIih6ZXJvKQorICAgICAgICA6
ICJtZW1vcnkiCisgICAgICAgICk7CisjZWxzZQorICAgIG1lbXNldChkc3QsIDAsIGxlbmd0aCAq
IHNpemVvZihUKSk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5k
aWYgLy8gQWxnb3JpdGhtX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQqIEFsbG9jYXRvcjo6cmVh
bGxvY2F0ZSh2b2lkKiBvYmplY3QKIAogICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRlKG5ld1Np
emUpOwogICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUpOwot
ICAgIG1lbWNweShyZXN1bHQsIG9iamVjdCwgY29weVNpemUpOworICAgIGZhc3RDb3B5KHN0YXRp
Y19jYXN0PGNoYXIqPihyZXN1bHQpLCBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSwgY29weVNp
emUpOwogICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShvYmplY3QpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JpdHMuaAkocmV2aXNpb24gMjI4MjE3KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9CaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgcHVibGljOgogICAgIAogICAgIEJpdHNXb3JkT3duZXImIG9wZXJhdG9yPShjb25zdCBC
aXRzV29yZE93bmVyJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweShtX3dvcmRzLCBvdGhl
ci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZh
c3RDb3B5KG1fd29yZHMsIG90aGVyLm1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIApAQCAtOTEsMTIgKzkxLDEyIEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGNsZWFyQWxsKCkKICAgICB7Ci0gICAgICAgIG1lbXNldChtX3dvcmRzLCAw
LCBhcnJheUxlbmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZhc3RaZXJvRmls
bChtX3dvcmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoY29u
c3QgQml0c1dvcmRPd25lciYgb3RoZXIpCiAgICAgewotICAgICAgICBtZW1jcHkobV93b3Jkcywg
b3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50MzJfdCkpOworICAgICAg
ICBmYXN0Q29weShtX3dvcmRzLCBvdGhlci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICB9
CiAgICAgCiAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdApJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvUGFnZUlubGluZXMuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDcgQEAg
SXNvUGFnZTxDb25maWc+OjpJc29QYWdlKElzb0RpcmVjdG9yeUJhcwogICAgIDogbV9kaXJlY3Rv
cnkoZGlyZWN0b3J5KQogICAgICwgbV9pbmRleChpbmRleCkKIHsKLSAgICBtZW1zZXQobV9hbGxv
Y0JpdHMsIDAsIHNpemVvZihtX2FsbG9jQml0cykpOworICAgIGZhc3RaZXJvRmlsbChtX2FsbG9j
Qml0cywgYml0c0FycmF5TGVuZ3RoKG51bU9iamVjdHMpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29uZmlnPgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDMsNyArMjAzLDcgQEAgdm9pZCBWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IAog
ICAgIHNpemVfdCB2bVNpemUgPSBibWFsbG9jOjp2bVNpemUobmV3Q2FwYWNpdHkgKiBzaXplb2Yo
VCkpOwogICAgIFQqIG5ld0J1ZmZlciA9IHZtU2l6ZSA/IHN0YXRpY19jYXN0PFQqPih2bUFsbG9j
YXRlKHZtU2l6ZSkpIDogbnVsbHB0cjsKICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAgc3Rk
OjptZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplICogc2l6ZW9mKFQpKTsKKyAgICAg
ICAgZmFzdENvcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplKTsKICAgICAgICAgdm1EZWFs
bG9jYXRlKG1fYnVmZmVyLCBibWFsbG9jOjp2bVNpemUobV9jYXBhY2l0eSAqIHNpemVvZihUKSkp
OwogICAgIH0KIAo=
</data>
<flag name="review"
          id="352275"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333413</attachid>
            <date>2018-02-08 12:57:04 -0800</date>
            <delta_ts>2018-02-08 12:57:04 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70368</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE4LTAyLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RXhwZXJpbWVudCB3aXRoIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweS9tZW1z
ZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU2
MworCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgU2Fib2ZmIGFuZCBNYXJrIExhbS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgYWRvcHRzIG5ldyBmYXN0Q29weS9mYXN0WmVyb0ZpbGwgY2Fs
bHMgZm9yIGNhbGxzIHRvIG1lbWNweS9tZW1zZXQgdGhhdCBkbyBub3QgdGFrZSBhCisgICAgICAg
IGNvbnN0YW50IHNpemUgYXJndW1lbnQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6YXBwZW5kKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJD
b250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRz
Ojpjb3B5VG8pOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlSW50ZXJuYWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnZl
bnRpb25zLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29udmVudGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6Y2xlYXJBcnJheSk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweSk6Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQ
cm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNpemVBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjphcHBlbmRNZW1jcHkpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpmYXN0U2xpY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgICogcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3Jh
Z2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNoaWZ0
QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToKKwog
MjAxOC0wMi0wNiAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBwcm90b2NvbCBnZW5lcmF0b3Igc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGVkdWNl
IHRoZSBjb3JyZWN0IGluY2x1ZGUgc3R5bGUgdG8gdXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc2LDcgKzI3Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgaWYgKCFpc0F2YWlsYWJsZShzaXplKSkKICAgICAgICAgICAgICAgICBn
cm93KHNpemUpOwogCi0gICAgICAgICAgICBtZW1jcHkobV9zdG9yYWdlLmJ1ZmZlcigpICsgbV9p
bmRleCwgZGF0YSwgc2l6ZSk7CisgICAgICAgICAgICBmYXN0Q29weUJ5dGVzKG1fc3RvcmFnZS5i
dWZmZXIoKSArIG1faW5kZXgsIGRhdGEsIHNpemUpOwogICAgICAgICAgICAgbV9pbmRleCArPSBz
aXplOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW4KICAgICB9CiAg
ICAgCiAgICAgaWYgKHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKLSAgICAgICAgbWVtc2V0KG1f
ZGF0YS5nZXQoKSwgMCwgc2l6ZSk7CisgICAgICAgIGZhc3RaZXJvRmlsbEJ5dGVzKG1fZGF0YS5n
ZXQoKSwgc2l6ZSk7CiAKICAgICBtX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50
Qnl0ZVNpemU7CiAgICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZy
ZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgcCk7IH07CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpjb3B5VG8oQXJyYXlCdQogICAgIG90aGVyLnRyeUFsbG9jYXRl
KG1fc2l6ZUluQnl0ZXMsIHNpemVvZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udElu
aXRpYWxpemUpOwogICAgIGlmICghb3RoZXIubV9kYXRhKQogICAgICAgICByZXR1cm47Ci0gICAg
bWVtY3B5KG90aGVyLm1fZGF0YS5nZXQoKSwgbV9kYXRhLmdldCgpLCBtX3NpemVJbkJ5dGVzKTsK
KyAgICBmYXN0Q29weUJ5dGVzKG90aGVyLm1fZGF0YS5nZXQoKSwgbV9kYXRhLmdldCgpLCBtX3Np
emVJbkJ5dGVzKTsKICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKIH0K
IApAQCAtMjQ2LDcgKzI0Niw3IEBAIFJlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0
ZUludGUKIHsKICAgICBBU1NFUlQoIWJ5dGVMZW5ndGggfHwgc291cmNlKTsKICAgICBhdXRvIGJ1
ZmZlciA9IGFkb3B0UmVmKCpuZXcgQXJyYXlCdWZmZXIoV1RGTW92ZShjb250ZW50cykpKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7CisgICAgZmFzdENv
cHlCeXRlcyhidWZmZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKICAgICByZXR1cm4g
YnVmZmVyOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw3ICsy
MTUsNyBAQCBib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1bnNpCiAgICAgfQog
ICAgIAogICAgIHVpbnQ4X3QqIGJhc2UgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYmFzZUFkZHJl
c3MoKSk7Ci0gICAgbWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgp
OworICAgIGZhc3RaZXJvRmlsbEJ5dGVzKGJhc2UgKyBieXRlT2Zmc2V0LCByYW5nZUJ5dGVMZW5n
dGgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnZlbnRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmNwcAkocmV2aXNpb24gMjI4MjE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDIxICszMSw2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi12b2lkIGNsZWFyQXJyYXlNZW1zZXQoV3JpdGVCYXJyaWVyPFVua25vd24+
KiBiYXNlLCB1bnNpZ25lZCBjb3VudCkKLXsKLSNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihH
Q0NfT1JfQ0xBTkcpCi0gICAgdWludDY0X3QgemVybyA9IDA7Ci0gICAgYXNtIHZvbGF0aWxlICgK
LSAgICAgICAgInJlcCBzdG9zcVxuXHQiCi0gICAgICAgIDogIitEIihiYXNlKSwgIitjIihjb3Vu
dCkKLSAgICAgICAgOiAiYSIoemVybykKLSAgICAgICAgOiAibWVtb3J5IgotICAgICAgICApOwot
I2Vsc2UgLy8gbm90IENQVShYODZfNjQpCi0gICAgbWVtc2V0KGJhc2UsIDAsIGNvdW50ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotI2VuZGlmIC8vIGdlbmVyaWMgQ1BVCi19Ci0K
IHZvaWQgY2xlYXJBcnJheU1lbXNldChkb3VibGUqIGJhc2UsIHVuc2lnbmVkIGNvdW50KQogewog
I2lmIENQVShYODZfNjQpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9u
IDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDIyICsxMTcsMTcgQEAgaW5saW5lIEluZGV4aW5n
SGVhZGVyIGJhc2VJbmRleGluZ0hlYWRlcgogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLUpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY2xlYXJBcnJheU1lbXNldChXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGJhc2UsIHVuc2lnbmVkIGNvdW50KTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJBcnJh
eU1lbXNldChkb3VibGUqIGJhc2UsIHVuc2lnbmVkIGNvdW50KTsKICNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJBcnJheShXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGJhc2UsIHVuc2lnbmVkIGNvdW50KQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
Y29uc3QgdW5zaWduZWQgbWluQ291bnRGb3JNZW1zZXQgPSAxMDA7Ci0gICAgaWYgKGNvdW50ID49
IG1pbkNvdW50Rm9yTWVtc2V0KSB7Ci0gICAgICAgIGNsZWFyQXJyYXlNZW1zZXQoYmFzZSwgY291
bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgCisgICAgZmFzdFplcm9G
aWxsKGJhc2UsIGNvdW50KTsKKyNlbHNlCiAgICAgZm9yICh1bnNpZ25lZCBpID0gY291bnQ7IGkt
LTspCiAgICAgICAgIGJhc2VbaV0uY2xlYXIoKTsKKyNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgY2xlYXJBcnJheShkb3VibGUqIGJhc2UsIHVuc2lnbmVkIGNvdW50KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM5LDE5ICsxMzM5LDE4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICAKICAgICBpZiAodHlwZSA9PSBB
cnJheVdpdGhEb3VibGUpIHsKICAgICAgICAgZG91YmxlKiBidWZmZXIgPSByZXN1bHQtPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHkoYnVmZmVy
LCBmaXJzdEJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFs
dWUpICogZmlyc3RBcnJheVNpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyICsgZmlyc3RBcnJh
eVNpemUsIHNlY29uZEJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9m
KEpTVmFsdWUpICogc2Vjb25kQXJyYXlTaXplKTsKKyAgICAgICAgZmFzdENvcHkoYnVmZmVyLCBm
aXJzdEJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgZmlyc3RBcnJheVNpemUp
OworICAgICAgICBmYXN0Q29weShidWZmZXIgKyBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzZWNvbmRBcnJheVNpemUpOwogICAgIH0g
ZWxzZSBpZiAodHlwZSAhPSBBcnJheVdpdGhVbmRlY2lkZWQpIHsKICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBidWZmZXIgPSByZXN1bHQtPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKCku
ZGF0YSgpOwogICAgICAgICAKICAgICAgICAgYXV0byBjb3B5ID0gWyZdICh1bnNpZ25lZCBvZmZz
ZXQsIHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgc2l6ZSwgSW5kZXhpbmdUeXBlIHR5cGUpIHsKICAg
ICAgICAgICAgIGlmICh0eXBlICE9IEFycmF5V2l0aFVuZGVjaWRlZCkgewotICAgICAgICAgICAg
ICAgIG1lbWNweShidWZmZXIgKyBvZmZzZXQsIHNvdXJjZSwgc2l6ZW9mKEpTVmFsdWUpICogc2l6
ZSk7CisgICAgICAgICAgICAgICAgZmFzdENvcHkoYnVmZmVyICsgb2Zmc2V0LCBzdGF0aWNfY2Fz
dDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihzb3VyY2UpLCBzaXplKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHNpemU7IGktLTspCi0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyBvZmZz
ZXRdLmNsZWFyKCk7CisgICAgICAgICAgICBjbGVhckFycmF5KGJ1ZmZlciArIG9mZnNldCwgc2l6
ZSk7CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBjb3B5KDAsIGZpcnN0QnV0dGVyZmx5
LT5jb250aWd1b3VzKCkuZGF0YSgpLCBmaXJzdEFycmF5U2l6ZSwgZmlyc3RUeXBlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDcgKzkzLDcgQEAgaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVgogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIGlmICho
YXNJbmRleGluZ0hlYWRlcikKICAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGlu
ZGV4aW5nSGVhZGVyOwotICAgIG1lbXNldChyZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlDYXBhY2l0eSwgMCwgcHJvcGVydHlDYXBhY2l0eSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgIGZhc3RaZXJvRmlsbChyZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTI5LDE0ICsxMjksMTMgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVP
ckdybwogICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBzdHJ1Y3R1cmUtPmhhc0luZGV4aW5n
SGVhZGVyKGludGVuZGVkT3duZXIpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5p
bml0aWFsaXplZCgKICAgICAgICAgdm0sIGludGVuZGVkT3duZXIsIHByZUNhcGFjaXR5LCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwotICAgIG1lbWNweSgKKyAgICBmYXN0Q29weUJ5dGVzKAogICAgICAgICByZXN1bHQt
PnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgb2xkQnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCiAgICAgICAg
IHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKLSAgICBtZW1zZXQoCisgICAgZmFzdFplcm9GaWxs
KAogICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gbmV3UHJvcGVydHlDYXBhY2l0
eSwKLSAgICAgICAgMCwKLSAgICAgICAgKG5ld1Byb3BlcnR5Q2FwYWNpdHkgLSBvbGRQcm9wZXJ0
eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICBuZXdQcm9wZXJ0
eUNhcGFjaXR5IC0gb2xkUHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtMTY4LDggKzE2Nyw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmkKICAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghbmV3QmFzZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIGEgbWVt
Y3B5LgotICAgIG1lbWNweShuZXdCYXNlLCB0aGVCYXNlLCBvbGRTaXplKTsKKyAgICBmYXN0Q29w
eUJ5dGVzKG5ld0Jhc2UsIHRoZUJhc2UsIG9sZFNpemUpOwogICAgIHJldHVybiBmcm9tQmFzZShu
ZXdCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKIH0KIApAQCAtMTk5LDcgKzE5Nyw3IEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKICAgICBzaXplX3Qgc2l6ZSA9
IHN0ZDo6bWluKAogICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSGFz
SW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKICAgICAgICAg
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOwotICAgIG1lbWNweSh0bywgZnJvbSwgc2l6ZSk7
CisgICAgZmFzdENvcHlCeXRlcyh0bywgZnJvbSwgc2l6ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjI4MjE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgUmVmUHRyPEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPj4gRwogICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5
Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7Ci0gICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgp
LCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBm
YXN0Q29weShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTMsOSArNTUzLDkgQEAgYm9vbCBKU0FycmF5Ojph
cHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleAogICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91c0ludDMyKCkuYXQodGhpcywgaSkuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVl
KCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5V2l0aERvdWJsZSkK
LSAgICAgICAgbWVtY3B5KGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsg
c3RhcnRJbmRleCwgb3RoZXJBcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5k
YXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIG90aGVyTGVuZ3RoKTsKKyAgICAgICAgZmFzdENvcHko
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBvdGhl
ckFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgb3RoZXJMZW5n
dGgpOwogICAgIGVsc2UKLSAgICAgICAgbWVtY3B5KGJ1dHRlcmZseSgpLT5jb250aWd1b3VzKCku
ZGF0YSgpICsgc3RhcnRJbmRleCwgb3RoZXJBcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMo
KS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIG90aGVyTGVuZ3RoKTsKKyAgICAgICAgZmFzdENv
cHkoYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBvdGhlckFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSwgb3RoZXJMZW5ndGgpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC03NjEsOSArNzYxLDkgQEAgSlNBcnJheSogSlNBcnJheTo6
ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiAgICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9
ICpyZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0gQXJy
YXlXaXRoRG91YmxlKQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1
b3VzRG91YmxlKCkuZGF0YSgpLCBidXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIGZh
c3RDb3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBidXR0ZXJm
bHkoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIGNvdW50KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3Vz
KCkuZGF0YSgpLCBidXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgs
IHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIGZhc3RDb3B5KHJlc3VsdEJ1
dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHkoKS0+Y29udGlndW91cygpLmRh
dGEoKSArIHN0YXJ0SW5kZXgsIGNvdW50KTsKICAgICAgICAgcmVzdWx0QnV0dGVyZmx5LnNldFB1
YmxpY0xlbmd0aChjb3VudCk7CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIEpT
QXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICBpZiAoIW1fdmVjdG9y
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpCi0gICAgICAgIG1l
bXNldChtX3ZlY3Rvci5nZXQoKSwgMCwgc2l6ZSk7CisgICAgICAgIGZhc3RaZXJvRmlsbEJ5dGVz
KG1fdmVjdG9yLmdldCgpLCBzaXplKTsKICAgICAKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyMjgyMTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIGJvb2wgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnMKIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2kg
PSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CiAgICAgaWYgKGNpLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7Ci0gICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNh
c2U6IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgorICAgICAg
ICAvLyBUaGUgc3VwZXIgZmFzdCBjYXNlOiB3ZSBjYW4ganVzdCBtZW1tb3ZlIHNpbmNlIHdlJ3Jl
IHRoZSBzYW1lIHR5cGUuCiAgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CiAgICAgICAgIGxlbmd0
aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMjgy
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNzgsMTAgKzExNzgsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29uc3RydWN0Q29udmVydAogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjpjcmVhdGVVbmluaXRpYWxpemVkKAogICAgICAgICB2bSwgdGhpcywgMCwgcHJvcGVydHlDYXBh
Y2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOwogICAgIAot
ICAgIG1lbWNweSgKKyAgICBmYXN0Q29weSgKICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKICAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAotICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgcHJvcGVydHlTaXplKTsKICAgICAKICAgICBBcnJh
eVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAg
IG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChuZWVkZWRMZW5ndGgpOwpAQCAtMzU4MCw3ICsz
NTgwLDcgQEAgdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZQogICAgIHZv
aWQqIGN1cnJlbnRCYXNlID0gb2xkQnV0dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5
QWZ0ZXIpOwogICAgIHZvaWQqIG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZM
aW5lQ2FwYWNpdHlBZnRlcik7CiAKLSAgICBtZW1jcHkobmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5n
SGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIGZhc3RDb3B5Qnl0ZXMo
bmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykpOwogICAgIAogICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShy
ZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBQcm9wZXJ0eVRhYmxl
OjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgY29uCiB7CiAgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9p
bmRleFNpemUpKTsKIAotICAgIG1lbWNweShtX2luZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6
ZSgpKTsKKyAgICBmYXN0Q29weUJ5dGVzKG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXpl
KCkpOwogCiAgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CiAgICAgZm9yIChpdGVyYXRv
ciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MjgyMTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0MSBAQAorMjAxOC0wMi0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEV4cGVyaW1lbnQgd2l0aCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBtZW1j
cHkvbWVtc2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODI1NjMKKworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIFNhYm9mZiBhbmQgTWFyayBM
YW0uCisgICAgICAgIAorICAgICAgICBBZGRzIGEgZmFzdGVyIHg4Nl82NC1zcGVjaWZpYyBpbXBs
ZW1lbnRhdGlvbiBvZiBtZW1jcHkgYW5kIG1lbXNldC4gVGhlc2UgdmVyc2lvbnMgZ28gYnkKKyAg
ICAgICAgZGlmZmVyZW50IG5hbWVzIHRoYW4gbWVtY3B5L21lbXNldCBhbmQgaGF2ZSBhIGRpZmZl
cmVudCBBUEk6CisgICAgICAgIAorICAgICAgICBXVEY6OmZhc3RDb3B5PFQ+KFQqIGRzdCwgVCog
c3JjLCBzaXplX3QgTik6IGNvcGllcyBOIHZhbHVlcyBvZiB0eXBlIFQgZnJvbSBzcmMgdG8gZHN0
LgorICAgICAgICBXVEY6OmZhc3RaZXJvRmlsbChUKiBkc3QsIHNpemVfVCBOKTogd3JpdGVzIE4g
KiBzaXplb2YoVCkgemVyb2VzIHRvIGRzdC4KKyAgICAgICAgCisgICAgICAgIFRoZXJlIGFyZSBh
bHNvICpCeXRlcyB2YXJpYW50cyB0aGF0IHRha2Ugdm9pZCogZm9yIGRzdCBhbmQgc3JjIGFuZCBz
aXplX3QgbnVtQnl0ZXMuIFRob3NlIGFyZQorICAgICAgICBtb3N0IGFwcHJvcHJpYXRlIGluIHBs
YWNlcyB3aGVyZSB0aGUgY29kZSBpcyBhbHJlYWR5IGNvbXB1dGluZyBieXRlcy4KKyAgICAgICAg
CisgICAgICAgIFRoZXNlIHdpbGwganVzdCBjYWxsIG1lbWNweS9tZW1zZXQgb24gcGxhdGZvcm1z
IHdoZXJlIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgICAg
IAorICAgICAgICBUaGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBub3Qga25vd24gdG8gdGhlIGNvbXBp
bGVyIHRvIGJlIG1lbWNweS9tZW1zZXQuIFRoaXMgaGFzIHRoZSBlZmZlY3QgdGhhdAorICAgICAg
ICB0aGUgY29tcGlsZXIgd2lsbCBub3QgdHJ5IHRvIHJlcGxhY2UgdGhlbSB3aXRoIGFueXRoaW5n
IGVsc2UuIFRoaXMgY291bGQgYmUgZ29vZCBvciBiYWQ6CisgICAgICAgIAorICAgICAgICAtIEl0
J3MgKmdvb2QqIGlmIHRoZSBzaXplIGlzICpub3Qga25vd24qIGF0IGNvbXBpbGUgdGltZS4gSW4g
dGhhdCBjYXNlLCBieSBteSBiZW5jaG1hcmtzLCB0aGVzZQorICAgICAgICAgIHZlcnNpb25zIGFy
ZSBmYXN0ZXIgdGhhbiBlaXRoZXIgdGhlIG1lbWNweS9tZW1zZXQgY2FsbCBvciB3aGF0ZXZlciBl
bHNlIHRoZSBjb21waWxlciBjb3VsZAorICAgICAgICAgIGVtaXQuIFRoaXMgaXMgYmVjYXVzZSBv
ZiBhIGNvbWJpbmF0aW9uIG9mIGlubGluaW5nIGFuZCB0aGUgYWxnb3JpdGhtIGl0c2VsZiAoc2Vl
IGJlbG93KS4KKyAgICAgICAgCisgICAgICAgIC0gSXQncyAqYmFkKiBpZiB0aGUgc2l6ZSBpcyAq
a25vd24qIGF0IGNvbXBpbGUgdGltZS4gSW4gdGhhdCBjYXNlLCB0aGUgY29tcGlsZXIgY291bGQK
KyAgICAgICAgICBwb3RlbnRpYWxseSBlbWl0IGEgZnVsbHkgdW5yb2xsZWQgbWVtY3B5L21lbXNl
dC4gVGhhdCBtaWdodCBub3QgaGFwcGVuIGlmIHRoZSBzaXplIGlzIGxhcmdlCisgICAgICAgICAg
KGV2ZW4gaWYgaXQncyBrbm93biksIGJ1dCBpbiB0aGlzIHBhdGNoIEkgYXZvaWQgcmVwbGFjaW5n
IGFueSBtZW1jcHkvbWVtc2V0IGNhbGxzIHdoZW4gdGhlCisgICAgICAgICAgc2l6ZSBpcyBhIGNv
bnN0YW50LiBJbiBwYXJ0aWN1bGFyLCB0aGlzIHRvdGFsbHkgYXZvaWRzIHRoZSBjYWxsIG92ZXJo
ZWFkIC0tIGlmIHRoZSBzaXplIGlzCisgICAgICAgICAgc21hbGwsIHRoZW4gdGhlIGNvbXBpbGVy
IHdpbGwgZW1pdCBhIG5pY2UgaW5saW5lZCBjb3B5IG9yIHNldC4gSWYgdGhlIHNpemUgaXMgbGFy
Z2UsIHRoZW4gdGhlCisgICAgICAgICAgbW9zdCBvcHRpbWFsIHRoaW5nIHRvIGRvIGlzIGVtaXQg
dGhlIHNob3J0ZXN0IHBpZWNlIG9mIGNvZGUgcG9zc2libGUsIGFuZCB0aGF0J3MgYSBjYWxsIHRv
CisgICAgICAgICAgbWVtY3B5L21lbXNldC4KKyAgICAgICAgCisgICAgICAgIEl0J3MgdW5mb3J0
dW5hdGUgdGhhdCB5b3UgaGF2ZSB0byBjaG9vc2UgYmV0d2VlbiB0aGVtIG9uIHlvdXIgb3duLiBP
bmUgd2F5IHRvIGF2b2lkIHRoYXQgbWlnaHQKKyAgICAgICAgaGF2ZSBiZWVuIHRvIG92ZXJyaWRl
IHRoZSBtZW1jcHkvbWVtc2V0IHN5bWJvbHMsIHNvIHRoYXQgdGhlIGNvbXBpbGVyIGNhbiBzdGls
bCBkbyBpdHMKKyAgICAgICAgcmVhc29uaW5nLiBCdXQgdGhhdCdzIG5vdCBxdWl0ZSByaWdodCwg
c2luY2UgdGhlbiB3ZSB3b3VsZCBsb3NlIGlubGluaW5nIGluIHRoZSB1bmtub253LXNpemUKKyAg
ICAgICAgY2FzZS4gQWxzbywgaXQncyBwb3NzaWJsZSB0aGF0IGZvciBzb21lIHVua25vd24tc2l6
ZSBjYXNlcywgdGhlIGNvbXBpbGVyIGNvdWxkIGNob29zZSB0byBlbWl0CisgICAgICAgIHNvbWV0
aGluZyBvbiBpdHMgb3duIGJlY2F1c2UgaXQgbWlnaHQgdGhpbmsgdGhhdCBzb21lIHByb3BlcnR5
IG9mIGFsaWFzaW5nIG9yIGFsaWdubWVudCBjb3VsZAorICAgICAgICBoZWxwIGl0LiBJIHRoaW5r
IGl0J3MgYSBiaXQgYmV0dGVyIHRvIHVzZSBvdXIgb3duIGNvcHkvc2V0IGltcGxlbWVudGF0aW9u
cyBldmVuIGluIHRob3NlIGNhc2VzLgorICAgICAgICBBbm90aGVyIHdheSB0aGF0IEkgdHJpZWQg
YXZvaWRpbmcgdGhpcyBpcyB0byBkZXRlY3QgaW5zaWRlIGZhc3RDb3B5L2Zhc3RaZXJvRmlsbCBp
ZiB0aGUgc2l6ZSBpcworICAgICAgICBjb25zdGFudC4gQnV0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5
IHRvIGRvIHRoYXQgaW4gQysrLiBUaGVyZSBpcyBhIGJ1aWx0aW4gZm9yIGRvaW5nIHRoYXQgaW5z
aWRlIGEKKyAgICAgICAgbWFjcm8sIGJ1dCB0aGF0IGZlZWxzIGphbmt5LCBzbyBJIGRpZG4ndCB3
YW50IHRvIGRvIGl0IGluIHRoaXMgcGF0Y2guCisgICAgICAgIAorICAgICAgICBUaGUgcmVhc29u
IHdoeSB0aGVzZSBuZXcgZmFzdENvcHkvZmFzdFplcm9GaWxsIGZ1bmN0aW9ucyBhcmUgZmFzdGVy
IGlzIHRoYXQ6CisgICAgICAgIAorICAgICAgICAtIFRoZXkgY2FuIGJlIGlubGluZWQuIFRoZXJl
IGlzIG5vIGZ1bmN0aW9uIGNhbGwuIE9ubHkgYSBmZXcgcmVnaXN0ZXJzIGdldCBjbG9iYmVyZWQu
IFNvLCB0aGUKKyAgICAgICAgICBpbXBhY3Qgb24gdGhlIHF1YWxpdHkgb2YgdGhlIGNvZGUgc3Vy
cm91bmRpbmcgdGhlIG1lbWNweS9tZW1zZXQgaXMgc21hbGxlci4KKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB1c2UgdHlwZSBpbmZvcm1hdGlvbiB0byBzZWxlY3QgdGhlIGltcGxlbWVudGF0aW9u
LiBGb3Igc2l6ZXMgdGhhdCBhcmUgbXVsdGlwbGVzIG9mIDIsIDQsCisgICAgICAgICAgb3IgOCwg
dGhlIHJlc3VsdGluZyBjb2RlIHBlcmZvcm1zIGRyYW1hdGljYWxseSBiZXR0ZXIgb24gc21hbGwg
YXJyYXlzIHRoYW4gbWVtY3B5IGJlY2F1c2UgaXQKKyAgICAgICAgICB1c2VzIGZld2VyIGN5Y2xl
cy4gVGhlIGRpZmZlcmVuY2UgaXMgZ3JlYXRlc3QgZm9yIDIgYW5kIDQgYnl0ZSB0eXBlcywgc2lu
Y2UgbWVtY3B5IHVzdWFsbHkKKyAgICAgICAgICBoYW5kbGVzIHNtYWxsIGFycmF5cyBieSB0aWVy
aW5nIGZyb20gYSA4LWJ5dGUgd29yZCBjb3B5IGxvb3AgdG8gYSBieXRlIGNvcHkgbG9vcC4gU28s
IGZvciAyCisgICAgICAgICAgb3IgNCBieXRlIGFycmF5cywgd2UgdXNlIGFuIGFsZ29yaXRobSB0
aGF0IHRpZXJzIGZyb20gOC1ieXRlIHdvcmQgZG93biB0byBhIDItYnl0ZSBvciA0LWJ5dGUKKyAg
ICAgICAgICAoZGVwZW5kaW5nIG9uIHR5cGUpIGNvcHkgbG9vcC4gU28sIGZvciBleGFtcGxlLCB3
aGVuIGNvcHlpbmcgYSAxNi1iaXQgc3RyaW5nIHRoYXQgaGFzIDEsIDIsIG9yCisgICAgICAgICAg
MyBjaGFyYWN0ZXJzLCB0aGlzIG1lYW5zIGRvaW5nIDEsIDIsIG9yIDMgd29yZCBjb3BpZXMgcmF0
aGVyIHRoYW4gMiwgNCwgb3IgNiBieXRlIGNvcGllcy4gRm9yCisgICAgICAgICAgOC1ieXRlIHR5
cGVzLCB0aGUgcmVzdWx0aW5nIHNhdmluZ3MgYXJlIG1haW5seSB0aGF0IHRoZXJlIGlzIG5vIGNo
ZWNrIHRvIHNlZSBpZiBhIHRpZXItZG93biB0bworICAgICAgICAgIHRoZSBieXRlLWNvcHkgbG9v
cCBpcyBuZWVkZWQgLS0gc28gcmVhbGx5IHRoYXQgbWVhbnMgcmVkdWNpbmcgY29kZSBzaXplLiAx
LWJ5dGUgdHlwZXMgZG9uJ3QKKyAgICAgICAgICBnZXQgdGhpcyBpbmhlcmVudCBhZHZhbnRhZ2Ug
b3ZlciBtZW1jcHkvbWVtc2V0LCBidXQgdGhleSBzdGlsbCBiZW5lZml0IGZyb20gYWxsIG9mIHRo
ZSBvdGhlcgorICAgICAgICAgIGFkdmFudGFnZXMgb2YgdGhlc2UgZnVuY3Rpb25zLiBPZiBjb3Vy
c2UsIHRoaXMgYWR2YW50YWdlIGlzbid0IGluaGVyZW50IHRvIG91ciBhcHByb2FjaC4gVGhlCisg
ICAgICAgICAgY29tcGlsZXIgY291bGQgYWxzbyBub3RpY2UgdGhhdCB0aGUgYXJndW1lbnRzIHRv
IG1lbWNweS9tZW1zZXQgaGF2ZSBzb21lIGFsaWdubWVudCBwcm9wZXJ0aWVzLgorICAgICAgICAg
IEl0IGNvdWxkIGRvIGl0IGV2ZW4gbW9yZSBnZW5lcmFsbHkgdGhhbiB3ZSBkbyAtIGZvciBleGFt
cGxlIGEgY29weSBvdmVyIGJ5dGVzIHdoZXJlIHRoZSBzaXplCisgICAgICAgICAgaXMgYSBtdWx0
aXBsZSBvZiA0IGNhbiB1c2UgdGhlIDQtYnl0ZSB3b3JkIGFsZ29yaXRobS4gQnV0IGJhc2VkIG9u
IG15IHRlc3RzLCB0aGUgY29tcGlsZXIgZG9lcworICAgICAgICAgIG5vdCBkbyB0aGlzIChldmVu
IHRob3VnaCBpdCBkb2VzIG90aGVyIHRoaW5ncywgbGlrZSB0dXJuIGEgbWVtc2V0IGNhbGwgd2l0
aCBhIHplcm8gdmFsdWUKKyAgICAgICAgICBhcmd1bWVudCBpbnRvIGEgYnplcm8gY2FsbCkuCisg
ICAgICAgIAorICAgICAgICAtIFRoZXkgdXNlIGEgdmVyeSBuaWNlbHkgd3JpdHRlbiB3b3JkIGNv
cHkvc2V0IGxvb3AgZm9yIHNtYWxsIGFycmF5cy4gSSBzcGVudCBhIGxvdCBvZiB0aW1lCisgICAg
ICAgICAgZ2V0dGluZyB0aGUgYXNzZW1ibHkganVzdCByaWdodC4gV2hlbiB3ZSB1c2UgbWVtY3B5
L21lbXNldCwgc29tZXRpbWVzIHdlIHdvdWxkIG9wdGltaXplIHRoZQorICAgICAgICAgIGNhbGwg
YnkgaGF2aW5nIGEgZmFzdCBwYXRoIHdvcmQgY29weSBsb29wIGZvciBzbWFsbCBzaXplcy4gVGhh
dCdzIG5vdCBuZWNlc3Nhcnkgd2l0aCB0aGlzCisgICAgICAgICAgaW1wbGVtZW50YXRpb24sIHNp
bmNlIHRoZSBhc3NlbWJseSBjb3B5IGxvb3AgZ2V0cyBpbmxpbmVkLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGV5IHVzZSBgcmVwIG1vdnNgIG9yIGByZXAgc3Rvc2AgZm9yIGNvcGllcyBvZiAyMDAg
Ynl0ZXMgb3IgbW9yZS4gVGhpcyBkZWNpc2lvbiBiZW5jaG1hcmtzCisgICAgICAgICAgcG9vcmx5
IG9uIGV2ZXJ5IHN5bnRoZXRpYyBtZW1jcHkvbWVtc2V0IGJlbmNobWFyayBJIGhhdmUgYnVpbHQs
IGFuZCBzbyB1bnN1cnByaXNpbmdseSwgaXQncworICAgICAgICAgIG5vdCB3aGF0IHN5c3RlbSBt
ZW1jcHkvbWVtc2V0IGRvZXMuIE1vc3Qgc3lzdGVtIG1lbWNweS9tZW1zZXQgaW1wbGVtZW50YXRp
b25zIGVuZCB1cCBkb2luZworICAgICAgICAgIHNvbWUgU1NFIGZvciBtZWRpdW0tc2l6ZWQgY29w
aWVzLC4gSG93ZXZlciwgSSBwcmV2aW91c2x5IGZvdW5kIHRoYXQgdGhpcyBkZWNpc2lvbiBpcyBi
YWQgZm9yCisgICAgICAgICAgb25lIG9mIHRoZSBtZW1zZXQgY2FsbHMgaW4gR0MgKHNlZSBjbGVh
ckFycmF5KCkgYW5kIGZyaWVuZHMgaW4gQXJyYXlDb252ZW50aW9ucy5ofGNwcCkgLSBJIHdhcwor
ICAgICAgICAgIGFibGUgdG8gbWFrZSB0aGUgb3ZlcmhlYWQgb2YgdGhhdCBjYWxsIHZpcnR1YWxs
eSBkaXNhcHBlYXIgYnkgZG9pbmcgYHJlcCBzdG9zYCBtb3JlCisgICAgICAgICAgYWdncmVzc2l2
ZWx5LiBUaGUgdGhlb3J5IGJlaGluZCB0aGlzIGNoYW5nZSBpcyB0aGF0IGl0J3Mgbm90IGp1c3Qg
dGhlIEdDIHRoYXQgcHJlZmVycyBzbWFsbGVyCisgICAgICAgICAgYHJlcGAgdGhyZXNob2xkIGFu
ZCBubyBTU0UuIEkgYW0gYmV0dGluZyB0aGF0IGByZXBgaW5nIG1vcmUgaXMgYmV0dGVyIHdoZW4g
dGhlIGhlYXAgZ2V0cworICAgICAgICAgIGNoYW90aWMgYW5kIHRoZSBkYXRhIGJlaW5nIGNvcGll
ZCBpcyB1c2VkIGluIGludGVyZXN0aW5nIHdheXMgLS0gaGVuY2UsIHN5bnRoZXRpYworICAgICAg
ICAgIG1lbWNweS9tZW1zZXQgYmVuY2htYXJrcyB0aGluayBpdCdzIGJhZCAodGhleSBkb24ndCBk
byBlbm91Z2ggY2hhb3RpYyBtZW1vcnkgYWNjZXNzZXMpIHdoaWxlCisgICAgICAgICAgaXQncyBn
b29kIGZvciByZWFsLXdvcmxkIHVzZXMuIEFsc28sIHdoZW4gSSBwcmV2aW91c2x5IHdvcmtlZCBv
biBKVk1zLCBJIGhhZCBmb3VuZCB0aGF0IHRoZQorICAgICAgICAgIGJlc3QgbWVtY3B5L21lbXNl
dCBoZXVyaXN0aWNzIHdoZW4gZGVhbGluZyB3aXRoIEdDJ2Qgb2JqZWN0cyBpbiBhIGNyYXp5IGhl
YXAgd2VyZSBkaWZmZXJlbnQKKyAgICAgICAgICB0aGFuIGFueSBtZW1jcHkvbWVtc2V0IGluIGFu
eSBzeXN0ZW0gbGlicmFyeS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYXBwZWFycyB0byBiZSBh
IDAuOSUgc3BlZWQtdXAgb24gUExULiBJJ20gbm90IHN1cmUgaWYgaXQncyBtb3JlIGJlY2F1c2Ug
b2YgdGhlIGlubGluaW5nIG9yCisgICAgICAgIHRoZSBgcmVwYC4gSSB0aGluayBpdCdzIGJvdGgu
IEknbGwgbGVhdmUgZmlndXJpbmcgb3V0IHRoZSBleGFjdCB0dW5pbmcgZm9yIGZ1dHVyZSBwYXRj
aGVzLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5jcHA6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6c2V0U2xvdyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZSk6CisgICAgICAgICogd3RmL0Jp
dFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OndvcmRDb3VudCk6CisgICAgICAg
IChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6bnVtV29yZHMgY29uc3QpOgorICAgICAg
ICAqIHd0Zi9Db25jdXJyZW50QnVmZmVyLmg6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRCdWZm
ZXI6Omdyb3dFeGFjdCk6CisgICAgICAgICogd3RmL0Zhc3RCaXRWZWN0b3IuaDoKKyAgICAgICAg
KFdURjo6RmFzdEJpdFZlY3RvcldvcmRPd25lcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
RmFzdEJpdFZlY3RvcldvcmRPd25lcjo6Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjpGYXN0Qml0
VmVjdG9yV29yZE93bmVyOjpzZXQpOgorICAgICAgICAqIHd0Zi9GYXN0Q29weS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6ZmFzdENvcHkpOgorICAgICAgICAoV1RGOjpmYXN0Q29weUJ5dGVzKToK
KyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgIChXVEY6OmZhc3RaZXJvZWRN
YWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0U3RyRHVwKToKKyAgICAgICAgKFdURjo6dHJ5RmFz
dFplcm9lZE1hbGxvYyk6CisgICAgICAgICogd3RmL0Zhc3RaZXJvRmlsbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6ZmFzdFplcm9GaWxsKToKKyAgICAgICAgKFdURjo6ZmFzdFplcm9GaWxsQnl0
ZXMpOgorICAgICAgICAqIHd0Zi9NRDUuY3BwOgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5o
OgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRvcjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAg
ICAgICogd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nUHJp
bnRTdHJlYW06OmluY3JlYXNlU2l6ZSk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAg
ICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHA6CisgICAgICAgIChXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHA6CisgICAgICAgIChXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAqIHd0
Zi90ZXh0L0NTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpDU3RyaW5nOjppbml0KToKKyAgICAg
ICAgKFdURjo6Q1N0cmluZzo6Y29weUJ1ZmZlcklmTmVlZGVkKToKKyAgICAgICAgKiB3dGYvdGV4
dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaDoKKyAgICAgICAgKFdURjo6TGluZUJyZWFrSXRl
cmF0b3JQb29sOjptYWtlTG9jYWxlV2l0aEJyZWFrS2V5d29yZCk6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kKToKKyAgICAg
ICAgKiB3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMpOgor
ICAgICAgICAqIHd0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdURjo6
dVRleHRDbG9uZUltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0
aW4xLmNwcDoKKyAgICAgICAgKFdURjo6dVRleHRMYXRpbjFDbG9uZSk6CisgICAgICAgIChXVEY6
Om9wZW5MYXRpbjFVVGV4dFByb3ZpZGVyKToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxz
LmNwcDoKKwogMjAxOC0wMi0wNiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255
LmNvbT4KIAogICAgICAgICBbR1RLXSBmYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC5o
dG1sIGlzIGZsYWt5CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYsOCBAQAogCQkwRjVGM0Q2ODFG
M0ZFQkE2MDBCMTE1QTIgLyogQ2FnZWRVbmlxdWVQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FnZWRV
bmlxdWVQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkQxREZDQkQx
QjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjJBOEE2MjAyQ0NDMTQwMDdCODYyMyAv
KiBGYXN0Q29weS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Q29weS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyQThBNzIwMkNDQzE1MDA3Qjg2MjMg
LyogRmFzdFplcm9GaWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3Ra
ZXJvRmlsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2QjI4MDFEQzk3QkFC
MDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZC
MjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2xvY2tUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vbm90b25pY1RpbWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODY0LDkgKzg2NiwxMSBAQAogCQkJCUE4QTQ3MjlGMTUxQTgyNUEw
MDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywKIAkJCQkwRjdDNUZCNTFEODg1Q0YyMDA0NEY1
RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8sCiAJCQkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcy
IC8qIEZhc3RCaXRWZWN0b3IuaCAqLywKKwkJCQkwRjYyQThBNjIwMkNDQzE0MDA3Qjg2MjMgLyog
RmFzdENvcHkuaCAqLywKIAkJCQlBOEE0NzJBMTE1MUE4MjVBMDA0MTIzRkYgLyogRmFzdE1hbGxv
Yy5jcHAgKi8sCiAJCQkJQThBNDcyQTIxNTFBODI1QTAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuaCAq
LywKIAkJCQkwRjc5QzdDMzFFNzM1MTE4MDBFQjM0RDEgLyogRmFzdFRMUy5oICovLAorCQkJCTBG
NjJBOEE3MjAyQ0NDMTUwMDdCODYyMyAvKiBGYXN0WmVyb0ZpbGwuaCAqLywKIAkJCQlCMzhGRDdC
QzE2ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCAqLywKIAkJCQkwRjlEMzM1QjE2
NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRjlEMzM1QzE2
NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8sCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjksNyArMjksOSBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC00MSw3ICs0Myw3IEBAIHZvaWQgQml0VmVjdG9yOjpzZXRTbG93KGNvbnN0
IEJpdFZlY3RvciYKICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9p
bnRlcjsKICAgICBlbHNlIHsKICAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0
cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShvdGhlci5zaXplKCkpOwotICAgICAgICBtZW1jcHko
bmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdGhlci5iaXRzKCksIGJ5dGVDb3VudChvdGhlci5z
aXplKCkpKTsKKyAgICAgICAgZmFzdENvcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdGhl
ci5iaXRzKCksIHdvcmRDb3VudChvdGhlci5zaXplKCkpKTsKICAgICAgICAgbmV3Qml0c09yUG9p
bnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpID4+IDE7CiAg
ICAgfQogICAgIGlmICghaXNJbmxpbmUoKSAmJiAhaXNFbXB0eU9yRGVsZXRlZFZhbHVlKCkpCkBA
IC02OSw3ICs3MSw3IEBAIHZvaWQgQml0VmVjdG9yOjpjbGVhckFsbCgpCiAgICAgaWYgKGlzSW5s
aW5lKCkpCiAgICAgICAgIG1fYml0c09yUG9pbnRlciA9IG1ha2VJbmxpbmVCaXRzKDApOwogICAg
IGVsc2UKLSAgICAgICAgbWVtc2V0KG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCAwLCBieXRlQ291
bnQoc2l6ZSgpKSk7CisgICAgICAgIGZhc3RaZXJvRmlsbChvdXRPZkxpbmVCaXRzKCktPmJpdHMo
KSwgd29yZENvdW50KHNpemUoKSkpOwogfQogCiBCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHMqIEJp
dFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6Y3JlYXRlKHNpemVfdCBudW1CaXRzKQpAQCAtOTMsMTQg
Kzk1LDE0IEBAIHZvaWQgQml0VmVjdG9yOjpyZXNpemVPdXRPZkxpbmUoc2l6ZV90IG4KICAgICBp
ZiAoaXNJbmxpbmUoKSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIGJp
dHMgYXJlIHplcm8gaW4gY2FzZSB3ZSBkbyBhIG5vLW9wIHJlc2l6ZS4KICAgICAgICAgKm5ld091
dE9mTGluZUJpdHMtPmJpdHMoKSA9IG1fYml0c09yUG9pbnRlciAmIH4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpOwotICAgICAgICBtZW1zZXQobmV3T3V0T2ZM
aW5lQml0cy0+Yml0cygpICsgMSwgMCwgKG5ld051bVdvcmRzIC0gMSkgKiBzaXplb2Yodm9pZCop
KTsKKyAgICAgICAgZmFzdFplcm9GaWxsKG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSArIDEsIG5l
d051bVdvcmRzIC0gMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG51bUJpdHMgPiBzaXpl
KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBvbGROdW1Xb3JkcyA9IG91dE9mTGluZUJpdHMoKS0+
bnVtV29yZHMoKTsKLSAgICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCks
IG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBvbGROdW1Xb3JkcyAqIHNpemVvZih2b2lkKikpOwot
ICAgICAgICAgICAgbWVtc2V0KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSArIG9sZE51bVdvcmRz
LCAwLCAobmV3TnVtV29yZHMgLSBvbGROdW1Xb3JkcykgKiBzaXplb2Yodm9pZCopKTsKKyAgICAg
ICAgICAgIGZhc3RDb3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3V0T2ZMaW5lQml0cygp
LT5iaXRzKCksIG9sZE51bVdvcmRzKTsKKyAgICAgICAgICAgIGZhc3RaZXJvRmlsbChuZXdPdXRP
ZkxpbmVCaXRzLT5iaXRzKCkgKyBvbGROdW1Xb3JkcywgbmV3TnVtV29yZHMgLSBvbGROdW1Xb3Jk
cyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMt
PmJpdHMoKSwgb3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIG5ld091dE9mTGluZUJpdHMtPm51bVdv
cmRzKCkgKiBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgIGZhc3RDb3B5KG5ld091dE9mTGlu
ZUJpdHMtPmJpdHMoKSwgb3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIG5ld091dE9mTGluZUJpdHMt
Pm51bVdvcmRzKCkpOwogICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJp
dHMoKSk7CiAgICAgfQogICAgIG1fYml0c09yUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG5ld091dE9mTGluZUJpdHMpID4+IDE7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24g
MjI4MjE3KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1NCw2ICszNTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIChiaXRDb3VudCArIDcp
ID4+IDM7CiAgICAgfQogCisgICAgc3RhdGljIHNpemVfdCB3b3JkQ291bnQodWludHB0cl90IGJp
dHMpCisgICAgeworICAgICAgICByZXR1cm4gKGJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSAv
IGJpdHNJblBvaW50ZXIoKTsKKyAgICB9CisgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtl
SW5saW5lQml0cyh1aW50cHRyX3QgYml0cykKICAgICB7CiAgICAgICAgIEFTU0VSVCghKGJpdHMg
JiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpKSk7CkBAIC00
MTgsNyArNDIzLDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaXRz
OyB9Ci0gICAgICAgIHNpemVfdCBudW1Xb3JkcygpIGNvbnN0IHsgcmV0dXJuIChtX251bUJpdHMg
KyBiaXRzSW5Qb2ludGVyKCkgLSAxKSAvIGJpdHNJblBvaW50ZXIoKTsgfQorICAgICAgICBzaXpl
X3QgbnVtV29yZHMoKSBjb25zdCB7IHJldHVybiB3b3JkQ291bnQobV9udW1CaXRzKTsgfQogICAg
ICAgICB1aW50cHRyX3QqIGJpdHMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Kj4o
dGhpcyArIDEpOyB9CiAgICAgICAgIGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNvbnN0IHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxjb25zdCB1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDEwIEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEV4cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaAogICAgIEZh
c3RCaXRWZWN0b3IuaAorICAgIEZhc3RDb3B5LmgKICAgICBGYXN0TWFsbG9jLmgKICAgICBGYXN0
VExTLmgKKyAgICBGYXN0WmVyb0ZpbGwuaAogICAgIEZlYXR1cmVEZWZpbmVzLmgKICAgICBGaWxl
UHJpbnRTdHJlYW0uaAogICAgIEZsaXBCeXRlcy5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1
ZmZlci5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTY1LDcgKzY2LDcgQEAgcHVibGljOgogICAgICAgICBB
cnJheSogbmV3QXJyYXkgPSBjcmVhdGVBcnJheShuZXdTaXplKTsKICAgICAgICAgLy8gVGhpcyBh
bGxvd3MgdXMgdG8gZG8gQ29uY3VycmVudEJ1ZmZlcjxzdGQ6OnVuaXF1ZV9wdHI8Pj4uCiAgICAg
ICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIG1lbWNweShuZXdBcnJheS0+ZGF0YSwgYXJyYXkt
PmRhdGEsIHNpemVvZihUKSAqIGFycmF5LT5zaXplKTsKKyAgICAgICAgICAgIGZhc3RDb3B5KG5l
d0FycmF5LT5kYXRhLCBhcnJheS0+ZGF0YSwgYXJyYXktPnNpemUpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gYXJyYXkgPyBhcnJheS0+c2l6ZSA6IDA7IGkgPCBuZXdTaXplOyArK2kpCiAgICAg
ICAgICAgICBuZXcgKG5ld0FycmF5LT5kYXRhICsgaSkgVCgpOwogICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkocmV2aXNpb24gMjI4MjE3
KQorKysgU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI3LDcgKzI3LDkgQEAKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RDb3B5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFplcm9GaWxsLmg+CiAjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC05NSw3
ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGFycmF5TGVuZ3RoKCkgIT0gb3RoZXIuYXJy
YXlMZW5ndGgoKSkKICAgICAgICAgICAgIHNldEVxdWFsc1Nsb3cob3RoZXIpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG1lbWNweShtX3dvcmRzLCBvdGhlci5tX3dvcmRzLCBhcnJheUxl
bmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBmYXN0Q29weShtX3dvcmRz
LCBvdGhlci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpKTsKICAgICAgICAgICAgIG1fbnVtQml0cyA9
IG90aGVyLm1fbnVtQml0czsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC0x
MTUsMTMgKzExNywxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhckFsbCgpCiAgICAg
ewotICAgICAgICBtZW1zZXQobV93b3JkcywgMCwgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50
MzJfdCkpOworICAgICAgICBmYXN0WmVyb0ZpbGwobV93b3JkcywgYXJyYXlMZW5ndGgoKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgc2V0KGNvbnN0IEZhc3RCaXRWZWN0b3JXb3JkT3duZXImIG90
aGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9u
dW1CaXRzID09IG90aGVyLm1fbnVtQml0cyk7Ci0gICAgICAgIG1lbWNweShtX3dvcmRzLCBvdGhl
ci5tX3dvcmRzLCBhcnJheUxlbmd0aCgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZh
c3RDb3B5KG1fd29yZHMsIG90aGVyLm1fd29yZHMsIGFycmF5TGVuZ3RoKCkpOwogICAgIH0KICAg
ICAKICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GYXN0
Q29weS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zhc3RDb3B5LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dURi93dGYvRmFzdENvcHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGZhc3RDb3B5KFQqIGRzdCwg
Y29uc3QgVCogc3JjLCBzaXplX3QgbGVuZ3RoKQoreworI2lmIENQVShYODZfNjQpICYmIENPTVBJ
TEVSKEdDQ19PUl9DTEFORykKKyAgICB1aW50NjRfdCB0bXAgPSAwOworICAgIHNpemVfdCBjb3Vu
dCA9IGxlbmd0aCAqIHNpemVvZihUKTsKKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2YodWlu
dDY0X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEgJDIw
MCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJzaHJx
ICQzLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIG1vdnNxXG5cdCIKKyAgICAgICAgICAg
ICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICgl
JXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRp
LCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4
LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICIyOlxu
XHQiCisgICAgICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIith
Iih0bXApCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICAg
ICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKHNpemVvZihUKSAlIHNpemVv
Zih1aW50MzJfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAgICAiY21w
cSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAgICAg
InNocnEgJDIsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgbW92c2xcblx0IgorICAgICAg
ICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAgICAgICAgICAgIm1v
dnEgKCUlcnNpLCAlJXJjeCksICUlcmF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAo
JSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1
YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAg
ImNtcHEgJC04LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAg
ICAgImFkZHEgJDQsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICI0OlxuXHQiCisgICAgICAgICAg
ICAibW92bCAoJSVyc2ksICUlcmN4KSwgJSVlYXhcblx0IgorICAgICAgICAgICAgIm1vdmwgJSVl
YXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ0LCAlJXJjeFxuXHQi
CisgICAgICAgICAgICAiamFlIDRiXG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAg
ICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIithIih0bXApCisgICAg
ICAgICAgICA6CisgICAgICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICAgICApOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghKHNpemVvZihUKSAlIHNpemVvZih1aW50MTZfdCkp
KSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICAgICAiY21wcSAkMjAwLCAlJXJj
eFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAgICAgInNocnEgJDEsICUl
cmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgbW92c3dcblx0IgorICAgICAgICAgICAgImptcCAy
ZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAgICAgICAgICAgIm1vdnEgKCUlcnNpLCAl
JXJjeCksICUlcmF4XG5cdCIKKyAgICAgICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4
KVxuXHQiCisgICAgICAgICAgICAiMTpcblx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4
XG5cdCIKKyAgICAgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAgICAgImNtcHEgJC04LCAl
JXJjeFxuXHQiCisgICAgICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAgICAgImFkZHEgJDYs
ICUlcmN4XG5cdCIgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IGEgbG9vcC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjYxNworICAgICAgICAgICAgIjQ6XG5c
dCIKKyAgICAgICAgICAgICJtb3Z3ICglJXJzaSwgJSVyY3gpLCAlJWF4XG5cdCIKKyAgICAgICAg
ICAgICJtb3Z3ICUlYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICJzdWJxICQy
LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDRiXG5cdCIKKyAgICAgICAgICAgICIyOlxu
XHQiCisgICAgICAgICAgICA6ICIrRCIoZHN0KSwgIitTIihzcmMpLCAiK2MiKGNvdW50KSwgIith
Iih0bXApCisgICAgICAgICAgICA6CisgICAgICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICAg
ICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAg
ICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgInJl
cCBtb3ZzYlxuXHQiCisgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAiMzpcblx0IgorICAg
ICAgICAibW92cSAoJSVyc2ksICUlcmN4KSwgJSVyYXhcblx0IgorICAgICAgICAibW92cSAlJXJh
eCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAiMTpcblx0IgorICAgICAgICAic3VicSAk
OCwgJSVyY3hcblx0IgorICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgImNtcHEgJC04LCAl
JXJjeFxuXHQiCisgICAgICAgICJqZSAyZlxuXHQiCisgICAgICAgICJhZGRxICQ3LCAlJXJjeFxu
XHQiCisgICAgICAgICI0OlxuXHQiCisgICAgICAgICJtb3ZiICglJXJzaSwgJSVyY3gpLCAlJWFs
XG5cdCIKKyAgICAgICAgIm1vdmIgJSVhbCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAi
c3VicSAkMSwgJSVyY3hcblx0IgorICAgICAgICAiamFlIDRiXG5cdCIKKyAgICAgICAgIjI6XG5c
dCIKKyAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIodG1w
KQorICAgICAgICA6CisgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgKTsKKyNlbHNlCisgICAg
bWVtY3B5KGRzdCwgc3JjLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2VuZGlmCit9CisKK2lubGlu
ZSB2b2lkIGZhc3RDb3B5Qnl0ZXModm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBi
eXRlcykKK3sKKyAgICBmYXN0Q29weShzdGF0aWNfY2FzdDxjaGFyKj4oZHN0KSwgc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KHNyYyksIGJ5dGVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6ZmFzdENvcHk7Cit1c2luZyBXVEY6OmZhc3RDb3B5Qnl0ZXM7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvRmFz
dE1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC0zMSw2ICszMSw4
IEBACiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RDb3B5Lmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RaZXJvRmlsbC5oPgogCiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBA
IC03OCw3ICs4MCw3IEBAIHZvaWQgZmFzdFNldE1heFNpbmdsZUFsbG9jYXRpb25TaXplKHNpemUK
IHZvaWQqIGZhc3RaZXJvZWRNYWxsb2Moc2l6ZV90IG4pIAogewogICAgIHZvaWQqIHJlc3VsdCA9
IGZhc3RNYWxsb2Mobik7Ci0gICAgbWVtc2V0KHJlc3VsdCwgMCwgbik7CisgICAgZmFzdFplcm9G
aWxsQnl0ZXMocmVzdWx0LCBuKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04Niw3ICs4
OCw3IEBAIGNoYXIqIGZhc3RTdHJEdXAoY29uc3QgY2hhciogc3JjKQogewogICAgIHNpemVfdCBs
ZW4gPSBzdHJsZW4oc3JjKSArIDE7CiAgICAgY2hhciogZHVwID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGZhc3RNYWxsb2MobGVuKSk7Ci0gICAgbWVtY3B5KGR1cCwgc3JjLCBsZW4pOworICAgIGZhc3RD
b3B5KGR1cCwgc3JjLCBsZW4pOwogICAgIHJldHVybiBkdXA7CiB9CiAKQEAgLTk1LDcgKzk3LDcg
QEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdFplcm9lZE1hbGxvYwogICAgIHZvaWQqIHJl
c3VsdDsKICAgICBpZiAoIXRyeUZhc3RNYWxsb2MobikuZ2V0VmFsdWUocmVzdWx0KSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgbWVtc2V0KHJlc3VsdCwgMCwgbik7CisgICAgZmFzdFplcm9GaWxs
Qnl0ZXMocmVzdWx0LCBuKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9GYXN0WmVyb0ZpbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0
WmVyb0ZpbGwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9GYXN0WmVyb0ZpbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkIGZhc3RaZXJvRmlsbChUKiBkc3QsIHNpemVfdCBsZW5ndGgpCit7CisjaWYgQ1BVKFg4
Nl82NCkgJiYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQorICAgIHVpbnQ2NF90IHplcm8gPSAwOwor
ICAgIHNpemVfdCBjb3VudCA9IGxlbmd0aCAqIHNpemVvZihUKTsKKyAgICBpZiAoIShzaXplb2Yo
VCkgJSBzaXplb2YodWludDY0X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAg
ICAgICAgICAgICJzaHJxICQzLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIHN0b3NxXG5c
dCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAg
ICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAiMTpc
blx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUg
M2Jcblx0IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAi
K2MiKGNvdW50KQorICAgICAgICAgICAgOiAiYSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9y
eSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCEoc2l6
ZW9mKFQpICUgc2l6ZW9mKHVpbnQzMl90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAg
ICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQi
CisgICAgICAgICAgICAic2hycSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBzdG9z
bFxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisg
ICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAg
IjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
amFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAg
ICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAlJXJjeFxuXHQiCisgICAgICAg
ICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgJSVlYXgsICglJXJkaSwgJSVyY3gpXG5c
dCIKKyAgICAgICAgICAgICJzdWJxICQ0LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDRi
XG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIoZHN0KSwgIitj
Iihjb3VudCkKKyAgICAgICAgICAgIDogImEiKHplcm8pCisgICAgICAgICAgICA6ICJtZW1vcnki
CisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKHNpemVv
ZihUKSAlIHNpemVvZih1aW50MTZfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAg
ICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0Igor
ICAgICAgICAgICAgInNocnEgJDEsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgc3Rvc3dc
blx0IgorICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAg
ICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICIx
OlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImph
ZSAzYlxuXHQiCisgICAgICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAgICAgICAgICAg
ICJqZSAyZlxuXHQiCisgICAgICAgICAgICAiYWRkcSAkNiwgJSVyY3hcblx0IiAvLyBGSVhNRTog
VGhpcyBpc24ndCByZWFsbHkgYSBsb29wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgyNjE3CisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdncg
JSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1YnEgJDIsICUlcmN4XG5c
dCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAg
ICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAgOiAiYSIoemVybykK
KyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0
IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAicmVwIHN0b3NiXG5cdCIKKyAgICAgICAg
ImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICUlcmF4LCAoJSVy
ZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQiCisgICAgICAgICJzdWJxICQ4LCAlJXJj
eFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5c
dCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgImFkZHEgJDcsICUlcmN4XG5cdCIKKyAg
ICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgJSVhbCwgKCUlcmRpLCAlJXJjeClcblx0Igor
ICAgICAgICAic3ViICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0IgorICAgICAg
ICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitjIihjb3VudCkKKyAgICAgICAgOiAi
YSIoemVybykKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworI2Vsc2UKKyAgICBtZW1z
ZXQoZHN0LCAwLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lk
IGZhc3RaZXJvRmlsbEJ5dGVzKHZvaWQqIGRzdCwgc2l6ZV90IGJ5dGVzKQoreworICAgIGZhc3Ra
ZXJvRmlsbChzdGF0aWNfY2FzdDxjaGFyKj4oZHN0KSwgYnl0ZXMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpmYXN0WmVyb0ZpbGw7Cit1c2luZyBXVEY6OmZhc3RaZXJv
RmlsbEJ5dGVzOwpJbmRleDogU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCShyZXZpc2lvbiAyMjgyMTcpCisrKyBT
b3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgT1NBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC05MCw3ICs5MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogT1NB
bGxvY2F0b3I6OnJlYWxsb2NhdGVDb21taXR0ZWQoVCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRh
YmxlKQogewogICAgIHZvaWQqIG5ld0Jhc2UgPSByZXNlcnZlQW5kQ29tbWl0KG5ld1NpemUsIHVz
YWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci0gICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2Us
IHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUpKTsKKyAgICBmYXN0Q29weUJ5dGVzKG5ld0Jhc2Us
IG9sZEJhc2UsIHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUpKTsKICAgICBkZWNvbW1pdEFuZFJl
bGVhc2Uob2xkQmFzZSwgb2xkU2l6ZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihuZXdC
YXNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5jcHAJKHJldmlzaW9u
IDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvRmFzdENvcHkuaD4KICNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTExOSw3ICsxMjAsNyBAQCB2b2lkIFN0
cmluZ1ByaW50U3RyZWFtOjppbmNyZWFzZVNpemUoc2l6CiAgICAgLy8gZmFzdFJlYWxsb2Mgd2ls
bCBqdXN0IGRvIG1hbGxvYytmcmVlIGFueXdheS4gQWxzbywgdGhpcyBzaW1wbGlmaWVzIHRoZSBj
b2RlIHNpbmNlCiAgICAgLy8gd2UgY2FuJ3QgcmVhbGxvYyB0aGUgaW5saW5lIGJ1ZmZlci4KICAg
ICBjaGFyKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtX3NpemUp
KTsKLSAgICBtZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9uZXh0ICsgMSk7CisgICAgZmFz
dENvcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9uZXh0ICsgMSk7CiAgICAgaWYgKG1fYnVmZmVy
ICE9IG1faW5saW5lQnVmZmVyKQogICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CiAgICAgbV9i
dWZmZXIgPSBuZXdCdWZmZXI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDkgQEAKICNp
bmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHd0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RaZXJvRmlsbC5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC04Niw3ICs4OCw3IEBAIHN0cnVjdCBWZWN0b3JJbml0aWFs
aXplcjx0cnVlLCB0cnVlLCBUPgogewogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVCogYmVn
aW4sIFQqIGVuZCkgCiAgICAgewotICAgICAgICBtZW1zZXQoYmVnaW4sIDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGVuZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihiZWdpbikpOworICAg
ICAgICBmYXN0WmVyb0ZpbGwoYmVnaW4sIGVuZCAtIGJlZ2luKTsKICAgICB9CiB9OwogCkBAIC0x
MjYsNyArMTI4LDcgQEAgc3RydWN0IFZlY3Rvck1vdmVyPHRydWUsIFQ+CiB7CiAgICAgc3RhdGlj
IHZvaWQgbW92ZShjb25zdCBUKiBzcmMsIGNvbnN0IFQqIHNyY0VuZCwgVCogZHN0KSAKICAgICB7
Ci0gICAgICAgIG1lbWNweShkc3QsIHNyYywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
c3JjRW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNyYykpOworICAgICAgICBm
YXN0Q29weShkc3QsIHNyYywgc3JjRW5kIC0gc3JjKTsKICAgICB9CiAgICAgc3RhdGljIHZvaWQg
bW92ZU92ZXJsYXBwaW5nKGNvbnN0IFQqIHNyYywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpIAog
ICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBA
QCBib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50CiAgICAgaWYgKCFidWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CisgICAgZmFzdENvcHko
ZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CiAgICAgbV9idWZmZXJQb3NpdGlvbiArPSBz
aXplOwogCiAgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwg
c2l6ZSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dEVuY29kZXIuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0
ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29ucwogICAgIHVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOwogCiAgICAgdWludDhfdCogYnVmZmVy
ID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKyAgICBmYXN0
Q29weShidWZmZXIsIGRhdGEsIHNpemUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0Q29weS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2hlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ01hbGxvYy5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIHZvaWQg
Q1N0cmluZzo6aW5pdChjb25zdCBjaGFyKiBzdHIsIHNpemUKICAgICBBU1NFUlQoc3RyKTsKIAog
ICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgp
OwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKKyAg
ICBmYXN0Q29weShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgc3RyLCBsZW5ndGgpOyAKICAgICBt
X2J1ZmZlci0+bXV0YWJsZURhdGEoKVtsZW5ndGhdID0gJ1wwJzsKIH0KIApAQCAtOTYsNyArOTcs
NyBAQCB2b2lkIENTdHJpbmc6OmNvcHlCdWZmZXJJZk5lZWRlZCgpCiAgICAgUmVmUHRyPENTdHJp
bmdCdWZmZXI+IGJ1ZmZlciA9IFdURk1vdmUobV9idWZmZXIpOwogICAgIHNpemVfdCBsZW5ndGgg
PSBidWZmZXItPmxlbmd0aCgpOwogICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEo
KSwgYnVmZmVyLT5kYXRhKCksIGxlbmd0aCArIDEpOworICAgIGZhc3RDb3B5KG1fYnVmZmVyLT5t
dXRhYmxlRGF0YSgpLCBidWZmZXItPmRhdGEoKSwgbGVuZ3RoICsgMSk7CiB9CiAKIGJvb2wgQ1N0
cmluZzo6aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL3RleHQvTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAkocmV2aXNpb24gMjI4
MjE3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVu
aWNvZGUvdWxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Q29weS5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgpAQCAtNTEs
NyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghdXRmOExvY2FsZS5sZW5ndGgoKSkKICAg
ICAgICAgICAgIHJldHVybiBsb2NhbGU7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBzY3JhdGNoQnVm
ZmVyKHV0ZjhMb2NhbGUubGVuZ3RoKCkgKyAxMSwgMCk7Ci0gICAgICAgIG1lbWNweShzY3JhdGNo
QnVmZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5kYXRhKCksIHV0ZjhMb2NhbGUubGVuZ3RoKCkpOwor
ICAgICAgICBmYXN0Q29weShzY3JhdGNoQnVmZmVyLmRhdGEoKSwgdXRmOExvY2FsZS5kYXRhKCks
IHV0ZjhMb2NhbGUubGVuZ3RoKCkpOwogCiAgICAgICAgIGNvbnN0IGNoYXIqIGtleXdvcmRWYWx1
ZSA9IG51bGxwdHI7CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewpAQCAtNzUsNyArNzcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChzY3JhdGNo
QnVmZmVyLmRhdGEoKSwgbGVuZ3RoTmVlZGVkKTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBVX0JV
RkZFUl9PVkVSRkxPV19FUlJPUikgewogICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlci5ncm93KGxl
bmd0aE5lZWRlZCArIDEpOwotICAgICAgICAgICAgbWVtc2V0KHNjcmF0Y2hCdWZmZXIuZGF0YSgp
ICsgdXRmOExvY2FsZS5sZW5ndGgoKSwgMCwgc2NyYXRjaEJ1ZmZlci5zaXplKCkgLSB1dGY4TG9j
YWxlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGZhc3RaZXJvRmlsbChzY3JhdGNoQnVmZmVyLmRh
dGEoKSArIHV0ZjhMb2NhbGUubGVuZ3RoKCksIHNjcmF0Y2hCdWZmZXIuc2l6ZSgpIC0gdXRmOExv
Y2FsZS5sZW5ndGgoKSk7CiAgICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAg
ICAgICAgICBpbnQzMl90IGxlbmd0aE5lZWRlZDIgPSB1bG9jX3NldEtleXdvcmRWYWx1ZSgibGIi
LCBrZXl3b3JkVmFsdWUsIHNjcmF0Y2hCdWZmZXIuZGF0YSgpLCBzY3JhdGNoQnVmZmVyLnNpemUo
KSwgJnN0YXR1cyk7CiAgICAgICAgICAgICBpZiAoIVVfU1VDQ0VTUyhzdGF0dXMpIHx8IGxlbmd0
aE5lZWRlZCAhPSBsZW5ndGhOZWVkZWQyKQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgU3RyaW5n
QnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29uc3QKICAgICBBU1NFUlQobV9pczhCaXQpOwogICAg
IC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQg
dG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KICAgICBhdXRvIGJ1ZmZl
ciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVm
ZmVyQ2hhcmFjdGVyczgpOwotICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4LCBjdXJyZW50
Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoTENoYXIp
KTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4KKyAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJhY3Rl
cnM4LCBjdXJyZW50Q2hhcmFjdGVycywgbV9sZW5ndGgpOwogICAgIAogICAgIC8vIFVwZGF0ZSB0
aGUgYnVpbGRlciBzdGF0ZS4KICAgICBtX2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKQEAgLTEx
NCw3ICsxMTQsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0CiAg
ICAgQVNTRVJUKCFtX2lzOEJpdCk7CiAgICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRv
IGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlz
dGluZyBkYXRhLgogICAgIGF1dG8gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFs
aXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIG1lbWNweSht
X2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVf
dD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCisg
ICAgZmFzdENvcHkobV9idWZmZXJDaGFyYWN0ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBtX2xl
bmd0aCk7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVm
ZmVyID0gV1RGTW92ZShidWZmZXIpOwpAQCAtMjc2LDEwICsyNzYsMTAgQEAgdm9pZCBTdHJpbmdC
dWlsZGVyOjphcHBlbmQoY29uc3QgVUNoYXIqIAogICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJV
cENvbnZlcnQobV9zdHJpbmcuaXNOdWxsKCkgPyAwIDogbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwg
ZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVyczE2ICsgbV9sZW5ndGgsIGNoYXJh
Y3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOworICAg
ICAgICBmYXN0Q29weShtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJz
LCBsZW5ndGgpOwogICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwogICAgIH0gZWxz
ZQotICAgICAgICBtZW1jcHkoYXBwZW5kVW5pbml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKSwgY2hh
cmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgICAgIGZhc3RDb3B5KGFwcGVuZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCksIGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CiAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0
aCk7CiB9CiAKQEAgLTI5MSwxMyArMjkxLDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQo
Y29uc3QgTENoYXIqIAogCiAgICAgaWYgKG1faXM4Qml0KSB7CiAgICAgICAgIExDaGFyKiBkZXN0
ID0gYXBwZW5kVW5pbml0aWFsaXplZDxMQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAgaWYgKGxlbmd0
aCA+IDgpCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgICAgICAg
ICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAq
KGNoYXJhY3RlcnMrKyk7Ci0gICAgICAgIH0KKyAgICAgICAgZmFzdENvcHkoZGVzdCwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKICAgICB9IGVsc2UgewogICAgICAgICBVQ2hhciogZGVzdCA9IGFwcGVu
ZFVuaW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCk7CiAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQg
PSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5l
IFN0cmluZ0NvbmNhdGVuYXRlX2gKIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0Q29weS5oPgogCiAjaWZuZGVmIEF0b21pY1N0cmluZ19oCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CkBAIC0xNTcsNyArMTU4LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOwor
ICAgICAgICBmYXN0Q29weShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCk7CiAg
ICAgfQogCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKG1fY2hh
cmFjdGVycywgbV9sZW5ndGgpOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2
aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNjYsNyArMTA2Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGlubGluZSAKICAgICAgICAgKmRlc3RpbmF0aW9uID0gKnNvdXJjZTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtQ2hhcmFj
dGVycyAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSk7CisgICAgZmFzdENvcHkoZGVzdGluYXRpb24s
IHNvdXJjZSwgbnVtQ2hhcmFjdGVycyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcmFjdGVycyhVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IExDaGFyKiBzb3Vy
Y2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L2lj
dS9VVGV4dFByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L2lj
dS9VVGV4dFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL1dURi93dGYv
dGV4dC9pY3UvVVRleHRQcm92aWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdENvcHkuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTU1LDEwICs1NiwxMCBA
QCBVVGV4dCogdVRleHRDbG9uZUltcGwoVVRleHQqIGRlc3RpbmF0aW9uCiAgICAgdm9pZCogZXh0
cmFOZXcgPSBkZXN0aW5hdGlvbi0+cEV4dHJhOwogICAgIGludDMyX3QgZmxhZ3MgPSBkZXN0aW5h
dGlvbi0+ZmxhZ3M7CiAgICAgaW50IHNpemVUb0NvcHkgPSBzdGQ6Om1pbihzb3VyY2UtPnNpemVP
ZlN0cnVjdCwgZGVzdGluYXRpb24tPnNpemVPZlN0cnVjdCk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0
aW9uLCBzb3VyY2UsIHNpemVUb0NvcHkpOworICAgIGZhc3RDb3B5Qnl0ZXMoZGVzdGluYXRpb24s
IHNvdXJjZSwgc2l6ZVRvQ29weSk7CiAgICAgZGVzdGluYXRpb24tPnBFeHRyYSA9IGV4dHJhTmV3
OwogICAgIGRlc3RpbmF0aW9uLT5mbGFncyA9IGZsYWdzOwotICAgIG1lbWNweShkZXN0aW5hdGlv
bi0+cEV4dHJhLCBzb3VyY2UtPnBFeHRyYSwgZXh0cmFTaXplKTsKKyAgICBmYXN0Q29weUJ5dGVz
KGRlc3RpbmF0aW9uLT5wRXh0cmEsIHNvdXJjZS0+cEV4dHJhLCBleHRyYVNpemUpOwogICAgIGZp
eFBvaW50ZXIoc291cmNlLCBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24tPmNvbnRleHQpOwogICAg
IGZpeFBvaW50ZXIoc291cmNlLCBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24tPnApOwogICAgIGZp
eFBvaW50ZXIoc291cmNlLCBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24tPnEpOwpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHAJKHJldmlz
aW9uIDIyODIxNykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRp
bjEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVVRleHRQ
cm92aWRlckxhdGluMS5oIgogCiAjaW5jbHVkZSAiVVRleHRQcm92aWRlci5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0WmVyb0ZpbGwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewpAQCAtODIsNyArODMsNyBAQCBzdGF0aWMgVVRleHQqIHVUZXh0TGF0
aW4xQ2xvbmUoVVRleHQqIGRlCiAgICAgcmVzdWx0LT5hID0gc291cmNlLT5hOwogICAgIHJlc3Vs
dC0+cEZ1bmNzID0gJnVUZXh0TGF0aW4xRnVuY3M7CiAgICAgcmVzdWx0LT5jaHVua0NvbnRlbnRz
ID0gKFVDaGFyKilyZXN1bHQtPnBFeHRyYTsKLSAgICBtZW1zZXQoY29uc3RfY2FzdDxVQ2hhcio+
KHJlc3VsdC0+Y2h1bmtDb250ZW50cyksIDAsIHNpemVvZihVQ2hhcikgKiBVVGV4dFdpdGhCdWZm
ZXJJbmxpbmVDYXBhY2l0eSk7CisgICAgZmFzdFplcm9GaWxsKGNvbnN0X2Nhc3Q8VUNoYXIqPihy
ZXN1bHQtPmNodW5rQ29udGVudHMpLCBVVGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSk7CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjI4LDcgKzIyOSw3IEBAIFVUZXh0KiBvcGVuTGF0
aW4xVVRleHRQcm92aWRlcihVVGV4dFdpdGgKICAgICB0ZXh0LT5hID0gbGVuZ3RoOwogICAgIHRl
eHQtPnBGdW5jcyA9ICZ1VGV4dExhdGluMUZ1bmNzOwogICAgIHRleHQtPmNodW5rQ29udGVudHMg
PSAoVUNoYXIqKXRleHQtPnBFeHRyYTsKLSAgICBtZW1zZXQoY29uc3RfY2FzdDxVQ2hhcio+KHRl
eHQtPmNodW5rQ29udGVudHMpLCAwLCBzaXplb2YoVUNoYXIpICogVVRleHRXaXRoQnVmZmVySW5s
aW5lQ2FwYWNpdHkpOworICAgIGZhc3RaZXJvRmlsbChjb25zdF9jYXN0PFVDaGFyKj4odGV4dC0+
Y2h1bmtDb250ZW50cyksIFVUZXh0V2l0aEJ1ZmZlcklubGluZUNhcGFjaXR5KTsKIAogICAgIHJl
dHVybiB0ZXh0OwogfQpJbmRleDogU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCShyZXZpc2lv
biAyMjgyMTcpCisrKyBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAga2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2Vw
dGlvbl9yYWlzZQogICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tTWFjaEV4Y2VwdGlvbihleGNlcHRp
b25UeXBlKTsKICAgICBSRUxFQVNFX0FTU0VSVChzaWduYWwgIT0gU2lnbmFsOjpVbmtub3duKTsK
IAotICAgIG1lbWNweShvdXRTdGF0ZSwgaW5TdGF0ZSwgaW5TdGF0ZUNvdW50ICogc2l6ZW9mKGlu
U3RhdGVbMF0pKTsKKyAgICBmYXN0Q29weShvdXRTdGF0ZSwgaW5TdGF0ZSwgaW5TdGF0ZUNvdW50
KTsKICAgICAqb3V0U3RhdGVDb3VudCA9IGluU3RhdGVDb3VudDsKIAogI2lmIENQVShYODZfNjQp
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjgyNzQpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxOC0wMi0wOCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBhbHRl
cm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBtZW1jcHkvbWVtc2V0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1NjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBNaWNoYWVsIFNhYm9mZiBhbmQgTWFyayBMYW0uCisgICAgICAgIAorICAgICAgICBBZGQg
YSBmYXN0ZXIgeDg2XzY0LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweSBhbmQgbWVt
c2V0LiBJZGVhbGx5LCB0aGlzIHdvdWxkIGp1c3QgYmUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4g
V1RGLCBidXQgd2UgaGF2ZSB0byBjb3B5IGl0IGludG8gYm1hbGxvYyBzaW5jZSBibWFsbG9jIHNp
dHMgYmVsb3cgV1RGIG9uIHRoZQorICAgICAgICBzdGFjay4KKworICAgICAgICAqIGJtYWxsb2Mv
QWxnb3JpdGhtLmg6CisgICAgICAgIChibWFsbG9jOjpmYXN0Q29weSk6CisgICAgICAgIChibWFs
bG9jOjpmYXN0WmVyb0ZpbGwpOgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAg
ICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgICogYm1hbGxv
Yy9CaXRzLmg6CisgICAgICAgIChibWFsbG9jOjpCaXRzV29yZE93bmVyOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoYm1hbGxvYzo6Qml0c1dvcmRPd25lcjo6Y2xlYXJBbGwpOgorICAgICAgICAoYm1h
bGxvYzo6Qml0c1dvcmRPd25lcjo6c2V0KToKKyAgICAgICAgKiBibWFsbG9jL0lzb1BhZ2VJbmxp
bmVzLmg6CisgICAgICAgIChibWFsbG9jOjpJc29QYWdlPENvbmZpZz46Oklzb1BhZ2UpOgorICAg
ICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJl
YWxsb2NhdGVCdWZmZXIpOgorCiAyMDE4LTAyLTA1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBHaWdhY2FnZTogZW5hYmxlIG9ubHkgZm9yIFdlYkNvbnRlbnQg
cHJvY2VzcyBhbmQgdG9rZW4gZXhlY3V0YWJsZXMKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdv
cml0aG0uaAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdv
cml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCwyMjEgQEAgYm9vbCBmaW5kQml0
SW5Xb3JkKFQgd29yZCwgc2l6ZV90JiBpbmRleAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZmFzdENvcHkoVCogZHN0LCBUKiBzcmMsIHNpemVfdCBs
ZW5ndGgpCit7CisjaWYgQkNQVShYODZfNjQpCisgICAgdWludDY0X3QgdG1wID0gMDsKKyAgICBz
aXplX3QgY291bnQgPSBsZW5ndGggKiBzaXplb2YoVCk7CisgICAgaWYgKCEoc2l6ZW9mKFQpICUg
c2l6ZW9mKHVpbnQ2NF90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgICAg
ICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQiCisgICAgICAg
ICAgICAic2hycSAkMywgJSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBtb3ZzcVxuXHQiCisg
ICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisgICAgICAgICAg
ICAibW92cSAoJSVyc2ksICUlcmN4KSwgJSVyYXhcblx0IgorICAgICAgICAgICAgIm1vdnEgJSVy
YXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICIxOlxuXHQiCisgICAgICAgICAg
ICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAg
ICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihj
b3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAibWVtb3J5Igor
ICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2Yo
VCkgJSBzaXplb2YodWludDMyX3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAg
ICAgICAgICAgICJzaHJxICQyLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIG1vdnNsXG5c
dCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAg
ICAgICAgICJtb3ZxICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92
cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAg
ICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAg
ICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIK
KyAgICAgICAgICAgICJhZGRxICQ0LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiNDpcblx0Igor
ICAgICAgICAgICAgIm1vdmwgKCUlcnNpLCAlJXJjeCksICUlZWF4XG5cdCIKKyAgICAgICAgICAg
ICJtb3ZsICUlZWF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAic3VicSAkNCwg
JSVyY3hcblx0IgorICAgICAgICAgICAgImphZSA0YlxuXHQiCisgICAgICAgICAgICAiMjpcblx0
IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihjb3VudCksICIrYSIo
dG1wKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICAgICAg
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShzaXplb2YoVCkgJSBzaXplb2Yo
dWludDE2X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAgICAgImNtcHEg
JDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAgICAgICAgICAgICJz
aHJxICQxLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIG1vdnN3XG5cdCIKKyAgICAgICAg
ICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAgICAgICAgICJtb3Zx
ICglJXJzaSwgJSVyY3gpLCAlJXJheFxuXHQiCisgICAgICAgICAgICAibW92cSAlJXJheCwgKCUl
cmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgIjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJx
ICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDNiXG5cdCIKKyAgICAgICAgICAgICJj
bXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgICAg
ICJhZGRxICQ2LCAlJXJjeFxuXHQiIC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBhIGxvb3Au
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2MTcKKyAgICAgICAg
ICAgICI0OlxuXHQiCisgICAgICAgICAgICAibW92dyAoJSVyc2ksICUlcmN4KSwgJSVheFxuXHQi
CisgICAgICAgICAgICAibW92dyAlJWF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAg
ICAic3VicSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAgImphZSA0YlxuXHQiCisgICAgICAg
ICAgICAiMjpcblx0IgorICAgICAgICAgICAgOiAiK0QiKGRzdCksICIrUyIoc3JjKSwgIitjIihj
b3VudCksICIrYSIodG1wKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgOiAibWVtb3J5Igor
ICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhc20gdm9sYXRpbGUg
KAorICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICJqYiAxZlxuXHQiCisg
ICAgICAgICJyZXAgbW92c2Jcblx0IgorICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgIjM6
XG5cdCIKKyAgICAgICAgIm1vdnEgKCUlcnNpLCAlJXJjeCksICUlcmF4XG5cdCIKKyAgICAgICAg
Im1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgIjE6XG5cdCIKKyAgICAg
ICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgImphZSAzYlxuXHQiCisgICAgICAgICJj
bXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAiamUgMmZcblx0IgorICAgICAgICAiYWRkcSAk
NywgJSVyY3hcblx0IgorICAgICAgICAiNDpcblx0IgorICAgICAgICAibW92YiAoJSVyc2ksICUl
cmN4KSwgJSVhbFxuXHQiCisgICAgICAgICJtb3ZiICUlYWwsICglJXJkaSwgJSVyY3gpXG5cdCIK
KyAgICAgICAgInN1YnEgJDEsICUlcmN4XG5cdCIKKyAgICAgICAgImphZSA0YlxuXHQiCisgICAg
ICAgICIyOlxuXHQiCisgICAgICAgIDogIitEIihkc3QpLCAiK1MiKHNyYyksICIrYyIoY291bnQp
LCAiK2EiKHRtcCkKKyAgICAgICAgOgorICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICk7Cisj
ZWxzZQorICAgIG1lbWNweShkc3QsIHNyYywgbGVuZ3RoICogc2l6ZW9mKFQpKTsKKyNlbmRpZgor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBmYXN0WmVyb0ZpbGwoVCogZHN0LCBzaXpl
X3QgbGVuZ3RoKQoreworI2lmIEJDUFUoWDg2XzY0KQorICAgIHVpbnQ2NF90IHplcm8gPSAwOwor
ICAgIHNpemVfdCBjb3VudCA9IGxlbmd0aCAqIHNpemVvZihUKTsKKyAgICBpZiAoIShzaXplb2Yo
VCkgJSBzaXplb2YodWludDY0X3QpKSkgeworICAgICAgICBhc20gdm9sYXRpbGUgKAorICAgICAg
ICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImpiIDFmXG5cdCIKKyAg
ICAgICAgICAgICJzaHJxICQzLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAicmVwIHN0b3NxXG5c
dCIKKyAgICAgICAgICAgICJqbXAgMmZcblx0IgorICAgICAgICAgICAgIjM6XG5cdCIKKyAgICAg
ICAgICAgICJtb3ZxICUlcmF4LCAoJSVyZGksICUlcmN4KVxuXHQiCisgICAgICAgICAgICAiMTpc
blx0IgorICAgICAgICAgICAgInN1YnEgJDgsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYWUg
M2Jcblx0IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAgICAgICAgIDogIitEIihkc3QpLCAi
K2MiKGNvdW50KQorICAgICAgICAgICAgOiAiYSIoemVybykKKyAgICAgICAgICAgIDogIm1lbW9y
eSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCEoc2l6
ZW9mKFQpICUgc2l6ZW9mKHVpbnQzMl90KSkpIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKyAg
ICAgICAgICAgICJjbXBxICQyMDAsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJqYiAxZlxuXHQi
CisgICAgICAgICAgICAic2hycSAkMiwgJSVyY3hcblx0IgorICAgICAgICAgICAgInJlcCBzdG9z
bFxuXHQiCisgICAgICAgICAgICAiam1wIDJmXG5cdCIKKyAgICAgICAgICAgICIzOlxuXHQiCisg
ICAgICAgICAgICAibW92cSAlJXJheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAg
IjE6XG5cdCIKKyAgICAgICAgICAgICJzdWJxICQ4LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAi
amFlIDNiXG5cdCIKKyAgICAgICAgICAgICJjbXBxICQtOCwgJSVyY3hcblx0IgorICAgICAgICAg
ICAgImplIDJmXG5cdCIKKyAgICAgICAgICAgICJhZGRxICQ0LCAlJXJjeFxuXHQiCisgICAgICAg
ICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdmwgJSVlYXgsICglJXJkaSwgJSVyY3gpXG5c
dCIKKyAgICAgICAgICAgICJzdWJxICQ0LCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamFlIDRi
XG5cdCIKKyAgICAgICAgICAgICIyOlxuXHQiCisgICAgICAgICAgICA6ICIrRCIoZHN0KSwgIitj
Iihjb3VudCkKKyAgICAgICAgICAgIDogImEiKHplcm8pCisgICAgICAgICAgICA6ICJtZW1vcnki
CisgICAgICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKHNpemVv
ZihUKSAlIHNpemVvZih1aW50MTZfdCkpKSB7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoCisgICAg
ICAgICAgICAiY21wcSAkMjAwLCAlJXJjeFxuXHQiCisgICAgICAgICAgICAiamIgMWZcblx0Igor
ICAgICAgICAgICAgInNocnEgJDEsICUlcmN4XG5cdCIKKyAgICAgICAgICAgICJyZXAgc3Rvc3dc
blx0IgorICAgICAgICAgICAgImptcCAyZlxuXHQiCisgICAgICAgICAgICAiMzpcblx0IgorICAg
ICAgICAgICAgIm1vdnEgJSVyYXgsICglJXJkaSwgJSVyY3gpXG5cdCIKKyAgICAgICAgICAgICIx
OlxuXHQiCisgICAgICAgICAgICAic3VicSAkOCwgJSVyY3hcblx0IgorICAgICAgICAgICAgImph
ZSAzYlxuXHQiCisgICAgICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5cdCIKKyAgICAgICAgICAg
ICJqZSAyZlxuXHQiCisgICAgICAgICAgICAiYWRkcSAkNiwgJSVyY3hcblx0IiAvLyBGSVhNRTog
VGhpcyBpc24ndCByZWFsbHkgYSBsb29wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgyNjE3CisgICAgICAgICAgICAiNDpcblx0IgorICAgICAgICAgICAgIm1vdncg
JSVheCwgKCUlcmRpLCAlJXJjeClcblx0IgorICAgICAgICAgICAgInN1YnEgJDIsICUlcmN4XG5c
dCIKKyAgICAgICAgICAgICJqYWUgNGJcblx0IgorICAgICAgICAgICAgIjI6XG5cdCIKKyAgICAg
ICAgICAgIDogIitEIihkc3QpLCAiK2MiKGNvdW50KQorICAgICAgICAgICAgOiAiYSIoemVybykK
KyAgICAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImNtcHEgJDIwMCwgJSVyY3hcblx0
IgorICAgICAgICAiamIgMWZcblx0IgorICAgICAgICAicmVwIHN0b3NiXG5cdCIKKyAgICAgICAg
ImptcCAyZlxuXHQiCisgICAgICAgICIzOlxuXHQiCisgICAgICAgICJtb3ZxICUlcmF4LCAoJSVy
ZGksICUlcmN4KVxuXHQiCisgICAgICAgICIxOlxuXHQiCisgICAgICAgICJzdWJxICQ4LCAlJXJj
eFxuXHQiCisgICAgICAgICJqYWUgM2Jcblx0IgorICAgICAgICAiY21wcSAkLTgsICUlcmN4XG5c
dCIKKyAgICAgICAgImplIDJmXG5cdCIKKyAgICAgICAgImFkZHEgJDcsICUlcmN4XG5cdCIKKyAg
ICAgICAgIjQ6XG5cdCIKKyAgICAgICAgIm1vdmIgJSVhbCwgKCUlcmRpLCAlJXJjeClcblx0Igor
ICAgICAgICAic3ViICQxLCAlJXJjeFxuXHQiCisgICAgICAgICJqYWUgNGJcblx0IgorICAgICAg
ICAiMjpcblx0IgorICAgICAgICA6ICIrRCIoZHN0KSwgIitjIihjb3VudCkKKyAgICAgICAgOiAi
YSIoemVybykKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworI2Vsc2UKKyAgICBtZW1z
ZXQoZHN0LCAwLCBsZW5ndGggKiBzaXplb2YoVCkpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKIAogI2VuZGlmIC8vIEFsZ29yaXRobV9oCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjgyMTcpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCB2
b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2NhdGUodm9pZCogb2JqZWN0CiAKICAgICB2b2lkKiByZXN1
bHQgPSBhbGxvY2F0ZShuZXdTaXplKTsKICAgICBzaXplX3QgY29weVNpemUgPSBzdGQ6Om1pbihv
bGRTaXplLCBuZXdTaXplKTsKLSAgICBtZW1jcHkocmVzdWx0LCBvYmplY3QsIGNvcHlTaXplKTsK
KyAgICBmYXN0Q29weShzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0KSwgc3RhdGljX2Nhc3Q8Y2hh
cio+KG9iamVjdCksIGNvcHlTaXplKTsKICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUob2Jq
ZWN0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9CaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CaXRzLmgJKHJl
dmlzaW9uIDIyODIxNykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQml0cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBCaXRzV29yZE93bmVy
JiBvcGVyYXRvcj0oY29uc3QgQml0c1dvcmRPd25lciYgb3RoZXIpCiAgICAgewotICAgICAgICBt
ZW1jcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50
MzJfdCkpOworICAgICAgICBmYXN0Q29weShtX3dvcmRzLCBvdGhlci5tX3dvcmRzLCBhcnJheUxl
bmd0aCgpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKQEAgLTkxLDEyICs5
MSwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhckFsbCgpCiAgICAgewotICAgICAg
ICBtZW1zZXQobV93b3JkcywgMCwgYXJyYXlMZW5ndGgoKSAqIHNpemVvZih1aW50MzJfdCkpOwor
ICAgICAgICBmYXN0WmVyb0ZpbGwobV93b3JkcywgYXJyYXlMZW5ndGgoKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgc2V0KGNvbnN0IEJpdHNXb3JkT3duZXImIG90aGVyKQogICAgIHsKLSAgICAg
ICAgbWVtY3B5KG1fd29yZHMsIG90aGVyLm1fd29yZHMsIGFycmF5TGVuZ3RoKCkgKiBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgZmFzdENvcHkobV93b3Jkcywgb3RoZXIubV93b3JkcywgYXJy
YXlMZW5ndGgoKSk7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyODIx
NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00Nyw3ICs0Nyw3IEBAIElzb1BhZ2U8Q29uZmlnPjo6SXNvUGFnZShJc29EaXJlY3RvcnlC
YXMKICAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAsIG1faW5kZXgoaW5kZXgpCiB7
Ci0gICAgbWVtc2V0KG1fYWxsb2NCaXRzLCAwLCBzaXplb2YobV9hbGxvY0JpdHMpKTsKKyAgICBm
YXN0WmVyb0ZpbGwobV9hbGxvY0JpdHMsIGJpdHNBcnJheUxlbmd0aChudW1PYmplY3RzKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3Iu
aAkocmV2aXNpb24gMjI4MjE3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgVmVjdG9yPFQ+OjpyZWFsbG9j
YXRlQnVmZmVyKHNpemVfdCAKICAgICBzaXplX3Qgdm1TaXplID0gYm1hbGxvYzo6dm1TaXplKG5l
d0NhcGFjaXR5ICogc2l6ZW9mKFQpKTsKICAgICBUKiBuZXdCdWZmZXIgPSB2bVNpemUgPyBzdGF0
aWNfY2FzdDxUKj4odm1BbGxvY2F0ZSh2bVNpemUpKSA6IG51bGxwdHI7CiAgICAgaWYgKG1fYnVm
ZmVyKSB7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KG5ld0J1ZmZlciwgbV9idWZmZXIsIG1fc2l6ZSAq
IHNpemVvZihUKSk7CisgICAgICAgIGZhc3RDb3B5KG5ld0J1ZmZlciwgbV9idWZmZXIsIG1fc2l6
ZSk7CiAgICAgICAgIHZtRGVhbGxvY2F0ZShtX2J1ZmZlciwgYm1hbGxvYzo6dm1TaXplKG1fY2Fw
YWNpdHkgKiBzaXplb2YoVCkpKTsKICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>