<?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>63505</bug_id>
          
          <creation_ts>2011-06-27 20:02:13 -0700</creation_ts>
          <short_desc>DFG JIT lacks array.length caching</short_desc>
          <delta_ts>2011-06-28 20:19:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>428578</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 20:02:13 -0700</bug_when>
    <thetext>The main JSC JIT has caching optimizations for get_by_id for array length.  The DFG JIT lacks these optimizations, and instead has to use a slow path C call for all array length accesses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428590</commentid>
    <comment_count>1</comment_count>
      <attachid>98848</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 20:48:56 -0700</bug_when>
    <thetext>Created attachment 98848
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428591</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 20:51:00 -0700</bug_when>
    <thetext>Attachment 98848 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGRegisterBank.h:83:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:104:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGRepatch.cpp:114:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:1577:  Missing spaces around &lt;&lt;  [whitespace/operators] [3]
Source/JavaScriptCore/assembler/X86Assembler.h:1584:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/assembler/X86Assembler.h:1588:  Missing spaces around &lt;&lt;  [whitespace/operators] [3]
Total errors found: 8 in 16 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>428594</commentid>
    <comment_count>3</comment_count>
      <attachid>98849</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 20:59:10 -0700</bug_when>
    <thetext>Created attachment 98849
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428619</commentid>
    <comment_count>4</comment_count>
      <attachid>98849</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-06-27 21:43:16 -0700</bug_when>
    <thetext>Comment on attachment 98849
the patch (fix style)

Attachment 98849 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8952420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428635</commentid>
    <comment_count>5</comment_count>
      <attachid>98860</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-27 22:38:17 -0700</bug_when>
    <thetext>Created attachment 98860
the patch (fix build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428705</commentid>
    <comment_count>6</comment_count>
      <attachid>98860</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-28 01:11:46 -0700</bug_when>
    <thetext>Comment on attachment 98860
the patch (fix build)

Attachment 98860 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8954277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429149</commentid>
    <comment_count>7</comment_count>
      <attachid>98973</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-28 14:33:41 -0700</bug_when>
    <thetext>Created attachment 98973
the patch (fix build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429206</commentid>
    <comment_count>8</comment_count>
      <attachid>98973</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-28 15:45:48 -0700</bug_when>
    <thetext>Comment on attachment 98973
the patch (fix build)

Hey Filip, 2 issues.

First, I&apos;d like like to keep the JIT implementation separate from the C helper functions, so the code that performs JIT generation shouldn&apos;t be in DFGOperations - that&apos;s really what the file DFGRepatch is for.  (The stub generation could even be in a new DFGStubs file if we wished, but DFGRepatch seems right for patching the instruction stream).  Please move the new code in tryCacheGetByID out into a separate function.

Second, this patch introduces a bunch of new code to allow us to overwrite the instruction stream, which is a little messy.  I&apos;m okay with us doing this provided that there is a benefit to doing so, but it seems like a bad idea to introduce this complexity if it&apos;s not a performance win, and I think you need to prove this.  I think you need to gather performance numbers with this patch, and I think you need to also roll a version of this optimization that just patches the offset of the branch instruction (as the old JIT does), and attach a performance comparison (you can get this by running sun spider in both forms, cat&apos;ing the results to files, then using the sunspider-compare-results script passing the two results files as arguments).

Hope this all sounds reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429306</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-28 17:49:05 -0700</bug_when>
    <thetext>Array length caching is mainly for v8, not sunspider, and is a win (see attached).  The replaceWithJump portion is not a win on either v8 or sunspider, so I&apos;ve removed it.


TEST              COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:      1.038x as fast    1248.1ms +/- 0.5%   1202.2ms +/- 0.3%     significant

=============================================================================

  v8:             1.038x as fast    1248.1ms +/- 0.5%   1202.2ms +/- 0.3%     significant
    crypto:       -                   92.8ms +/- 0.8%     92.3ms +/- 0.4% 
    deltablue:    1.148x as fast     329.7ms +/- 0.4%    287.1ms +/- 0.5%     significant
    earley-boyer: -                  149.7ms +/- 1.3%    147.6ms +/- 1.0% 
    raytrace:     -                  102.8ms +/- 3.6%    101.3ms +/- 1.0% 
    regexp:       -                  117.5ms +/- 0.6%    117.2ms +/- 0.4% 
    richards:     ??                 245.3ms +/- 0.9%    245.7ms +/- 0.7%     not conclusive: might be *1.002x as slow*
    splay:        ??                 210.3ms +/- 0.7%    211.0ms +/- 0.8%     not conclusive: might be *1.003x as slow*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429364</commentid>
    <comment_count>10</comment_count>
      <attachid>99025</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-28 18:55:47 -0700</bug_when>
    <thetext>Created attachment 99025
the patch

Assembler modifications removed - they did not prove to produce any speed-up over the simpler approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429394</commentid>
    <comment_count>11</comment_count>
      <attachid>99025</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-28 20:14:16 -0700</bug_when>
    <thetext>Comment on attachment 99025
the patch

r+, I&apos;ll land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429395</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-28 20:19:12 -0700</bug_when>
    <thetext>Fixed in r89986</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98848</attachid>
            <date>2011-06-27 20:48:56 -0700</date>
            <delta_ts>2011-06-27 20:59:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arraylength_patch_1.diff</filename>
            <type>text/plain</type>
            <size>27014</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDYtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGxhY2tzIGFycmF5
Lmxlbmd0aCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM1MDUKKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclNINC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cmVwbGFjZVdp
dGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om1heEp1bXBSZXBsYWNl
bWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9S
ZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJlcGxhY2VXaXRo
SnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmFkZFByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6UHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAg
ICAgICAgKiBkZmcvREZHUmVnaXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0
ZXJCYW5rOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisKIDIwMTEtMDYtMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGF0dGVtcHQgYWZ0
ZXIgcjg5ODg1LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0MCw2ICs5NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbiBBUk1Db25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzM5LDYgKzEzMzksMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
TUlQUy5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzYsNiArMTc3Niwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KIAorICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBJZiBtX2ZpeGVk
V2lkdGggaXMgdHJ1ZSwgd2Ugd2lsbCBnZW5lcmF0ZSBhIGZpeGVkIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMuCiAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjYW4gZW1pdCBhbnkgbnVtYmVyIG9mIGluc3Ry
dWN0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJTSDQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyU0g0LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQwLDYgKzE3NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBTSDRDb25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsNiArMTY3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQ
b2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVzZW50OyB9CiAgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVz
ZW50OyB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
eworICAgICAgICAvLyBOT1RFOiBvbiBYODYtMzIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgdW51
c2VkLgorICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0
YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCks
IFJlZ2lzdGVySUQ6OmVheCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4
SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVy
OjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGNvbnN0
IGJvb2wgbV9pc1NTRTJQcmVzZW50OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiA4OTg3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDYgKzQ1NywxNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4
ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVtcFJl
cGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjptYXhK
dW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJKHJldmlz
aW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsMTEgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2Rl
TG9jYXRpb25MYWJlbChuZXdDYWxsZWVGdW5jdGlvbikpOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydCwgZGVzdGluYXRpb24pOworICAgIH0K
IAogcHJpdmF0ZToKICAgICB2b2lkKiBtX3N0YXJ0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NjYsNiArMTU2Niw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHNldFBvaW50ZXIod2hl
cmUsIHZhbHVlKTsKICAgICB9CiAgICAgCisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1w
KHZvaWQqIGluc3RydWN0aW9uU3RhcnQsIHZvaWQqIHRvLCBSZWdpc3RlcklEIHNjcmF0Y2gpCisg
ICAgeworICAgICAgICBpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oaW5z
dHJ1Y3Rpb25TdGFydCk7CisgICAgICAgIGludDhfdCAqZHN0UHRyID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQ4X3QqPih0byk7CisgICAgICAgIGludHB0cl90IGRpc3RhbmNlID0gKGludHB0cl90KShk
c3RQdHIgLSAocHRyICsgNSkpOworI2lmIENQVShYODZfNjQpCisgICAgICAgIGlmIChkaXN0YW5j
ZSA+IElOVDMyX01BWCB8fCBkaXN0YW5jZSA8IElOVDMyX01JTikgeworICAgICAgICAgICAgLy8g
bW92cV9pNjRyIGluc3RydWN0aW9uCisgICAgICAgICAgICBwdHJbMF0gPSBQUkVfUkVYIHwgKDE8
PDMpIHwgKHNjcmF0Y2g+PjMpOworICAgICAgICAgICAgcHRyWzFdID0gT1BfTU9WX0VBWEl2ICsg
KHNjcmF0Y2ggJiA3KTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludDY0X3QqPihw
dHIrMykgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykpOworICAgICAgICAgICAgcHRyICs9IDEwOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBqbXBfciBpbnN0cnVjdGlvbgorICAgICAgICAgICAgaWYgKHNjcmF0Y2ggPj0gWDg2UmVnaXN0
ZXJzOjpyOCkgeworICAgICAgICAgICAgICAgIHB0clswXSA9IFBSRV9SRVggfCAoc2NyYXRjaD4+
Myk7CisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
dHJbMF0gPSBPUF9HUk9VUDVfRXY7CisgICAgICAgICAgICBwdHJbMV0gPSAoMzw8NikgfCAoR1JP
VVA1X09QX0pNUE48PDMpIHwgKHNjcmF0Y2ggJiA3KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgICAgIHB0clswXSA9IE9QX0pNUF9yZWwzMjsKKyAgICAgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHB0ciArIDEpID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oZGlzdGFuY2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1bXBS
ZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4g
MTM7CisjZWxzZQorICAgICAgICByZXR1cm4gNTsKKyNlbmRpZgorICAgIH0KKyAgICAKICAgICBz
dGF0aWMgdm9pZCogcmVhZFBvaW50ZXIodm9pZCogd2hlcmUpCiAgICAgewogICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHdoZXJlKVstMV07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNp
b24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDggKzEzMiwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
ICAgIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGw7Ci0gICAgICAgICAgICAgICAgaW50cHRyX3Qg
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2hl
Y2tUb0NhbGw7CisgICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3Jl
OworICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAgICAg
ICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgICAgICAgICBpbnQ4X3Qg
YmFzZUdQUjsKKyAgICAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7CisgICAgICAgICAgICAg
ICAgaW50OF90IHNjcmF0Y2hHUFI7CiAgICAgICAgICAgICB9IHVuc2V0OwogICAgICAgICAgICAg
c3RydWN0IHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFz
ZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjIsMTEgKzMyMiwzMyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxkcmVuKE5v
ZGUmCiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQ
UiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFI7CisgICAg
CisgICAgaWYgKHJlc3VsdEdQUiA9PSBiYXNlR1BSKQorICAgICAgICBzY3JhdGNoR1BSID0gdHJ5
QWxsb2NhdGUoKTsKKyAgICBlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIgPSByZXN1bHRHUFI7Cisg
ICAgCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIHN0cnVjdHVyZUNoZWNrU3RhcnQgPSBtX2ppdC5s
YWJlbCgpOworICAgICAgICAKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVy
ZVRvQ29tcGFyZTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0
LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBh
cmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0x
KSkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7
CisgICAgCisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgSklU
Q29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWRQdHJX
aXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIDApLCByZXN1bHRHUFIpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpMYWJlbCBob3RQYXRo
RG9uZSA9IG1faml0LmxhYmVsKCk7CisgICAgCisgICAgQVNTRVJUKG1faml0LmRpZmZlcmVuY2VC
ZXR3ZWVuKHN0cnVjdHVyZUNoZWNrU3RhcnQsIGhvdFBhdGhEb25lKSA+PSBNYWNyb0Fzc2VtYmxl
cjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQp
OwogICAgIAogICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQogICAgICAgICBzbG93UGF0
aFRhcmdldC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dD
YXNlID0gbV9qaXQubGFiZWwoKTsKIAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUiwgYmFzZUdQUik7CiAgICAgbV9qaXQubW92ZShiYXNlR1BSLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwpAQCAtMzM1LDIzICszNTcsMjYgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNo
ZWRHZXRCeUlkKEdQUgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwo
KTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhbmRsZWRCeUMgPSBtX2ppdC5qdW1wKCk7Ci0g
ICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOwotCi0gICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3Jh
Z2UoKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9h
ZFdpdGhQYXRjaCA9IG1faml0LmxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOwotCi0gICAgaW50
cHRyX3QgY2hlY2tUb0NhbGwgPSBtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihzdHJ1Y3R1cmVUb0Nv
bXBhcmUsIGZ1bmN0aW9uQ2FsbCk7Ci0gICAgaW50cHRyX3QgY2FsbFRvTG9hZCA9IG1faml0LmRp
ZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgbG9hZFdpdGhQYXRjaCk7Ci0KLSAgICBoYW5k
bGVkQnlDLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0
aW9uQ2FsbCwgY2hlY2tUb0NhbGwsIGNhbGxUb0xvYWQpOworICAgIGludDE2X3QgY2hlY2tUb0Nh
bGwgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihzdHJ1Y3R1
cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCkpOworICAgIGludDE2X3QgY2FsbFRvTG9hZCA9IHN0
YXRpY19jYXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwg
bG9hZFdpdGhQYXRjaCkpOworICAgIGludDE2X3QgY2FsbFRvU2xvd0Nhc2UgPSBzdGF0aWNfY2Fz
dDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIHNsb3dDYXNl
KSk7CisgICAgaW50MTZfdCBjYWxsVG9Eb25lID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obV9qaXQu
ZGlmZmVyZW5jZUJldHdlZW4oZnVuY3Rpb25DYWxsLCBkb25lTGFiZWwpKTsKKyAgICAKKyAgICBt
X2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhzdHJ1Y3R1cmVDaGVja1N0YXJ0LCBmdW5jdGlvbkNhbGws
IGNoZWNrVG9DYWxsLCBjYWxsVG9Mb2FkLCBjYWxsVG9TbG93Q2FzZSwgY2FsbFRvRG9uZSwgc3Rh
dGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKSwgc3RhdGljX2Nhc3Q8aW50OF90PihyZXN1bHRHUFIp
LCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAgICBpZiAoc2NyYXRj
aEdQUiAhPSByZXN1bHRHUFIgJiYgc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICB1bmxvY2soc2NyYXRjaEdQUik7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVk
UHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgc3RydWN0
dXJlQ2hlY2tTdGFydCA9IG1faml0LmxhYmVsKCk7CisKICAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1
cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIApAQCAtMzgzLDEyICs0MDgsMTIgQEAgdm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUgogICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRo
UGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKIAotICAgIGludHB0cl90IGNoZWNr
VG9DYWxsID0gbV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oc3RydWN0dXJlVG9Db21wYXJlLCBmdW5j
dGlvbkNhbGwpOwotICAgIGludHB0cl90IGNhbGxUb1N0b3JlID0gbV9qaXQuZGlmZmVyZW5jZUJl
dHdlZW4oZnVuY3Rpb25DYWxsLCBzdG9yZVdpdGhQYXRjaCk7CisgICAgaW50MTZfdCBjaGVja1Rv
Q2FsbCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVj
dHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsKSk7CisgICAgaW50MTZfdCBjYWxsVG9TdG9yZSA9
IHN0YXRpY19jYXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2Fs
bCwgc3RvcmVXaXRoUGF0Y2gpKTsKIAogICAgIGhhbmRsZWRCeUMubGluaygmbV9qaXQpOwogCi0g
ICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2Fs
bFRvU3RvcmUpOworICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKHN0cnVjdHVyZUNoZWNrU3Rh
cnQsIGZ1bmN0aW9uQ2FsbCwgY2hlY2tUb0NhbGwsIGNhbGxUb1N0b3JlKTsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNwaWxsKHNwaWxsTWUpOwogICAgICAgICByZXR1cm4g
Z3ByOwogICAgIH0KKyAgICBHUFJSZWcgdHJ5QWxsb2NhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZ3Bycy50cnlBbGxvY2F0ZSgpOworICAgIH0KICAgICBGUFJSZWcgZnByQWxsb2NhdGUo
KQogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWU7CkBAIC0xNDMsNiArMTQ3
LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0RG91YmxlOwogICAgIH0KIAorICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRj
aEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsK
KyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTIgIT0g
R1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QwKQorICAgICAgICAg
ICAgcmV0dXJuIEdQUkluZm86OnJlZ1QwOworCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BS
SW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAh
PSBHUFJJbmZvOjpyZWdUMSkKKyAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMTsKKwor
ICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMiAhPSBH
UFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDIpCisgICAgICAgICAg
ICByZXR1cm4gR1BSSW5mbzo6cmVnVDI7CisKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Qz
OworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIEpJVENvZGVHZW5lcmF0b3IoSklUQ29tcGlsZXIm
IGppdCwgYm9vbCBpc1NwZWN1bGF0aXZlKQogICAgICAgICA6IG1faml0KGppdCkKQEAgLTIzNiwx
OCArMjU0LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHVuYm94RG91YmxlKGNhblRyYW1w
bGUsIGluZm8uZnByKCkpOwogICAgICAgICB9CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIHByZXNlcnZlMSA9IElu
dmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJl
c2VydmUzID0gSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEdQUlJlZyBjYW5UcmFtcGxl
ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVn
VDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZv
OjpyZWdUMCkKLSAgICAgICAgICAgIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICAg
ICAgZWxzZSBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBH
UFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEpCi0gICAgICAgICAg
ICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIGVsc2UgaWYgKHByZXNlcnZl
MSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJl
c2VydmUzICE9IEdQUkluZm86OnJlZ1QyKQotICAgICAgICAgICAgY2FuVHJhbXBsZSA9IEdQUklu
Zm86OnJlZ1QyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gc2VsZWN0U2NyYXRjaEdQUihw
cmVzZXJ2ZTEsIHByZXNlcnZlMiwgcHJlc2VydmUzKTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
Z3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7
ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDggKzM4NywxNCBAQCB2b2lk
IEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsK
ICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgaW5mby5ob3RQ
YXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
aG90UGF0aEJlZ2luKTsKICAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2hlY2tUb0NhbGwgPSBt
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrVG9DYWxsOwogICAgICAgICBpbmZvLnUu
dW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Rl
bHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb1Ns
b3dDYXNlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAg
ICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgaW5mby51LnVuc2V0LmJhc2VHUFIgPSBtX3By
b3BlcnR5QWNjZXNzZXNbaV0ubV9iYXNlR1BSOworICAgICAgICBpbmZvLnUudW5zZXQudmFsdWVH
UFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV92YWx1ZUdQUjsKKyAgICAgICAgaW5mby51LnVu
c2V0LnNjcmF0Y2hHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zY3JhdGNoR1BSOwogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0
eSBjaGVjayBvdmVyIHRvIERGR09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsOSArMjMyLDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRQcm9w
ZXJ0eUFjY2VzcyhKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRlbHRh
Q2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpCisgICAgdm9pZCBh
ZGRQcm9wZXJ0eUFjY2VzcyhKSVRDb21waWxlcjo6TGFiZWwgaG90UGF0aEJlZ2luLCBKSVRDb21w
aWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludDE2X3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50MTZf
dCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSAw
LCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSA9IDAsIGludDhfdCBiYXNlR1BSID0gMCwgaW50OF90
IHZhbHVlR1BSID0gMCwgaW50OF90IHNjcmF0Y2hHUFIgPSAwKQogICAgIHsKLSAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChmdW5jdGlvbkNhbGws
IGRlbHRhQ2hlY2tUb0NhbGwsIGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChob3RQYXRoQmVnaW4s
IGZ1bmN0aW9uQ2FsbCwgZGVsdGFDaGVja1RvQ2FsbCwgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwg
ZGVsdGFDYWxsVG9TbG93Q2FzZSwgZGVsdGFDYWxsVG9Eb25lLCAgYmFzZUdQUiwgdmFsdWVHUFIs
IHNjcmF0Y2hHUFIpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yNTgsMTYgKzI1OCwyOCBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAgICAgc3RydWN0IFBy
b3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoSklUQ29t
cGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRwdHJfdCBkZWx0YUNoZWNrVG9DYWxsLCBpbnRw
dHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlKQotICAgICAgICAgICAgOiBtX2Z1bmN0aW9uQ2Fs
bChmdW5jdGlvbkNhbGwpCisgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKEpJVENvbXBpbGVy
OjpMYWJlbCBob3RQYXRoQmVnaW4sIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50
MTZfdCBkZWx0YUNoZWNrVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGlu
dDE2X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmUsIGludDhf
dCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSKQorICAgICAgICAg
ICAgOiBtX2hvdFBhdGhCZWdpbihob3RQYXRoQmVnaW4pCisgICAgICAgICAgICAsIG1fZnVuY3Rp
b25DYWxsKGZ1bmN0aW9uQ2FsbCkKICAgICAgICAgICAgICwgbV9kZWx0YUNoZWNrVG9DYWxsKGRl
bHRhQ2hlY2tUb0NhbGwpCiAgICAgICAgICAgICAsIG1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZShk
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKQorICAgICAgICAgICAgLCBtX2RlbHRhQ2FsbFRvU2xvd0Nh
c2UoZGVsdGFDYWxsVG9TbG93Q2FzZSkKKyAgICAgICAgICAgICwgbV9kZWx0YUNhbGxUb0RvbmUo
ZGVsdGFDYWxsVG9Eb25lKQorICAgICAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKKyAgICAg
ICAgICAgICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKKyAgICAgICAgICAgICwgbV9zY3JhdGNoR1BS
KHNjcmF0Y2hHUFIpCiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIEpJVENvbXBpbGVy
OjpMYWJlbCBtX2hvdFBhdGhCZWdpbjsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgbV9mdW5j
dGlvbkNhbGw7Ci0gICAgICAgIGludHB0cl90IG1fZGVsdGFDaGVja1RvQ2FsbDsKLSAgICAgICAg
aW50cHRyX3QgbV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICBpbnQxNl90IG1fZGVs
dGFDaGVja1RvQ2FsbDsKKyAgICAgICAgaW50MTZfdCBtX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7
CisgICAgICAgIGludDE2X3QgbV9kZWx0YUNhbGxUb1Nsb3dDYXNlOworICAgICAgICBpbnQxNl90
IG1fZGVsdGFDYWxsVG9Eb25lOworICAgICAgICBpbnQ4X3QgbV9iYXNlR1BSOworICAgICAgICBp
bnQ4X3QgbV92YWx1ZUdQUjsKKyAgICAgICAgaW50OF90IG1fc2NyYXRjaEdQUjsKICAgICB9Owog
CiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgJKHJl
dmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJh
bmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMjYgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKKyAgICAvLyBBdHRlbXB0IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlzIGZ1bmN0
aW9uIGZpbmRzIGFuIHVubG9ja2VkCisgICAgLy8gcmVnaXN0ZXIsIGxvY2tzIGl0LCBhbmQgcmV0
dXJucyBpdC4gIElmIG5vbmUgY2FuIGJlIGZvdW5kLCB0aGlzCisgICAgLy8gcmV0dXJucyAtMSAo
SW52YWxpZEdQUlJlZyBvciBJbnZhbGlkRlBSUmVnKS4KKyAgICBSZWdJRCB0cnlBbGxvY2F0ZSgp
CisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZDsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IG1fbGFzdEFsbG9jYXRlZCArIDE7IGkgPCBOVU1fUkVHUzsg
KytpKSB7CisgICAgICAgICAgICBpZiAoIW1fZGF0YVtpXS5sb2NrQ291bnQgJiYgbV9kYXRhW2ld
Lm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKKyAgICAgICAgfQorICAgICAgICAvLyBMb29w
IG92ZXIgdGhlIHJlbWFpbmluZyBlbnRyaWVzLgorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDw9IG1fbGFzdEFsbG9jYXRlZDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fZGF0YVtp
XS5sb2NrQ291bnQgJiYgbV9kYXRhW2ldLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
KyAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIChSZWdJRCktMTsKKyAgICB9CisKICAg
ICAvLyBBbGxvY2F0ZSBhIHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tl
ZCByZWdpc3RlciwKICAgICAvLyBsb2NrcyBpdCwgYW5kIHJldHVybnMgaXQuIElmIGFueSBuYW1l
ZCByZWdpc3RlcnMgZXhpc3QsIG9uZQogICAgIC8vIG9mIHRoZXNlIHNob3VsZCBiZSBzZWxlY3Rl
ZCB0byBiZSBhbGxvY2F0ZWQuIElmIGFsbCB1bmxvY2tlZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZUdlbmVyYXRvci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTUzLDE1ICs1NSw4MCBA
QCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJB
dE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQpOwogfQogCi1zdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGlj
IGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgLy8gRklYTUU6IFdyaXRlIGEg
dGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24gaGVyZSBqdXN0
CiAgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBjaGVjayBmb3Ig
cmVjdXJzaW9uLgogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwot
Ci0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nlc3MgZm9yIEFycmF5ICYg
U3RyaW5nLgorICAgIAorICAgIGlmIChpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgYmFzZVZhbHVlKSAm
JiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC5i
YXNlR1BSKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8udS51bnNldC52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNjcmF0Y2hHUFIpOworICAgICAg
ICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBN
YWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICAgICAgaWYgKHNjcmF0Y2hHUFIg
PT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEpJVENvZGVHZW5l
cmF0b3I6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAg
IHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZmFpbHVyZUNhc2UxID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+anNBcnJheVZQdHIpKTsKKyAgICAgICAgCisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWx1cmVDYXNlMiA9IHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKTsK
KyAgICAgICAgCisgICAgICAgIHN0dWJKaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZFRvUmVzdG9y
ZVNjcmF0Y2gpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9w
IHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KKyAgICAgICAgICAgIGZhaWx1cmVDYXNl
MS5saW5rKCZzdHViSml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlMi5saW5rKCZzdHViSml0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgIAorICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb1Nsb3dDYXNl
KTsKKyAgICAgICAgCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNh
bGxUb0RvbmUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkg
eworICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3Rs
eSBiYWNrIHRvIG5vcm1hbCBwYXRoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmVDYXNlMSwgc2xvd0Nhc2VCZWdpbik7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWx1cmVDYXNlMiwgc2xvd0Nhc2VCZWdpbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOworICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7Cisg
ICAgICAgIAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4gPSBzdHViSW5m
by5ob3RQYXRoQmVnaW47CisgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcChob3RQYXRoQmVn
aW4sIGVudHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBs
ZW5ndGggYWNjZXNzIGZvciBTdHJpbmcuCiAKICAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkg
YWNjZXNzIGZvciBpbW1lZGlhdGVzLgogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98849</attachid>
            <date>2011-06-27 20:59:10 -0700</date>
            <delta_ts>2011-06-27 22:38:17 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>arraylength_patch_2.diff</filename>
            <type>text/plain</type>
            <size>27006</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDYtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGxhY2tzIGFycmF5
Lmxlbmd0aCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM1MDUKKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclNINC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cmVwbGFjZVdp
dGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om1heEp1bXBSZXBsYWNl
bWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9S
ZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJlcGxhY2VXaXRo
SnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmFkZFByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6UHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAg
ICAgICAgKiBkZmcvREZHUmVnaXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0
ZXJCYW5rOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisKIDIwMTEtMDYtMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGF0dGVtcHQgYWZ0
ZXIgcjg5ODg1LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0MCw2ICs5NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbiBBUk1Db25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzM5LDYgKzEzMzksMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
TUlQUy5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzYsNiArMTc3Niwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KIAorICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBJZiBtX2ZpeGVk
V2lkdGggaXMgdHJ1ZSwgd2Ugd2lsbCBnZW5lcmF0ZSBhIGZpeGVkIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMuCiAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjYW4gZW1pdCBhbnkgbnVtYmVyIG9mIGluc3Ry
dWN0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJTSDQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyU0g0LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQwLDYgKzE3NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBTSDRDb25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsNiArMTY3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQ
b2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVzZW50OyB9CiAgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVz
ZW50OyB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
eworICAgICAgICAvLyBOT1RFOiBvbiBYODYtMzIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgdW51
c2VkLgorICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0
YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCks
IFJlZ2lzdGVySUQ6OmVheCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4
SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVy
OjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGNvbnN0
IGJvb2wgbV9pc1NTRTJQcmVzZW50OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiA4OTg3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDYgKzQ1NywxNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmV4
ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCksIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbWF4SnVtcFJl
cGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gWDg2QXNzZW1ibGVyOjptYXhK
dW1wUmVwbGFjZW1lbnRTaXplKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJKHJldmlz
aW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsMTEgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2Rl
TG9jYXRpb25MYWJlbChuZXdDYWxsZWVGdW5jdGlvbikpOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2Rl
TG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydCwgZGVzdGluYXRpb24pOworICAgIH0K
IAogcHJpdmF0ZToKICAgICB2b2lkKiBtX3N0YXJ0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NjYsNiArMTU2Niw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHNldFBvaW50ZXIod2hl
cmUsIHZhbHVlKTsKICAgICB9CiAgICAgCisgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1w
KHZvaWQqIGluc3RydWN0aW9uU3RhcnQsIHZvaWQqIHRvLCBSZWdpc3RlcklEIHNjcmF0Y2gpCisg
ICAgeworICAgICAgICBpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oaW5z
dHJ1Y3Rpb25TdGFydCk7CisgICAgICAgIGludDhfdCAqZHN0UHRyID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQ4X3QqPih0byk7CisgICAgICAgIGludHB0cl90IGRpc3RhbmNlID0gKGludHB0cl90KShk
c3RQdHIgLSAocHRyICsgNSkpOworI2lmIENQVShYODZfNjQpCisgICAgICAgIGlmIChkaXN0YW5j
ZSA+IElOVDMyX01BWCB8fCBkaXN0YW5jZSA8IElOVDMyX01JTikgeworICAgICAgICAgICAgLy8g
bW92cV9pNjRyIGluc3RydWN0aW9uCisgICAgICAgICAgICBwdHJbMF0gPSBQUkVfUkVYIHwgKDEg
PDwgMykgfCAoc2NyYXRjaCA+PiAzKTsKKyAgICAgICAgICAgIHB0clsxXSA9IE9QX01PVl9FQVhJ
diArIChzY3JhdGNoICYgNyk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90
Kj4ocHRyKzMpID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odG8pKTsKKyAgICAgICAgICAgIHB0ciArPSAxMDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gam1wX3IgaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgIGlmIChzY3JhdGNoID49IFg4NlJl
Z2lzdGVyczo6cjgpIHsKKyAgICAgICAgICAgICAgICBwdHJbMF0gPSBQUkVfUkVYIHwgKHNjcmF0
Y2ggPj4gMyk7CisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBwdHJbMF0gPSBPUF9HUk9VUDVfRXY7CisgICAgICAgICAgICBwdHJbMV0gPSAoMyA8PCA2
KSB8IChHUk9VUDVfT1BfSk1QTiA8PCAzKSB8IChzY3JhdGNoICYgNyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBwdHJbMF0gPSBPUF9KTVBfcmVsMzI7
CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludDMyX3QqPihwdHIgKyAxKSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KGRpc3RhbmNlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZf
dCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgcmV0dXJuIDEzOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDU7CisjZW5kaWYKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVyKHZvaWQqIHdoZXJlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih3aGVyZSlbLTFdOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw4ICsxMzIsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKLSAg
ICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNoZWNrVG9DYWxsOwotICAgICAgICAgICAgICAg
IGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgICAgICAgICAgICAgaW50MTZf
dCBkZWx0YUNoZWNrVG9DYWxsOworICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZTsKKyAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2U7
CisgICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgICAgICAg
ICAgaW50OF90IGJhc2VHUFI7CisgICAgICAgICAgICAgICAgaW50OF90IHZhbHVlR1BSOworICAg
ICAgICAgICAgICAgIGludDhfdCBzY3JhdGNoR1BSOwogICAgICAgICAgICAgfSB1bnNldDsKICAg
ICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg5ODcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIyLDExICszMjIsMzMgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VD
aGlsZHJlbihOb2RlJgogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BS
UmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogeworICAgIEdQUlJlZyBzY3JhdGNo
R1BSOworICAgIAorICAgIGlmIChyZXN1bHRHUFIgPT0gYmFzZUdQUikKKyAgICAgICAgc2NyYXRj
aEdQUiA9IHRyeUFsbG9jYXRlKCk7CisgICAgZWxzZQorICAgICAgICBzY3JhdGNoR1BSID0gcmVz
dWx0R1BSOworICAgIAorICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzdHJ1Y3R1cmVDaGVja1N0YXJ0
ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0
ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hl
Y2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0
dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPigtMSkpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1f
aml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVU
b0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KC0xKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2pp
dC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6TGFi
ZWwgaG90UGF0aERvbmUgPSBtX2ppdC5sYWJlbCgpOworICAgIAorICAgIEFTU0VSVChtX2ppdC5k
aWZmZXJlbmNlQmV0d2VlbihzdHJ1Y3R1cmVDaGVja1N0YXJ0LCBob3RQYXRoRG9uZSkgPj0gTWFj
cm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CisgICAgCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHN0cnVjdHVyZUNoZWNrLmxp
bmsoJm1faml0KTsKICAgICAKICAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKICAgICAg
ICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIsIGJhc2VHUFIpOwogICAgIG1faml0Lm1vdmUoYmFzZUdQUiwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKQEAgLTMzNSwyMyArMzU3LDI2IEBAIHZvaWQgSklUQ29kZUdlbmVy
YXRvcjo6Y2FjaGVkR2V0QnlJZChHUFIKICAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk7CiAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgCisgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYW5kbGVkQnlDID0gbV9qaXQu
anVtcCgpOwotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJv
cGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxD
b21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zm
c2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsK
LQotICAgIGludHB0cl90IGNoZWNrVG9DYWxsID0gbV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oc3Ry
dWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwpOwotICAgIGludHB0cl90IGNhbGxUb0xvYWQg
PSBtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIGxvYWRXaXRoUGF0Y2gpOwot
Ci0gICAgaGFuZGxlZEJ5Qy5saW5rKCZtX2ppdCk7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFj
Y2VzcyhmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxsVG9Mb2FkKTsKKyAgICBpbnQxNl90
IGNoZWNrVG9DYWxsID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obV9qaXQuZGlmZmVyZW5jZUJldHdl
ZW4oc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwpKTsKKyAgICBpbnQxNl90IGNhbGxU
b0xvYWQgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5j
dGlvbkNhbGwsIGxvYWRXaXRoUGF0Y2gpKTsKKyAgICBpbnQxNl90IGNhbGxUb1Nsb3dDYXNlID0g
c3RhdGljX2Nhc3Q8aW50MTZfdD4obV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oZnVuY3Rpb25DYWxs
LCBzbG93Q2FzZSkpOworICAgIGludDE2X3QgY2FsbFRvRG9uZSA9IHN0YXRpY19jYXN0PGludDE2
X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgZG9uZUxhYmVsKSk7Cisg
ICAgCisgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Moc3RydWN0dXJlQ2hlY2tTdGFydCwgZnVu
Y3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvTG9hZCwgY2FsbFRvU2xvd0Nhc2UsIGNhbGxU
b0RvbmUsIHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0PGludDhfdD4o
cmVzdWx0R1BSKSwgc3RhdGljX2Nhc3Q8aW50OF90PihzY3JhdGNoR1BSKSk7CisgICAgCisgICAg
aWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgdW5sb2NrKHNjcmF0Y2hHUFIpOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0
b3I6OmNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CisgICAgSklUQ29tcGlsZXI6Okxh
YmVsIHN0cnVjdHVyZUNoZWNrU3RhcnQgPSBtX2ppdC5sYWJlbCgpOworCiAgICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6
OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKQEAgLTM4MywxMiArNDA4LDEyIEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFIKICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3Bl
cnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMy
IHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZh
bHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKLSAgICBpbnRw
dHJfdCBjaGVja1RvQ2FsbCA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZVRvQ29t
cGFyZSwgZnVuY3Rpb25DYWxsKTsKLSAgICBpbnRwdHJfdCBjYWxsVG9TdG9yZSA9IG1faml0LmRp
ZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgc3RvcmVXaXRoUGF0Y2gpOworICAgIGludDE2
X3QgY2hlY2tUb0NhbGwgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0
d2VlbihzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCkpOworICAgIGludDE2X3QgY2Fs
bFRvU3RvcmUgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0d2Vlbihm
dW5jdGlvbkNhbGwsIHN0b3JlV2l0aFBhdGNoKSk7CiAKICAgICBoYW5kbGVkQnlDLmxpbmsoJm1f
aml0KTsKIAotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tU
b0NhbGwsIGNhbGxUb1N0b3JlKTsKKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhzdHJ1Y3R1
cmVDaGVja1N0YXJ0LCBmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxsVG9TdG9yZSk7CiB9
CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDYgKzExNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzcGlsbChzcGlsbE1lKTsKICAgICAg
ICAgcmV0dXJuIGdwcjsKICAgICB9CisgICAgR1BSUmVnIHRyeUFsbG9jYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2dwcnMudHJ5QWxsb2NhdGUoKTsKKyAgICB9CiAgICAgRlBSUmVnIGZw
ckFsbG9jYXRlKCkKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwpAQCAt
MTQzLDYgKzE0NywyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZTsKICAgICB9CiAKKyAgICBzdGF0aWMgR1BSUmVnIHNl
bGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBw
cmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJl
ZykKKyAgICB7CisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJl
c2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCkK
KyAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMDsKKworICAgICAgICBpZiAocHJlc2Vy
dmUxICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBw
cmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6
cmVnVDE7CisKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVz
ZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QyKQor
ICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOworCisgICAgICAgIHJldHVybiBHUFJJ
bmZvOjpyZWdUMzsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBKSVRDb2RlR2VuZXJhdG9yKEpJ
VENvbXBpbGVyJiBqaXQsIGJvb2wgaXNTcGVjdWxhdGl2ZSkKICAgICAgICAgOiBtX2ppdChqaXQp
CkBAIC0yMzYsMTggKzI1NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB1bmJveERvdWJs
ZShjYW5UcmFtcGxlLCBpbmZvLmZwcigpKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAg
IHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBwcmVz
ZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywg
R1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcpCiAgICAgewotICAgICAgICBHUFJSZWcg
Y2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QwOwotICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQ
UkluZm86OnJlZ1QwICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTMg
IT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVn
VDA7Ci0gICAgICAgIGVsc2UgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVz
ZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QxKQot
ICAgICAgICAgICAgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICBlbHNlIGlm
IChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJl
Z1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMikKLSAgICAgICAgICAgIGNhblRyYW1w
bGUgPSBHUFJJbmZvOjpyZWdUMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FuVHJhbXBs
ZSA9IEdQUkluZm86OnJlZ1QzOworICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IHNlbGVjdFNj
cmF0Y2hHUFIocHJlc2VydmUxLCBwcmVzZXJ2ZTIsIHByZXNlcnZlMyk7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9n
cHJzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw4ICszODcs
MTQgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1
YkluZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2FsbCk7CisgICAgICAg
IGluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2hvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNr
VG9DYWxsID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDaGVja1RvQ2FsbDsKICAgICAg
ICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBtX3Byb3BlcnR5QWNjZXNz
ZXNbaV0ubV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICBpbmZvLnUudW5zZXQuZGVs
dGFDYWxsVG9TbG93Q2FzZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU2xv
d0Nhc2U7CisgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0RvbmUgPSBtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmU7CisgICAgICAgIGluZm8udS51bnNldC5iYXNl
R1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFzZUdQUjsKKyAgICAgICAgaW5mby51LnVu
c2V0LnZhbHVlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdmFsdWVHUFI7CisgICAgICAg
IGluZm8udS51bnNldC5zY3JhdGNoR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fc2NyYXRj
aEdQUjsKICAgICB9CiAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNo
ZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBK
SVQgc3R1YnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkgKzIzMiw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7CiAjZW5kaWYKIAotICAgIHZv
aWQgYWRkUHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRw
dHJfdCBkZWx0YUNoZWNrVG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlKQor
ICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkxhYmVsIGhvdFBhdGhCZWdp
biwgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQxNl90IGRlbHRhQ2hlY2tUb0Nh
bGwsIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0YUNhbGxUb1Ns
b3dDYXNlID0gMCwgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmUgPSAwLCBpbnQ4X3QgYmFzZUdQUiA9
IDAsIGludDhfdCB2YWx1ZUdQUiA9IDAsIGludDhfdCBzY3JhdGNoR1BSID0gMCkKICAgICB7Ci0g
ICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVu
Y3Rpb25DYWxsLCBkZWx0YUNoZWNrVG9DYWxsLCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlKSk7Cisg
ICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoaG90
UGF0aEJlZ2luLCBmdW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tUb0NhbGwsIGRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGRlbHRhQ2FsbFRvRG9uZSwgIGJhc2VHUFIs
IHZhbHVlR1BSLCBzY3JhdGNoR1BSKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMjU4LDE2ICsy
NTgsMjggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKIAogICAg
IHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0gICAgICAgIFByb3BlcnR5QWNjZXNzUmVj
b3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVsdGFDaGVja1Rv
Q2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKLSAgICAgICAgICAgIDogbV9m
dW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQorICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChK
SVRDb21waWxlcjo6TGFiZWwgaG90UGF0aEJlZ2luLCBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlv
bkNhbGwsIGludDE2X3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRP
clN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDE2X3QgZGVsdGFDYWxsVG9E
b25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikK
KyAgICAgICAgICAgIDogbV9ob3RQYXRoQmVnaW4oaG90UGF0aEJlZ2luKQorICAgICAgICAgICAg
LCBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCiAgICAgICAgICAgICAsIG1fZGVsdGFDaGVj
a1RvQ2FsbChkZWx0YUNoZWNrVG9DYWxsKQogICAgICAgICAgICAgLCBtX2RlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUoZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKKyAgICAgICAgICAgICwgbV9kZWx0YUNh
bGxUb1Nsb3dDYXNlKGRlbHRhQ2FsbFRvU2xvd0Nhc2UpCisgICAgICAgICAgICAsIG1fZGVsdGFD
YWxsVG9Eb25lKGRlbHRhQ2FsbFRvRG9uZSkKKyAgICAgICAgICAgICwgbV9iYXNlR1BSKGJhc2VH
UFIpCisgICAgICAgICAgICAsIG1fdmFsdWVHUFIodmFsdWVHUFIpCisgICAgICAgICAgICAsIG1f
c2NyYXRjaEdQUihzY3JhdGNoR1BSKQogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBK
SVRDb21waWxlcjo6TGFiZWwgbV9ob3RQYXRoQmVnaW47CiAgICAgICAgIEpJVENvbXBpbGVyOjpD
YWxsIG1fZnVuY3Rpb25DYWxsOwotICAgICAgICBpbnRwdHJfdCBtX2RlbHRhQ2hlY2tUb0NhbGw7
Ci0gICAgICAgIGludHB0cl90IG1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAgICAgICAgaW50
MTZfdCBtX2RlbHRhQ2hlY2tUb0NhbGw7CisgICAgICAgIGludDE2X3QgbV9kZWx0YUNhbGxUb0xv
YWRPclN0b3JlOworICAgICAgICBpbnQxNl90IG1fZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAg
ICAgaW50MTZfdCBtX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgaW50OF90IG1fYmFzZUdQUjsK
KyAgICAgICAgaW50OF90IG1fdmFsdWVHUFI7CisgICAgICAgIGludDhfdCBtX3NjcmF0Y2hHUFI7
CiAgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0
eUFjY2Vzc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJh
bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVy
QmFuay5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVnaXN0ZXJCYW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDI2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgLy8gQXR0ZW1wdCB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIC0g
dGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZAorICAgIC8vIHJlZ2lzdGVyLCBsb2NrcyBp
dCwgYW5kIHJldHVybnMgaXQuIElmIG5vbmUgY2FuIGJlIGZvdW5kLCB0aGlzCisgICAgLy8gcmV0
dXJucyAtMSAoSW52YWxpZEdQUlJlZyBvciBJbnZhbGlkRlBSUmVnKS4KKyAgICBSZWdJRCB0cnlB
bGxvY2F0ZSgpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZDsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fbGFzdEFsbG9jYXRlZCArIDE7IGkgPCBO
VU1fUkVHUzsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fZGF0YVtpXS5sb2NrQ291bnQgJiYg
bV9kYXRhW2ldLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBMb29wIG92ZXIgdGhlIHJlbWFpbmluZyBlbnRyaWVzLgorICAgICAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDw9IG1fbGFzdEFsbG9jYXRlZDsgKytpKSB7CisgICAgICAgICAgICBpZiAo
IW1fZGF0YVtpXS5sb2NrQ291bnQgJiYgbV9kYXRhW2ldLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChpLCBpZ25v
cmVkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIChSZWdJRCktMTsKKyAg
ICB9CisKICAgICAvLyBBbGxvY2F0ZSBhIHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBmaW5kcyBh
biB1bmxvY2tlZCByZWdpc3RlciwKICAgICAvLyBsb2NrcyBpdCwgYW5kIHJldHVybnMgaXQuIElm
IGFueSBuYW1lZCByZWdpc3RlcnMgZXhpc3QsIG9uZQogICAgIC8vIG9mIHRoZXNlIHNob3VsZCBi
ZSBzZWxlY3RlZCB0byBiZSBhbGxvY2F0ZWQuIElmIGFsbCB1bmxvY2tlZApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA4OTg3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHSklU
Q29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBh
dGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTUzLDE1
ICs1NSw3OSBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOwogfQogCi1zdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQorc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgLy8gRklYTUU6
IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24g
aGVyZSBqdXN0CiAgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBj
aGVjayBmb3IgcmVjdXJzaW9uLgogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotCi0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nlc3MgZm9y
IEFycmF5ICYgU3RyaW5nLgorICAgIAorICAgIGlmIChpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgYmFz
ZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkg
eworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
dS51bnNldC5iYXNlR1BSKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC52YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNjcmF0Y2hHUFIp
OworICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICAgICAgaWYgKHNj
cmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEpJ
VENvZGVHZW5lcmF0b3I6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UxID0gc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+anNBcnJheVZQdHIpKTsKKyAgICAg
ICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMiA9IHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgICAgIAorICAgICAgICBpZiAobmVl
ZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3
ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KKyAgICAgICAgICAgIGZh
aWx1cmVDYXNlMS5saW5rKCZzdHViSml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlMi5saW5r
KCZzdHViSml0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZhaWwgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Cisg
ICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1
YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgCisgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwor
ICAgICAgICAKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRv
RG9uZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQorICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0
byBub3JtYWwgcGF0aAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZTEs
IHNsb3dDYXNlQmVnaW4pOworICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2Fz
ZTIsIHNsb3dDYXNlQmVnaW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICAK
KyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luID0gc3R1YkluZm8uaG90UGF0
aEJlZ2luOworICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoaG90UGF0aEJlZ2luLCBlbnRy
eUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFj
Y2VzcyBmb3IgU3RyaW5nLgogCiAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBm
b3IgaW1tZWRpYXRlcy4KICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
</data>
<flag name="commit-queue"
          id="93187"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98860</attachid>
            <date>2011-06-27 22:38:17 -0700</date>
            <delta_ts>2011-06-28 14:33:41 -0700</delta_ts>
            <desc>the patch (fix build)</desc>
            <filename>arraylength_patch_3.diff</filename>
            <type>text/plain</type>
            <size>27008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDYtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGxhY2tzIGFycmF5
Lmxlbmd0aCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM1MDUKKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclNINC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cmVwbGFjZVdp
dGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om1heEp1bXBSZXBsYWNl
bWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9S
ZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJlcGxhY2VXaXRo
SnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmFkZFByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6UHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAg
ICAgICAgKiBkZmcvREZHUmVnaXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0
ZXJCYW5rOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisKIDIwMTEtMDYtMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGF0dGVtcHQgYWZ0
ZXIgcjg5ODg1LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0MCw2ICs5NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbiBBUk1Db25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzM5LDYgKzEzMzksMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
TUlQUy5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzYsNiArMTc3Niwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KIAorICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBJZiBtX2ZpeGVk
V2lkdGggaXMgdHJ1ZSwgd2Ugd2lsbCBnZW5lcmF0ZSBhIGZpeGVkIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMuCiAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjYW4gZW1pdCBhbnkgbnVtYmVyIG9mIGluc3Ry
dWN0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJTSDQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyU0g0LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQwLDYgKzE3NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBTSDRDb25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsNiArMTY3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQ
b2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVzZW50OyB9CiAgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVz
ZW50OyB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
eworICAgICAgICAvLyBOT1RFOiBvbiBYODYtMzIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgdW51
c2VkLgorICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0
YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCks
IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBt
YXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJs
ZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgY29u
c3QgYm9vbCBtX2lzU1NFMlByZXNlbnQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDg5
ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNiArNDU3LDE2IEBAIHB1YmxpYzoKICAgICBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJl
bCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7
CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBtYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6Om1h
eEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIExpbmtCdWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkocmV2
aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZWxpbmtOZWFyQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENv
ZGVMb2NhdGlvbkxhYmVsKG5ld0NhbGxlZUZ1bmN0aW9uKSk7CiAgICAgfQorICAgIAorICAgIHZv
aWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENv
ZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LCBkZXN0aW5hdGlvbik7CisgICAg
fQogCiBwcml2YXRlOgogICAgIHZvaWQqIG1fc3RhcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDg5ODcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTU2Niw2ICsxNTY2LDQyIEBAIHB1YmxpYzoKICAgICAgICAgc2V0UG9pbnRlcih3
aGVyZSwgdmFsdWUpOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1
bXAodm9pZCogaW5zdHJ1Y3Rpb25TdGFydCwgdm9pZCogdG8sIFJlZ2lzdGVySUQgc2NyYXRjaCkK
KyAgICB7CisgICAgICAgIGludDhfdCAqcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihp
bnN0cnVjdGlvblN0YXJ0KTsKKyAgICAgICAgaW50OF90ICpkc3RQdHIgPSByZWludGVycHJldF9j
YXN0PGludDhfdCo+KHRvKTsKKyAgICAgICAgaW50cHRyX3QgZGlzdGFuY2UgPSAoaW50cHRyX3Qp
KGRzdFB0ciAtIChwdHIgKyA1KSk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gSU5UMzJfTUFYIHx8IGRpc3RhbmNlIDwgSU5UMzJfTUlOKSB7CisgICAgICAgICAgICAv
LyBtb3ZxX2k2NHIgaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgIHB0clswXSA9IFBSRV9SRVggfCAo
MSA8PCAzKSB8IChzY3JhdGNoID4+IDMpOworICAgICAgICAgICAgcHRyWzFdID0gT1BfTU9WX0VB
WEl2ICsgKHNjcmF0Y2ggJiA3KTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludDY0
X3QqPihwdHIrMykgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykpOworICAgICAgICAgICAgcHRyICs9IDEwOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBqbXBfciBpbnN0cnVjdGlvbgorICAgICAgICAgICAgaWYgKHNjcmF0Y2ggPj0gWDg2
UmVnaXN0ZXJzOjpyOCkgeworICAgICAgICAgICAgICAgIHB0clswXSA9IFBSRV9SRVggfCAoc2Ny
YXRjaCA+PiAzKTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHB0clswXSA9IE9QX0dST1VQNV9FdjsKKyAgICAgICAgICAgIHB0clsxXSA9ICgzIDw8
IDYpIHwgKEdST1VQNV9PUF9KTVBOIDw8IDMpIHwgKHNjcmF0Y2ggJiA3KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHB0clswXSA9IE9QX0pNUF9yZWwz
MjsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHB0ciArIDEpID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oZGlzdGFuY2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG1heEp1bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAg
ICAgICByZXR1cm4gMTM7CisjZWxzZQorICAgICAgICByZXR1cm4gNTsKKyNlbmRpZgorICAgIH0K
KyAgICAKICAgICBzdGF0aWMgdm9pZCogcmVhZFBvaW50ZXIodm9pZCogd2hlcmUpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHdoZXJlKVstMV07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDggKzEzMiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgICAgIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGw7Ci0gICAgICAgICAgICAg
ICAgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAgICAgICAgICAgICAgICBpbnQx
Nl90IGRlbHRhQ2hlY2tUb0NhbGw7CisgICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxU
b0xvYWRPclN0b3JlOworICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2Fz
ZTsKKyAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgICAg
ICAgICBpbnQ4X3QgYmFzZUdQUjsKKyAgICAgICAgICAgICAgICBpbnQ4X3QgdmFsdWVHUFI7Cisg
ICAgICAgICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7CiAgICAgICAgICAgICB9IHVuc2V0Owog
ICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gODk4NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjIsMTEgKzMyMiwzMyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVz
ZUNoaWxkcmVuKE5vZGUmCiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChH
UFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFI7CisgICAgCisgICAgaWYgKHJlc3VsdEdQUiA9PSBiYXNlR1BSKQorICAgICAgICBzY3Jh
dGNoR1BSID0gdHJ5QWxsb2NhdGUoKTsKKyAgICBlbHNlCisgICAgICAgIHNjcmF0Y2hHUFIgPSBy
ZXN1bHRHUFI7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIHN0cnVjdHVyZUNoZWNrU3Rh
cnQgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVs
UHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1
Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KC0xKSkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0g
bV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVy
ZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oLTEpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQ
Uik7CisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1f
aml0LmxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpM
YWJlbCBob3RQYXRoRG9uZSA9IG1faml0LmxhYmVsKCk7CisgICAgCisgICAgQVNTRVJUKG1faml0
LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZUNoZWNrU3RhcnQsIGhvdFBhdGhEb25lKSA+PSBN
YWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKKyAgICAKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgc3RydWN0dXJlQ2hlY2su
bGluaygmbV9qaXQpOwogICAgIAogICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQogICAg
ICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6
OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFiZWwoKTsKIAogICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdQUiwgYmFzZUdQUik7CiAgICAgbV9qaXQubW92ZShiYXNlR1BSLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwpAQCAtMzM1LDIzICszNTcsMjYgQEAgdm9pZCBKSVRDb2RlR2Vu
ZXJhdG9yOjpjYWNoZWRHZXRCeUlkKEdQUgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKTsKICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0g
bV9qaXQubGFiZWwoKTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhbmRsZWRCeUMgPSBtX2pp
dC5qdW1wKCk7Ci0gICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9qaXQpOwotCi0gICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJl
bENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NP
ZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIp
OwotCi0gICAgaW50cHRyX3QgY2hlY2tUb0NhbGwgPSBtX2ppdC5kaWZmZXJlbmNlQmV0d2Vlbihz
dHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCk7Ci0gICAgaW50cHRyX3QgY2FsbFRvTG9h
ZCA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgbG9hZFdpdGhQYXRjaCk7
Ci0KLSAgICBoYW5kbGVkQnlDLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5
QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hlY2tUb0NhbGwsIGNhbGxUb0xvYWQpOworICAgIGludDE2
X3QgY2hlY2tUb0NhbGwgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0
d2VlbihzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCkpOworICAgIGludDE2X3QgY2Fs
bFRvTG9hZCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1
bmN0aW9uQ2FsbCwgbG9hZFdpdGhQYXRjaCkpOworICAgIGludDE2X3QgY2FsbFRvU2xvd0Nhc2Ug
PSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNh
bGwsIHNsb3dDYXNlKSk7CisgICAgaW50MTZfdCBjYWxsVG9Eb25lID0gc3RhdGljX2Nhc3Q8aW50
MTZfdD4obV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oZnVuY3Rpb25DYWxsLCBkb25lTGFiZWwpKTsK
KyAgICAKKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhzdHJ1Y3R1cmVDaGVja1N0YXJ0LCBm
dW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxsVG9Mb2FkLCBjYWxsVG9TbG93Q2FzZSwgY2Fs
bFRvRG9uZSwgc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKSwgc3RhdGljX2Nhc3Q8aW50OF90
PihyZXN1bHRHUFIpLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKKyAgICAKKyAg
ICBpZiAoc2NyYXRjaEdQUiAhPSByZXN1bHRHUFIgJiYgc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICB1bmxvY2soc2NyYXRjaEdQUik7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVy
YXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5k
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKKyAgICBKSVRDb21waWxlcjo6
TGFiZWwgc3RydWN0dXJlQ2hlY2tTdGFydCA9IG1faml0LmxhYmVsKCk7CisKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIApAQCAtMzgzLDEyICs0MDgsMTIg
QEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQUgogICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJv
cGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVs
MzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
dmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKIAotICAgIGlu
dHB0cl90IGNoZWNrVG9DYWxsID0gbV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oc3RydWN0dXJlVG9D
b21wYXJlLCBmdW5jdGlvbkNhbGwpOwotICAgIGludHB0cl90IGNhbGxUb1N0b3JlID0gbV9qaXQu
ZGlmZmVyZW5jZUJldHdlZW4oZnVuY3Rpb25DYWxsLCBzdG9yZVdpdGhQYXRjaCk7CisgICAgaW50
MTZfdCBjaGVja1RvQ2FsbCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VC
ZXR3ZWVuKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsKSk7CisgICAgaW50MTZfdCBj
YWxsVG9TdG9yZSA9IHN0YXRpY19jYXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVu
KGZ1bmN0aW9uQ2FsbCwgc3RvcmVXaXRoUGF0Y2gpKTsKIAogICAgIGhhbmRsZWRCeUMubGluaygm
bV9qaXQpOwogCi0gICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoZnVuY3Rpb25DYWxsLCBjaGVj
a1RvQ2FsbCwgY2FsbFRvU3RvcmUpOworICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKHN0cnVj
dHVyZUNoZWNrU3RhcnQsIGZ1bmN0aW9uQ2FsbCwgY2hlY2tUb0NhbGwsIGNhbGxUb1N0b3JlKTsK
IH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNiArMTE2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNwaWxsKHNwaWxsTWUpOwogICAg
ICAgICByZXR1cm4gZ3ByOwogICAgIH0KKyAgICBHUFJSZWcgdHJ5QWxsb2NhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZ3Bycy50cnlBbGxvY2F0ZSgpOworICAgIH0KICAgICBGUFJSZWcg
ZnByQWxsb2NhdGUoKQogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWU7CkBA
IC0xNDMsNiArMTQ3LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOwogICAgIH0KIAorICAgIHN0YXRpYyBHUFJSZWcg
c2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BS
UmVnKQorICAgIHsKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMCAmJiBw
cmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1Qw
KQorICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QwOworCisgICAgICAgIGlmIChwcmVz
ZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYm
IHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMSkKKyAgICAgICAgICAgIHJldHVybiBHUFJJbmZv
OjpyZWdUMTsKKworICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QyICYmIHBy
ZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDIp
CisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDI7CisKKyAgICAgICAgcmV0dXJuIEdQ
UkluZm86OnJlZ1QzOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIEpJVENvZGVHZW5lcmF0b3Io
SklUQ29tcGlsZXImIGppdCwgYm9vbCBpc1NwZWN1bGF0aXZlKQogICAgICAgICA6IG1faml0KGpp
dCkKQEAgLTIzNiwxOCArMjU0LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHVuYm94RG91
YmxlKGNhblRyYW1wbGUsIGluZm8uZnByKCkpOwogICAgICAgICB9CiAgICAgfQotCisgICAgCiAg
ICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIHBy
ZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVn
LCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEdQUlJl
ZyBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0g
R1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZl
MyAhPSBHUFJJbmZvOjpyZWdUMCkKLSAgICAgICAgICAgIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpy
ZWdUMDsKLSAgICAgICAgZWxzZSBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QxICYmIHBy
ZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEp
Ci0gICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIGVsc2Ug
aWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6
cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QyKQotICAgICAgICAgICAgY2FuVHJh
bXBsZSA9IEdQUkluZm86OnJlZ1QyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5UcmFt
cGxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gc2VsZWN0
U2NyYXRjaEdQUihwcmVzZXJ2ZTEsIHByZXNlcnZlMiwgcHJlc2VydmUzKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBt
X2dwcnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDggKzM4
NywxNCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVT
dHViSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKKyAgICAg
ICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1faG90UGF0aEJlZ2luKTsKICAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2hl
Y2tUb0NhbGwgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrVG9DYWxsOwogICAg
ICAgICBpbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgICAgIGluZm8udS51bnNldC5k
ZWx0YUNhbGxUb1Nsb3dDYXNlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9T
bG93Q2FzZTsKKyAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgaW5mby51LnVuc2V0LmJh
c2VHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9iYXNlR1BSOworICAgICAgICBpbmZvLnUu
dW5zZXQudmFsdWVHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV92YWx1ZUdQUjsKKyAgICAg
ICAgaW5mby51LnVuc2V0LnNjcmF0Y2hHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zY3Jh
dGNoR1BSOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUg
Y2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERGR09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90
IEpJVCBzdHVicy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsOSArMjMyLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKTsKICNlbmRpZgogCi0gICAg
dm9pZCBhZGRQcm9wZXJ0eUFjY2VzcyhKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGlu
dHB0cl90IGRlbHRhQ2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
CisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2VzcyhKSVRDb21waWxlcjo6TGFiZWwgaG90UGF0aEJl
Z2luLCBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludDE2X3QgZGVsdGFDaGVja1Rv
Q2FsbCwgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U2xvd0Nhc2UgPSAwLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSA9IDAsIGludDhfdCBiYXNlR1BS
ID0gMCwgaW50OF90IHZhbHVlR1BSID0gMCwgaW50OF90IHNjcmF0Y2hHUFIgPSAwKQogICAgIHsK
LSAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZChm
dW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tUb0NhbGwsIGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsK
KyAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChQcm9wZXJ0eUFjY2Vzc1JlY29yZCho
b3RQYXRoQmVnaW4sIGZ1bmN0aW9uQ2FsbCwgZGVsdGFDaGVja1RvQ2FsbCwgZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSwgZGVsdGFDYWxsVG9TbG93Q2FzZSwgZGVsdGFDYWxsVG9Eb25lLCAgYmFzZUdQ
UiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0yNTgsMTYg
KzI1OCwyOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogCiAg
ICAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKLSAgICAgICAgUHJvcGVydHlBY2Nlc3NS
ZWNvcmQoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnRwdHJfdCBkZWx0YUNoZWNr
VG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlKQotICAgICAgICAgICAgOiBt
X2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCisgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3Jk
KEpJVENvbXBpbGVyOjpMYWJlbCBob3RQYXRoQmVnaW4sIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUsIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2FzZSwgaW50MTZfdCBkZWx0YUNhbGxU
b0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BS
KQorICAgICAgICAgICAgOiBtX2hvdFBhdGhCZWdpbihob3RQYXRoQmVnaW4pCisgICAgICAgICAg
ICAsIG1fZnVuY3Rpb25DYWxsKGZ1bmN0aW9uQ2FsbCkKICAgICAgICAgICAgICwgbV9kZWx0YUNo
ZWNrVG9DYWxsKGRlbHRhQ2hlY2tUb0NhbGwpCiAgICAgICAgICAgICAsIG1fZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZShkZWx0YUNhbGxUb0xvYWRPclN0b3JlKQorICAgICAgICAgICAgLCBtX2RlbHRh
Q2FsbFRvU2xvd0Nhc2UoZGVsdGFDYWxsVG9TbG93Q2FzZSkKKyAgICAgICAgICAgICwgbV9kZWx0
YUNhbGxUb0RvbmUoZGVsdGFDYWxsVG9Eb25lKQorICAgICAgICAgICAgLCBtX2Jhc2VHUFIoYmFz
ZUdQUikKKyAgICAgICAgICAgICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKKyAgICAgICAgICAgICwg
bV9zY3JhdGNoR1BSKHNjcmF0Y2hHUFIpCiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBtX2hvdFBhdGhCZWdpbjsKICAgICAgICAgSklUQ29tcGlsZXI6
OkNhbGwgbV9mdW5jdGlvbkNhbGw7Ci0gICAgICAgIGludHB0cl90IG1fZGVsdGFDaGVja1RvQ2Fs
bDsKLSAgICAgICAgaW50cHRyX3QgbV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICBp
bnQxNl90IG1fZGVsdGFDaGVja1RvQ2FsbDsKKyAgICAgICAgaW50MTZfdCBtX2RlbHRhQ2FsbFRv
TG9hZE9yU3RvcmU7CisgICAgICAgIGludDE2X3QgbV9kZWx0YUNhbGxUb1Nsb3dDYXNlOworICAg
ICAgICBpbnQxNl90IG1fZGVsdGFDYWxsVG9Eb25lOworICAgICAgICBpbnQ4X3QgbV9iYXNlR1BS
OworICAgICAgICBpbnQ4X3QgbV92YWx1ZUdQUjsKKyAgICAgICAgaW50OF90IG1fc2NyYXRjaEdQ
UjsKICAgICB9OwogCiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3Bl
cnR5QWNjZXNzZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVy
QmFuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0
ZXJCYW5rLmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWdpc3RlckJhbmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMjYgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAKKyAgICAvLyBBdHRlbXB0IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIg
LSB0aGlzIGZ1bmN0aW9uIGZpbmRzIGFuIHVubG9ja2VkCisgICAgLy8gcmVnaXN0ZXIsIGxvY2tz
IGl0LCBhbmQgcmV0dXJucyBpdC4gSWYgbm9uZSBjYW4gYmUgZm91bmQsIHRoaXMKKyAgICAvLyBy
ZXR1cm5zIC0xIChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRGUFJSZWcpLgorICAgIFJlZ0lEIHRy
eUFsbG9jYXRlKCkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpZ25vcmVkOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gbV9sYXN0QWxsb2NhdGVkICsgMTsgaSA8
IE5VTV9SRUdTOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAm
JiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGksIGlnbm9yZWQpOworICAgICAgICB9CisgICAg
ICAgIC8vIExvb3Agb3ZlciB0aGUgcmVtYWluaW5nIGVudHJpZXMuCisgICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPD0gbV9sYXN0QWxsb2NhdGVkOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGksIGln
bm9yZWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gKFJlZ0lEKS0xOwor
ICAgIH0KKwogICAgIC8vIEFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlzIGZ1bmN0aW9uIGZpbmRz
IGFuIHVubG9ja2VkIHJlZ2lzdGVyLAogICAgIC8vIGxvY2tzIGl0LCBhbmQgcmV0dXJucyBpdC4g
SWYgYW55IG5hbWVkIHJlZ2lzdGVycyBleGlzdCwgb25lCiAgICAgLy8gb2YgdGhlc2Ugc2hvdWxk
IGJlIHNlbGVjdGVkIHRvIGJlIGFsbG9jYXRlZC4gSWYgYWxsIHVubG9ja2VkCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDg5ODcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdK
SVRDb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJl
cGF0Y2hCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNTMs
MTUgKzU1LDc5IEBAIHN0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2QKICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBib29sIHRyeUNhY2hl
R2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCitzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICAvLyBGSVhN
RTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lv
biBoZXJlIGp1c3QKICAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBh
IGNoZWNrIGZvciByZWN1cnNpb24uCiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0KLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgbGVuZ3RoIGFjY2VzcyBm
b3IgQXJyYXkgJiBTdHJpbmcuCisgICAgCisgICAgaWYgKGlzSlNBcnJheShnbG9iYWxEYXRhLCBi
YXNlVmFsdWUpICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by51LnVuc2V0LmJhc2VHUFIpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnZhbHVlR1BSKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuc2NyYXRjaEdQ
Uik7CisgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAorICAgICAgICBpZiAo
c2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0g
SklUQ29kZUdlbmVyYXRvcjo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRv
UmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2FzZTEgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5qc0FycmF5VlB0cikpOworICAg
ICAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UyID0gc3R1YkppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCkpOworICAgICAgICAKKyAgICAgICAgc3R1YkppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGlmIChu
ZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gbGluayBmYWlsdXJlIGNhc2VzIGhlcmUsIHNv
IHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4ganVtcCBiYWNrLgorICAgICAgICAgICAg
ZmFpbHVyZUNhc2UxLmxpbmsoJnN0dWJKaXQpOworICAgICAgICAgICAgZmFpbHVyZUNhc2UyLmxp
bmsoJnN0dWJKaXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSml0LnBvcChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmFpbCA9IHN0dWJKaXQuanVtcCgp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZz
dHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICAKKyAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9TbG93Q2FzZSk7
CisgICAgICAgIAorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxs
VG9Eb25lKSk7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpCisg
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBkaXJlY3RseSBiYWNr
IHRvIG5vcm1hbCBwYXRoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
MSwgc2xvd0Nhc2VCZWdpbik7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVD
YXNlMiwgc2xvd0Nhc2VCZWdpbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1
bSgpOworICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgICAg
IAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4gPSBzdHViSW5mby5ob3RQ
YXRoQmVnaW47CisgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2sp
OworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcChob3RQYXRoQmVnaW4sIGVu
dHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBsZW5ndGgg
YWNjZXNzIGZvciBTdHJpbmcuCiAKICAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNz
IGZvciBpbW1lZGlhdGVzLgogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQo=
</data>
<flag name="commit-queue"
          id="93203"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98973</attachid>
            <date>2011-06-28 14:33:41 -0700</date>
            <delta_ts>2011-06-28 18:55:47 -0700</delta_ts>
            <desc>the patch (fix build)</desc>
            <filename>arraylength_patch_4.diff</filename>
            <type>text/plain</type>
            <size>27452</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDYtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGxhY2tzIGFycmF5
Lmxlbmd0aCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM1MDUKKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmVwbGFjZVdpdGhKdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJNSVBTOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclNINC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cmVwbGFjZVdp
dGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om1heEp1bXBSZXBsYWNl
bWVudFNpemUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6Om1heEp1bXBSZXBsYWNlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVwYXRjaENhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9S
ZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJlcGxhY2VXaXRo
SnVtcCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmFkZFByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6UHJvcGVydHlBY2Nlc3NSZWNvcmQ6OlByb3BlcnR5QWNjZXNzUmVjb3JkKToKKyAg
ICAgICAgKiBkZmcvREZHUmVnaXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0
ZXJCYW5rOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisKIDIwMTEtMDYtMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGF0dGVtcHQgYWZ0
ZXIgcjg5ODg1LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0MCw2ICs5NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbiBBUk1Db25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzM5LDYgKzEzMzksMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0
aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
TUlQUy5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzYsNiArMTc3Niwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KIAorICAgIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBJZiBtX2ZpeGVk
V2lkdGggaXMgdHJ1ZSwgd2Ugd2lsbCBnZW5lcmF0ZSBhIGZpeGVkIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMuCiAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjYW4gZW1pdCBhbnkgbnVtYmVyIG9mIGluc3Ry
dWN0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJTSDQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyU0g0LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzQwLDYgKzE3NDAsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwg
aW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAg
ICBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBTSDRDb25kaXRpb24oUmVsYXRpb25hbENvbmRpdGlv
biBjb25kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsNiArMTY3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQ
b2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVzZW50OyB9CiAgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NTRTJQcmVz
ZW50OyB9CiAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAg
eworICAgICAgICAvLyBOT1RFOiBvbiBYODYtMzIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgdW51
c2VkLgorICAgICAgICBYODZBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0
YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCks
IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBt
YXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJs
ZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgY29u
c3QgYm9vbCBtX2lzU1NFMlByZXNlbnQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDg5
ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNiArNDU3LDE2IEBAIHB1YmxpYzoKICAgICBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJl
bCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7
CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBtYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBYODZBc3NlbWJsZXI6Om1h
eEp1bXBSZXBsYWNlbWVudFNpemUoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIExpbmtCdWZmZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkocmV2
aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZWxpbmtOZWFyQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENv
ZGVMb2NhdGlvbkxhYmVsKG5ld0NhbGxlZUZ1bmN0aW9uKSk7CiAgICAgfQorICAgIAorICAgIHZv
aWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENv
ZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGxhY2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LCBkZXN0aW5hdGlvbik7CisgICAg
fQogCiBwcml2YXRlOgogICAgIHZvaWQqIG1fc3RhcnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDg5ODcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTU2Niw2ICsxNTY2LDQyIEBAIHB1YmxpYzoKICAgICAgICAgc2V0UG9pbnRlcih3
aGVyZSwgdmFsdWUpOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1
bXAodm9pZCogaW5zdHJ1Y3Rpb25TdGFydCwgdm9pZCogdG8sIFJlZ2lzdGVySUQgc2NyYXRjaCkK
KyAgICB7CisgICAgICAgIGludDhfdCAqcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihp
bnN0cnVjdGlvblN0YXJ0KTsKKyAgICAgICAgaW50OF90ICpkc3RQdHIgPSByZWludGVycHJldF9j
YXN0PGludDhfdCo+KHRvKTsKKyAgICAgICAgaW50cHRyX3QgZGlzdGFuY2UgPSAoaW50cHRyX3Qp
KGRzdFB0ciAtIChwdHIgKyA1KSk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgfHwgZGlzdGFuY2UgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgeworICAgICAgICAgICAgLy8gbW92
cV9pNjRyIGluc3RydWN0aW9uCisgICAgICAgICAgICBwdHJbMF0gPSBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KFBSRV9SRVggfCAoMSA8PCAzKSB8IChzY3JhdGNoID4+IDMpKTsKKyAgICAgICAgICAgIHB0
clsxXSA9IHN0YXRpY19jYXN0PGludDhfdD4oT1BfTU9WX0VBWEl2ICsgKHNjcmF0Y2ggJiA3KSk7
CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4ocHRyKzMpID0gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pKTsKKyAgICAgICAg
ICAgIHB0ciArPSAxMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gam1wX3IgaW5zdHJ1
Y3Rpb24KKyAgICAgICAgICAgIGlmIChzY3JhdGNoID49IFg4NlJlZ2lzdGVyczo6cjgpIHsKKyAg
ICAgICAgICAgICAgICBwdHJbMF0gPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KFBSRV9SRVggfCAoc2Ny
YXRjaCA+PiAzKSk7CisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwdHJbMF0gPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KE9QX0dST1VQNV9Fdik7CisgICAg
ICAgICAgICBwdHJbMV0gPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KCgzIDw8IDYpIHwgKEdST1VQNV9P
UF9KTVBOIDw8IDMpIHwgKHNjcmF0Y2ggJiA3KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICBwdHJbMF0gPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KE9QX0pN
UF9yZWwzMik7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludDMyX3QqPihwdHIgKyAxKSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KGRpc3RhbmNlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82
NCkKKyAgICAgICAgcmV0dXJuIDEzOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDU7CisjZW5kaWYK
KyAgICB9CisgICAgCiAgICAgc3RhdGljIHZvaWQqIHJlYWRQb2ludGVyKHZvaWQqIHdoZXJlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih3aGVyZSlbLTFd
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw4ICsxMzIs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBkZWx0YUNoZWNrVG9DYWxsOwotICAgICAg
ICAgICAgICAgIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7CisgICAgICAgICAgICAg
ICAgaW50MTZfdCBkZWx0YUNoZWNrVG9DYWxsOworICAgICAgICAgICAgICAgIGludDE2X3QgZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRv
U2xvd0Nhc2U7CisgICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAg
ICAgICAgICAgICAgaW50OF90IGJhc2VHUFI7CisgICAgICAgICAgICAgICAgaW50OF90IHZhbHVl
R1BSOworICAgICAgICAgICAgICAgIGludDhfdCBzY3JhdGNoR1BSOwogICAgICAgICAgICAgfSB1
bnNldDsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg5
ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDExICszMjIsMzMgQEAgdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjp1c2VDaGlsZHJlbihOb2RlJgogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdl
dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogeworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOworICAgIAorICAgIGlmIChyZXN1bHRHUFIgPT0gYmFzZUdQUikKKyAgICAg
ICAgc2NyYXRjaEdQUiA9IHRyeUFsbG9jYXRlKCk7CisgICAgZWxzZQorICAgICAgICBzY3JhdGNo
R1BSID0gcmVzdWx0R1BSOworICAgIAorICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzdHJ1Y3R1cmVD
aGVja1N0YXJ0ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc3Ry
dWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6OkVxdWFs
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KC0xKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBy
ZXN1bHRHUFIpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0
Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBKSVRDb21w
aWxlcjo6TGFiZWwgaG90UGF0aERvbmUgPSBtX2ppdC5sYWJlbCgpOworICAgIAorICAgIEFTU0VS
VChtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihzdHJ1Y3R1cmVDaGVja1N0YXJ0LCBob3RQYXRoRG9u
ZSkgPj0gTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7CisgICAgCisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHN0cnVjdHVy
ZUNoZWNrLmxpbmsoJm1faml0KTsKICAgICAKICAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQo
KSkKICAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOworICAgIAorICAgIEpJVENv
bXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7CiAKICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIsIGJhc2VHUFIpOwogICAgIG1faml0Lm1vdmUoYmFzZUdQ
UiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKQEAgLTMzNSwyMyArMzU3LDI2IEBAIHZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFIKICAgICBKSVRDb21waWxlcjo6Q2FsbCBm
dW5jdGlvbkNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk7CiAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgCisg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVM
YWJlbCA9IG1faml0LmxhYmVsKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYW5kbGVkQnlD
ID0gbV9qaXQuanVtcCgpOwotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLQotICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RB
ZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVz
dWx0R1BSKTsKLQotICAgIGludHB0cl90IGNoZWNrVG9DYWxsID0gbV9qaXQuZGlmZmVyZW5jZUJl
dHdlZW4oc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwpOwotICAgIGludHB0cl90IGNh
bGxUb0xvYWQgPSBtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIGxvYWRXaXRo
UGF0Y2gpOwotCi0gICAgaGFuZGxlZEJ5Qy5saW5rKCZtX2ppdCk7Ci0KLSAgICBtX2ppdC5hZGRQ
cm9wZXJ0eUFjY2VzcyhmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxsVG9Mb2FkKTsKKyAg
ICBpbnQxNl90IGNoZWNrVG9DYWxsID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obV9qaXQuZGlmZmVy
ZW5jZUJldHdlZW4oc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwpKTsKKyAgICBpbnQx
Nl90IGNhbGxUb0xvYWQgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNlQmV0
d2VlbihmdW5jdGlvbkNhbGwsIGxvYWRXaXRoUGF0Y2gpKTsKKyAgICBpbnQxNl90IGNhbGxUb1Ns
b3dDYXNlID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oZnVu
Y3Rpb25DYWxsLCBzbG93Q2FzZSkpOworICAgIGludDE2X3QgY2FsbFRvRG9uZSA9IHN0YXRpY19j
YXN0PGludDE2X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgZG9uZUxh
YmVsKSk7CisgICAgCisgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3Moc3RydWN0dXJlQ2hlY2tT
dGFydCwgZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2FsbFRvTG9hZCwgY2FsbFRvU2xvd0Nh
c2UsIGNhbGxUb0RvbmUsIHN0YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUiksIHN0YXRpY19jYXN0
PGludDhfdD4ocmVzdWx0R1BSKSwgc3RhdGljX2Nhc3Q8aW50OF90PihzY3JhdGNoR1BSKSk7Cisg
ICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgdW5sb2NrKHNjcmF0Y2hHUFIpOwogfQogCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6OmNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQ
UiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQg
cHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CisgICAgSklUQ29t
cGlsZXI6OkxhYmVsIHN0cnVjdHVyZUNoZWNrU3RhcnQgPSBtX2ppdC5sYWJlbCgpOworCiAgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29t
cGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklU
Q29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKQEAgLTM4MywxMiAr
NDA4LDEyIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFIKICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAK
LSAgICBpbnRwdHJfdCBjaGVja1RvQ2FsbCA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVj
dHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsKTsKLSAgICBpbnRwdHJfdCBjYWxsVG9TdG9yZSA9
IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgc3RvcmVXaXRoUGF0Y2gpOwor
ICAgIGludDE2X3QgY2hlY2tUb0NhbGwgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZm
ZXJlbmNlQmV0d2VlbihzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCkpOworICAgIGlu
dDE2X3QgY2FsbFRvU3RvcmUgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX2ppdC5kaWZmZXJlbmNl
QmV0d2VlbihmdW5jdGlvbkNhbGwsIHN0b3JlV2l0aFBhdGNoKSk7CiAKICAgICBoYW5kbGVkQnlD
LmxpbmsoJm1faml0KTsKIAotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2Fs
bCwgY2hlY2tUb0NhbGwsIGNhbGxUb1N0b3JlKTsKKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2Vz
cyhzdHJ1Y3R1cmVDaGVja1N0YXJ0LCBmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxsLCBjYWxsVG9T
dG9yZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gODk4NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDYgKzExNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzcGlsbChzcGlsbE1l
KTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CisgICAgR1BSUmVnIHRyeUFsbG9jYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2dwcnMudHJ5QWxsb2NhdGUoKTsKKyAgICB9CiAgICAg
RlBSUmVnIGZwckFsbG9jYXRlKCkKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGls
bE1lOwpAQCAtMTQzLDYgKzE0NywyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZTsKICAgICB9CiAKKyAgICBzdGF0aWMg
R1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcs
IEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52
YWxpZEdQUlJlZykKKyAgICB7CisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVn
VDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZv
OjpyZWdUMCkKKyAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMDsKKworICAgICAgICBp
ZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpy
ZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgICAgICByZXR1cm4g
R1BSSW5mbzo6cmVnVDE7CisKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdU
MiAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86
OnJlZ1QyKQorICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOworCisgICAgICAgIHJl
dHVybiBHUFJJbmZvOjpyZWdUMzsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBKSVRDb2RlR2Vu
ZXJhdG9yKEpJVENvbXBpbGVyJiBqaXQsIGJvb2wgaXNTcGVjdWxhdGl2ZSkKICAgICAgICAgOiBt
X2ppdChqaXQpCkBAIC0yMzYsMTggKzI1NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB1
bmJveERvdWJsZShjYW5UcmFtcGxlLCBpbmZvLmZwcigpKTsKICAgICAgICAgfQogICAgIH0KLQor
ICAgIAogICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQ
UlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcpCiAgICAgewotICAgICAg
ICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QwOwotICAgICAgICBpZiAocHJlc2Vy
dmUxICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMCAmJiBw
cmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BS
SW5mbzo6cmVnVDA7Ci0gICAgICAgIGVsc2UgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdU
MSAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUzICE9IEdQUkluZm86
OnJlZ1QxKQotICAgICAgICAgICAgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QxOwotICAgICAg
ICBlbHNlIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQ
UkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMikKLSAgICAgICAgICAg
IGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QzOworICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9
IHNlbGVjdFNjcmF0Y2hHUFIocHJlc2VydmUxLCBwcmVzZXJ2ZTIsIHByZXNlcnZlMyk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLm5hbWUo
KSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
Nyw4ICszODcsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3Ry
dWN0dXJlU3R1YkluZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2FsbCk7
CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2hvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8udS51bnNldC5k
ZWx0YUNoZWNrVG9DYWxsID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDaGVja1RvQ2Fs
bDsKICAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUgPSBtX3Byb3Bl
cnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICBpbmZvLnUu
dW5zZXQuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRh
Q2FsbFRvU2xvd0Nhc2U7CisgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0RvbmUgPSBt
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmU7CisgICAgICAgIGluZm8udS51
bnNldC5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFzZUdQUjsKKyAgICAgICAg
aW5mby51LnVuc2V0LnZhbHVlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdmFsdWVHUFI7
CisgICAgICAgIGluZm8udS51bnNldC5zY3JhdGNoR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ld
Lm1fc2NyYXRjaEdQUjsKICAgICB9CiAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3Rl
ciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2Fs
bHMsIG5vdCBKSVQgc3R1YnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDkgKzIzMiw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7CiAjZW5kaWYK
IAotICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25D
YWxsLCBpbnRwdHJfdCBkZWx0YUNoZWNrVG9DYWxsLCBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRP
clN0b3JlKQorICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkxhYmVsIGhv
dFBhdGhCZWdpbiwgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQxNl90IGRlbHRh
Q2hlY2tUb0NhbGwsIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlID0gMCwgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmUgPSAwLCBpbnQ4X3Qg
YmFzZUdQUiA9IDAsIGludDhfdCB2YWx1ZUdQUiA9IDAsIGludDhfdCBzY3JhdGNoR1BSID0gMCkK
ICAgICB7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NS
ZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNrVG9DYWxsLCBkZWx0YUNhbGxUb0xvYWRPclN0
b3JlKSk7CisgICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NS
ZWNvcmQoaG90UGF0aEJlZ2luLCBmdW5jdGlvbkNhbGwsIGRlbHRhQ2hlY2tUb0NhbGwsIGRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUsIGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGRlbHRhQ2FsbFRvRG9uZSwg
IGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAt
MjU4LDE2ICsyNTgsMjggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxs
czsKIAogICAgIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7Ci0gICAgICAgIFByb3BlcnR5
QWNjZXNzUmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVs
dGFDaGVja1RvQ2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKLSAgICAgICAg
ICAgIDogbV9mdW5jdGlvbkNhbGwoZnVuY3Rpb25DYWxsKQorICAgICAgICBQcm9wZXJ0eUFjY2Vz
c1JlY29yZChKSVRDb21waWxlcjo6TGFiZWwgaG90UGF0aEJlZ2luLCBKSVRDb21waWxlcjo6Q2Fs
bCBmdW5jdGlvbkNhbGwsIGludDE2X3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50MTZfdCBkZWx0YUNh
bGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDE2X3QgZGVs
dGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2Ny
YXRjaEdQUikKKyAgICAgICAgICAgIDogbV9ob3RQYXRoQmVnaW4oaG90UGF0aEJlZ2luKQorICAg
ICAgICAgICAgLCBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCiAgICAgICAgICAgICAsIG1f
ZGVsdGFDaGVja1RvQ2FsbChkZWx0YUNoZWNrVG9DYWxsKQogICAgICAgICAgICAgLCBtX2RlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUoZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSkKKyAgICAgICAgICAgICwg
bV9kZWx0YUNhbGxUb1Nsb3dDYXNlKGRlbHRhQ2FsbFRvU2xvd0Nhc2UpCisgICAgICAgICAgICAs
IG1fZGVsdGFDYWxsVG9Eb25lKGRlbHRhQ2FsbFRvRG9uZSkKKyAgICAgICAgICAgICwgbV9iYXNl
R1BSKGJhc2VHUFIpCisgICAgICAgICAgICAsIG1fdmFsdWVHUFIodmFsdWVHUFIpCisgICAgICAg
ICAgICAsIG1fc2NyYXRjaEdQUihzY3JhdGNoR1BSKQogICAgICAgICB7CiAgICAgICAgIH0KIAor
ICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbV9ob3RQYXRoQmVnaW47CiAgICAgICAgIEpJVENv
bXBpbGVyOjpDYWxsIG1fZnVuY3Rpb25DYWxsOwotICAgICAgICBpbnRwdHJfdCBtX2RlbHRhQ2hl
Y2tUb0NhbGw7Ci0gICAgICAgIGludHB0cl90IG1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAg
ICAgICAgaW50MTZfdCBtX2RlbHRhQ2hlY2tUb0NhbGw7CisgICAgICAgIGludDE2X3QgbV9kZWx0
YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICBpbnQxNl90IG1fZGVsdGFDYWxsVG9TbG93Q2Fz
ZTsKKyAgICAgICAgaW50MTZfdCBtX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgaW50OF90IG1f
YmFzZUdQUjsKKyAgICAgICAgaW50OF90IG1fdmFsdWVHUFI7CisgICAgICAgIGludDhfdCBtX3Nj
cmF0Y2hHUFI7CiAgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4g
bV9wcm9wZXJ0eUFjY2Vzc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZWdpc3RlckJhbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZ2lzdGVyQmFuay5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDI2IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgLy8gQXR0ZW1wdCB0byBhbGxvY2F0ZSBhIHJl
Z2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZAorICAgIC8vIHJlZ2lzdGVy
LCBsb2NrcyBpdCwgYW5kIHJldHVybnMgaXQuIElmIG5vbmUgY2FuIGJlIGZvdW5kLCB0aGlzCisg
ICAgLy8gcmV0dXJucyAtMSAoSW52YWxpZEdQUlJlZyBvciBJbnZhbGlkRlBSUmVnKS4KKyAgICBS
ZWdJRCB0cnlBbGxvY2F0ZSgpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3Jl
ZDsKKyAgICAgICAgCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fbGFzdEFsbG9jYXRlZCAr
IDE7IGkgPCBOVU1fUkVHUzsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fZGF0YVtpXS5sb2Nr
Q291bnQgJiYgbV9kYXRhW2ldLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKKyAgICAgICAg
fQorICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHJlbWFpbmluZyBlbnRyaWVzLgorICAgICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDw9IG1fbGFzdEFsbG9jYXRlZDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIW1fZGF0YVtpXS5sb2NrQ291bnQgJiYgbV9kYXRhW2ldLm5hbWUgPT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5h
bChpLCBpZ25vcmVkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIChSZWdJ
RCktMTsKKyAgICB9CisKICAgICAvLyBBbGxvY2F0ZSBhIHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlv
biBmaW5kcyBhbiB1bmxvY2tlZCByZWdpc3RlciwKICAgICAvLyBsb2NrcyBpdCwgYW5kIHJldHVy
bnMgaXQuIElmIGFueSBuYW1lZCByZWdpc3RlcnMgZXhpc3QsIG9uZQogICAgIC8vIG9mIHRoZXNl
IHNob3VsZCBiZSBzZWxlY3RlZCB0byBiZSBhbGxvY2F0ZWQuIElmIGFsbCB1bmxvY2tlZApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA4OTg3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVk
ZSAiREZHSklUQ29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
QEAgLTUzLDE1ICs1NSw3OSBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
Q29kCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOwogfQogCi1zdGF0aWMgYm9vbCB0
cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQorc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAg
Ly8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBy
ZWN1cnNpb24gaGVyZSBqdXN0CiAgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhl
biBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBh
Y2Nlc3MgZm9yIEFycmF5ICYgU3RyaW5nLgorICAgIAorICAgIGlmIChpc0pTQXJyYXkoZ2xvYmFs
RGF0YSwgYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCkgeworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8udS51bnNldC5iYXNlR1BSKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC52YWx1ZUdQUik7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNj
cmF0Y2hHUFIpOworICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICAg
ICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgc2NyYXRj
aEdQUiA9IEpJVENvZGVHZW5lcmF0b3I6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UxID0gc3R1YkppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+anNBcnJheVZQdHIp
KTsKKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMiA9IHN0dWJKaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJKaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7CisgICAgICAgIAorICAgICAg
ICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucG9wKHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5q
dW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBo
ZXJlLCBzbyB3ZSBjYW4gcG9wIHNjcmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KKyAgICAg
ICAgICAgIGZhaWx1cmVDYXNlMS5saW5rKCZzdHViSml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVD
YXNlMi5saW5rKCZzdHViSml0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkppdC5w
b3Aoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZhaWwgPSBzdHViSml0
Lmp1bXAoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5q
dW1wKCk7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxE
YXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgCisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpOworICAgICAgICAKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRl
bHRhQ2FsbFRvRG9uZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoKQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0
bHkgYmFjayB0byBub3JtYWwgcGF0aAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlQ2FzZTEsIHNsb3dDYXNlQmVnaW4pOworICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FzZTIsIHNsb3dDYXNlQmVnaW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOwor
ICAgICAgICAKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luID0gc3R1Yklu
Zm8uaG90UGF0aEJlZ2luOworICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoaG90UGF0aEJl
Z2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQg
bGVuZ3RoIGFjY2VzcyBmb3IgU3RyaW5nLgogCiAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5
IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKQEAg
LTgyLDcgKzE0OCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUK
ICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0KKyAgICAKICAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgcHJvdG90eXBlICYgY2hh
aW4gYWNjZXNzZXMhCiAgICAgcmV0dXJuIGZhbHNlOwogfQo=
</data>
<flag name="review"
          id="93345"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99025</attachid>
            <date>2011-06-28 18:55:47 -0700</date>
            <delta_ts>2011-06-28 20:14:16 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arraylength_patch_5.diff</filename>
            <type>text/plain</type>
            <size>19285</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTEtMDYtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGxhY2tzIGFycmF5
Lmxlbmd0aCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjM1MDUKKworICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6dHJ5
QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNlbGVjdFNj
cmF0Y2hHUFIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjph
ZGRQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OlByb3Bl
cnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZCk6CisgICAgICAgICogZGZnL0RG
R1JlZ2lzdGVyQmFuay5oOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6dHJ5QWxs
b2NhdGUpOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojp0cnlDYWNoZUdldEJ5SUQpOgorCiAyMDExLTA2LTI3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhdHRlbXB0IGFmdGVyIHI4OTg4NS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCShyZXZpc2lvbiA4OTg3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsOCArMTMyLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICAgICAgaW50cHRyX3QgZGVsdGFDaGVja1RvQ2FsbDsKLSAgICAgICAgICAg
ICAgICBpbnRwdHJfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOworICAgICAgICAgICAgICAgIGlu
dDhfdCBkZWx0YUNoZWNrSW1tVG9DYWxsOworICAgICAgICAgICAgICAgIGludDhfdCBkZWx0YUNh
bGxUb1N0cnVjdENoZWNrOworICAgICAgICAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb0xvYWRP
clN0b3JlOworICAgICAgICAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOworICAg
ICAgICAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb0RvbmU7CisgICAgICAgICAgICAgICAgaW50
OF90IGJhc2VHUFI7CisgICAgICAgICAgICAgICAgaW50OF90IHZhbHVlR1BSOworICAgICAgICAg
ICAgICAgIGludDhfdCBzY3JhdGNoR1BSOwogICAgICAgICAgICAgfSB1bnNldDsKICAgICAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+
IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIyLDExICszMjIsMjcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp1c2VDaGlsZHJl
bihOb2RlJgogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJh
c2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogeworICAgIEdQUlJlZyBzY3JhdGNoR1BSOwor
ICAgIAorICAgIGlmIChyZXN1bHRHUFIgPT0gYmFzZUdQUikKKyAgICAgICAgc2NyYXRjaEdQUiA9
IHRyeUFsbG9jYXRlKCk7CisgICAgZWxzZQorICAgICAgICBzY3JhdGNoR1BSID0gcmVzdWx0R1BS
OworICAgIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJl
OwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisgICAg
SklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0
Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgICAKKyAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0
QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJl
c3VsdEdQUik7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKKworICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKICAgICAKICAgICBpZiAoc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkKICAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQp
OworICAgIAorICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7
CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIsIGJhc2VHUFIpOwogICAg
IG1faml0Lm1vdmUoYmFzZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKQEAgLTMzNSwxOSAr
MzUxLDIxIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFIKICAgICBK
SVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdQUik7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgSklUQ29t
cGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBoYW5kbGVkQnlDID0gbV9qaXQuanVtcCgpOwotICAgIHN0cnVjdHVyZUNoZWNrLmxp
bmsoJm1faml0KTsKLQotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwot
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5s
b2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKLQotICAgIGludHB0cl90IGNoZWNrVG9DYWxsID0g
bV9qaXQuZGlmZmVyZW5jZUJldHdlZW4oc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwp
OwotICAgIGludHB0cl90IGNhbGxUb0xvYWQgPSBtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5j
dGlvbkNhbGwsIGxvYWRXaXRoUGF0Y2gpOwotCi0gICAgaGFuZGxlZEJ5Qy5saW5rKCZtX2ppdCk7
Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhmdW5jdGlvbkNhbGwsIGNoZWNrVG9DYWxs
LCBjYWxsVG9Mb2FkKTsKKyAgICBpbnQ4X3QgY2hlY2tJbW1Ub0NhbGwgPSBzdGF0aWNfY2FzdDxp
bnQ4X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rp
b25DYWxsKSk7CisgICAgaW50OF90IGNhbGxUb0NoZWNrID0gc3RhdGljX2Nhc3Q8aW50OF90Piht
X2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNoZWNrKSk7Cisg
ICAgaW50OF90IGNhbGxUb0xvYWQgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG1faml0LmRpZmZlcmVu
Y2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgbG9hZFdpdGhQYXRjaCkpOworICAgIGludDhfdCBjYWxs
VG9TbG93Q2FzZSA9IHN0YXRpY19jYXN0PGludDhfdD4obV9qaXQuZGlmZmVyZW5jZUJldHdlZW4o
ZnVuY3Rpb25DYWxsLCBzbG93Q2FzZSkpOworICAgIGludDhfdCBjYWxsVG9Eb25lID0gc3RhdGlj
X2Nhc3Q8aW50OF90PihtX2ppdC5kaWZmZXJlbmNlQmV0d2VlbihmdW5jdGlvbkNhbGwsIGRvbmVM
YWJlbCkpOworICAgIAorICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwg
Y2hlY2tJbW1Ub0NhbGwsIGNhbGxUb0NoZWNrLCBjYWxsVG9Mb2FkLCBjYWxsVG9TbG93Q2FzZSwg
Y2FsbFRvRG9uZSwgc3RhdGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKSwgc3RhdGljX2Nhc3Q8aW50
OF90PihyZXN1bHRHUFIpLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKTsKKyAgICAK
KyAgICBpZiAoc2NyYXRjaEdQUiAhPSByZXN1bHRHUFIgJiYgc2NyYXRjaEdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICB1bmxvY2soc2NyYXRjaEdQUik7CiB9CiAKIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRL
aW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKQEAgLTM4MywxMiArNDAxLDEz
IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFIKICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlBy
b3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJl
bDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNo
KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKLSAgICBp
bnRwdHJfdCBjaGVja1RvQ2FsbCA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZVRv
Q29tcGFyZSwgZnVuY3Rpb25DYWxsKTsKLSAgICBpbnRwdHJfdCBjYWxsVG9TdG9yZSA9IG1faml0
LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2FsbCwgc3RvcmVXaXRoUGF0Y2gpOworICAgIGlu
dDhfdCBjaGVja0ltbVRvQ2FsbCA9IHN0YXRpY19jYXN0PGludDhfdD4obV9qaXQuZGlmZmVyZW5j
ZUJldHdlZW4oc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwpKTsKKyAgICBpbnQ4X3Qg
Y2FsbFRvQ2hlY2sgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVu
KGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2spKTsKKyAgICBpbnQ4X3QgY2FsbFRvU3RvcmUg
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1bmN0aW9uQ2Fs
bCwgc3RvcmVXaXRoUGF0Y2gpKTsKIAogICAgIGhhbmRsZWRCeUMubGluaygmbV9qaXQpOwogCi0g
ICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoZnVuY3Rpb25DYWxsLCBjaGVja1RvQ2FsbCwgY2Fs
bFRvU3RvcmUpOworICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKGZ1bmN0aW9uQ2FsbCwgY2hl
Y2tJbW1Ub0NhbGwsIGNhbGxUb0NoZWNrLCBjYWxsVG9TdG9yZSk7CiB9CiAKICNpZm5kZWYgTkRF
QlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBzcGlsbChzcGlsbE1lKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICB9CisgICAgR1BSUmVnIHRyeUFsbG9jYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2dwcnMudHJ5QWxsb2NhdGUoKTsKKyAgICB9CiAgICAgRlBSUmVnIGZwckFsbG9jYXRlKCkKICAg
ICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwpAQCAtMTQzLDYgKzE0NywyMCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdERvdWJsZTsKICAgICB9CiAKKyAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIo
R1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZh
bGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZykKKyAgICB7CisgICAg
ICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUklu
Zm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCkKKyAgICAgICAgICAgIHJl
dHVybiBHUFJJbmZvOjpyZWdUMDsKKworICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86
OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BS
SW5mbzo6cmVnVDEpCisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDE7CisKKyAgICAg
ICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5m
bzo6cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QyKQorICAgICAgICAgICAgcmV0
dXJuIEdQUkluZm86OnJlZ1QyOworCisgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMzsKKyAg
ICB9CisKIHByb3RlY3RlZDoKICAgICBKSVRDb2RlR2VuZXJhdG9yKEpJVENvbXBpbGVyJiBqaXQs
IGJvb2wgaXNTcGVjdWxhdGl2ZSkKICAgICAgICAgOiBtX2ppdChqaXQpCkBAIC0yMzYsMTggKzI1
NCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICB1bmJveERvdWJsZShjYW5UcmFtcGxlLCBp
bmZvLmZwcigpKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAgIHZvaWQgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlk
R1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZl
MyA9IEludmFsaWRHUFJSZWcpCiAgICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQ
UkluZm86OnJlZ1QwOwotICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QwICYm
IHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVn
VDApCi0gICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAgIGVs
c2UgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5m
bzo6cmVnVDEgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QxKQotICAgICAgICAgICAgY2Fu
VHJhbXBsZSA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICBlbHNlIGlmIChwcmVzZXJ2ZTEgIT0g
R1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZl
MyAhPSBHUFJJbmZvOjpyZWdUMikKLSAgICAgICAgICAgIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpy
ZWdUMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJl
Z1QzOworICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IHNlbGVjdFNjcmF0Y2hHUFIocHJlc2Vy
dmUxLCBwcmVzZXJ2ZTIsIHByZXNlcnZlMyk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGdwcl9p
dGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0
ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw4ICszODcsMTQgQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSk7CiAgICAg
ICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2FsbCk7Ci0gICAgICAgIGluZm8udS51bnNldC5k
ZWx0YUNoZWNrVG9DYWxsID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDaGVja1RvQ2Fs
bDsKKyAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9DYWxsOworICAgICAgICBpbmZvLnUudW5zZXQu
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2s7CiAgICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0
b3JlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAg
ICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBtX3Byb3BlcnR5QWNjZXNz
ZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dDYXNlOworICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFD
YWxsVG9Eb25lID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9Eb25lOworICAg
ICAgICBpbmZvLnUudW5zZXQuYmFzZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Jhc2VH
UFI7CisgICAgICAgIGluZm8udS51bnNldC52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX3ZhbHVlR1BSOworICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IHN3aXRj
aCB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRh
aW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gODk4NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw5
ICsyMzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNhbXBsaW5nRmxhZyhpbnQzMl90IGZs
YWcpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzKEpJVENvbXBpbGVyOjpD
YWxsIGZ1bmN0aW9uQ2FsbCwgaW50cHRyX3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50cHRyX3QgZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSkKKyAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzKEpJVENvbXBp
bGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQx
Nl90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9y
ZSwgaW50MTZfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlID0gMCwgaW50MTZfdCBkZWx0YUNhbGxUb0Rv
bmUgPSAwLCBpbnQ4X3QgYmFzZUdQUiA9IDAsIGludDhfdCB2YWx1ZUdQUiA9IDAsIGludDhfdCBz
Y3JhdGNoR1BSID0gMCkKICAgICB7Ci0gICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQo
UHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNrVG9DYWxsLCBkZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSk7CisgICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQo
UHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBk
ZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBkZWx0YUNhbGxU
b1Nsb3dDYXNlLCBkZWx0YUNhbGxUb0RvbmUsICBiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQ
UikpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTI1OCwxNiArMjU4LDI4IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAKICAgICBzdHJ1Y3QgUHJvcGVydHlBY2Nl
c3NSZWNvcmQgewotICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChKSVRDb21waWxlcjo6Q2Fs
bCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRlbHRhQ2hlY2tUb0NhbGwsIGludHB0cl90IGRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpCisgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKEpJVENvbXBp
bGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50OF90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDhf
dCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBpbnQ4X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwg
aW50OF90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDhfdCBkZWx0YUNhbGxUb0RvbmUsIGludDhf
dCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSKQogICAgICAgICAg
ICAgOiBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCi0gICAgICAgICAgICAsIG1fZGVsdGFD
aGVja1RvQ2FsbChkZWx0YUNoZWNrVG9DYWxsKQorICAgICAgICAgICAgLCBtX2RlbHRhQ2hlY2tJ
bW1Ub0NhbGwoZGVsdGFDaGVja0ltbVRvQ2FsbCkKKyAgICAgICAgICAgICwgbV9kZWx0YUNhbGxU
b1N0cnVjdENoZWNrKGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spCiAgICAgICAgICAgICAsIG1fZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZShkZWx0YUNhbGxUb0xvYWRPclN0b3JlKQorICAgICAgICAgICAg
LCBtX2RlbHRhQ2FsbFRvU2xvd0Nhc2UoZGVsdGFDYWxsVG9TbG93Q2FzZSkKKyAgICAgICAgICAg
ICwgbV9kZWx0YUNhbGxUb0RvbmUoZGVsdGFDYWxsVG9Eb25lKQorICAgICAgICAgICAgLCBtX2Jh
c2VHUFIoYmFzZUdQUikKKyAgICAgICAgICAgICwgbV92YWx1ZUdQUih2YWx1ZUdQUikKKyAgICAg
ICAgICAgICwgbV9zY3JhdGNoR1BSKHNjcmF0Y2hHUFIpCiAgICAgICAgIHsKICAgICAgICAgfQog
CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIG1fZnVuY3Rpb25DYWxsOwotICAgICAgICBpbnRw
dHJfdCBtX2RlbHRhQ2hlY2tUb0NhbGw7Ci0gICAgICAgIGludHB0cl90IG1fZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZTsKKyAgICAgICAgaW50OF90IG1fZGVsdGFDaGVja0ltbVRvQ2FsbDsKKyAgICAg
ICAgaW50OF90IG1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKKyAgICAgICAgaW50OF90IG1fZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZTsKKyAgICAgICAgaW50OF90IG1fZGVsdGFDYWxsVG9TbG93Q2Fz
ZTsKKyAgICAgICAgaW50OF90IG1fZGVsdGFDYWxsVG9Eb25lOworICAgICAgICBpbnQ4X3QgbV9i
YXNlR1BSOworICAgICAgICBpbnQ4X3QgbV92YWx1ZUdQUjsKKyAgICAgICAgaW50OF90IG1fc2Ny
YXRjaEdQUjsKICAgICB9OwogCiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBt
X3Byb3BlcnR5QWNjZXNzZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
Z2lzdGVyQmFuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVnaXN0ZXJCYW5rLmgJKHJldmlzaW9uIDg5ODcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZWdpc3RlckJhbmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMjYgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICAvLyBBdHRlbXB0IHRvIGFsbG9jYXRlIGEgcmVn
aXN0ZXIgLSB0aGlzIGZ1bmN0aW9uIGZpbmRzIGFuIHVubG9ja2VkCisgICAgLy8gcmVnaXN0ZXIs
IGxvY2tzIGl0LCBhbmQgcmV0dXJucyBpdC4gSWYgbm9uZSBjYW4gYmUgZm91bmQsIHRoaXMKKyAg
ICAvLyByZXR1cm5zIC0xIChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRGUFJSZWcpLgorICAgIFJl
Z0lEIHRyeUFsbG9jYXRlKCkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpZ25vcmVk
OworICAgICAgICAKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gbV9sYXN0QWxsb2NhdGVkICsg
MTsgaSA8IE5VTV9SRUdTOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tD
b3VudCAmJiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGksIGlnbm9yZWQpOworICAgICAgICB9
CisgICAgICAgIC8vIExvb3Agb3ZlciB0aGUgcmVtYWluaW5nIGVudHJpZXMuCisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPD0gbV9sYXN0QWxsb2NhdGVkOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFs
KGksIGlnbm9yZWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gKFJlZ0lE
KS0xOworICAgIH0KKwogICAgIC8vIEFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlzIGZ1bmN0aW9u
IGZpbmRzIGFuIHVubG9ja2VkIHJlZ2lzdGVyLAogICAgIC8vIGxvY2tzIGl0LCBhbmQgcmV0dXJu
cyBpdC4gSWYgYW55IG5hbWVkIHJlZ2lzdGVycyBleGlzdCwgb25lCiAgICAgLy8gb2YgdGhlc2Ug
c2hvdWxkIGJlIHNlbGVjdGVkIHRvIGJlIGFsbG9jYXRlZC4gSWYgYWxsIHVubG9ja2VkCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDg5ODcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRl
ICJERkdKSVRDb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpA
QCAtNDYsMjIgKzQ4LDg2IEBAIHN0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2VzcyhD
b2QKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IHNsb3dQYXRoRnVuY3Rpb24pOwogCiAgICAgLy8gUGF0Y2ggdGhlIHN0cnVjdHVyZSBjaGVjayAm
IHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0
dWJJbmZvLnUudW5zZXQuZGVsdGFDaGVja1RvQ2FsbCksIHN0cnVjdHVyZSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJB
dE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnUudW5zZXQuZGVsdGFDaGVja0ltbVRvQ2FsbCks
IHN0cnVjdHVyZSk7CiAgICAgaWYgKGNvbXBhY3QpCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0
KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVl
KSAqIG9mZnNldCk7CiAgICAgZWxzZQogICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8udS51
bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsK
IH0KIAotc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3N0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQogewogICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2Ug
bmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAogICAgIC8vIGxpa2UgdGhlIGlu
dGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIEZJWE1FOiBzaG91
bGQgc3VwcG9ydCBsZW5ndGggYWNjZXNzIGZvciBBcnJheSAmIFN0cmluZy4KKyAgICAKKyAgICBp
ZiAoaXNKU0FycmF5KGdsb2JhbERhdGEsIGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuYmFzZUdQUik7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQudmFs
dWVHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8udS51bnNldC5zY3JhdGNoR1BSKTsKKyAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3Jl
U2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1Ykpp
dDsKKyAgICAgICAgCisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBKSVRDb2RlR2VuZXJhdG9yOjpzZWxlY3RTY3JhdGNo
R1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMSA9
IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGdsb2Jh
bERhdGEtPmpzQXJyYXlWUHRyKSk7CisgICAgICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2Fz
ZTIgPSBzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgIAorICAgICAgICBz
dHViSml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwg
cmVzdWx0R1BSKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWls
OworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAg
ICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBs
aW5rIGZhaWx1cmUgY2FzZXMgaGVyZSwgc28gd2UgY2FuIHBvcCBzY3JhdGNoR1BSLCBhbmQgdGhl
biBqdW1wIGJhY2suCisgICAgICAgICAgICBmYWlsdXJlQ2FzZTEubGluaygmc3R1YkppdCk7Cisg
ICAgICAgICAgICBmYWlsdXJlQ2FzZTIubGluaygmc3R1YkppdCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmYWlsID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
c3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBv
b2woKSk7CisgICAgICAgIAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2lu
ID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8udS51
bnNldC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAgICAgCisgICAgICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChuZWVkVG9SZXN0b3JlU2NyYXRjaCkKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bCwgc2xvd0Nhc2VCZWdpbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gbGluayBm
YWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKKyAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2UxLCBzbG93Q2FzZUJlZ2luKTsKKyAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2UyLCBzbG93Q2FzZUJlZ2luKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0
aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhv
dFBhdGhCZWdpbiA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKKyAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8udS51bnNl
dC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJ
ZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8g
RklYTUU6IHNob3VsZCBzdXBwb3J0IGxlbmd0aCBhY2Nlc3MgZm9yIFN0cmluZy4KIAogICAgIC8v
IEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCiAgICAgaWYgKCFi
YXNlVmFsdWUuaXNDZWxsKCkpCg==
</data>
<flag name="review"
          id="93413"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>