<?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>64969</bug_id>
          
          <creation_ts>2011-07-21 12:07:36 -0700</creation_ts>
          <short_desc>DFG JIT generates inefficient code for speculation failures</short_desc>
          <delta_ts>2011-07-26 17:55:51 -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>fpizlo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>440562</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-21 12:07:36 -0700</bug_when>
    <thetext>When the speculative version of the DFG-generated code encounters a value that violates speculation, it jumps to the non-speculative version of the same code.  The two code sequences are generated mostly independently, with different register allocation and spill decisions, but with the invariant that the spill slots are the same and have the same format.  Currently the speculation failure code that is emitted to jump from one path to the other spills all registers used by the speculative path, and then refills the ones used by the non-speculative path.  In most cases, both paths will have succeeded in allocating registers to roughly the same nodes - so a more efficient approach would be to emit code that simply shuffles the the values in registers rather than going to memory, and to only spill and fill if one path had spilled but the other hadn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440573</commentid>
    <comment_count>1</comment_count>
      <attachid>101626</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-21 12:21:04 -0700</bug_when>
    <thetext>Created attachment 101626
the patch

This results in a 1.2% speed-up on SunSpider, is performance neutral on v8-v4 in the SunSpider harness, and a 1% speed-up (mean of score over ten runs, interleaved) in V8 version 6 using the V8 harness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440576</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-21 12:23:47 -0700</bug_when>
    <thetext>Attachment 101626 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/DFGJITCompiler.cpp:133:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:135:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:248:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:256:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:292:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:298:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:518:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:521:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 8 in 8 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>440582</commentid>
    <comment_count>3</comment_count>
      <attachid>101629</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-21 12:40:52 -0700</bug_when>
    <thetext>Created attachment 101629
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440583</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-21 12:42:47 -0700</bug_when>
    <thetext>Attachment 101629 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/DFGJITCompiler.cpp:282:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:288:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 2 in 8 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>440586</commentid>
    <comment_count>5</comment_count>
      <attachid>101631</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-21 12:44:53 -0700</bug_when>
    <thetext>Created attachment 101631
the patch (fix more review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442022</commentid>
    <comment_count>6</comment_count>
      <attachid>101950</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-25 17:32:00 -0700</bug_when>
    <thetext>Created attachment 101950
the patch (improved assertion checking)

This improves the patch with more assertion checking, and encapsulation of the GeneralizedRegister class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442665</commentid>
    <comment_count>7</comment_count>
      <attachid>101950</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-26 17:55:46 -0700</bug_when>
    <thetext>Comment on attachment 101950
the patch (improved assertion checking)

Clearing flags on attachment: 101950

Committed r91804: &lt;http://trac.webkit.org/changeset/91804&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442666</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-26 17:55:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101626</attachid>
            <date>2011-07-21 12:21:04 -0700</date>
            <delta_ts>2011-07-21 12:40:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fasterspecfail_patch_1.diff</filename>
            <type>text/plain</type>
            <size>32905</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAK
KzIwMTEtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5NjkKKyAgICAgICAgREZH
IEpJVCBnZW5lcmF0ZXMgaW5lZmZpY2llbnQgY29kZSBmb3Igc3BlY3VsYXRpb24gZmFpbHVyZXMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGltcGxlbWVudHMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlIHN0cmF0ZWd5IHdoZXJlICgx
KSB2YWx1ZXMgc3BpbGxlZCBvbgorICAgICAgICBub24tc3BlY3VsYXRpdmUgYnV0IG5vdCBzcGls
bGVkIG9uIHNwZWN1bGF0aXZlIGFyZSBzcGlsbGVkLCAoMikgdmFsdWVzIHRoYXQKKyAgICAgICAg
YXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzIGFyZSByZWFycmFuZ2VkIHdpdGhvdXQgZXZl
ciB0b3VjaGluZyBtZW1vcnksCisgICAgICAgIGFuZCAoMykgdmFsdWVzIHNwaWxsZWQgb24gc3Bl
Y3VsYXRpdmUgYnV0IG5vdCBzcGlsbGVkIG9uIG5vbi1zcGVjdWxhdGl2ZSBhcmUKKyAgICAgICAg
ZmlsbGVkLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlZ2lzdGVyIHNodWZmbGluZyBpcyB0aGUg
bW9zdCBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoaXMgcGF0Y2guICBJdAorICAgICAgICBjb25zdHJ1
Y3RzIGEgcGVybXV0YXRpb24gZ3JhcGggZm9yIHJlZ2lzdGVycy4gIEVhY2ggbm9kZSByZXByZXNl
bnRzIGEKKyAgICAgICAgcmVnaXN0ZXIsIGFuZCBlYWNoIGRpcmVjdGVkIGVkZ2UgY29ycmVzcG9u
ZHMgdG8gdGhlIHJlZ2lzdGVyJ3MgdmFsdWUgaGF2aW5nCisgICAgICAgIHRvIGJlIG1vdmVkIHRv
IGEgZGlmZmVyZW50IHJlZ2lzdGVyIGFzIHBhcnQgb2YgdGhlIHNodWZmbGluZy4gIFRoaXMgaXMg
YQorICAgICAgICBkaXJlY3RlZCBncmFwaCB3aGVyZSBlYWNoIG5vZGUgbWF5IG9ubHkgaGF2ZSAw
IG9yIDEgaW5jb21pbmcgZWRnZXMsIGFuZAorICAgICAgICAwIG9yIDEgb3V0Z29pbmcgZWRnZXMu
ICBUaGUgYWxnb3JpdGhtIHRoZW4gZmlyc3QgZmluZHMgbWF4aW1hbCBub24tY3ljbGljCisgICAg
ICAgIHN1YmdyYXBocyB3aGVyZSBhbGwgbm9kZXMgaW4gdGhlIHN1YmdyYXBoIGFyZSByZWFjaGFi
bGUgZnJvbSBhIHN0YXJ0IG5vZGUuCisgICAgICAgIFN1Y2ggc3ViZ3JhcGhzIGFsd2F5cyByZXNl
bWJsZSBsaW5rZWQgbGlzdHMsIGFuZCBjb3JyZXNwb25kIHRvIHNpbXBseQorICAgICAgICBtb3Zp
bmcgdGhlIHZhbHVlIGluIHRoZSBzZWNvbmQtdG8tbGFzdCByZWdpc3RlciBpbnRvIHRoZSBsYXN0
IHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgdGhlbiBtb3ZpbmcgdGhlIHZhbHVlIGluIHRoZSB0aGly
ZC10by1sYXN0IHJlZ2lzdGVyIGludG8gdGhlIHNlY29uZC10by1sYXN0CisgICAgICAgIHJlZ2lz
dGVyLCBhbmQgc28gb24uICBPbmNlIHRoZXNlIHN1YmdyYXBocyBhcmUgdGFrZW4gY2FyZSBvZiwg
dGhlIHJlbWFpbmluZworICAgICAgICBzdWJncmFwaHMgYXJlIGN5Y2xlcywgYW5kIGFyZSBoYW5k
bGVkIHVzaW5nIGVpdGhlciAoYSkgY29udmVyc2lvbiBvciBuby1vcAorICAgICAgICBpZiB0aGUg
Y3ljbGUgaW52b2x2ZXMgb25lIG5vZGUsIChiKSBzd2FwIGlmIGl0IGludm9sdmVzIHR3byBub2Rl
cywgb3IgKGMpCisgICAgICAgIGEgY3ljbGljIHNodWZmbGUgaW52b2x2aW5nIGEgc2NyYXRjaCBy
ZWdpc3RlciBpZiB0aGVyZSBhcmUgdGhyZWUgb3IgbW9yZQorICAgICAgICBub2Rlcy4KKyAgICAg
ICAgCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6bmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OkdlbmVyYWxp
emVkUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OmNy
ZWF0ZUdQUik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRl
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpkdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5TcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5FbnRy
eUxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpwcmV2
aW91c0RhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6
Om5leHREYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVy
Ojpjb252ZXJ0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjptb3Zl
VG8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OnN3YXBXaXRoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpTaHVmZmxlZFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjppc0VuZE9mTm9uQ3ljbGluZ1Bl
cm11dGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpoYW5kbGVO
b25DeWNsaW5nUGVybXV0YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNodWZmbGVkUmVnaXN0
ZXI6OmhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2h1ZmZs
ZWRSZWdpc3Rlcjo6bG9va3VwKToKKyAgICAgICAgKEpTQzo6REZHOjpsb29rdXBGb3JSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6OlR1cGxlOjpUdXBsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6Ok5vZGVUb1JlZ2lzdGVyTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6c2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlVG9SZWdpc3Rlck1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0
ZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21T
cGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RW50cnlMb2NhdGlvbjo6RW50cnlMb2NhdGlvbik6CisgICAgICAgICogZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKwogMjAxMS0wNy0yMSAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTAwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5MTQ4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksMzggQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9y
bWF0SlNDZWxsID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCiB9OwogCitpbmxpbmUg
Ym9vbCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0YUZvcm1hdCBmcm9tLCBEYXRhRm9ybWF0
IHRvKQoreworICAgIEFTU0VSVChmcm9tICE9IERhdGFGb3JtYXROb25lKTsKKyAgICBBU1NFUlQo
dG8gIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIHN3aXRjaCAoZnJvbSkgeworICAgIGNhc2UgRGF0
YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAgICByZXR1
cm4gdG8gIT0gZnJvbTsKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZv
cm1hdEpTOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0RvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgIHN3aXRjaCAo
dG8pIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGF0
YUZvcm1hdENlbGw6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICBjYXNlIERh
dGFGb3JtYXRKU0ludGVnZXI6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAg
ICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gPT09IEdlbmVyYXRpb25JbmZvID09PQogLy8KIC8v
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0dXMgb2YgYSBsaXZl
IHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiw3ICsxMDIsMzQwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBu
b2QKICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7
CiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0
aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBjb25zdCBFbnRyeUxvY2F0aW9uJiBl
bnRyeSwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCitzdHJ1Y3QgR2VuZXJhbGl6ZWRS
ZWdpc3RlciB7CisgICAgYm9vbCBpc0ZQUjsKKyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJlZyBn
cHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgfSB1OworICAgIAorICAgIEdlbmVyYWxpemVk
UmVnaXN0ZXIoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgR2VuZXJhbGl6ZWRSZWdpc3RlciBjcmVh
dGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVz
dWx0OworICAgICAgICByZXN1bHQuaXNGUFIgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0LnUuZ3By
ID0gZ3ByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
R2VuZXJhbGl6ZWRSZWdpc3RlciBjcmVhdGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAg
IEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVzdWx0OworICAgICAgICByZXN1bHQuaXNGUFIgPSB0cnVl
OworICAgICAgICByZXN1bHQudS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICBpZiAoaXNGUFIpCisg
ICAgICAgICAgICBwcmludGYoImZwciglZCkiLHUuZnByKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcHJpbnRmKCJncHIoJWQpIix1Lmdwcik7CisgICAgfQorICAgIAorICAgIGNvbnN0IFNw
ZWN1bGF0aW9uQ2hlY2s6OlJlZ2lzdGVySW5mbyYgZmluZEluU3BlY3VsYXRpb25DaGVjayhjb25z
dCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaykKKyAgICB7CisgICAgICAgIGlmIChpc0ZQUikKKyAg
ICAgICAgICAgIHJldHVybiBjaGVjay5tX2ZwckluZm9bRlBSSW5mbzo6dG9JbmRleCh1LmZwcild
OworICAgICAgICByZXR1cm4gY2hlY2subV9ncHJJbmZvW0dQUkluZm86OnRvSW5kZXgodS5ncHIp
XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgRW50cnlMb2NhdGlvbjo6UmVnaXN0ZXJJbmZvJiBm
aW5kSW5FbnRyeUxvY2F0aW9uKGNvbnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5KQorICAgIHsKKyAg
ICAgICAgaWYgKGlzRlBSKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5Lm1fZnBySW5mb1tGUFJJ
bmZvOjp0b0luZGV4KHUuZnByKV07CisgICAgICAgIHJldHVybiBlbnRyeS5tX2dwckluZm9bR1BS
SW5mbzo6dG9JbmRleCh1LmdwcildOworICAgIH0KKyAgICAKKyAgICBEYXRhRm9ybWF0IHByZXZp
b3VzRGF0YUZvcm1hdChjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBmaW5kSW5TcGVjdWxhdGlvbkNoZWNrKGNoZWNrKS5mb3JtYXQ7CisgICAgfQor
ICAgIAorICAgIERhdGFGb3JtYXQgbmV4dERhdGFGb3JtYXQoY29uc3QgRW50cnlMb2NhdGlvbiYg
ZW50cnkpCisgICAgeworICAgICAgICByZXR1cm4gZmluZEluRW50cnlMb2NhdGlvbihlbnRyeSku
Zm9ybWF0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnQoRGF0YUZvcm1hdCBvbGREYXRh
Rm9ybWF0LCBEYXRhRm9ybWF0IG5ld0RhdGFGb3JtYXQsIEpJVENvbXBpbGVyJiBqaXQpCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKCFuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24ob2xkRGF0YUZv
cm1hdCwgbmV3RGF0YUZvcm1hdCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgaWYgKG9sZERhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAg
ICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHUuZ3ByKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5l
d0RhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpOworICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9QdHIodS5ncHIsIHUuZ3ByKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdmVUbyhHZW5lcmFsaXplZFJlZ2lzdGVyJiBvdGhlciwgRGF0YUZvcm1hdCBteURh
dGFGb3JtYXQsIERhdGFGb3JtYXQgb3RoZXJEYXRhRm9ybWF0LCBKSVRDb21waWxlciYgaml0KQor
ICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzRlBSKSkgeworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKG90aGVyLmlzRlBSKSkgeworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlKHUu
ZnByLCBvdGhlci51LmZwcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvUHRyKHUuZnByLCBv
dGhlci51Lmdwcik7CisgICAgICAgICAgICBqaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlciwgb3RoZXIudS5ncHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNGUFIpKSB7CisgICAgICAg
ICAgICBqaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdS5ncHIpOwor
ICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0RvdWJsZSh1Lmdwciwgb3RoZXIudS5mcHIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTElLRUxZ
KCFuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24obXlEYXRhRm9ybWF0LCBvdGhlckRhdGFGb3JtYXQp
KSkgeworICAgICAgICAgICAgaml0Lm1vdmUodS5ncHIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG15RGF0YUZvcm1h
dCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgaml0Lm9yUHRyKHUuZ3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG90aGVyRGF0YUZv
cm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cih1Lmdwciwgb3RoZXIudS5ncHIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN3YXBXaXRoKEdl
bmVyYWxpemVkUmVnaXN0ZXImIG90aGVyLCBEYXRhRm9ybWF0IG15RGF0YUZvcm1hdCwgRGF0YUZv
cm1hdCBteU5ld0RhdGFGb3JtYXQsIERhdGFGb3JtYXQgb3RoZXJEYXRhRm9ybWF0LCBEYXRhRm9y
bWF0IG90aGVyTmV3RGF0YUZvcm1hdCwgSklUQ29tcGlsZXImIGppdCwgR1BSUmVnIHNjcmF0Y2hH
UFIsIEZQUlJlZyBzY3JhdGNoRlBSKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzRlBS
KSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG90aGVyLmlzRlBSKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzY3JhdGNoRlBSID09IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAg
ICAgIGppdC5tb3ZlRG91YmxlVG9QdHIodS5mcHIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGUodS5mcHIsIHNjcmF0
Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlKG90aGVyLnUuZnByLCB1LmZw
cik7CisgICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hGUFIgPT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0RvdWJsZShzY3JhdGNoR1BSLCBvdGhlci51
LmZwcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBqaXQubW92
ZURvdWJsZShzY3JhdGNoRlBSLCBvdGhlci51LmZwcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBqaXQubW92ZShvdGhl
ci51Lmdwciwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdC5tb3Zl
RG91YmxlVG9QdHIodS5mcHIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIGppdC5zdWJQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvdGhlci51Lmdwcik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlUHRyVG9Eb3VibGUoc2NyYXRjaEdQ
UiwgdS5mcHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNGUFIpKSB7CisgICAgICAgICAgICBvdGhlci5zd2Fw
V2l0aCgqdGhpcywgb3RoZXJEYXRhRm9ybWF0LCBvdGhlck5ld0RhdGFGb3JtYXQsIG15RGF0YUZv
cm1hdCwgbXlOZXdEYXRhRm9ybWF0LCBqaXQsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBqaXQuc3dhcCh1
Lmdwciwgb3RoZXIudS5ncHIpOworICAgICAgICAKKyAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRE
YXRhRm9ybWF0Q29udmVyc2lvbihteURhdGFGb3JtYXQsIG15TmV3RGF0YUZvcm1hdCkpKSB7Cisg
ICAgICAgICAgICBpZiAobXlEYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CisgICAg
ICAgICAgICAgICAgaml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdS5n
cHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChteU5ld0RhdGFGb3JtYXQgPT0gRGF0YUZvcm1h
dEludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIodS5ncHIs
IHUuZ3ByKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KFVOTElLRUxZKG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihvdGhlckRhdGFGb3JtYXQsIG15TmV3
RGF0YUZvcm1hdCkpKSB7CisgICAgICAgICAgICBpZiAob3RoZXJEYXRhRm9ybWF0ID09IERhdGFG
b3JtYXRJbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgaml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIudS5ncHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChv
dGhlck5ld0RhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9QdHIob3RoZXIudS5ncHIsIG90aGVyLnUuZ3ByKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlZFJlZ2lzdGVy
IHsKKyAgICBHZW5lcmFsaXplZFJlZ2lzdGVyIHJlZzsKKyAgICBTaHVmZmxlZFJlZ2lzdGVyKiBw
cmV2aW91czsKKyAgICBib29sIGhhc0Zyb207CisgICAgYm9vbCBoYXNUbzsKKyAgICBib29sIGhh
bmRsZWQ7CisgICAgCisgICAgU2h1ZmZsZWRSZWdpc3RlcigpIHsgfQorICAgIAorICAgIFNodWZm
bGVkUmVnaXN0ZXIoR2VuZXJhbGl6ZWRSZWdpc3RlciByZWcpCisgICAgICAgIDogcmVnKHJlZykK
KyAgICAgICAgLCBwcmV2aW91cygwKQorICAgICAgICAsIGhhc0Zyb20oZmFsc2UpCisgICAgICAg
ICwgaGFzVG8oZmFsc2UpCisgICAgICAgICwgaGFuZGxlZChmYWxzZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNFbmRPZk5vbkN5Y2xpbmdQZXJtdXRhdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gaGFzVG8gJiYgIWhhc0Zyb207CisgICAgfQorICAgIAorICAgIHZvaWQgaGFu
ZGxlTm9uQ3ljbGluZ1Blcm11dGF0aW9uKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBj
b25zdCBFbnRyeUxvY2F0aW9uJiBlbnRyeSwgSklUQ29tcGlsZXImIGppdCwgRlBSUmVnJiBzY3Jh
dGNoRlBSKQorICAgIHsKKyAgICAgICAgU2h1ZmZsZWRSZWdpc3RlciogY3VyID0gdGhpczsKKyAg
ICAgICAgd2hpbGUgKGN1ci0+cHJldmlvdXMpIHsKKyAgICAgICAgICAgIGN1ci0+cHJldmlvdXMt
PnJlZy5tb3ZlVG8oY3VyLT5yZWcsIGN1ci0+cHJldmlvdXMtPnJlZy5wcmV2aW91c0RhdGFGb3Jt
YXQoY2hlY2spLCBjdXItPnJlZy5uZXh0RGF0YUZvcm1hdChlbnRyeSksIGppdCk7CisgICAgICAg
ICAgICBjdXItPmhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKGN1ci0+cmVnLmlzRlBS
KSB7CisgICAgICAgICAgICAgICAgc2NyYXRjaEZQUiA9IGN1ci0+cmVnLnUuZnByOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY3VyID0gY3VyLT5wcmV2aW91czsKKyAgICAgICAgfQorICAg
ICAgICBjdXItPmhhbmRsZWQgPSB0cnVlOworICAgICAgICBpZiAoY3VyLT5yZWcuaXNGUFIpIHsK
KyAgICAgICAgICAgIHNjcmF0Y2hGUFIgPSBjdXItPnJlZy51LmZwcjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbihjb25zdCBTcGVjdWxh
dGlvbkNoZWNrJiBjaGVjaywgY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnksIEpJVENvbXBpbGVy
JiBqaXQsIEdQUlJlZyBzY3JhdGNoR1BSLCBGUFJSZWcgc2NyYXRjaEZQUikKKyAgICB7CisgICAg
ICAgIC8vIGZpcnN0IGRldGVybWluZSB0aGUgY3ljbGUgbGVuZ3RoCisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBjeWNsZUxlbmd0aCA9IDA7CisgICAgICAgIAorICAgICAgICBTaHVmZmxlZFJl
Z2lzdGVyKiBjdXIgPSB0aGlzOworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBuZXh0ID0gMDsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgQVNTRVJUKGN1cik7CisgICAgICAgICAgICBjeWNs
ZUxlbmd0aCsrOworICAgICAgICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IG5leHQgPSBjdXI7CisgICAgICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOworICAgICAgICB9
IHdoaWxlIChjdXIgIT0gdGhpcyk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoY3ljbGVMZW5n
dGgpOworICAgICAgICBBU1NFUlQobmV4dC0+cHJldmlvdXMgPT0gY3VyKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIG5vdyBkZXRlcm1pbmUgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGUgcGVybXV0
YXRpb24sIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgLy8gbGVuZ3RoLgorICAgICAgICAKKyAg
ICAgICAgc3dpdGNoIChjeWNsZUxlbmd0aCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICByZWcuY29udmVydChyZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRh
Rm9ybWF0KGVudHJ5KSwgaml0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJlZy5zd2FwV2l0aChwcmV2aW91cy0+cmVnLCBy
ZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwg
cHJldmlvdXMtPnJlZy5wcmV2aW91c0RhdGFGb3JtYXQoY2hlY2spLCBwcmV2aW91cy0+cmVnLm5l
eHREYXRhRm9ybWF0KGVudHJ5KSwgaml0LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBHZW5lcmFsaXplZFJlZ2lzdGVyIHNjcmF0Y2g7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
cmVnLmlzRlBSICYmIG5leHQtPnJlZy5pc0ZQUikpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2Ny
YXRjaEZQUiA9PSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gg
PSBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgICAgIHJlZy5tb3ZlVG8oc2NyYXRjaCwgRGF0YUZvcm1hdERvdWJsZSwgRGF0YUZvcm1h
dEpTRG91YmxlLCBqaXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2ggPSBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoc2NyYXRjaEZQ
Uik7CisgICAgICAgICAgICAgICAgICAgIHJlZy5tb3ZlVG8oc2NyYXRjaCwgRGF0YUZvcm1hdERv
dWJsZSwgRGF0YUZvcm1hdERvdWJsZSwgaml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHZW5lcmFsaXplZFJlZ2lz
dGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgcmVnLm1vdmVUbyhz
Y3JhdGNoLCByZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgbmV4dC0+cmVnLm5leHREYXRh
Rm9ybWF0KGVudHJ5KSwgaml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgY3VyID0gdGhpczsKKyAgICAgICAgICAgIHdoaWxlIChjdXItPnByZXZpb3VzICE9IHRo
aXMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VyKTsKKyAgICAgICAgICAgICAgICBjdXIt
PnByZXZpb3VzLT5yZWcubW92ZVRvKGN1ci0+cmVnLCBjdXItPnByZXZpb3VzLT5yZWcucHJldmlv
dXNEYXRhRm9ybWF0KGNoZWNrKSwgY3VyLT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkpLCBqaXQp
OworICAgICAgICAgICAgICAgIGN1ciA9IGN1ci0+cHJldmlvdXM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShyZWcuaXNGUFIgJiYgbmV4dC0+
cmVnLmlzRlBSKSkgeworICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09IEludmFsaWRG
UFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gubW92ZVRvKG5leHQtPnJlZywgRGF0
YUZvcm1hdEpTRG91YmxlLCBEYXRhRm9ybWF0RG91YmxlLCBqaXQpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4dC0+cmVnLCBEYXRh
Rm9ybWF0RG91YmxlLCBEYXRhRm9ybWF0RG91YmxlLCBqaXQpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4dC0+cmVnLCBuZXh0LT5yZWcubmV4
dERhdGFGb3JtYXQoZW50cnkpLCBuZXh0LT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkpLCBqaXQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFNodWZmbGVkUmVnaXN0ZXIqIGxvb2t1cChTaHVmZmxlZFJlZ2lzdGVyKiBncHJzLCBTaHVmZmxl
ZFJlZ2lzdGVyKiBmcHJzLCBHZW5lcmFsaXplZFJlZ2lzdGVyJiByZWcpCisgICAgeworICAgICAg
ICBpZiAocmVnLmlzRlBSKQorICAgICAgICAgICAgcmV0dXJuIGZwcnMgKyBGUFJJbmZvOjp0b0lu
ZGV4KHJlZy51LmZwcik7CisgICAgICAgIHJldHVybiBncHJzICsgR1BSSW5mbzo6dG9JbmRleChy
ZWcudS5ncHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUJiBsb29rdXBG
b3JSZWdpc3RlcihUKiBncHJzLCBUKiBmcHJzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NF
UlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzKTsKKyAgICBpZiAoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykK
KyAgICAgICAgcmV0dXJuIGdwcnNbaW5kZXhdOworICAgIHJldHVybiBmcHJzW2luZGV4IC0gR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworfQorCisvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gYSB3
YXkgdGhhdCBhbGxvd3MgZm9yIGEgSGFzaE1hcDxOb2RlSW5kZXgsIEdlbmVyYWxpemVkUmVnaXN0
ZXI+IHRvIGJlCisvLyBlYXNpbHkgc3Vic3RpdHV0ZWQsIGlmIGl0IGlzIGZvdW5kIHRvIGJlIHdp
c2UgdG8gZG8gc28uIFNvIGZhciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMKKy8vIGluZGljYXRl
IHRoYXQgdGhpcyBpcyBmYXN0ZXIsIGxpa2VseSBiZWNhdXNlIHRoZSBIYXNoTWFwIHdvdWxkIGhh
dmUgbmV2ZXIgZ3Jvd24gdmVyeSBiaWcKKy8vIGFuZCB3ZSB3b3VsZCB0aHVzIGJlIHdhc3Rpbmcg
dGltZSBwZXJmb3JtaW5nIGNvbXBsZXggaGFzaGluZyBsb2dpYyB0aGF0LCB0aG91Z2ggTygxKSBv
bgorLy8gYXZlcmFnZSwgd291bGQgYmUgbGVzcyB0aGFuIHRoZSB+NyBsb29wIGl0ZXJhdGlvbnMg
dGhhdCB0aGUgZmluZCgpIG1ldGhvZCBiZWxvdyB3b3VsZCBkbworLy8gKHNpbmNlIGl0J3MgdW5j
b21tb24gdGhhdCB3ZSdkIGhhdmUgcmVnaXN0ZXIgYWxsb2NhdGVkIG1vcmUgdGhhbiA3IHJlZ2lz
dGVycywgaW4gdGhlCisvLyBjdXJyZW50IHNjaGVtZSkuCitjbGFzcyBOb2RlVG9SZWdpc3Rlck1h
cCB7CitwdWJsaWM6CisgICAgc3RydWN0IFR1cGxlIHsKKyAgICAgICAgTm9kZUluZGV4IGZpcnN0
OworICAgICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyIHNlY29uZDsKKyAgICAgICAgCisgICAgICAg
IFR1cGxlKCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVm
IFR1cGxlKiBpdGVyYXRvcjsKKyAgICAKKyAgICBOb2RlVG9SZWdpc3Rlck1hcCgpCisgICAgICAg
IDogbV9vY2N1cGFuY3koMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KE5vZGVJ
bmRleCBmaXJzdCwgR2VuZXJhbGl6ZWRSZWdpc3RlciBzZWNvbmQpCisgICAgeworICAgICAgICBt
X3BheWxvYWRbbV9vY2N1cGFuY3ldLmZpcnN0ID0gZmlyc3Q7CisgICAgICAgIG1fcGF5bG9hZFtt
X29jY3VwYW5jeV0uc2Vjb25kID0gc2Vjb25kOworICAgICAgICBtX29jY3VwYW5jeSsrOworICAg
IH0KKyAgICAKKyAgICBUdXBsZSogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAKKyAgICBUdXBsZSogZmluZChOb2RlSW5kZXggZmlyc3QpCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX29jY3VwYW5jeTsgaS0tID4gMDspIHsKKyAgICAgICAgICAg
IGlmIChtX3BheWxvYWRbaV0uZmlyc3QgPT0gZmlyc3QpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fcGF5bG9hZCArIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9vY2N1cGFuY3kgPSAwOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVHVwbGUgbV9wYXlsb2FkW0dQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIHVuc2lnbmVkIG1f
b2NjdXBhbmN5OworfTsKKwordm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRv
Tm9uU3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25DaGVjayYgY2hlY2ssIGNvbnN0IEVudHJ5
TG9jYXRpb24mIGVudHJ5LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgTm9kZVRvUmVn
aXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRy
eU5vZGVUb1JlZ2lzdGVyTWFwKQogewogICAgIEFTU0VSVChjaGVjay5tX25vZGVJbmRleCA9PSBl
bnRyeS5tX25vZGVJbmRleCk7CiAKQEAgLTEyNSwyMCArNDU4LDg3IEBAIHZvaWQgSklUQ29tcGls
ZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb04KICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBhZGQuCiAg
ICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CiAgICAgfQor
ICAgIAorICAgIC8vIEZpcnN0LCB3ZSBuZWVkIGEgcmV2ZXJzZSBtYXBwaW5nIHRoYXQgdGVsbHMg
dXMsIGZvciBhIE5vZGVJbmRleCwgd2hpY2ggcmVnaXN0ZXIKKyAgICAvLyB0aGF0IG5vZGUgaXMg
aW4uCisgICAgCisgICAgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5jbGVhcigpOworICAgIAorICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2luZGV4KSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBjaGVjay5tX2dw
ckluZm9baW5kZXhdLm5vZGVJbmRleDsKKyAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUp
CisgICAgICAgICAgICBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLnNldChub2RlSW5kZXgsIEdlbmVy
YWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkpOwor
ICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gY2hlY2subV9mcHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlmIChub2Rl
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5zZXQo
bm9kZUluZGV4LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdp
c3RlcihpbmRleCkpKTsKKyAgICB9CisgICAgCisgICAgZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5j
bGVhcigpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CisgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBlbnRyeS5tX2dwckluZm9baW5kZXhdLm5vZGVJbmRleDsKKyAgICAgICAgaWYgKG5v
ZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwLnNl
dChub2RlSW5kZXgsIEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGluZGV4KSkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7
CisgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgZW50cnlOb2Rl
VG9SZWdpc3Rlck1hcC5zZXQobm9kZUluZGV4LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVG
UFIoRlBSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gSG93
IHRoaXMgd29ya3M6CisgICAgLy8gMSkgU3BpbGwgYW55IHZhbHVlcyB0aGF0IGFyZSBub3Qgc3Bp
bGxlZCBvbiBzcGVjdWxhdGl2ZSwgYnV0IGFyZSBzcGlsbGVkCisgICAgLy8gICAgb24gbm9uLXNw
ZWN1bGF0aXZlLgorICAgIC8vIDIpIEZvciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQgYXJlIGluIHJl
Z2lzdGVycyBvbiBib3RoIHBhdGhzLCBwZXJmb3JtIGEKKyAgICAvLyAgICBzaHVmZmxpbmcuCisg
ICAgLy8gMykgRmlsbCBhbnkgdmFsdWVzIHRoYXQgd2VyZSBzcGlsbGVkIG9uIHNwZWN1bGF0aXZl
LCBidXQgYXJlIG5vdCBzcGlsbGVkCisgICAgLy8gICAgb24gbm9uLXNwZWN1bGF0aXZlLgorICAg
IAorICAgIC8vIElmIHdlIGZpbmQgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgYXMgc2NyYXRj
aCByZWdpc3RlcnMgYWxvbmcgdGhlIHdheSwKKyAgICAvLyBzYXZlIHRoZW0uCisgICAgCisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEZQUlJlZyBzY3JhdGNoRlBS
ID0gSW52YWxpZEZQUlJlZzsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVUYWdNYXNrUmVnaXN0ZXIg
PSBmYWxzZTsKKyAgICAKKyAgICAvLyBQYXJ0IDE6IHNwaWxsIGFueSB2YWx1ZXMgdGhhdCBhcmUg
bm90IHNwaWxsZWQgb24gc3BlY3VsYXRpdmUsIGJ1dCBhcmUKKyAgICAvLyAgICAgICAgIHNwaWxs
ZWQgb24gbm9uLXNwZWN1bGF0aXZlLgorICAgIAorICAgIC8vIFRoaXMgYWxzbyBzZXRzIHVwIHNv
bWUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgUGFydCAyIHdpbGwgbmVlZC4KKyAgICAKKyAgICBTaHVm
ZmxlZFJlZ2lzdGVyIGdwcnNbR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIFNodWZm
bGVkUmVnaXN0ZXIgZnByc1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraW5kZXgpIHsKKyAgICAgICAgZ3Byc1tpbmRleF0gPSBTaHVmZmxlZFJlZ2lzdGVyKEdl
bmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkp
OworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBmcHJzW2luZGV4XSA9IFNodWZm
bGVkUmVnaXN0ZXIoR2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlRlBSKEZQUkluZm86OnRvUmVn
aXN0ZXIoaW5kZXgpKSk7CisgICAgfQogCi0gICAgLy8gRklYTUU6IC0gVGhpcyBpcyBoaWRlb3Vz
bHkgaW5lZmZpY2llbnQhCi0gICAgLy8gV2hlcmUgYSB2YWx1ZSBpcyBsaXZlIGluIGEgcmVnaXN0
ZXIgaW4gdGhlIHNwZWN1bGF0aXZlIHBhdGgsIGFuZCBpcyByZXF1aXJlZCBpbiBhIHJlZ2lzdGVy
Ci0gICAgLy8gb24gdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLCB3ZSBzaG91bGQgbm90IG5lZWQg
dG8gYmUgc3BpbGxpbmcgaXQgYW5kIHJlbG9hZGluZyAod2UgbWF5Ci0gICAgLy8gbmVlZCB0byBz
cGlsbCBhbnl3YXksIGlmIHRoZSB2YWx1ZSBpcyBtYXJrZWQgYXMgc3BpbGxlZCBvbiB0aGUgbm9u
LXNwZWN1bGF0aXZlIHBhdGgpLgotICAgIC8vIFRoaXMgbWF5IGFsc28gYmUgc3BpbGxpbmcgdmFs
dWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZywgZS5nLiBhcmUgYWxyZWFkeSBzcGlsbGVkLAot
ICAgIC8vIGFyZSBjb25zdGFudHMsIG9yIGFyZSBhcmd1bWVudHMuCi0KLSAgICAvLyBTcGlsbCBh
bGwgR1BScyBpbiB1c2UgYnkgdGhlIHNwZWN1bGF0aXZlIHBhdGguCiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgp
IHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNrLm1fZ3BySW5mb1tpbmRleF0u
bm9kZUluZGV4OwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYg
KG5vZGVJbmRleCA9PSBOb05vZGUgfHwgY2hlY2subV9ncHJJbmZvW2luZGV4XS5pc1NwaWxsZWQp
IHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5v
ZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGVudHJ5Tm9kZVRvUmVnaXN0
ZXJNYXAuZmluZChub2RlSW5kZXgpOworICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gZW50cnlO
b2RlVG9SZWdpc3Rlck1hcC5lbmQoKSkgeworICAgICAgICAgICAgZ3Byc1tpbmRleF0uaGFzRnJv
bSA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNodWZmbGVkUmVnaXN0ZXIqIG5l
eHQgPSBTaHVmZmxlZFJlZ2lzdGVyOjpsb29rdXAoZ3BycywgZnBycywgbWFwSXRlcmF0b3ItPnNl
Y29uZCk7CisgICAgICAgICAgICBuZXh0LT5wcmV2aW91cyA9IGdwcnMgKyBpbmRleDsKKyAgICAg
ICAgICAgIG5leHQtPmhhc1RvID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFtYXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJbkVudHJ5TG9jYXRpb24oZW50cnkpLmlzU3BpbGxl
ZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gY2hlY2subV9ncHJJbmZvW2luZGV4XS5mb3JtYXQ7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBncmFwaCgpW25vZGVJ
bmRleF0udmlydHVhbFJlZ2lzdGVyKCk7CiAKQEAgLTE0NiwzNCArNTQ2LDkxIEBAIHZvaWQgSklU
Q29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb04KICAgICAgICAgaWYgKGRhdGFGb3JtYXQg
PT0gRGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCksIGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSk7CisgICAgICAgIAorICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3Rl
cihpbmRleCk7CisgICAgfQorICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcjsKKyAg
ICAgICAgbmVlZFRvUmVzdG9yZVRhZ01hc2tSZWdpc3RlciA9IHRydWU7CiAgICAgfQogCi0gICAg
Ly8gU3BpbGwgYWxsIEZQUnMgaW4gdXNlIGJ5IHRoZSBzcGVjdWxhdGl2ZSBwYXRoLgogICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2luZGV4KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBjaGVjay5tX2Zwcklu
Zm9baW5kZXhdOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGNoZWNrLm1fZnBySW5mb1tpbmRleF0ubm9kZUluZGV4OworICAg
ICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBjaGVjay5tX2ZwckluZm9baW5kZXhdLmlz
U3BpbGxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE5vZGVUb1JlZ2lzdGVy
TWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZmluZChu
b2RlSW5kZXgpOworICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gZW50cnlOb2RlVG9SZWdpc3Rl
ck1hcC5lbmQoKSkgeworICAgICAgICAgICAgZnByc1tpbmRleF0uaGFzRnJvbSA9IHRydWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFNodWZmbGVkUmVnaXN0ZXIqIG5leHQgPSBTaHVmZmxl
ZFJlZ2lzdGVyOjpsb29rdXAoZ3BycywgZnBycywgbWFwSXRlcmF0b3ItPnNlY29uZCk7CisgICAg
ICAgICAgICBuZXh0LT5wcmV2aW91cyA9IGZwcnMgKyBpbmRleDsKKyAgICAgICAgICAgIG5leHQt
Pmhhc1RvID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFtYXBJdGVyYXRvci0+c2Vjb25kLmZp
bmRJbkVudHJ5TG9jYXRpb24oZW50cnkpLmlzU3BpbGxlZCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCk7CiAKLSAgICAgICAgbW92
ZURvdWJsZVRvUHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSk7CisgICAgICAgIG1vdmVEb3VibGVUb1B0cihGUFJJbmZvOjp0b1JlZ2lz
dGVyKGluZGV4KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BS
LCBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAKKyAgICAgICAgc2NyYXRj
aEZQUiA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBQ
YXJ0IDI6IEZvciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQgYXJlIGluIHJlZ2lzdGVycyBvbiBib3Ro
IHBhdGhzLAorICAgIC8vICAgICAgICAgcGVyZm9ybSBhIHNodWZmbGluZy4KKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CisgICAgICAgIFNodWZm
bGVkUmVnaXN0ZXImIHJlZyA9IGxvb2t1cEZvclJlZ2lzdGVyKGdwcnMsIGZwcnMsIGluZGV4KTsK
KyAgICAgICAgaWYgKCFyZWcuaXNFbmRPZk5vbkN5Y2xpbmdQZXJtdXRhdGlvbigpIHx8IHJlZy5o
YW5kbGVkIHx8ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNUbykpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlZy5oYW5kbGVOb25DeWNsaW5nUGVybXV0YXRpb24o
Y2hlY2ssIGVudHJ5LCAqdGhpcywgc2NyYXRjaEZQUik7CisgICAgfQorICAgIAorICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsg
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgU2h1ZmZsZWRS
ZWdpc3RlciYgcmVnID0gbG9va3VwRm9yUmVnaXN0ZXIoZ3BycywgZnBycywgaW5kZXgpOworICAg
ICAgICBpZiAocmVnLmhhbmRsZWQgfHwgKCFyZWcuaGFzRnJvbSAmJiAhcmVnLmhhc1RvKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgcmVnLmhhbmRsZUN5Y2xpbmdQ
ZXJtdXRhdGlvbihjaGVjaywgZW50cnksICp0aGlzLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsK
KyAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyJiByZWcgPSBs
b29rdXBGb3JSZWdpc3RlcihncHJzLCBmcHJzLCBpbmRleCk7CisgICAgICAgIEFTU0VSVChyZWcu
aGFuZGxlZCB8fCAoIXJlZy5oYXNGcm9tICYmICFyZWcuaGFzVG8pKTsKICAgICB9CisjZW5kaWYK
KworICAgIC8vIFBhcnQgMzogRmlsbCBhbnkgdmFsdWVzIHRoYXQgd2VyZSBzcGlsbGVkIG9uIHNw
ZWN1bGF0aXZlLCBidXQgYXJlIG5vdCBzcGlsbGVkCisgICAgLy8gICAgICAgICBvbiBub24tc3Bl
Y3VsYXRpdmUuCiAKLSAgICAvLyBGaWxsIGFsbCBGUFJzIGluIHVzZSBieSB0aGUgbm9uLXNwZWN1
bGF0aXZlIHBhdGguCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGVudHJ5Lm1fZnBySW5mb1tpbmRleF07Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0g
Tm9Ob2RlKQorICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2lu
ZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlIHx8IGVudHJ5
Lm1fZnBySW5mb1tpbmRleF0uaXNTcGlsbGVkKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIAorICAgICAgICBOb2RlVG9SZWdpc3Rlck1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBj
aGVja05vZGVUb1JlZ2lzdGVyTWFwLmZpbmQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG1hcEl0
ZXJhdG9yICE9IGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuZW5kKCkKKyAgICAgICAgICAgICYmICFt
YXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJblNwZWN1bGF0aW9uQ2hlY2soY2hlY2spLmlzU3BpbGxl
ZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGZpbGxOdW1lcmljVG9Eb3VibGUo
bm9kZUluZGV4LCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwog
ICAgIH0KIAotICAgIC8vIEZpbGwgYWxsIEdQUnMgaW4gdXNlIGJ5IHRoZSBub24tc3BlY3VsYXRp
dmUgcGF0aC4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gZW50cnkubV9ncHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7Ci0gICAgICAgIGlmIChub2RlSW5k
ZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBlbnRyeS5t
X2dwckluZm9baW5kZXhdLmlzU3BpbGxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGNoZWNrTm9kZVRv
UmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgpOworICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0g
Y2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5lbmQoKQorICAgICAgICAgICAgJiYgIW1hcEl0ZXJhdG9y
LT5zZWNvbmQuZmluZEluU3BlY3VsYXRpb25DaGVjayhjaGVjaykuaXNTcGlsbGVkKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gZW50cnku
bV9ncHJJbmZvW2luZGV4XS5mb3JtYXQ7CkBAIC0xODUsNiArNjQyLDkgQEAgdm9pZCBKSVRDb21w
aWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBz
dWJ0eXBlcyBvZiBEYXRhRm9ybWF0SlMsIHNob3VsZCBqaXRBc3NlcnQgdGhlIHN1YnR5cGU/CiAg
ICAgICAgIH0KICAgICB9CisgICAgCisgICAgaWYgKG5lZWRUb1Jlc3RvcmVUYWdNYXNrUmVnaXN0
ZXIpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihU
YWdNYXNrKSksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKICAgICAvLyBKdW1wIGludG8g
dGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGp1bXAoZW50cnkubV9lbnRyeSk7CkBAIC0x
OTcsNyArNjU3LDEwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygK
ICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBjaGVja3NFbmQgPSBzcGVjdWxh
dGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpLmVuZCgpOwogICAgIE5vblNwZWN1bGF0aXZlSklUOjpF
bnRyeUxvY2F0aW9uVmVjdG9yOjpJdGVyYXRvciBlbnRyaWVzSXRlciA9IG5vblNwZWN1bGF0aXZl
LmVudHJ5TG9jYXRpb25zKCkuYmVnaW4oKTsKICAgICBOb25TcGVjdWxhdGl2ZUpJVDo6RW50cnlM
b2NhdGlvblZlY3Rvcjo6SXRlcmF0b3IgZW50cmllc0VuZCA9IG5vblNwZWN1bGF0aXZlLmVudHJ5
TG9jYXRpb25zKCkuZW5kKCk7Ci0KKyAgICAKKyAgICBOb2RlVG9SZWdpc3Rlck1hcCBjaGVja05v
ZGVUb1JlZ2lzdGVyTWFwOworICAgIE5vZGVUb1JlZ2lzdGVyTWFwIGVudHJ5Tm9kZVRvUmVnaXN0
ZXJNYXA7CisgICAgCiAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzcGVjdWxhdGlvbiBjaGVja3Mu
CiAgICAgd2hpbGUgKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kKSB7CiAgICAgICAgIC8vIEZvciBl
dmVyeSBiYWlsIG91dCBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLCB3ZSBtdXN0IGhhdmUgcHJv
dmlkZWQgYW4gZW50cnkgcG9pbnQKQEAgLTIxMiw3ICs2NzUsNyBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rU3BlY3VsYXRpb25DaGVja3MoCiAgICAgICAgICAgICAvLyBQbGFudCBjb2RlIHRvIGxp
bmsgdGhpcyBzcGVjdWxhdGlvbiBmYWlsdXJlLgogICAgICAgICAgICAgY29uc3QgU3BlY3VsYXRp
b25DaGVjayYgY2hlY2sgPSAqY2hlY2tzSXRlcjsKICAgICAgICAgICAgIGNvbnN0IEVudHJ5TG9j
YXRpb24mIGVudHJ5ID0gKmVudHJpZXNJdGVyOwotICAgICAgICAgICAganVtcEZyb21TcGVjdWxh
dGl2ZVRvTm9uU3BlY3VsYXRpdmUoY2hlY2ssIGVudHJ5LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlv
blJlY292ZXJ5KGNoZWNrLm1fcmVjb3ZlcnlJbmRleCkpOworICAgICAgICAgICAganVtcEZyb21T
cGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY2hlY2ssIGVudHJ5LCBzcGVjdWxhdGl2ZS5zcGVj
dWxhdGlvblJlY292ZXJ5KGNoZWNrLm1fcmVjb3ZlcnlJbmRleCksIGNoZWNrTm9kZVRvUmVnaXN0
ZXJNYXAsIGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXApOwogICAgICAgICAgICAgICsrY2hlY2tzSXRl
cjsKICAgICAgICAgfSB3aGlsZSAoY2hlY2tzSXRlciAhPSBjaGVja3NFbmQgJiYgY2hlY2tzSXRl
ci0+bV9ub2RlSW5kZXggPT0gZW50cmllc0l0ZXItPm1fbm9kZUluZGV4KTsKICAgICAgICAgICsr
ZW50cmllc0l0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBKU0ds
b2JhbERhdGE7CiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKK2Ns
YXNzIE5vZGVUb1JlZ2lzdGVyTWFwOwogY2xhc3MgTm9uU3BlY3VsYXRpdmVKSVQ7CiBjbGFzcyBT
cGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zlcnk7CkBAIC0yOTAsNyArMjkx
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxOdW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBG
UFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAgIHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5v
ZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZpbGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsK
LSAgICB2b2lkIGp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1
bGF0aW9uQ2hlY2smLCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSop
OworICAgIHZvaWQganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3QgU3Bl
Y3VsYXRpb25DaGVjayYsIGNvbnN0IEVudHJ5TG9jYXRpb24mLCBTcGVjdWxhdGlvblJlY292ZXJ5
KiwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lz
dGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKTsKICAgICB2b2lkIGxpbmtTcGVjdWxhdGlv
bkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYsIE5vblNwZWN1bGF0aXZlSklUJik7CiAKICAgICAvLyBU
aGUgZ2xvYmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcg
QEAgRW50cnlMb2NhdGlvbjo6RW50cnlMb2NhdGlvbihNYWNyb0Fzc2VtYgogICAgICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgp
XTsKICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IGluZm8u
bm9kZUluZGV4KCk7CiAgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5mb3JtYXQg
PSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7CisgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRl
eCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUlu
ZGV4ID0gTm9Ob2RlOwogICAgIH0KQEAgLTUwLDkgKzUxLDExIEBAIEVudHJ5TG9jYXRpb246OkVu
dHJ5TG9jYXRpb24oTWFjcm9Bc3NlbWIKICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpIHsKICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
IGppdC0+bV9nZW5lcmF0aW9uSW5mb1tpdGVyLm5hbWUoKV07CiAgICAgICAgICAgICBBU1NFUlQo
aW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwotICAgICAgICAgICAg
bV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0gPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAg
bV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAg
ICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLmZvcm1hdCA9IERhdGFGb3JtYXREb3Vi
bGU7CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5pc1NwaWxsZWQgPSBpbmZv
LnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0gPSBOb05vZGU7CisgICAgICAgICAgICBtX2Zw
ckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAgc3RydWN0IEVu
dHJ5TG9jYXRpb24gewogICAgIHN0cnVjdCBSZWdpc3RlckluZm8gewogICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4OwogICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgYm9vbCBp
c1NwaWxsZWQ7CiAgICAgfTsKICAgICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBOb2RlSW5kZXggbV9mcHJJbmZvW0ZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzXTsKKyAgICBSZWdpc3RlckluZm8gbV9mcHJJbmZvW0ZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzXTsKIH07CiAKIC8vID09PSBOb25TcGVjdWxhdGl2ZUpJVCA9PT0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgU3BlY3VsYXRpb25D
aGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAg
IG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CiAg
ICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5mb3JtYXQgPSBpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCk7CisgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5pc1NwaWxsZWQg
PSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwog
ICAgIH0KQEAgLTE1Nyw5ICsxNTgsMTEgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25D
aGVjayhNYWNybwogICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikgewogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVy
YXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgICAgICAgICBtX2ZwckluZm9baXRl
ci5pbmRleCgpXSA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICBtX2ZwckluZm9baXRl
ci5pbmRleCgpXS5ub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgbV9m
cHJJbmZvW2l0ZXIuaW5kZXgoKV0uZm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAg
ICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLmlzU3BpbGxlZCA9IGluZm8uc3BpbGxGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2Zwcklu
Zm9baXRlci5pbmRleCgpXSA9IE5vTm9kZTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmlu
ZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDkxNDgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw5ICs4NCwxMCBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjayB7CiAgICAg
c3RydWN0IFJlZ2lzdGVySW5mbyB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CiAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICBib29sIGlzU3BpbGxlZDsKICAgICB9Owog
ICAgIFJlZ2lzdGVySW5mbyBtX2dwckluZm9bR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwot
ICAgIE5vZGVJbmRleCBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAg
IFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsK
IHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlv
bkNoZWNrVmVjdG9yOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101629</attachid>
            <date>2011-07-21 12:40:52 -0700</date>
            <delta_ts>2011-07-21 12:44:53 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>fasterspecfail_patch_12.diff</filename>
            <type>text/plain</type>
            <size>32698</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAK
KzIwMTEtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5NjkKKyAgICAgICAgREZH
IEpJVCBnZW5lcmF0ZXMgaW5lZmZpY2llbnQgY29kZSBmb3Igc3BlY3VsYXRpb24gZmFpbHVyZXMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGltcGxlbWVudHMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlIHN0cmF0ZWd5IHdoZXJlICgx
KSB2YWx1ZXMgc3BpbGxlZCBvbgorICAgICAgICBub24tc3BlY3VsYXRpdmUgYnV0IG5vdCBzcGls
bGVkIG9uIHNwZWN1bGF0aXZlIGFyZSBzcGlsbGVkLCAoMikgdmFsdWVzIHRoYXQKKyAgICAgICAg
YXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzIGFyZSByZWFycmFuZ2VkIHdpdGhvdXQgZXZl
ciB0b3VjaGluZyBtZW1vcnksCisgICAgICAgIGFuZCAoMykgdmFsdWVzIHNwaWxsZWQgb24gc3Bl
Y3VsYXRpdmUgYnV0IG5vdCBzcGlsbGVkIG9uIG5vbi1zcGVjdWxhdGl2ZSBhcmUKKyAgICAgICAg
ZmlsbGVkLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlZ2lzdGVyIHNodWZmbGluZyBpcyB0aGUg
bW9zdCBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoaXMgcGF0Y2guICBJdAorICAgICAgICBjb25zdHJ1
Y3RzIGEgcGVybXV0YXRpb24gZ3JhcGggZm9yIHJlZ2lzdGVycy4gIEVhY2ggbm9kZSByZXByZXNl
bnRzIGEKKyAgICAgICAgcmVnaXN0ZXIsIGFuZCBlYWNoIGRpcmVjdGVkIGVkZ2UgY29ycmVzcG9u
ZHMgdG8gdGhlIHJlZ2lzdGVyJ3MgdmFsdWUgaGF2aW5nCisgICAgICAgIHRvIGJlIG1vdmVkIHRv
IGEgZGlmZmVyZW50IHJlZ2lzdGVyIGFzIHBhcnQgb2YgdGhlIHNodWZmbGluZy4gIFRoaXMgaXMg
YQorICAgICAgICBkaXJlY3RlZCBncmFwaCB3aGVyZSBlYWNoIG5vZGUgbWF5IG9ubHkgaGF2ZSAw
IG9yIDEgaW5jb21pbmcgZWRnZXMsIGFuZAorICAgICAgICAwIG9yIDEgb3V0Z29pbmcgZWRnZXMu
ICBUaGUgYWxnb3JpdGhtIHRoZW4gZmlyc3QgZmluZHMgbWF4aW1hbCBub24tY3ljbGljCisgICAg
ICAgIHN1YmdyYXBocyB3aGVyZSBhbGwgbm9kZXMgaW4gdGhlIHN1YmdyYXBoIGFyZSByZWFjaGFi
bGUgZnJvbSBhIHN0YXJ0IG5vZGUuCisgICAgICAgIFN1Y2ggc3ViZ3JhcGhzIGFsd2F5cyByZXNl
bWJsZSBsaW5rZWQgbGlzdHMsIGFuZCBjb3JyZXNwb25kIHRvIHNpbXBseQorICAgICAgICBtb3Zp
bmcgdGhlIHZhbHVlIGluIHRoZSBzZWNvbmQtdG8tbGFzdCByZWdpc3RlciBpbnRvIHRoZSBsYXN0
IHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgdGhlbiBtb3ZpbmcgdGhlIHZhbHVlIGluIHRoZSB0aGly
ZC10by1sYXN0IHJlZ2lzdGVyIGludG8gdGhlIHNlY29uZC10by1sYXN0CisgICAgICAgIHJlZ2lz
dGVyLCBhbmQgc28gb24uICBPbmNlIHRoZXNlIHN1YmdyYXBocyBhcmUgdGFrZW4gY2FyZSBvZiwg
dGhlIHJlbWFpbmluZworICAgICAgICBzdWJncmFwaHMgYXJlIGN5Y2xlcywgYW5kIGFyZSBoYW5k
bGVkIHVzaW5nIGVpdGhlciAoYSkgY29udmVyc2lvbiBvciBuby1vcAorICAgICAgICBpZiB0aGUg
Y3ljbGUgaW52b2x2ZXMgb25lIG5vZGUsIChiKSBzd2FwIGlmIGl0IGludm9sdmVzIHR3byBub2Rl
cywgb3IgKGMpCisgICAgICAgIGEgY3ljbGljIHNodWZmbGUgaW52b2x2aW5nIGEgc2NyYXRjaCBy
ZWdpc3RlciBpZiB0aGVyZSBhcmUgdGhyZWUgb3IgbW9yZQorICAgICAgICBub2Rlcy4KKyAgICAg
ICAgCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6bmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OkdlbmVyYWxp
emVkUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OmNy
ZWF0ZUdQUik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRl
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpkdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5TcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5FbnRy
eUxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpwcmV2
aW91c0RhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6
Om5leHREYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVy
Ojpjb252ZXJ0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjptb3Zl
VG8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OnN3YXBXaXRoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpTaHVmZmxlZFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjppc0VuZE9mTm9uQ3ljbGluZ1Bl
cm11dGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpoYW5kbGVO
b25DeWNsaW5nUGVybXV0YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNodWZmbGVkUmVnaXN0
ZXI6OmhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2h1ZmZs
ZWRSZWdpc3Rlcjo6bG9va3VwKToKKyAgICAgICAgKEpTQzo6REZHOjpsb29rdXBGb3JSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6OlR1cGxlOjpUdXBsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6Ok5vZGVUb1JlZ2lzdGVyTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6c2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlVG9SZWdpc3Rlck1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0
ZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21T
cGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RW50cnlMb2NhdGlvbjo6RW50cnlMb2NhdGlvbik6CisgICAgICAgICogZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKwogMjAxMS0wNy0yMSAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTAwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5MTQ4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksMzggQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9y
bWF0SlNDZWxsID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCiB9OwogCitpbmxpbmUg
Ym9vbCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0YUZvcm1hdCBmcm9tLCBEYXRhRm9ybWF0
IHRvKQoreworICAgIEFTU0VSVChmcm9tICE9IERhdGFGb3JtYXROb25lKTsKKyAgICBBU1NFUlQo
dG8gIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIHN3aXRjaCAoZnJvbSkgeworICAgIGNhc2UgRGF0
YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAgICByZXR1
cm4gdG8gIT0gZnJvbTsKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZv
cm1hdEpTOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0RvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgIHN3aXRjaCAo
dG8pIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGF0
YUZvcm1hdENlbGw6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICBjYXNlIERh
dGFGb3JtYXRKU0ludGVnZXI6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAg
ICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gPT09IEdlbmVyYXRpb25JbmZvID09PQogLy8KIC8v
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0dXMgb2YgYSBsaXZl
IHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiw3ICsxMDIsMzMwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBu
b2QKICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7
CiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0
aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBjb25zdCBFbnRyeUxvY2F0aW9uJiBl
bnRyeSwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCitzdHJ1Y3QgR2VuZXJhbGl6ZWRS
ZWdpc3RlciB7CisgICAgYm9vbCBpc0ZQUjsKKyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJlZyBn
cHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgfSB1OworICAgIAorICAgIEdlbmVyYWxpemVk
UmVnaXN0ZXIoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgR2VuZXJhbGl6ZWRSZWdpc3RlciBjcmVh
dGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVz
dWx0OworICAgICAgICByZXN1bHQuaXNGUFIgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0LnUuZ3By
ID0gZ3ByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
R2VuZXJhbGl6ZWRSZWdpc3RlciBjcmVhdGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAg
IEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVzdWx0OworICAgICAgICByZXN1bHQuaXNGUFIgPSB0cnVl
OworICAgICAgICByZXN1bHQudS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2s6OlJlZ2lzdGVySW5mbyYgZmlu
ZEluU3BlY3VsYXRpb25DaGVjayhjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaykKKyAgICB7
CisgICAgICAgIGlmIChpc0ZQUikKKyAgICAgICAgICAgIHJldHVybiBjaGVjay5tX2ZwckluZm9b
RlBSSW5mbzo6dG9JbmRleCh1LmZwcildOworICAgICAgICByZXR1cm4gY2hlY2subV9ncHJJbmZv
W0dQUkluZm86OnRvSW5kZXgodS5ncHIpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgRW50cnlM
b2NhdGlvbjo6UmVnaXN0ZXJJbmZvJiBmaW5kSW5FbnRyeUxvY2F0aW9uKGNvbnN0IEVudHJ5TG9j
YXRpb24mIGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKGlzRlBSKQorICAgICAgICAgICAgcmV0
dXJuIGVudHJ5Lm1fZnBySW5mb1tGUFJJbmZvOjp0b0luZGV4KHUuZnByKV07CisgICAgICAgIHJl
dHVybiBlbnRyeS5tX2dwckluZm9bR1BSSW5mbzo6dG9JbmRleCh1LmdwcildOworICAgIH0KKyAg
ICAKKyAgICBEYXRhRm9ybWF0IHByZXZpb3VzRGF0YUZvcm1hdChjb25zdCBTcGVjdWxhdGlvbkNo
ZWNrJiBjaGVjaykKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kSW5TcGVjdWxhdGlvbkNoZWNr
KGNoZWNrKS5mb3JtYXQ7CisgICAgfQorICAgIAorICAgIERhdGFGb3JtYXQgbmV4dERhdGFGb3Jt
YXQoY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnkpCisgICAgeworICAgICAgICByZXR1cm4gZmlu
ZEluRW50cnlMb2NhdGlvbihlbnRyeSkuZm9ybWF0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bnZlcnQoRGF0YUZvcm1hdCBvbGREYXRhRm9ybWF0LCBEYXRhRm9ybWF0IG5ld0RhdGFGb3JtYXQs
IEpJVENvbXBpbGVyJiBqaXQpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKCFuZWVkRGF0YUZv
cm1hdENvbnZlcnNpb24ob2xkRGF0YUZvcm1hdCwgbmV3RGF0YUZvcm1hdCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKG9sZERhdGFGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpIHsKKyAgICAgICAgICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHUuZ3ByKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0RhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIp
OworICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIodS5ncHIsIHUuZ3ByKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmVUbyhHZW5lcmFsaXplZFJlZ2lzdGVy
JiBvdGhlciwgRGF0YUZvcm1hdCBteURhdGFGb3JtYXQsIERhdGFGb3JtYXQgb3RoZXJEYXRhRm9y
bWF0LCBKSVRDb21waWxlciYgaml0KQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzRlBS
KSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG90aGVyLmlzRlBSKSkgeworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlRG91YmxlKHUuZnByLCBvdGhlci51LmZwcik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBqaXQu
bW92ZURvdWJsZVRvUHRyKHUuZnByLCBvdGhlci51Lmdwcik7CisgICAgICAgICAgICBqaXQuc3Vi
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIudS5ncHIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFko
b3RoZXIuaXNGUFIpKSB7CisgICAgICAgICAgICBqaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgdS5ncHIpOworICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0RvdWJsZSh1
Lmdwciwgb3RoZXIudS5mcHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoTElLRUxZKCFuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24obXlEYXRh
Rm9ybWF0LCBvdGhlckRhdGFGb3JtYXQpKSkgeworICAgICAgICAgICAgaml0Lm1vdmUodS5ncHIs
IG90aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG15RGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAg
ICAgICAgaml0Lm9yUHRyKHUuZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG90
aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKG90aGVyRGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CisgICAg
ICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cih1Lmdwciwgb3RoZXIudS5ncHIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN3YXBXaXRoKEdlbmVyYWxpemVkUmVnaXN0ZXImIG90aGVyLCBEYXRhRm9y
bWF0IG15RGF0YUZvcm1hdCwgRGF0YUZvcm1hdCBteU5ld0RhdGFGb3JtYXQsIERhdGFGb3JtYXQg
b3RoZXJEYXRhRm9ybWF0LCBEYXRhRm9ybWF0IG90aGVyTmV3RGF0YUZvcm1hdCwgSklUQ29tcGls
ZXImIGppdCwgR1BSUmVnIHNjcmF0Y2hHUFIsIEZQUlJlZyBzY3JhdGNoRlBSKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKGlzRlBSKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG90
aGVyLmlzRlBSKSkgeworICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09IEludmFsaWRG
UFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG9QdHIodS5mcHIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGUodS5mcHIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3Zl
RG91YmxlKG90aGVyLnUuZnByLCB1LmZwcik7CisgICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hG
UFIgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0Rv
dWJsZShzY3JhdGNoR1BSLCBvdGhlci51LmZwcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZShzY3JhdGNoRlBSLCBvdGhlci51LmZwcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBqaXQubW92ZShvdGhlci51Lmdwciwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG9QdHIodS5mcHIsIG90aGVyLnUuZ3ByKTsK
KyAgICAgICAgICAgIGppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBv
dGhlci51Lmdwcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlUHRyVG9Eb3VibGUoc2NyYXRjaEdQUiwgdS5mcHIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNGUFIpKSB7
CisgICAgICAgICAgICBvdGhlci5zd2FwV2l0aCgqdGhpcywgb3RoZXJEYXRhRm9ybWF0LCBvdGhl
ck5ld0RhdGFGb3JtYXQsIG15RGF0YUZvcm1hdCwgbXlOZXdEYXRhRm9ybWF0LCBqaXQsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBqaXQuc3dhcCh1Lmdwciwgb3RoZXIudS5ncHIpOworICAgICAgICAKKyAg
ICAgICAgaWYgKFVOTElLRUxZKG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihteURhdGFGb3JtYXQs
IG15TmV3RGF0YUZvcm1hdCkpKSB7CisgICAgICAgICAgICBpZiAobXlEYXRhRm9ybWF0ID09IERh
dGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHUuZ3ByKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG15TmV3RGF0
YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9QdHIodS5ncHIsIHUuZ3ByKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKFVOTElLRUxZKG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihvdGhlckRhdGFGb3JtYXQsIG15
TmV3RGF0YUZvcm1hdCkpKSB7CisgICAgICAgICAgICBpZiAob3RoZXJEYXRhRm9ybWF0ID09IERh
dGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG90
aGVyTmV3RGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBq
aXQuemVyb0V4dGVuZDMyVG9QdHIob3RoZXIudS5ncHIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAg
fQorICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlZFJlZ2lzdGVyIHsKKyAgICBHZW5lcmFsaXpl
ZFJlZ2lzdGVyIHJlZzsKKyAgICBTaHVmZmxlZFJlZ2lzdGVyKiBwcmV2aW91czsKKyAgICBib29s
IGhhc0Zyb207CisgICAgYm9vbCBoYXNUbzsKKyAgICBib29sIGhhbmRsZWQ7CisgICAgCisgICAg
U2h1ZmZsZWRSZWdpc3RlcigpIHsgfQorICAgIAorICAgIFNodWZmbGVkUmVnaXN0ZXIoR2VuZXJh
bGl6ZWRSZWdpc3RlciByZWcpCisgICAgICAgIDogcmVnKHJlZykKKyAgICAgICAgLCBwcmV2aW91
cygwKQorICAgICAgICAsIGhhc0Zyb20oZmFsc2UpCisgICAgICAgICwgaGFzVG8oZmFsc2UpCisg
ICAgICAgICwgaGFuZGxlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bmRPZk5vbkN5Y2xpbmdQZXJtdXRhdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gaGFzVG8g
JiYgIWhhc0Zyb207CisgICAgfQorICAgIAorICAgIHZvaWQgaGFuZGxlTm9uQ3ljbGluZ1Blcm11
dGF0aW9uKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBjb25zdCBFbnRyeUxvY2F0aW9u
JiBlbnRyeSwgSklUQ29tcGlsZXImIGppdCwgRlBSUmVnJiBzY3JhdGNoRlBSKQorICAgIHsKKyAg
ICAgICAgU2h1ZmZsZWRSZWdpc3RlciogY3VyID0gdGhpczsKKyAgICAgICAgd2hpbGUgKGN1ci0+
cHJldmlvdXMpIHsKKyAgICAgICAgICAgIGN1ci0+cHJldmlvdXMtPnJlZy5tb3ZlVG8oY3VyLT5y
ZWcsIGN1ci0+cHJldmlvdXMtPnJlZy5wcmV2aW91c0RhdGFGb3JtYXQoY2hlY2spLCBjdXItPnJl
Zy5uZXh0RGF0YUZvcm1hdChlbnRyeSksIGppdCk7CisgICAgICAgICAgICBjdXItPmhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgaWYgKGN1ci0+cmVnLmlzRlBSKSB7CisgICAgICAgICAgICAg
ICAgc2NyYXRjaEZQUiA9IGN1ci0+cmVnLnUuZnByOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY3VyID0gY3VyLT5wcmV2aW91czsKKyAgICAgICAgfQorICAgICAgICBjdXItPmhhbmRsZWQg
PSB0cnVlOworICAgICAgICBpZiAoY3VyLT5yZWcuaXNGUFIpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2hGUFIgPSBjdXItPnJlZy51LmZwcjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbihjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaywg
Y29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnksIEpJVENvbXBpbGVyJiBqaXQsIEdQUlJlZyBzY3Jh
dGNoR1BSLCBGUFJSZWcgc2NyYXRjaEZQUikKKyAgICB7CisgICAgICAgIC8vIGZpcnN0IGRldGVy
bWluZSB0aGUgY3ljbGUgbGVuZ3RoCisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjeWNsZUxl
bmd0aCA9IDA7CisgICAgICAgIAorICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBjdXIgPSB0aGlz
OworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBuZXh0ID0gMDsKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgQVNTRVJUKGN1cik7CisgICAgICAgICAgICBjeWNsZUxlbmd0aCsrOworICAgICAg
ICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG5leHQgPSBjdXI7CisgICAg
ICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOworICAgICAgICB9IHdoaWxlIChjdXIgIT0gdGhp
cyk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoY3ljbGVMZW5ndGgpOworICAgICAgICBBU1NF
UlQobmV4dC0+cHJldmlvdXMgPT0gY3VyKTsKKyAgICAgICAgCisgICAgICAgIC8vIG5vdyBkZXRl
cm1pbmUgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGUgcGVybXV0YXRpb24sIGRlcGVuZGluZyBv
biB0aGUKKyAgICAgICAgLy8gbGVuZ3RoLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoIChjeWNs
ZUxlbmd0aCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZWcuY29udmVydChyZWcu
cHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIHJlZy5zd2FwV2l0aChwcmV2aW91cy0+cmVnLCByZWcucHJldmlvdXNEYXRhRm9y
bWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgcHJldmlvdXMtPnJlZy5wcmV2
aW91c0RhdGFGb3JtYXQoY2hlY2spLCBwcmV2aW91cy0+cmVnLm5leHREYXRhRm9ybWF0KGVudHJ5
KSwgaml0LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBHZW5lcmFsaXplZFJlZ2lz
dGVyIHNjcmF0Y2g7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkocmVnLmlzRlBSICYmIG5leHQt
PnJlZy5pc0ZQUikpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NyYXRjaEZQUiA9PSBJbnZhbGlk
RlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHZW5lcmFsaXplZFJlZ2lz
dGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHJlZy5tb3Zl
VG8oc2NyYXRjaCwgRGF0YUZvcm1hdERvdWJsZSwgRGF0YUZvcm1hdEpTRG91YmxlLCBqaXQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBH
ZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoc2NyYXRjaEZQUik7CisgICAgICAgICAgICAg
ICAgICAgIHJlZy5tb3ZlVG8oc2NyYXRjaCwgRGF0YUZvcm1hdERvdWJsZSwgRGF0YUZvcm1hdERv
dWJsZSwgaml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHNjcmF0Y2ggPSBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgcmVnLm1vdmVUbyhzY3JhdGNoLCByZWcucHJldmlv
dXNEYXRhRm9ybWF0KGNoZWNrKSwgbmV4dC0+cmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY3VyID0gdGhpczsK
KyAgICAgICAgICAgIHdoaWxlIChjdXItPnByZXZpb3VzICE9IHRoaXMpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoY3VyKTsKKyAgICAgICAgICAgICAgICBjdXItPnByZXZpb3VzLT5yZWcubW92
ZVRvKGN1ci0+cmVnLCBjdXItPnByZXZpb3VzLT5yZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNr
KSwgY3VyLT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkpLCBqaXQpOworICAgICAgICAgICAgICAg
IGN1ciA9IGN1ci0+cHJldmlvdXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShyZWcuaXNGUFIgJiYgbmV4dC0+cmVnLmlzRlBSKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09IEludmFsaWRGUFJSZWcpCisgICAgICAgICAg
ICAgICAgICAgIHNjcmF0Y2gubW92ZVRvKG5leHQtPnJlZywgRGF0YUZvcm1hdEpTRG91YmxlLCBE
YXRhRm9ybWF0RG91YmxlLCBqaXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4dC0+cmVnLCBEYXRhRm9ybWF0RG91YmxlLCBEYXRh
Rm9ybWF0RG91YmxlLCBqaXQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
c2NyYXRjaC5tb3ZlVG8obmV4dC0+cmVnLCBuZXh0LT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkp
LCBuZXh0LT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkpLCBqaXQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIFNodWZmbGVkUmVnaXN0ZXIq
IGxvb2t1cChTaHVmZmxlZFJlZ2lzdGVyKiBncHJzLCBTaHVmZmxlZFJlZ2lzdGVyKiBmcHJzLCBH
ZW5lcmFsaXplZFJlZ2lzdGVyJiByZWcpCisgICAgeworICAgICAgICBpZiAocmVnLmlzRlBSKQor
ICAgICAgICAgICAgcmV0dXJuIGZwcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZy51LmZwcik7Cisg
ICAgICAgIHJldHVybiBncHJzICsgR1BSSW5mbzo6dG9JbmRleChyZWcudS5ncHIpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUJiBsb29rdXBGb3JSZWdpc3RlcihUKiBncHJz
LCBUKiBmcHJzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICBp
ZiAoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIGdw
cnNbaW5kZXhdOworICAgIHJldHVybiBmcHJzW2luZGV4IC0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnNdOworfQorCisvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBhbGxvd3MgZm9y
IGEgSGFzaE1hcDxOb2RlSW5kZXgsIEdlbmVyYWxpemVkUmVnaXN0ZXI+IHRvIGJlCisvLyBlYXNp
bHkgc3Vic3RpdHV0ZWQsIGlmIGl0IGlzIGZvdW5kIHRvIGJlIHdpc2UgdG8gZG8gc28uIFNvIGZh
ciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMKKy8vIGluZGljYXRlIHRoYXQgdGhpcyBpcyBmYXN0
ZXIsIGxpa2VseSBiZWNhdXNlIHRoZSBIYXNoTWFwIHdvdWxkIGhhdmUgbmV2ZXIgZ3Jvd24gdmVy
eSBiaWcKKy8vIGFuZCB3ZSB3b3VsZCB0aHVzIGJlIHdhc3RpbmcgdGltZSBwZXJmb3JtaW5nIGNv
bXBsZXggaGFzaGluZyBsb2dpYyB0aGF0LCB0aG91Z2ggTygxKSBvbgorLy8gYXZlcmFnZSwgd291
bGQgYmUgbGVzcyB0aGFuIHRoZSB+NyBsb29wIGl0ZXJhdGlvbnMgdGhhdCB0aGUgZmluZCgpIG1l
dGhvZCBiZWxvdyB3b3VsZCBkbworLy8gKHNpbmNlIGl0J3MgdW5jb21tb24gdGhhdCB3ZSdkIGhh
dmUgcmVnaXN0ZXIgYWxsb2NhdGVkIG1vcmUgdGhhbiA3IHJlZ2lzdGVycywgaW4gdGhlCisvLyBj
dXJyZW50IHNjaGVtZSkuCitjbGFzcyBOb2RlVG9SZWdpc3Rlck1hcCB7CitwdWJsaWM6CisgICAg
c3RydWN0IFR1cGxlIHsKKyAgICAgICAgTm9kZUluZGV4IGZpcnN0OworICAgICAgICBHZW5lcmFs
aXplZFJlZ2lzdGVyIHNlY29uZDsKKyAgICAgICAgCisgICAgICAgIFR1cGxlKCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIFR1cGxlKiBpdGVyYXRvcjsK
KyAgICAKKyAgICBOb2RlVG9SZWdpc3Rlck1hcCgpCisgICAgICAgIDogbV9vY2N1cGFuY3koMCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KE5vZGVJbmRleCBmaXJzdCwgR2VuZXJh
bGl6ZWRSZWdpc3RlciBzZWNvbmQpCisgICAgeworICAgICAgICBtX3BheWxvYWRbbV9vY2N1cGFu
Y3ldLmZpcnN0ID0gZmlyc3Q7CisgICAgICAgIG1fcGF5bG9hZFttX29jY3VwYW5jeV0uc2Vjb25k
ID0gc2Vjb25kOworICAgICAgICBtX29jY3VwYW5jeSsrOworICAgIH0KKyAgICAKKyAgICBUdXBs
ZSogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBUdXBs
ZSogZmluZChOb2RlSW5kZXggZmlyc3QpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX29jY3VwYW5jeTsgaS0tID4gMDspIHsKKyAgICAgICAgICAgIGlmIChtX3BheWxvYWRbaV0u
Zmlyc3QgPT0gZmlyc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcGF5bG9hZCArIGk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgbV9vY2N1cGFuY3kgPSAwOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgVHVwbGUgbV9wYXlsb2FkW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIHVuc2lnbmVkIG1fb2NjdXBhbmN5OworfTsKKwor
dm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29u
c3QgU3BlY3VsYXRpb25DaGVjayYgY2hlY2ssIGNvbnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5LCBT
cGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9k
ZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFw
KQogewogICAgIEFTU0VSVChjaGVjay5tX25vZGVJbmRleCA9PSBlbnRyeS5tX25vZGVJbmRleCk7
CiAKQEAgLTEyNSwyMCArNDQ4LDg1IEBAIHZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3Vs
YXRpdmVUb04KICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBhZGQuCiAgICAgICAgIHN1YjMyKHJlY292
ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CiAgICAgfQorICAgIAorICAgIC8vIEZpcnN0
LCB3ZSBuZWVkIGEgcmV2ZXJzZSBtYXBwaW5nIHRoYXQgdGVsbHMgdXMsIGZvciBhIE5vZGVJbmRl
eCwgd2hpY2ggcmVnaXN0ZXIKKyAgICAvLyB0aGF0IG5vZGUgaXMgaW4uCisgICAgCisgICAgY2hl
Y2tOb2RlVG9SZWdpc3Rlck1hcC5jbGVhcigpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7Cisg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBjaGVjay5tX2dwckluZm9baW5kZXhdLm5vZGVJ
bmRleDsKKyAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICBjaGVj
a05vZGVUb1JlZ2lzdGVyTWFwLnNldChub2RlSW5kZXgsIEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNy
ZWF0ZUdQUihHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkpOworICAgIH0KKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpbmRleCkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJ
bmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5zZXQobm9kZUluZGV4LCBHZW5lcmFs
aXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpKTsKKyAg
ICB9CisgICAgCisgICAgZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5jbGVhcigpOworICAgIAorICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2luZGV4KSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBlbnRyeS5tX2dw
ckluZm9baW5kZXhdLm5vZGVJbmRleDsKKyAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUp
CisgICAgICAgICAgICBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwLnNldChub2RlSW5kZXgsIEdlbmVy
YWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkpOwor
ICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlmIChub2Rl
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5zZXQo
bm9kZUluZGV4LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdp
c3RlcihpbmRleCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gSG93IHRoaXMgd29ya3M6CisgICAg
Ly8gMSkgU3BpbGwgYW55IHZhbHVlcyB0aGF0IGFyZSBub3Qgc3BpbGxlZCBvbiBzcGVjdWxhdGl2
ZSwgYnV0IGFyZSBzcGlsbGVkCisgICAgLy8gICAgb24gbm9uLXNwZWN1bGF0aXZlLgorICAgIC8v
IDIpIEZvciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQgYXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBh
dGhzLCBwZXJmb3JtIGEKKyAgICAvLyAgICBzaHVmZmxpbmcuCisgICAgLy8gMykgRmlsbCBhbnkg
dmFsdWVzIHRoYXQgd2VyZSBzcGlsbGVkIG9uIHNwZWN1bGF0aXZlLCBidXQgYXJlIG5vdCBzcGls
bGVkCisgICAgLy8gICAgb24gbm9uLXNwZWN1bGF0aXZlLgorICAgIAorICAgIC8vIElmIHdlIGZp
bmQgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgYXMgc2NyYXRjaCByZWdpc3RlcnMgYWxvbmcg
dGhlIHdheSwKKyAgICAvLyBzYXZlIHRoZW0uCisgICAgCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsK
KyAgICBib29sIG5lZWRUb1Jlc3RvcmVUYWdNYXNrUmVnaXN0ZXIgPSBmYWxzZTsKKyAgICAKKyAg
ICAvLyBQYXJ0IDE6IHNwaWxsIGFueSB2YWx1ZXMgdGhhdCBhcmUgbm90IHNwaWxsZWQgb24gc3Bl
Y3VsYXRpdmUsIGJ1dCBhcmUKKyAgICAvLyAgICAgICAgIHNwaWxsZWQgb24gbm9uLXNwZWN1bGF0
aXZlLgorICAgIAorICAgIC8vIFRoaXMgYWxzbyBzZXRzIHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVz
IHRoYXQgUGFydCAyIHdpbGwgbmVlZC4KKyAgICAKKyAgICBTaHVmZmxlZFJlZ2lzdGVyIGdwcnNb
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIFNodWZmbGVkUmVnaXN0ZXIgZnByc1tG
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpCisgICAg
ICAgIGdwcnNbaW5kZXhdID0gU2h1ZmZsZWRSZWdpc3RlcihHZW5lcmFsaXplZFJlZ2lzdGVyOjpj
cmVhdGVHUFIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkK
KyAgICAgICAgZnByc1tpbmRleF0gPSBTaHVmZmxlZFJlZ2lzdGVyKEdlbmVyYWxpemVkUmVnaXN0
ZXI6OmNyZWF0ZUZQUihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkpOwogCi0gICAgLy8gRklY
TUU6IC0gVGhpcyBpcyBoaWRlb3VzbHkgaW5lZmZpY2llbnQhCi0gICAgLy8gV2hlcmUgYSB2YWx1
ZSBpcyBsaXZlIGluIGEgcmVnaXN0ZXIgaW4gdGhlIHNwZWN1bGF0aXZlIHBhdGgsIGFuZCBpcyBy
ZXF1aXJlZCBpbiBhIHJlZ2lzdGVyCi0gICAgLy8gb24gdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRo
LCB3ZSBzaG91bGQgbm90IG5lZWQgdG8gYmUgc3BpbGxpbmcgaXQgYW5kIHJlbG9hZGluZyAod2Ug
bWF5Ci0gICAgLy8gbmVlZCB0byBzcGlsbCBhbnl3YXksIGlmIHRoZSB2YWx1ZSBpcyBtYXJrZWQg
YXMgc3BpbGxlZCBvbiB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGgpLgotICAgIC8vIFRoaXMgbWF5
IGFsc28gYmUgc3BpbGxpbmcgdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZywgZS5nLiBh
cmUgYWxyZWFkeSBzcGlsbGVkLAotICAgIC8vIGFyZSBjb25zdGFudHMsIG9yIGFyZSBhcmd1bWVu
dHMuCi0KLSAgICAvLyBTcGlsbCBhbGwgR1BScyBpbiB1c2UgYnkgdGhlIHNwZWN1bGF0aXZlIHBh
dGguCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNo
ZWNrLm1fZ3BySW5mb1tpbmRleF0ubm9kZUluZGV4OwotICAgICAgICBpZiAobm9kZUluZGV4ID09
IE5vTm9kZSkKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgY2hlY2subV9ncHJJ
bmZvW2luZGV4XS5pc1NwaWxsZWQpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGluZGV4KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRv
ciA9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgpOworICAgICAgICBpZiAo
bWFwSXRlcmF0b3IgIT0gZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5lbmQoKSkgeworICAgICAgICAg
ICAgZ3Byc1tpbmRleF0uaGFzRnJvbSA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFNodWZmbGVkUmVnaXN0ZXIqIG5leHQgPSBTaHVmZmxlZFJlZ2lzdGVyOjpsb29rdXAoZ3Bycywg
ZnBycywgbWFwSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBuZXh0LT5wcmV2aW91cyA9
IGdwcnMgKyBpbmRleDsKKyAgICAgICAgICAgIG5leHQtPmhhc1RvID0gdHJ1ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFtYXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJbkVudHJ5TG9j
YXRpb24oZW50cnkpLmlzU3BpbGxlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gY2hlY2subV9n
cHJJbmZvW2luZGV4XS5mb3JtYXQ7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCk7CiAKQEAgLTE0Niwz
NCArNTM0LDkxIEBAIHZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb04KICAg
ICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICBv
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnRvUmVnaXN0ZXIo
aW5kZXgpKTsKICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCksIGFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgIAorICAgICAgICBzY3JhdGNoR1BS
ID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCk7CisgICAgfQorICAgIAorICAgIGlmIChzY3Jh
dGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcjsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVRhZ01hc2tSZWdpc3RlciA9
IHRydWU7CiAgICAgfQogCi0gICAgLy8gU3BpbGwgYWxsIEZQUnMgaW4gdXNlIGJ5IHRoZSBzcGVj
dWxhdGl2ZSBwYXRoLgogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEZQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBjaGVjay5tX2ZwckluZm9baW5kZXhdOwotICAgICAgICBpZiAobm9kZUluZGV4ID09
IE5vTm9kZSkKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNrLm1fZnBySW5mb1tp
bmRleF0ubm9kZUluZGV4OworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBjaGVj
ay5tX2ZwckluZm9baW5kZXhdLmlzU3BpbGxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisg
ICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGVudHJ5Tm9k
ZVRvUmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgpOworICAgICAgICBpZiAobWFwSXRlcmF0b3Ig
IT0gZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5lbmQoKSkgeworICAgICAgICAgICAgZnByc1tpbmRl
eF0uaGFzRnJvbSA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNodWZmbGVkUmVn
aXN0ZXIqIG5leHQgPSBTaHVmZmxlZFJlZ2lzdGVyOjpsb29rdXAoZ3BycywgZnBycywgbWFwSXRl
cmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBuZXh0LT5wcmV2aW91cyA9IGZwcnMgKyBpbmRl
eDsKKyAgICAgICAgICAgIG5leHQtPmhhc1RvID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFt
YXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJbkVudHJ5TG9jYXRpb24oZW50cnkpLmlzU3BpbGxlZCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lz
dGVyKCk7CiAKLSAgICAgICAgbW92ZURvdWJsZVRvUHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5k
ZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6
cmVnVDAsIGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgIG1vdmVEb3VibGVU
b1B0cihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1
YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBzdG9yZVB0cihzY3JhdGNoR1BSLCBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOworICAg
ICAgICAKKyAgICAgICAgc2NyYXRjaEZQUiA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBQYXJ0IDI6IEZvciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQgYXJl
IGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzLAorICAgIC8vICAgICAgICAgcGVyZm9ybSBhIHNo
dWZmbGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2lu
ZGV4KSB7CisgICAgICAgIFNodWZmbGVkUmVnaXN0ZXImIHJlZyA9IGxvb2t1cEZvclJlZ2lzdGVy
KGdwcnMsIGZwcnMsIGluZGV4KTsKKyAgICAgICAgaWYgKCFyZWcuaXNFbmRPZk5vbkN5Y2xpbmdQ
ZXJtdXRhdGlvbigpIHx8IHJlZy5oYW5kbGVkIHx8ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNU
bykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlZy5oYW5kbGVO
b25DeWNsaW5nUGVybXV0YXRpb24oY2hlY2ssIGVudHJ5LCAqdGhpcywgc2NyYXRjaEZQUik7Cisg
ICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgp
IHsKKyAgICAgICAgU2h1ZmZsZWRSZWdpc3RlciYgcmVnID0gbG9va3VwRm9yUmVnaXN0ZXIoZ3By
cywgZnBycywgaW5kZXgpOworICAgICAgICBpZiAocmVnLmhhbmRsZWQgfHwgKCFyZWcuaGFzRnJv
bSAmJiAhcmVnLmhhc1RvKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgcmVnLmhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbihjaGVjaywgZW50cnksICp0aGlzLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBTaHVm
ZmxlZFJlZ2lzdGVyJiByZWcgPSBsb29rdXBGb3JSZWdpc3RlcihncHJzLCBmcHJzLCBpbmRleCk7
CisgICAgICAgIEFTU0VSVChyZWcuaGFuZGxlZCB8fCAoIXJlZy5oYXNGcm9tICYmICFyZWcuaGFz
VG8pKTsKICAgICB9CisjZW5kaWYKKworICAgIC8vIFBhcnQgMzogRmlsbCBhbnkgdmFsdWVzIHRo
YXQgd2VyZSBzcGlsbGVkIG9uIHNwZWN1bGF0aXZlLCBidXQgYXJlIG5vdCBzcGlsbGVkCisgICAg
Ly8gICAgICAgICBvbiBub24tc3BlY3VsYXRpdmUuCiAKLSAgICAvLyBGaWxsIGFsbCBGUFJzIGlu
IHVzZSBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKLSAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGVudHJ5Lm1fZnBySW5mb1tpbmRleF07Ci0gICAg
ICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlmIChub2RlSW5k
ZXggPT0gTm9Ob2RlIHx8IGVudHJ5Lm1fZnBySW5mb1tpbmRleF0uaXNTcGlsbGVkKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBOb2RlVG9SZWdpc3Rlck1hcDo6aXRl
cmF0b3IgbWFwSXRlcmF0b3IgPSBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLmZpbmQobm9kZUluZGV4
KTsKKyAgICAgICAgaWYgKG1hcEl0ZXJhdG9yICE9IGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuZW5k
KCkKKyAgICAgICAgICAgICYmICFtYXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJblNwZWN1bGF0aW9u
Q2hlY2soY2hlY2spLmlzU3BpbGxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IGZpbGxOdW1lcmljVG9Eb3VibGUobm9kZUluZGV4LCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIH0KIAotICAgIC8vIEZpbGwgYWxsIEdQUnMgaW4gdXNl
IGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewogICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9ncHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7
Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICBpZiAobm9kZUluZGV4
ID09IE5vTm9kZSB8fCBlbnRyeS5tX2dwckluZm9baW5kZXhdLmlzU3BpbGxlZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJ
dGVyYXRvciA9IGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgpOworICAgICAg
ICBpZiAobWFwSXRlcmF0b3IgIT0gY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5lbmQoKQorICAgICAg
ICAgICAgJiYgIW1hcEl0ZXJhdG9yLT5zZWNvbmQuZmluZEluU3BlY3VsYXRpb25DaGVjayhjaGVj
aykuaXNTcGlsbGVkKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgRGF0YUZvcm1h
dCBkYXRhRm9ybWF0ID0gZW50cnkubV9ncHJJbmZvW2luZGV4XS5mb3JtYXQ7CkBAIC0xODUsNiAr
NjMwLDkgQEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgICAg
ICAgICAgLy8gRklYTUU6IEZvciBzdWJ0eXBlcyBvZiBEYXRhRm9ybWF0SlMsIHNob3VsZCBqaXRB
c3NlcnQgdGhlIHN1YnR5cGU/CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaWYgKG5lZWRU
b1Jlc3RvcmVUYWdNYXNrUmVnaXN0ZXIpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihUYWdNYXNrKSksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CiAKICAgICAvLyBKdW1wIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGp1bXAo
ZW50cnkubV9lbnRyeSk7CkBAIC0xOTcsNyArNjQ1LDEwIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRv
ciBjaGVja3NFbmQgPSBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpLmVuZCgpOwogICAg
IE5vblNwZWN1bGF0aXZlSklUOjpFbnRyeUxvY2F0aW9uVmVjdG9yOjpJdGVyYXRvciBlbnRyaWVz
SXRlciA9IG5vblNwZWN1bGF0aXZlLmVudHJ5TG9jYXRpb25zKCkuYmVnaW4oKTsKICAgICBOb25T
cGVjdWxhdGl2ZUpJVDo6RW50cnlMb2NhdGlvblZlY3Rvcjo6SXRlcmF0b3IgZW50cmllc0VuZCA9
IG5vblNwZWN1bGF0aXZlLmVudHJ5TG9jYXRpb25zKCkuZW5kKCk7Ci0KKyAgICAKKyAgICBOb2Rl
VG9SZWdpc3Rlck1hcCBjaGVja05vZGVUb1JlZ2lzdGVyTWFwOworICAgIE5vZGVUb1JlZ2lzdGVy
TWFwIGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXA7CisgICAgCiAgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBzcGVjdWxhdGlvbiBjaGVja3MuCiAgICAgd2hpbGUgKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5k
KSB7CiAgICAgICAgIC8vIEZvciBldmVyeSBiYWlsIG91dCBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBw
YXRoLCB3ZSBtdXN0IGhhdmUgcHJvdmlkZWQgYW4gZW50cnkgcG9pbnQKQEAgLTIxMiw3ICs2NjMs
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MoCiAgICAgICAgICAg
ICAvLyBQbGFudCBjb2RlIHRvIGxpbmsgdGhpcyBzcGVjdWxhdGlvbiBmYWlsdXJlLgogICAgICAg
ICAgICAgY29uc3QgU3BlY3VsYXRpb25DaGVjayYgY2hlY2sgPSAqY2hlY2tzSXRlcjsKICAgICAg
ICAgICAgIGNvbnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5ID0gKmVudHJpZXNJdGVyOwotICAgICAg
ICAgICAganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY2hlY2ssIGVudHJ5LCBz
cGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGNoZWNrLm1fcmVjb3ZlcnlJbmRleCkpOwor
ICAgICAgICAgICAganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY2hlY2ssIGVu
dHJ5LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGNoZWNrLm1fcmVjb3ZlcnlJbmRl
eCksIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXApOwogICAg
ICAgICAgICAgICsrY2hlY2tzSXRlcjsKICAgICAgICAgfSB3aGlsZSAoY2hlY2tzSXRlciAhPSBj
aGVja3NFbmQgJiYgY2hlY2tzSXRlci0+bV9ub2RlSW5kZXggPT0gZW50cmllc0l0ZXItPm1fbm9k
ZUluZGV4KTsKICAgICAgICAgICsrZW50cmllc0l0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsNyBAQCBjbGFzcyBKU0dsb2JhbERhdGE7CiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3Mg
SklUQ29kZUdlbmVyYXRvcjsKK2NsYXNzIE5vZGVUb1JlZ2lzdGVyTWFwOwogY2xhc3MgTm9uU3Bl
Y3VsYXRpdmVKSVQ7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVj
b3Zlcnk7CkBAIC0yOTAsNyArMjkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxOdW1lcmlj
VG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAgIHZvaWQg
ZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZpbGxUb0pT
KE5vZGVJbmRleCwgR1BSUmVnKTsKLSAgICB2b2lkIGp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNw
ZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smLCBjb25zdCBFbnRyeUxvY2F0aW9uJiwg
U3BlY3VsYXRpb25SZWNvdmVyeSopOworICAgIHZvaWQganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9u
U3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25DaGVjayYsIGNvbnN0IEVudHJ5TG9jYXRpb24m
LCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVn
aXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKTsKICAg
ICB2b2lkIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYsIE5vblNwZWN1bGF0
aXZlSklUJik7CiAKICAgICAvLyBUaGUgZ2xvYmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3Rh
bnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkxNDgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDcgQEAgRW50cnlMb2NhdGlvbjo6RW50cnlMb2NhdGlvbihNYWNy
b0Fzc2VtYgogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVy
YXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4
KCldLm5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CiAgICAgICAgICAgICBtX2dwckluZm9b
aXRlci5pbmRleCgpXS5mb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7CisgICAgICAgICAg
ICBtX2dwckluZm9baXRlci5pbmRleCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9ncHJJbmZv
W2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KQEAgLTUwLDkgKzUxLDEx
IEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRpb24oTWFjcm9Bc3NlbWIKICAgICAgICAgaWYg
KGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKICAgICAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gIGppdC0+bV9nZW5lcmF0aW9uSW5mb1tpdGVyLm5hbWUoKV07
CiAgICAgICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRE
b3VibGUpOwotICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0gPSBpbmZvLm5vZGVJ
bmRleCgpOworICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLmZv
cm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRl
eCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0gPSBOb05v
ZGU7CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05v
ZGU7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb25TcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
OSArNTIsMTAgQEAgc3RydWN0IEVudHJ5TG9jYXRpb24gewogICAgIHN0cnVjdCBSZWdpc3Rlcklu
Zm8gewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4OwogICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgYm9vbCBpc1NwaWxsZWQ7CiAgICAgfTsKICAgICBSZWdpc3RlckluZm8g
bV9ncHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBOb2RlSW5kZXggbV9m
cHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKKyAgICBSZWdpc3RlckluZm8gbV9m
cHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKIH07CiAKIC8vID09PSBOb25TcGVj
dWxhdGl2ZUpJVCA9PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiAr
MTUwLDcgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAg
ICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIu
bmFtZSgpXTsKICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9
IGluZm8ubm9kZUluZGV4KCk7CiAgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5m
b3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7CisgICAgICAgICAgICBtX2dwckluZm9baXRl
ci5pbmRleCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5v
bmU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0u
bm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KQEAgLTE1Nyw5ICsxNTgsMTEgQEAgU3BlY3VsYXRp
b25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAg
IEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAg
ICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXSA9IGluZm8ubm9kZUluZGV4KCk7CisgICAg
ICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRl
eCgpOworICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0uZm9ybWF0ID0gRGF0YUZv
cm1hdERvdWJsZTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLmlzU3BpbGxl
ZCA9IGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXSA9IE5vTm9kZTsKKyAgICAgICAg
ICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw5ICs4NCwxMCBAQCBzdHJ1Y3QgU3Bl
Y3VsYXRpb25DaGVjayB7CiAgICAgc3RydWN0IFJlZ2lzdGVySW5mbyB7CiAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXg7CiAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICBib29s
IGlzU3BpbGxlZDsKICAgICB9OwogICAgIFJlZ2lzdGVySW5mbyBtX2dwckluZm9bR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnNdOwotICAgIE5vZGVJbmRleCBtX2ZwckluZm9bRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnNdOworICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9u
Q2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101631</attachid>
            <date>2011-07-21 12:44:53 -0700</date>
            <delta_ts>2011-07-25 17:32:00 -0700</delta_ts>
            <desc>the patch (fix more review)</desc>
            <filename>fasterspecfail_patch_3.diff</filename>
            <type>text/plain</type>
            <size>32668</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAK
KzIwMTEtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5NjkKKyAgICAgICAgREZH
IEpJVCBnZW5lcmF0ZXMgaW5lZmZpY2llbnQgY29kZSBmb3Igc3BlY3VsYXRpb24gZmFpbHVyZXMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGltcGxlbWVudHMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlIHN0cmF0ZWd5IHdoZXJlICgx
KSB2YWx1ZXMgc3BpbGxlZCBvbgorICAgICAgICBub24tc3BlY3VsYXRpdmUgYnV0IG5vdCBzcGls
bGVkIG9uIHNwZWN1bGF0aXZlIGFyZSBzcGlsbGVkLCAoMikgdmFsdWVzIHRoYXQKKyAgICAgICAg
YXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzIGFyZSByZWFycmFuZ2VkIHdpdGhvdXQgZXZl
ciB0b3VjaGluZyBtZW1vcnksCisgICAgICAgIGFuZCAoMykgdmFsdWVzIHNwaWxsZWQgb24gc3Bl
Y3VsYXRpdmUgYnV0IG5vdCBzcGlsbGVkIG9uIG5vbi1zcGVjdWxhdGl2ZSBhcmUKKyAgICAgICAg
ZmlsbGVkLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlZ2lzdGVyIHNodWZmbGluZyBpcyB0aGUg
bW9zdCBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoaXMgcGF0Y2guICBJdAorICAgICAgICBjb25zdHJ1
Y3RzIGEgcGVybXV0YXRpb24gZ3JhcGggZm9yIHJlZ2lzdGVycy4gIEVhY2ggbm9kZSByZXByZXNl
bnRzIGEKKyAgICAgICAgcmVnaXN0ZXIsIGFuZCBlYWNoIGRpcmVjdGVkIGVkZ2UgY29ycmVzcG9u
ZHMgdG8gdGhlIHJlZ2lzdGVyJ3MgdmFsdWUgaGF2aW5nCisgICAgICAgIHRvIGJlIG1vdmVkIHRv
IGEgZGlmZmVyZW50IHJlZ2lzdGVyIGFzIHBhcnQgb2YgdGhlIHNodWZmbGluZy4gIFRoaXMgaXMg
YQorICAgICAgICBkaXJlY3RlZCBncmFwaCB3aGVyZSBlYWNoIG5vZGUgbWF5IG9ubHkgaGF2ZSAw
IG9yIDEgaW5jb21pbmcgZWRnZXMsIGFuZAorICAgICAgICAwIG9yIDEgb3V0Z29pbmcgZWRnZXMu
ICBUaGUgYWxnb3JpdGhtIHRoZW4gZmlyc3QgZmluZHMgbWF4aW1hbCBub24tY3ljbGljCisgICAg
ICAgIHN1YmdyYXBocyB3aGVyZSBhbGwgbm9kZXMgaW4gdGhlIHN1YmdyYXBoIGFyZSByZWFjaGFi
bGUgZnJvbSBhIHN0YXJ0IG5vZGUuCisgICAgICAgIFN1Y2ggc3ViZ3JhcGhzIGFsd2F5cyByZXNl
bWJsZSBsaW5rZWQgbGlzdHMsIGFuZCBjb3JyZXNwb25kIHRvIHNpbXBseQorICAgICAgICBtb3Zp
bmcgdGhlIHZhbHVlIGluIHRoZSBzZWNvbmQtdG8tbGFzdCByZWdpc3RlciBpbnRvIHRoZSBsYXN0
IHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgdGhlbiBtb3ZpbmcgdGhlIHZhbHVlIGluIHRoZSB0aGly
ZC10by1sYXN0IHJlZ2lzdGVyIGludG8gdGhlIHNlY29uZC10by1sYXN0CisgICAgICAgIHJlZ2lz
dGVyLCBhbmQgc28gb24uICBPbmNlIHRoZXNlIHN1YmdyYXBocyBhcmUgdGFrZW4gY2FyZSBvZiwg
dGhlIHJlbWFpbmluZworICAgICAgICBzdWJncmFwaHMgYXJlIGN5Y2xlcywgYW5kIGFyZSBoYW5k
bGVkIHVzaW5nIGVpdGhlciAoYSkgY29udmVyc2lvbiBvciBuby1vcAorICAgICAgICBpZiB0aGUg
Y3ljbGUgaW52b2x2ZXMgb25lIG5vZGUsIChiKSBzd2FwIGlmIGl0IGludm9sdmVzIHR3byBub2Rl
cywgb3IgKGMpCisgICAgICAgIGEgY3ljbGljIHNodWZmbGUgaW52b2x2aW5nIGEgc2NyYXRjaCBy
ZWdpc3RlciBpZiB0aGVyZSBhcmUgdGhyZWUgb3IgbW9yZQorICAgICAgICBub2Rlcy4KKyAgICAg
ICAgCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6bmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OkdlbmVyYWxp
emVkUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OmNy
ZWF0ZUdQUik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRl
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpkdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5TcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5FbnRy
eUxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpwcmV2
aW91c0RhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6
Om5leHREYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVy
Ojpjb252ZXJ0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjptb3Zl
VG8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OnN3YXBXaXRoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpTaHVmZmxlZFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjppc0VuZE9mTm9uQ3ljbGluZ1Bl
cm11dGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpoYW5kbGVO
b25DeWNsaW5nUGVybXV0YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNodWZmbGVkUmVnaXN0
ZXI6OmhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2h1ZmZs
ZWRSZWdpc3Rlcjo6bG9va3VwKToKKyAgICAgICAgKEpTQzo6REZHOjpsb29rdXBGb3JSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6OlR1cGxlOjpUdXBsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6Ok5vZGVUb1JlZ2lzdGVyTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6c2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlVG9SZWdpc3Rlck1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0
ZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21T
cGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RW50cnlMb2NhdGlvbjo6RW50cnlMb2NhdGlvbik6CisgICAgICAgICogZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKwogMjAxMS0wNy0yMSAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTAwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5MTQ4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksMzggQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9y
bWF0SlNDZWxsID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCiB9OwogCitpbmxpbmUg
Ym9vbCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0YUZvcm1hdCBmcm9tLCBEYXRhRm9ybWF0
IHRvKQoreworICAgIEFTU0VSVChmcm9tICE9IERhdGFGb3JtYXROb25lKTsKKyAgICBBU1NFUlQo
dG8gIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIHN3aXRjaCAoZnJvbSkgeworICAgIGNhc2UgRGF0
YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAgICByZXR1
cm4gdG8gIT0gZnJvbTsKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZv
cm1hdEpTOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0RvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgIHN3aXRjaCAo
dG8pIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGF0
YUZvcm1hdENlbGw6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICBjYXNlIERh
dGFGb3JtYXRKU0ludGVnZXI6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAg
ICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gPT09IEdlbmVyYXRpb25JbmZvID09PQogLy8KIC8v
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byB0cmFjayB0aGUgY3VycmVudCBzdGF0dXMgb2YgYSBsaXZl
IHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiw3ICsxMDIsMzI4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBu
b2QKICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7
CiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0
aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBjb25zdCBFbnRyeUxvY2F0aW9uJiBl
bnRyeSwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCitzdHJ1Y3QgR2VuZXJhbGl6ZWRS
ZWdpc3RlciB7CisgICAgYm9vbCBpc0ZQUjsKKyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJlZyBn
cHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgfSB1OworICAgIAorICAgIEdlbmVyYWxpemVk
UmVnaXN0ZXIoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgR2VuZXJhbGl6ZWRSZWdpc3RlciBjcmVh
dGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVz
dWx0OworICAgICAgICByZXN1bHQuaXNGUFIgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0LnUuZ3By
ID0gZ3ByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
R2VuZXJhbGl6ZWRSZWdpc3RlciBjcmVhdGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAg
IEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVzdWx0OworICAgICAgICByZXN1bHQuaXNGUFIgPSB0cnVl
OworICAgICAgICByZXN1bHQudS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2s6OlJlZ2lzdGVySW5mbyYgZmlu
ZEluU3BlY3VsYXRpb25DaGVjayhjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaykKKyAgICB7
CisgICAgICAgIGlmIChpc0ZQUikKKyAgICAgICAgICAgIHJldHVybiBjaGVjay5tX2ZwckluZm9b
RlBSSW5mbzo6dG9JbmRleCh1LmZwcildOworICAgICAgICByZXR1cm4gY2hlY2subV9ncHJJbmZv
W0dQUkluZm86OnRvSW5kZXgodS5ncHIpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgRW50cnlM
b2NhdGlvbjo6UmVnaXN0ZXJJbmZvJiBmaW5kSW5FbnRyeUxvY2F0aW9uKGNvbnN0IEVudHJ5TG9j
YXRpb24mIGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKGlzRlBSKQorICAgICAgICAgICAgcmV0
dXJuIGVudHJ5Lm1fZnBySW5mb1tGUFJJbmZvOjp0b0luZGV4KHUuZnByKV07CisgICAgICAgIHJl
dHVybiBlbnRyeS5tX2dwckluZm9bR1BSSW5mbzo6dG9JbmRleCh1LmdwcildOworICAgIH0KKyAg
ICAKKyAgICBEYXRhRm9ybWF0IHByZXZpb3VzRGF0YUZvcm1hdChjb25zdCBTcGVjdWxhdGlvbkNo
ZWNrJiBjaGVjaykKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kSW5TcGVjdWxhdGlvbkNoZWNr
KGNoZWNrKS5mb3JtYXQ7CisgICAgfQorICAgIAorICAgIERhdGFGb3JtYXQgbmV4dERhdGFGb3Jt
YXQoY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnkpCisgICAgeworICAgICAgICByZXR1cm4gZmlu
ZEluRW50cnlMb2NhdGlvbihlbnRyeSkuZm9ybWF0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bnZlcnQoRGF0YUZvcm1hdCBvbGREYXRhRm9ybWF0LCBEYXRhRm9ybWF0IG5ld0RhdGFGb3JtYXQs
IEpJVENvbXBpbGVyJiBqaXQpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKCFuZWVkRGF0YUZv
cm1hdENvbnZlcnNpb24ob2xkRGF0YUZvcm1hdCwgbmV3RGF0YUZvcm1hdCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKG9sZERhdGFGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpIHsKKyAgICAgICAgICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHUuZ3ByKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0RhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIp
OworICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIodS5ncHIsIHUuZ3ByKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmVUbyhHZW5lcmFsaXplZFJlZ2lzdGVy
JiBvdGhlciwgRGF0YUZvcm1hdCBteURhdGFGb3JtYXQsIERhdGFGb3JtYXQgb3RoZXJEYXRhRm9y
bWF0LCBKSVRDb21waWxlciYgaml0KQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlzRlBS
KSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG90aGVyLmlzRlBSKSkgeworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlRG91YmxlKHUuZnByLCBvdGhlci51LmZwcik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBqaXQu
bW92ZURvdWJsZVRvUHRyKHUuZnByLCBvdGhlci51Lmdwcik7CisgICAgICAgICAgICBqaXQuc3Vi
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIudS5ncHIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFko
b3RoZXIuaXNGUFIpKSB7CisgICAgICAgICAgICBqaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgdS5ncHIpOworICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0RvdWJsZSh1
Lmdwciwgb3RoZXIudS5mcHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoTElLRUxZKCFuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24obXlEYXRh
Rm9ybWF0LCBvdGhlckRhdGFGb3JtYXQpKSkgeworICAgICAgICAgICAgaml0Lm1vdmUodS5ncHIs
IG90aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG15RGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAg
ICAgICAgaml0Lm9yUHRyKHUuZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG90
aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKG90aGVyRGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CisgICAg
ICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cih1Lmdwciwgb3RoZXIudS5ncHIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN3YXBXaXRoKEdlbmVyYWxpemVkUmVnaXN0ZXImIG90aGVyLCBEYXRhRm9y
bWF0IG15RGF0YUZvcm1hdCwgRGF0YUZvcm1hdCBteU5ld0RhdGFGb3JtYXQsIERhdGFGb3JtYXQg
b3RoZXJEYXRhRm9ybWF0LCBEYXRhRm9ybWF0IG90aGVyTmV3RGF0YUZvcm1hdCwgSklUQ29tcGls
ZXImIGppdCwgR1BSUmVnIHNjcmF0Y2hHUFIsIEZQUlJlZyBzY3JhdGNoRlBSKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKGlzRlBSKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG90
aGVyLmlzRlBSKSkgeworICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09IEludmFsaWRG
UFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG9QdHIodS5mcHIsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmVEb3VibGUodS5mcHIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3Zl
RG91YmxlKG90aGVyLnUuZnByLCB1LmZwcik7CisgICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hG
UFIgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0Rv
dWJsZShzY3JhdGNoR1BSLCBvdGhlci51LmZwcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZShzY3JhdGNoRlBSLCBvdGhlci51LmZwcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBqaXQubW92ZShvdGhlci51Lmdwciwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG9QdHIodS5mcHIsIG90aGVyLnUuZ3ByKTsK
KyAgICAgICAgICAgIGppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBv
dGhlci51Lmdwcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlUHRyVG9Eb3VibGUoc2NyYXRjaEdQUiwgdS5mcHIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNGUFIpKSB7
CisgICAgICAgICAgICBvdGhlci5zd2FwV2l0aCgqdGhpcywgb3RoZXJEYXRhRm9ybWF0LCBvdGhl
ck5ld0RhdGFGb3JtYXQsIG15RGF0YUZvcm1hdCwgbXlOZXdEYXRhRm9ybWF0LCBqaXQsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBqaXQuc3dhcCh1Lmdwciwgb3RoZXIudS5ncHIpOworICAgICAgICAKKyAg
ICAgICAgaWYgKFVOTElLRUxZKG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihteURhdGFGb3JtYXQs
IG15TmV3RGF0YUZvcm1hdCkpKSB7CisgICAgICAgICAgICBpZiAobXlEYXRhRm9ybWF0ID09IERh
dGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHUuZ3ByKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG15TmV3RGF0
YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBqaXQuemVyb0V4
dGVuZDMyVG9QdHIodS5ncHIsIHUuZ3ByKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKFVOTElLRUxZKG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihvdGhlckRhdGFGb3JtYXQsIG15
TmV3RGF0YUZvcm1hdCkpKSB7CisgICAgICAgICAgICBpZiAob3RoZXJEYXRhRm9ybWF0ID09IERh
dGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIGppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG90
aGVyTmV3RGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBq
aXQuemVyb0V4dGVuZDMyVG9QdHIob3RoZXIudS5ncHIsIG90aGVyLnUuZ3ByKTsKKyAgICAgICAg
fQorICAgIH0KK307CisKK3N0cnVjdCBTaHVmZmxlZFJlZ2lzdGVyIHsKKyAgICBHZW5lcmFsaXpl
ZFJlZ2lzdGVyIHJlZzsKKyAgICBTaHVmZmxlZFJlZ2lzdGVyKiBwcmV2aW91czsKKyAgICBib29s
IGhhc0Zyb207CisgICAgYm9vbCBoYXNUbzsKKyAgICBib29sIGhhbmRsZWQ7CisgICAgCisgICAg
U2h1ZmZsZWRSZWdpc3RlcigpIHsgfQorICAgIAorICAgIFNodWZmbGVkUmVnaXN0ZXIoR2VuZXJh
bGl6ZWRSZWdpc3RlciByZWcpCisgICAgICAgIDogcmVnKHJlZykKKyAgICAgICAgLCBwcmV2aW91
cygwKQorICAgICAgICAsIGhhc0Zyb20oZmFsc2UpCisgICAgICAgICwgaGFzVG8oZmFsc2UpCisg
ICAgICAgICwgaGFuZGxlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNF
bmRPZk5vbkN5Y2xpbmdQZXJtdXRhdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gaGFzVG8g
JiYgIWhhc0Zyb207CisgICAgfQorICAgIAorICAgIHZvaWQgaGFuZGxlTm9uQ3ljbGluZ1Blcm11
dGF0aW9uKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBjb25zdCBFbnRyeUxvY2F0aW9u
JiBlbnRyeSwgSklUQ29tcGlsZXImIGppdCwgRlBSUmVnJiBzY3JhdGNoRlBSKQorICAgIHsKKyAg
ICAgICAgU2h1ZmZsZWRSZWdpc3RlciogY3VyID0gdGhpczsKKyAgICAgICAgd2hpbGUgKGN1ci0+
cHJldmlvdXMpIHsKKyAgICAgICAgICAgIGN1ci0+cHJldmlvdXMtPnJlZy5tb3ZlVG8oY3VyLT5y
ZWcsIGN1ci0+cHJldmlvdXMtPnJlZy5wcmV2aW91c0RhdGFGb3JtYXQoY2hlY2spLCBjdXItPnJl
Zy5uZXh0RGF0YUZvcm1hdChlbnRyeSksIGppdCk7CisgICAgICAgICAgICBjdXItPmhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgaWYgKGN1ci0+cmVnLmlzRlBSKQorICAgICAgICAgICAgICAg
IHNjcmF0Y2hGUFIgPSBjdXItPnJlZy51LmZwcjsKKyAgICAgICAgICAgIGN1ciA9IGN1ci0+cHJl
dmlvdXM7CisgICAgICAgIH0KKyAgICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
aWYgKGN1ci0+cmVnLmlzRlBSKQorICAgICAgICAgICAgc2NyYXRjaEZQUiA9IGN1ci0+cmVnLnUu
ZnByOworICAgIH0KKyAgICAKKyAgICB2b2lkIGhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbihjb25z
dCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaywgY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnksIEpJ
VENvbXBpbGVyJiBqaXQsIEdQUlJlZyBzY3JhdGNoR1BSLCBGUFJSZWcgc2NyYXRjaEZQUikKKyAg
ICB7CisgICAgICAgIC8vIGZpcnN0IGRldGVybWluZSB0aGUgY3ljbGUgbGVuZ3RoCisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBjeWNsZUxlbmd0aCA9IDA7CisgICAgICAgIAorICAgICAgICBT
aHVmZmxlZFJlZ2lzdGVyKiBjdXIgPSB0aGlzOworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBu
ZXh0ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgQVNTRVJUKGN1cik7CisgICAgICAg
ICAgICBjeWNsZUxlbmd0aCsrOworICAgICAgICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG5leHQgPSBjdXI7CisgICAgICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOwor
ICAgICAgICB9IHdoaWxlIChjdXIgIT0gdGhpcyk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
Y3ljbGVMZW5ndGgpOworICAgICAgICBBU1NFUlQobmV4dC0+cHJldmlvdXMgPT0gY3VyKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIG5vdyBkZXRlcm1pbmUgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0
aGUgcGVybXV0YXRpb24sIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgLy8gbGVuZ3RoLgorICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChjeWNsZUxlbmd0aCkgeworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICByZWcuY29udmVydChyZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVn
Lm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJlZy5zd2FwV2l0aChwcmV2aW91
cy0+cmVnLCByZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0
KGVudHJ5KSwgcHJldmlvdXMtPnJlZy5wcmV2aW91c0RhdGFGb3JtYXQoY2hlY2spLCBwcmV2aW91
cy0+cmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyIHNjcmF0Y2g7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkocmVnLmlzRlBSICYmIG5leHQtPnJlZy5pc0ZQUikpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2NyYXRjaEZQUiA9PSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2ggPSBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgICAgIHJlZy5tb3ZlVG8oc2NyYXRjaCwgRGF0YUZvcm1hdERvdWJsZSwg
RGF0YUZvcm1hdEpTRG91YmxlLCBqaXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIo
c2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgICAgIHJlZy5tb3ZlVG8oc2NyYXRjaCwgRGF0
YUZvcm1hdERvdWJsZSwgRGF0YUZvcm1hdERvdWJsZSwgaml0KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHZW5lcmFs
aXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgcmVn
Lm1vdmVUbyhzY3JhdGNoLCByZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgbmV4dC0+cmVn
Lm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgY3VyID0gdGhpczsKKyAgICAgICAgICAgIHdoaWxlIChjdXItPnByZXZp
b3VzICE9IHRoaXMpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VyKTsKKyAgICAgICAgICAg
ICAgICBjdXItPnByZXZpb3VzLT5yZWcubW92ZVRvKGN1ci0+cmVnLCBjdXItPnByZXZpb3VzLT5y
ZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgY3VyLT5yZWcubmV4dERhdGFGb3JtYXQoZW50
cnkpLCBqaXQpOworICAgICAgICAgICAgICAgIGN1ciA9IGN1ci0+cHJldmlvdXM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShyZWcuaXNGUFIg
JiYgbmV4dC0+cmVnLmlzRlBSKSkgeworICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09
IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gubW92ZVRvKG5leHQt
PnJlZywgRGF0YUZvcm1hdEpTRG91YmxlLCBEYXRhRm9ybWF0RG91YmxlLCBqaXQpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4dC0+
cmVnLCBEYXRhRm9ybWF0RG91YmxlLCBEYXRhRm9ybWF0RG91YmxlLCBqaXQpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4dC0+cmVnLCBuZXh0
LT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkpLCBuZXh0LT5yZWcubmV4dERhdGFGb3JtYXQoZW50
cnkpLCBqaXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFNodWZmbGVkUmVnaXN0ZXIqIGxvb2t1cChTaHVmZmxlZFJlZ2lzdGVyKiBncHJz
LCBTaHVmZmxlZFJlZ2lzdGVyKiBmcHJzLCBHZW5lcmFsaXplZFJlZ2lzdGVyJiByZWcpCisgICAg
eworICAgICAgICBpZiAocmVnLmlzRlBSKQorICAgICAgICAgICAgcmV0dXJuIGZwcnMgKyBGUFJJ
bmZvOjp0b0luZGV4KHJlZy51LmZwcik7CisgICAgICAgIHJldHVybiBncHJzICsgR1BSSW5mbzo6
dG9JbmRleChyZWcudS5ncHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitU
JiBsb29rdXBGb3JSZWdpc3RlcihUKiBncHJzLCBUKiBmcHJzLCB1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICBpZiAoaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycykKKyAgICAgICAgcmV0dXJuIGdwcnNbaW5kZXhdOworICAgIHJldHVybiBmcHJzW2lu
ZGV4IC0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworfQorCisvLyBUaGlzIGlzIHdyaXR0
ZW4gaW4gYSB3YXkgdGhhdCBhbGxvd3MgZm9yIGEgSGFzaE1hcDxOb2RlSW5kZXgsIEdlbmVyYWxp
emVkUmVnaXN0ZXI+IHRvIGJlCisvLyBlYXNpbHkgc3Vic3RpdHV0ZWQsIGlmIGl0IGlzIGZvdW5k
IHRvIGJlIHdpc2UgdG8gZG8gc28uIFNvIGZhciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMKKy8v
IGluZGljYXRlIHRoYXQgdGhpcyBpcyBmYXN0ZXIsIGxpa2VseSBiZWNhdXNlIHRoZSBIYXNoTWFw
IHdvdWxkIGhhdmUgbmV2ZXIgZ3Jvd24gdmVyeSBiaWcKKy8vIGFuZCB3ZSB3b3VsZCB0aHVzIGJl
IHdhc3RpbmcgdGltZSBwZXJmb3JtaW5nIGNvbXBsZXggaGFzaGluZyBsb2dpYyB0aGF0LCB0aG91
Z2ggTygxKSBvbgorLy8gYXZlcmFnZSwgd291bGQgYmUgbGVzcyB0aGFuIHRoZSB+NyBsb29wIGl0
ZXJhdGlvbnMgdGhhdCB0aGUgZmluZCgpIG1ldGhvZCBiZWxvdyB3b3VsZCBkbworLy8gKHNpbmNl
IGl0J3MgdW5jb21tb24gdGhhdCB3ZSdkIGhhdmUgcmVnaXN0ZXIgYWxsb2NhdGVkIG1vcmUgdGhh
biA3IHJlZ2lzdGVycywgaW4gdGhlCisvLyBjdXJyZW50IHNjaGVtZSkuCitjbGFzcyBOb2RlVG9S
ZWdpc3Rlck1hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IFR1cGxlIHsKKyAgICAgICAgTm9kZUlu
ZGV4IGZpcnN0OworICAgICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyIHNlY29uZDsKKyAgICAgICAg
CisgICAgICAgIFR1cGxlKCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAg
ICB0eXBlZGVmIFR1cGxlKiBpdGVyYXRvcjsKKyAgICAKKyAgICBOb2RlVG9SZWdpc3Rlck1hcCgp
CisgICAgICAgIDogbV9vY2N1cGFuY3koMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KE5vZGVJbmRleCBmaXJzdCwgR2VuZXJhbGl6ZWRSZWdpc3RlciBzZWNvbmQpCisgICAgewor
ICAgICAgICBtX3BheWxvYWRbbV9vY2N1cGFuY3ldLmZpcnN0ID0gZmlyc3Q7CisgICAgICAgIG1f
cGF5bG9hZFttX29jY3VwYW5jeV0uc2Vjb25kID0gc2Vjb25kOworICAgICAgICBtX29jY3VwYW5j
eSsrOworICAgIH0KKyAgICAKKyAgICBUdXBsZSogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICBUdXBsZSogZmluZChOb2RlSW5kZXggZmlyc3QpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX29jY3VwYW5jeTsgaS0tID4gMDspIHsKKyAg
ICAgICAgICAgIGlmIChtX3BheWxvYWRbaV0uZmlyc3QgPT0gZmlyc3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fcGF5bG9hZCArIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9vY2N1cGFuY3kg
PSAwOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVHVwbGUgbV9wYXlsb2FkW0dQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIHVu
c2lnbmVkIG1fb2NjdXBhbmN5OworfTsKKwordm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVj
dWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25DaGVjayYgY2hlY2ssIGNv
bnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwg
Tm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVy
TWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKQogewogICAgIEFTU0VSVChjaGVjay5tX25vZGVJ
bmRleCA9PSBlbnRyeS5tX25vZGVJbmRleCk7CiAKQEAgLTEyNSwyMCArNDQ2LDg1IEBAIHZvaWQg
SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb04KICAgICAgICAgLy8gUmV2ZXJ0IHRo
ZSBhZGQuCiAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7
CiAgICAgfQorICAgIAorICAgIC8vIEZpcnN0LCB3ZSBuZWVkIGEgcmV2ZXJzZSBtYXBwaW5nIHRo
YXQgdGVsbHMgdXMsIGZvciBhIE5vZGVJbmRleCwgd2hpY2ggcmVnaXN0ZXIKKyAgICAvLyB0aGF0
IG5vZGUgaXMgaW4uCisgICAgCisgICAgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5jbGVhcigpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBj
aGVjay5tX2dwckluZm9baW5kZXhdLm5vZGVJbmRleDsKKyAgICAgICAgaWYgKG5vZGVJbmRleCAh
PSBOb05vZGUpCisgICAgICAgICAgICBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLnNldChub2RlSW5k
ZXgsIEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJbmZvOjp0b1JlZ2lzdGVyKGlu
ZGV4KSkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAg
IGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgY2hlY2tOb2RlVG9SZWdpc3Rl
ck1hcC5zZXQobm9kZUluZGV4LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoRlBSSW5m
bzo6dG9SZWdpc3RlcihpbmRleCkpKTsKKyAgICB9CisgICAgCisgICAgZW50cnlOb2RlVG9SZWdp
c3Rlck1hcC5jbGVhcigpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CisgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBlbnRyeS5tX2dwckluZm9baW5kZXhdLm5vZGVJbmRleDsKKyAgICAg
ICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICBlbnRyeU5vZGVUb1JlZ2lz
dGVyTWFwLnNldChub2RlSW5kZXgsIEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkg
eworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XS5u
b2RlSW5kZXg7CisgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAg
ZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5zZXQobm9kZUluZGV4LCBHZW5lcmFsaXplZFJlZ2lzdGVy
OjpjcmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gSG93IHRoaXMgd29ya3M6CisgICAgLy8gMSkgU3BpbGwgYW55IHZhbHVlcyB0aGF0IGFy
ZSBub3Qgc3BpbGxlZCBvbiBzcGVjdWxhdGl2ZSwgYnV0IGFyZSBzcGlsbGVkCisgICAgLy8gICAg
b24gbm9uLXNwZWN1bGF0aXZlLgorICAgIC8vIDIpIEZvciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQg
YXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzLCBwZXJmb3JtIGEKKyAgICAvLyAgICBzaHVm
ZmxpbmcuCisgICAgLy8gMykgRmlsbCBhbnkgdmFsdWVzIHRoYXQgd2VyZSBzcGlsbGVkIG9uIHNw
ZWN1bGF0aXZlLCBidXQgYXJlIG5vdCBzcGlsbGVkCisgICAgLy8gICAgb24gbm9uLXNwZWN1bGF0
aXZlLgorICAgIAorICAgIC8vIElmIHdlIGZpbmQgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQg
YXMgc2NyYXRjaCByZWdpc3RlcnMgYWxvbmcgdGhlIHdheSwKKyAgICAvLyBzYXZlIHRoZW0uCisg
ICAgCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEZQUlJlZyBz
Y3JhdGNoRlBSID0gSW52YWxpZEZQUlJlZzsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVUYWdNYXNr
UmVnaXN0ZXIgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBQYXJ0IDE6IHNwaWxsIGFueSB2YWx1ZXMg
dGhhdCBhcmUgbm90IHNwaWxsZWQgb24gc3BlY3VsYXRpdmUsIGJ1dCBhcmUKKyAgICAvLyAgICAg
ICAgIHNwaWxsZWQgb24gbm9uLXNwZWN1bGF0aXZlLgorICAgIAorICAgIC8vIFRoaXMgYWxzbyBz
ZXRzIHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgUGFydCAyIHdpbGwgbmVlZC4KKyAgICAK
KyAgICBTaHVmZmxlZFJlZ2lzdGVyIGdwcnNbR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwor
ICAgIFNodWZmbGVkUmVnaXN0ZXIgZnByc1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraW5kZXgpCisgICAgICAgIGdwcnNbaW5kZXhdID0gU2h1ZmZsZWRSZWdp
c3RlcihHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoR1BSSW5mbzo6dG9SZWdpc3Rlcihp
bmRleCkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkKKyAgICAgICAgZnByc1tpbmRleF0gPSBTaHVmZmxl
ZFJlZ2lzdGVyKEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUZQUihGUFJJbmZvOjp0b1JlZ2lz
dGVyKGluZGV4KSkpOwogCi0gICAgLy8gRklYTUU6IC0gVGhpcyBpcyBoaWRlb3VzbHkgaW5lZmZp
Y2llbnQhCi0gICAgLy8gV2hlcmUgYSB2YWx1ZSBpcyBsaXZlIGluIGEgcmVnaXN0ZXIgaW4gdGhl
IHNwZWN1bGF0aXZlIHBhdGgsIGFuZCBpcyByZXF1aXJlZCBpbiBhIHJlZ2lzdGVyCi0gICAgLy8g
b24gdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLCB3ZSBzaG91bGQgbm90IG5lZWQgdG8gYmUgc3Bp
bGxpbmcgaXQgYW5kIHJlbG9hZGluZyAod2UgbWF5Ci0gICAgLy8gbmVlZCB0byBzcGlsbCBhbnl3
YXksIGlmIHRoZSB2YWx1ZSBpcyBtYXJrZWQgYXMgc3BpbGxlZCBvbiB0aGUgbm9uLXNwZWN1bGF0
aXZlIHBhdGgpLgotICAgIC8vIFRoaXMgbWF5IGFsc28gYmUgc3BpbGxpbmcgdmFsdWVzIHRoYXQg
ZG9uJ3QgbmVlZCBzcGlsbGluZywgZS5nLiBhcmUgYWxyZWFkeSBzcGlsbGVkLAotICAgIC8vIGFy
ZSBjb25zdGFudHMsIG9yIGFyZSBhcmd1bWVudHMuCi0KLSAgICAvLyBTcGlsbCBhbGwgR1BScyBp
biB1c2UgYnkgdGhlIHNwZWN1bGF0aXZlIHBhdGguCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNrLm1fZ3BySW5mb1tpbmRleF0ubm9kZUluZGV4
OwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgaWYgKG5vZGVJbmRl
eCA9PSBOb05vZGUgfHwgY2hlY2subV9ncHJJbmZvW2luZGV4XS5pc1NwaWxsZWQpIHsKKyAgICAg
ICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGVUb1JlZ2lz
dGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZmlu
ZChub2RlSW5kZXgpOworICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gZW50cnlOb2RlVG9SZWdp
c3Rlck1hcC5lbmQoKSkgeworICAgICAgICAgICAgZ3Byc1tpbmRleF0uaGFzRnJvbSA9IHRydWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNodWZmbGVkUmVnaXN0ZXIqIG5leHQgPSBTaHVm
ZmxlZFJlZ2lzdGVyOjpsb29rdXAoZ3BycywgZnBycywgbWFwSXRlcmF0b3ItPnNlY29uZCk7Cisg
ICAgICAgICAgICBuZXh0LT5wcmV2aW91cyA9IGdwcnMgKyBpbmRleDsKKyAgICAgICAgICAgIG5l
eHQtPmhhc1RvID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtYXBJdGVy
YXRvci0+c2Vjb25kLmZpbmRJbkVudHJ5TG9jYXRpb24oZW50cnkpLmlzU3BpbGxlZCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgRGF0YUZv
cm1hdCBkYXRhRm9ybWF0ID0gY2hlY2subV9ncHJJbmZvW2luZGV4XS5mb3JtYXQ7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBncmFwaCgpW25vZGVJbmRleF0udmly
dHVhbFJlZ2lzdGVyKCk7CiAKQEAgLTE0NiwzNCArNTMyLDkxIEBAIHZvaWQgSklUQ29tcGlsZXI6
Omp1bXBGcm9tU3BlY3VsYXRpdmVUb04KICAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpCiAgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIEdQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKICAgICAgICAgc3RvcmVQdHIoR1BS
SW5mbzo6dG9SZWdpc3RlcihpbmRleCksIGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7Cisg
ICAgICAgIAorICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCk7
CisgICAgfQorICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAg
ICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcjsKKyAgICAgICAgbmVl
ZFRvUmVzdG9yZVRhZ01hc2tSZWdpc3RlciA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gU3BpbGwg
YWxsIEZQUnMgaW4gdXNlIGJ5IHRoZSBzcGVjdWxhdGl2ZSBwYXRoLgogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4
KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBjaGVjay5tX2ZwckluZm9baW5kZXhd
OwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGNoZWNrLm1fZnBySW5mb1tpbmRleF0ubm9kZUluZGV4OworICAgICAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSB8fCBjaGVjay5tX2ZwckluZm9baW5kZXhdLmlzU3BpbGxlZCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVy
YXRvciBtYXBJdGVyYXRvciA9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgp
OworICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5lbmQo
KSkgeworICAgICAgICAgICAgZnByc1tpbmRleF0uaGFzRnJvbSA9IHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFNodWZmbGVkUmVnaXN0ZXIqIG5leHQgPSBTaHVmZmxlZFJlZ2lzdGVy
Ojpsb29rdXAoZ3BycywgZnBycywgbWFwSXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICBu
ZXh0LT5wcmV2aW91cyA9IGZwcnMgKyBpbmRleDsKKyAgICAgICAgICAgIG5leHQtPmhhc1RvID0g
dHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFtYXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJbkVudHJ5
TG9jYXRpb24oZW50cnkpLmlzU3BpbGxlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBncmFw
aCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCk7CiAKLSAgICAgICAgbW92ZURvdWJsZVRv
UHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
IHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSk7CisgICAgICAgIG1vdmVEb3VibGVUb1B0cihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBhZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAKKyAgICAgICAgc2NyYXRjaEZQUiA9IEZQ
UkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBQYXJ0IDI6IEZv
ciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQgYXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzLAor
ICAgIC8vICAgICAgICAgcGVyZm9ybSBhIHNodWZmbGluZy4KKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CisgICAgICAgIFNodWZmbGVkUmVnaXN0
ZXImIHJlZyA9IGxvb2t1cEZvclJlZ2lzdGVyKGdwcnMsIGZwcnMsIGluZGV4KTsKKyAgICAgICAg
aWYgKCFyZWcuaXNFbmRPZk5vbkN5Y2xpbmdQZXJtdXRhdGlvbigpIHx8IHJlZy5oYW5kbGVkIHx8
ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNUbykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIHJlZy5oYW5kbGVOb25DeWNsaW5nUGVybXV0YXRpb24oY2hlY2ssIGVu
dHJ5LCAqdGhpcywgc2NyYXRjaEZQUik7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgU2h1ZmZsZWRSZWdpc3RlciYg
cmVnID0gbG9va3VwRm9yUmVnaXN0ZXIoZ3BycywgZnBycywgaW5kZXgpOworICAgICAgICBpZiAo
cmVnLmhhbmRsZWQgfHwgKCFyZWcuaGFzRnJvbSAmJiAhcmVnLmhhc1RvKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgcmVnLmhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlv
bihjaGVjaywgZW50cnksICp0aGlzLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICB9CisK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgKytpbmRleCkgeworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyJiByZWcgPSBsb29rdXBGb3JS
ZWdpc3RlcihncHJzLCBmcHJzLCBpbmRleCk7CisgICAgICAgIEFTU0VSVChyZWcuaGFuZGxlZCB8
fCAoIXJlZy5oYXNGcm9tICYmICFyZWcuaGFzVG8pKTsKICAgICB9CisjZW5kaWYKKworICAgIC8v
IFBhcnQgMzogRmlsbCBhbnkgdmFsdWVzIHRoYXQgd2VyZSBzcGlsbGVkIG9uIHNwZWN1bGF0aXZl
LCBidXQgYXJlIG5vdCBzcGlsbGVkCisgICAgLy8gICAgICAgICBvbiBub24tc3BlY3VsYXRpdmUu
CiAKLSAgICAvLyBGaWxsIGFsbCBGUFJzIGluIHVzZSBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIHBh
dGguCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGVu
dHJ5Lm1fZnBySW5mb1tpbmRleF07Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XS5ub2Rl
SW5kZXg7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlIHx8IGVudHJ5Lm1fZnBySW5m
b1tpbmRleF0uaXNTcGlsbGVkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBOb2RlVG9SZWdpc3Rlck1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBjaGVja05vZGVU
b1JlZ2lzdGVyTWFwLmZpbmQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG1hcEl0ZXJhdG9yICE9
IGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuZW5kKCkKKyAgICAgICAgICAgICYmICFtYXBJdGVyYXRv
ci0+c2Vjb25kLmZpbmRJblNwZWN1bGF0aW9uQ2hlY2soY2hlY2spLmlzU3BpbGxlZCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGZpbGxOdW1lcmljVG9Eb3VibGUobm9kZUluZGV4
LCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIH0KIAot
ICAgIC8vIEZpbGwgYWxsIEdQUnMgaW4gdXNlIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4K
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpbmRleCkgewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnku
bV9ncHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9O
b2RlKQorICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBlbnRyeS5tX2dwckluZm9b
aW5kZXhdLmlzU3BpbGxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIE5vZGVU
b1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGNoZWNrTm9kZVRvUmVnaXN0ZXJN
YXAuZmluZChub2RlSW5kZXgpOworICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gY2hlY2tOb2Rl
VG9SZWdpc3Rlck1hcC5lbmQoKQorICAgICAgICAgICAgJiYgIW1hcEl0ZXJhdG9yLT5zZWNvbmQu
ZmluZEluU3BlY3VsYXRpb25DaGVjayhjaGVjaykuaXNTcGlsbGVkKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gZW50cnkubV9ncHJJbmZv
W2luZGV4XS5mb3JtYXQ7CkBAIC0xODUsNiArNjI4LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6anVt
cEZyb21TcGVjdWxhdGl2ZVRvTgogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBzdWJ0eXBlcyBv
ZiBEYXRhRm9ybWF0SlMsIHNob3VsZCBqaXRBc3NlcnQgdGhlIHN1YnR5cGU/CiAgICAgICAgIH0K
ICAgICB9CisgICAgCisgICAgaWYgKG5lZWRUb1Jlc3RvcmVUYWdNYXNrUmVnaXN0ZXIpCisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihUYWdNYXNrKSks
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKICAgICAvLyBKdW1wIGludG8gdGhlIG5vbi1z
cGVjdWxhdGl2ZSBwYXRoLgogICAgIGp1bXAoZW50cnkubV9lbnRyeSk7CkBAIC0xOTcsNyArNjQz
LDEwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBjaGVja3NFbmQgPSBzcGVjdWxhdGl2ZS5zcGVj
dWxhdGlvbkNoZWNrcygpLmVuZCgpOwogICAgIE5vblNwZWN1bGF0aXZlSklUOjpFbnRyeUxvY2F0
aW9uVmVjdG9yOjpJdGVyYXRvciBlbnRyaWVzSXRlciA9IG5vblNwZWN1bGF0aXZlLmVudHJ5TG9j
YXRpb25zKCkuYmVnaW4oKTsKICAgICBOb25TcGVjdWxhdGl2ZUpJVDo6RW50cnlMb2NhdGlvblZl
Y3Rvcjo6SXRlcmF0b3IgZW50cmllc0VuZCA9IG5vblNwZWN1bGF0aXZlLmVudHJ5TG9jYXRpb25z
KCkuZW5kKCk7Ci0KKyAgICAKKyAgICBOb2RlVG9SZWdpc3Rlck1hcCBjaGVja05vZGVUb1JlZ2lz
dGVyTWFwOworICAgIE5vZGVUb1JlZ2lzdGVyTWFwIGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXA7Cisg
ICAgCiAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzcGVjdWxhdGlvbiBjaGVja3MuCiAgICAgd2hp
bGUgKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kKSB7CiAgICAgICAgIC8vIEZvciBldmVyeSBiYWls
IG91dCBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLCB3ZSBtdXN0IGhhdmUgcHJvdmlkZWQgYW4g
ZW50cnkgcG9pbnQKQEAgLTIxMiw3ICs2NjEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rU3Bl
Y3VsYXRpb25DaGVja3MoCiAgICAgICAgICAgICAvLyBQbGFudCBjb2RlIHRvIGxpbmsgdGhpcyBz
cGVjdWxhdGlvbiBmYWlsdXJlLgogICAgICAgICAgICAgY29uc3QgU3BlY3VsYXRpb25DaGVjayYg
Y2hlY2sgPSAqY2hlY2tzSXRlcjsKICAgICAgICAgICAgIGNvbnN0IEVudHJ5TG9jYXRpb24mIGVu
dHJ5ID0gKmVudHJpZXNJdGVyOwotICAgICAgICAgICAganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9u
U3BlY3VsYXRpdmUoY2hlY2ssIGVudHJ5LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5
KGNoZWNrLm1fcmVjb3ZlcnlJbmRleCkpOworICAgICAgICAgICAganVtcEZyb21TcGVjdWxhdGl2
ZVRvTm9uU3BlY3VsYXRpdmUoY2hlY2ssIGVudHJ5LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJl
Y292ZXJ5KGNoZWNrLm1fcmVjb3ZlcnlJbmRleCksIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIGVu
dHJ5Tm9kZVRvUmVnaXN0ZXJNYXApOwogICAgICAgICAgICAgICsrY2hlY2tzSXRlcjsKICAgICAg
ICAgfSB3aGlsZSAoY2hlY2tzSXRlciAhPSBjaGVja3NFbmQgJiYgY2hlY2tzSXRlci0+bV9ub2Rl
SW5kZXggPT0gZW50cmllc0l0ZXItPm1fbm9kZUluZGV4KTsKICAgICAgICAgICsrZW50cmllc0l0
ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShy
ZXZpc2lvbiA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBKU0dsb2JhbERhdGE7
CiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKK2NsYXNzIE5vZGVU
b1JlZ2lzdGVyTWFwOwogY2xhc3MgTm9uU3BlY3VsYXRpdmVKSVQ7CiBjbGFzcyBTcGVjdWxhdGl2
ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zlcnk7CkBAIC0yOTAsNyArMjkxLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpbGxOdW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQ
UlJlZyB0ZW1wb3JhcnkpOwogICAgIHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwg
R1BSUmVnKTsKICAgICB2b2lkIGZpbGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKLSAgICB2b2lk
IGp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hl
Y2smLCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOworICAgIHZv
aWQganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25D
aGVjayYsIGNvbnN0IEVudHJ5TG9jYXRpb24mLCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgTm9kZVRv
UmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBl
bnRyeU5vZGVUb1JlZ2lzdGVyTWFwKTsKICAgICB2b2lkIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhT
cGVjdWxhdGl2ZUpJVCYsIE5vblNwZWN1bGF0aXZlSklUJik7CiAKICAgICAvLyBUaGUgZ2xvYmFs
RGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgRW50cnlM
b2NhdGlvbjo6RW50cnlMb2NhdGlvbihNYWNyb0Fzc2VtYgogICAgICAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAg
ICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4
KCk7CiAgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5mb3JtYXQgPSBpbmZvLnJl
Z2lzdGVyRm9ybWF0KCk7CisgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5pc1Nw
aWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9O
b2RlOwogICAgIH0KQEAgLTUwLDkgKzUxLDExIEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRp
b24oTWFjcm9Bc3NlbWIKICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpIHsKICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gIGppdC0+bV9n
ZW5lcmF0aW9uSW5mb1tpdGVyLm5hbWUoKV07CiAgICAgICAgICAgICBBU1NFUlQoaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwotICAgICAgICAgICAgbV9mcHJJbmZv
W2l0ZXIuaW5kZXgoKV0gPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgbV9mcHJJbmZv
W2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAg
IG1fZnBySW5mb1tpdGVyLmluZGV4KCldLmZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAg
ICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9m
cHJJbmZvW2l0ZXIuaW5kZXgoKV0gPSBOb05vZGU7CisgICAgICAgICAgICBtX2ZwckluZm9baXRl
ci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biA5MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAgc3RydWN0IEVudHJ5TG9jYXRp
b24gewogICAgIHN0cnVjdCBSZWdpc3RlckluZm8gewogICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4OwogICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgYm9vbCBpc1NwaWxsZWQ7
CiAgICAgfTsKICAgICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzXTsKLSAgICBOb2RlSW5kZXggbV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzXTsKKyAgICBSZWdpc3RlckluZm8gbV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzXTsKIH07CiAKIC8vID09PSBOb25TcGVjdWxhdGl2ZUpJVCA9PT0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
MTQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgU3BlY3VsYXRpb25DaGVjazo6U3Bl
Y3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAg
aml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAgIG1fZ3BySW5m
b1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CiAgICAgICAgICAg
ICBtX2dwckluZm9baXRlci5pbmRleCgpXS5mb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7
CisgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNw
aWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KQEAg
LTE1Nyw5ICsxNTgsMTEgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNy
bwogICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcikgewog
ICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZv
W2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgp
XSA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgp
XS5ub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgbV9mcHJJbmZvW2l0
ZXIuaW5kZXgoKV0uZm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAgICAgIG1fZnBy
SW5mb1tpdGVyLmluZGV4KCldLmlzU3BpbGxlZCA9IGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0Tm9uZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZwckluZm9baXRlci5p
bmRleCgpXSA9IE5vTm9kZTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLm5v
ZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDkxNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NCw5ICs4NCwxMCBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjayB7CiAgICAgc3RydWN0IFJl
Z2lzdGVySW5mbyB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CiAgICAgICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgICAgICBib29sIGlzU3BpbGxlZDsKICAgICB9OwogICAgIFJlZ2lz
dGVySW5mbyBtX2dwckluZm9bR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwotICAgIE5vZGVJ
bmRleCBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIFJlZ2lzdGVy
SW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYg
U2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVj
dG9yOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101950</attachid>
            <date>2011-07-25 17:32:00 -0700</date>
            <delta_ts>2011-07-26 17:55:46 -0700</delta_ts>
            <desc>the patch (improved assertion checking)</desc>
            <filename>fasterspecfail_patch_4.diff</filename>
            <type>text/plain</type>
            <size>33005</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE3MjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAK
KzIwMTEtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5NjkKKyAgICAgICAgREZH
IEpJVCBnZW5lcmF0ZXMgaW5lZmZpY2llbnQgY29kZSBmb3Igc3BlY3VsYXRpb24gZmFpbHVyZXMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGltcGxlbWVudHMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlIHN0cmF0ZWd5IHdoZXJlICgx
KSB2YWx1ZXMgc3BpbGxlZCBvbgorICAgICAgICBub24tc3BlY3VsYXRpdmUgYnV0IG5vdCBzcGls
bGVkIG9uIHNwZWN1bGF0aXZlIGFyZSBzcGlsbGVkLCAoMikgdmFsdWVzIHRoYXQKKyAgICAgICAg
YXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzIGFyZSByZWFycmFuZ2VkIHdpdGhvdXQgZXZl
ciB0b3VjaGluZyBtZW1vcnksCisgICAgICAgIGFuZCAoMykgdmFsdWVzIHNwaWxsZWQgb24gc3Bl
Y3VsYXRpdmUgYnV0IG5vdCBzcGlsbGVkIG9uIG5vbi1zcGVjdWxhdGl2ZSBhcmUKKyAgICAgICAg
ZmlsbGVkLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlZ2lzdGVyIHNodWZmbGluZyBpcyB0aGUg
bW9zdCBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoaXMgcGF0Y2guICBJdAorICAgICAgICBjb25zdHJ1
Y3RzIGEgcGVybXV0YXRpb24gZ3JhcGggZm9yIHJlZ2lzdGVycy4gIEVhY2ggbm9kZSByZXByZXNl
bnRzIGEKKyAgICAgICAgcmVnaXN0ZXIsIGFuZCBlYWNoIGRpcmVjdGVkIGVkZ2UgY29ycmVzcG9u
ZHMgdG8gdGhlIHJlZ2lzdGVyJ3MgdmFsdWUgaGF2aW5nCisgICAgICAgIHRvIGJlIG1vdmVkIHRv
IGEgZGlmZmVyZW50IHJlZ2lzdGVyIGFzIHBhcnQgb2YgdGhlIHNodWZmbGluZy4gIFRoaXMgaXMg
YQorICAgICAgICBkaXJlY3RlZCBncmFwaCB3aGVyZSBlYWNoIG5vZGUgbWF5IG9ubHkgaGF2ZSAw
IG9yIDEgaW5jb21pbmcgZWRnZXMsIGFuZAorICAgICAgICAwIG9yIDEgb3V0Z29pbmcgZWRnZXMu
ICBUaGUgYWxnb3JpdGhtIHRoZW4gZmlyc3QgZmluZHMgbWF4aW1hbCBub24tY3ljbGljCisgICAg
ICAgIHN1YmdyYXBocyB3aGVyZSBhbGwgbm9kZXMgaW4gdGhlIHN1YmdyYXBoIGFyZSByZWFjaGFi
bGUgZnJvbSBhIHN0YXJ0IG5vZGUuCisgICAgICAgIFN1Y2ggc3ViZ3JhcGhzIGFsd2F5cyByZXNl
bWJsZSBsaW5rZWQgbGlzdHMsIGFuZCBjb3JyZXNwb25kIHRvIHNpbXBseQorICAgICAgICBtb3Zp
bmcgdGhlIHZhbHVlIGluIHRoZSBzZWNvbmQtdG8tbGFzdCByZWdpc3RlciBpbnRvIHRoZSBsYXN0
IHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgdGhlbiBtb3ZpbmcgdGhlIHZhbHVlIGluIHRoZSB0aGly
ZC10by1sYXN0IHJlZ2lzdGVyIGludG8gdGhlIHNlY29uZC10by1sYXN0CisgICAgICAgIHJlZ2lz
dGVyLCBhbmQgc28gb24uICBPbmNlIHRoZXNlIHN1YmdyYXBocyBhcmUgdGFrZW4gY2FyZSBvZiwg
dGhlIHJlbWFpbmluZworICAgICAgICBzdWJncmFwaHMgYXJlIGN5Y2xlcywgYW5kIGFyZSBoYW5k
bGVkIHVzaW5nIGVpdGhlciAoYSkgY29udmVyc2lvbiBvciBuby1vcAorICAgICAgICBpZiB0aGUg
Y3ljbGUgaW52b2x2ZXMgb25lIG5vZGUsIChiKSBzd2FwIGlmIGl0IGludm9sdmVzIHR3byBub2Rl
cywgb3IgKGMpCisgICAgICAgIGEgY3ljbGljIHNodWZmbGUgaW52b2x2aW5nIGEgc2NyYXRjaCBy
ZWdpc3RlciBpZiB0aGVyZSBhcmUgdGhyZWUgb3IgbW9yZQorICAgICAgICBub2Rlcy4KKyAgICAg
ICAgCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6bmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OkdlbmVyYWxp
emVkUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OmNy
ZWF0ZUdQUik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRl
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpkdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5TcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpmaW5kSW5FbnRy
eUxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjpwcmV2
aW91c0RhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6
Om5leHREYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVy
Ojpjb252ZXJ0KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmFsaXplZFJlZ2lzdGVyOjptb3Zl
VG8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYWxpemVkUmVnaXN0ZXI6OnN3YXBXaXRoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpTaHVmZmxlZFJlZ2lzdGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjppc0VuZE9mTm9uQ3ljbGluZ1Bl
cm11dGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTaHVmZmxlZFJlZ2lzdGVyOjpoYW5kbGVO
b25DeWNsaW5nUGVybXV0YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNodWZmbGVkUmVnaXN0
ZXI6OmhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U2h1ZmZs
ZWRSZWdpc3Rlcjo6bG9va3VwKToKKyAgICAgICAgKEpTQzo6REZHOjpsb29rdXBGb3JSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6OlR1cGxlOjpUdXBsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0ZXJNYXA6Ok5vZGVUb1JlZ2lzdGVyTWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6c2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlVG9SZWdpc3Rlck1hcDo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlVG9SZWdpc3Rlck1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVRvUmVnaXN0
ZXJNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21T
cGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RW50cnlMb2NhdGlvbjo6RW50cnlMb2NhdGlvbik6CisgICAgICAgICogZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKwogMjAxMS0wNy0yNSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjkxNjg2LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTE3MjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDYgKzQ5LDM4IEBAIGVudW0gRGF0YUZvcm1hdCB7CiAgICAgRGF0YUZvcm1hdEpTQ2VsbCA9IERh
dGFGb3JtYXRKUyB8IERhdGFGb3JtYXRDZWxsLAogfTsKIAoraW5saW5lIGJvb2wgbmVlZERhdGFG
b3JtYXRDb252ZXJzaW9uKERhdGFGb3JtYXQgZnJvbSwgRGF0YUZvcm1hdCB0bykKK3sKKyAgICBB
U1NFUlQoZnJvbSAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgQVNTRVJUKHRvICE9IERhdGFGb3Jt
YXROb25lKTsKKyAgICBzd2l0Y2ggKGZyb20pIHsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2Vy
OgorICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAgcmV0dXJuIHRvICE9IGZyb207
CisgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICBj
YXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Cisg
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgICAgICBzd2l0Y2ggKHRvKSB7CisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgor
ICAgICAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRl
Z2VyOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0SlNDZWxsOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIC8vID09PSBHZW5lcmF0aW9uSW5mbyA9PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlz
IHVzZWQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGEgbGl2ZSB2YWx1ZXMgZHVyaW5n
IGNvZGUgZ2VuZXJhdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5MTcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDM0
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXggbm9kCiAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwogfQogCi12b2lkIEpJ
VENvbXBpbGVyOjpqdW1wRnJvbVNwZWN1bGF0aXZlVG9Ob25TcGVjdWxhdGl2ZShjb25zdCBTcGVj
dWxhdGlvbkNoZWNrJiBjaGVjaywgY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnksIFNwZWN1bGF0
aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQorY2xhc3MgR2VuZXJhbGl6ZWRSZWdpc3RlciB7CitwdWJs
aWM6CisgICAgR2VuZXJhbGl6ZWRSZWdpc3RlcigpIHsgfQorICAgIAorICAgIHN0YXRpYyBHZW5l
cmFsaXplZFJlZ2lzdGVyIGNyZWF0ZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgR2Vu
ZXJhbGl6ZWRSZWdpc3RlciByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2lzRlBSID0gZmFsc2U7
CisgICAgICAgIHJlc3VsdC5tX3JlZ2lzdGVyLmdwciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEdlbmVyYWxpemVkUmVnaXN0ZXIgY3JlYXRl
RlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1faXNGUFIgPSB0cnVlOworICAgICAgICByZXN1bHQubV9yZWdp
c3Rlci5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNGUFI7CisgICAg
fQorICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X2lzRlBSKTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIuZ3ByOworICAgIH0KKyAgICAKKyAg
ICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRlBSKTsKKyAg
ICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIuZnByOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTcGVj
dWxhdGlvbkNoZWNrOjpSZWdpc3RlckluZm8mIGZpbmRJblNwZWN1bGF0aW9uQ2hlY2soY29uc3Qg
U3BlY3VsYXRpb25DaGVjayYgY2hlY2spCisgICAgeworICAgICAgICBpZiAoaXNGUFIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBjaGVjay5tX2ZwckluZm9bRlBSSW5mbzo6dG9JbmRleChmcHIoKSld
OworICAgICAgICByZXR1cm4gY2hlY2subV9ncHJJbmZvW0dQUkluZm86OnRvSW5kZXgoZ3ByKCkp
XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgRW50cnlMb2NhdGlvbjo6UmVnaXN0ZXJJbmZvJiBm
aW5kSW5FbnRyeUxvY2F0aW9uKGNvbnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5KQorICAgIHsKKyAg
ICAgICAgaWYgKGlzRlBSKCkpCisgICAgICAgICAgICByZXR1cm4gZW50cnkubV9mcHJJbmZvW0ZQ
UkluZm86OnRvSW5kZXgoZnByKCkpXTsKKyAgICAgICAgcmV0dXJuIGVudHJ5Lm1fZ3BySW5mb1tH
UFJJbmZvOjp0b0luZGV4KGdwcigpKV07CisgICAgfQorICAgIAorICAgIERhdGFGb3JtYXQgcHJl
dmlvdXNEYXRhRm9ybWF0KGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZpbmRJblNwZWN1bGF0aW9uQ2hlY2soY2hlY2spLmZvcm1hdDsKKyAgICB9
CisgICAgCisgICAgRGF0YUZvcm1hdCBuZXh0RGF0YUZvcm1hdChjb25zdCBFbnRyeUxvY2F0aW9u
JiBlbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kSW5FbnRyeUxvY2F0aW9uKGVudHJ5
KS5mb3JtYXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydChEYXRhRm9ybWF0IG9sZERh
dGFGb3JtYXQsIERhdGFGb3JtYXQgbmV3RGF0YUZvcm1hdCwgSklUQ29tcGlsZXImIGppdCkKKyAg
ICB7CisgICAgICAgIGlmIChMSUtFTFkoIW5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihvbGREYXRh
Rm9ybWF0LCBuZXdEYXRhRm9ybWF0KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAob2xkRGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAg
ICAgICAgaml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
bmV3RGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CisgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1B0cihncHIoKSwgZ3ByKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHZvaWQgbW92ZVRvKEdlbmVyYWxpemVkUmVnaXN0ZXImIG90aGVyLCBEYXRhRm9ybWF0IG15
RGF0YUZvcm1hdCwgRGF0YUZvcm1hdCBvdGhlckRhdGFGb3JtYXQsIEpJVENvbXBpbGVyJiBqaXQp
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoaXNGUFIoKSkpIHsKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShvdGhlci5pc0ZQUigpKSkgeworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91
YmxlKGZwcigpLCBvdGhlci5mcHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBqaXQubW92ZURvdWJsZVRvUHRyKGZw
cigpLCBvdGhlci5ncHIoKSk7CisgICAgICAgICAgICBqaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIuZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNGUFIoKSkpIHsK
KyAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBn
cHIoKSk7CisgICAgICAgICAgICBqaXQubW92ZVB0clRvRG91YmxlKGdwcigpLCBvdGhlci5mcHIo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChMSUtFTFkoIW5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihteURhdGFGb3JtYXQsIG90aGVyRGF0
YUZvcm1hdCkpKSB7CisgICAgICAgICAgICBqaXQubW92ZShncHIoKSwgb3RoZXIuZ3ByKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobXlE
YXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CisgICAgICAgICAgICBqaXQub3JQdHIo
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIuZ3ByKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQob3Ro
ZXJEYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKKyAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvUHRyKGdwcigpLCBvdGhlci5ncHIoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3dh
cFdpdGgoR2VuZXJhbGl6ZWRSZWdpc3RlciYgb3RoZXIsIERhdGFGb3JtYXQgbXlEYXRhRm9ybWF0
LCBEYXRhRm9ybWF0IG15TmV3RGF0YUZvcm1hdCwgRGF0YUZvcm1hdCBvdGhlckRhdGFGb3JtYXQs
IERhdGFGb3JtYXQgb3RoZXJOZXdEYXRhRm9ybWF0LCBKSVRDb21waWxlciYgaml0LCBHUFJSZWcg
c2NyYXRjaEdQUiwgRlBSUmVnIHNjcmF0Y2hGUFIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtF
TFkoaXNGUFIoKSkpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShvdGhlci5pc0ZQUigpKSkg
eworICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09IEludmFsaWRGUFJSZWcpCisgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG9QdHIoZnByKCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVEb3VibGUo
ZnByKCksIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlKG90aGVy
LmZwcigpLCBmcHIoKSk7CisgICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hGUFIgPT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmVQdHJUb0RvdWJsZShzY3JhdGNo
R1BSLCBvdGhlci5mcHIoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZURvdWJsZShzY3JhdGNoRlBSLCBvdGhlci5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBq
aXQubW92ZShvdGhlci5ncHIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGppdC5tb3ZlRG91YmxlVG9QdHIoZnByKCksIG90aGVyLmdwcigpKTsKKyAgICAgICAgICAg
IGppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvdGhlci5ncHIoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5tb3ZlUHRyVG9Eb3Vi
bGUoc2NyYXRjaEdQUiwgZnByKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNGUFIoKSkpIHsKKyAgICAgICAg
ICAgIG90aGVyLnN3YXBXaXRoKCp0aGlzLCBvdGhlckRhdGFGb3JtYXQsIG90aGVyTmV3RGF0YUZv
cm1hdCwgbXlEYXRhRm9ybWF0LCBteU5ld0RhdGFGb3JtYXQsIGppdCwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGppdC5zd2FwKGdwcigpLCBvdGhlci5ncHIoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
VU5MSUtFTFkobmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKG15RGF0YUZvcm1hdCwgbXlOZXdEYXRh
Rm9ybWF0KSkpIHsKKyAgICAgICAgICAgIGlmIChteURhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dGVnZXIpCisgICAgICAgICAgICAgICAgaml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgZ3ByKCkpOworICAgICAgICAgICAgZWxzZSBpZiAobXlOZXdEYXRhRm9ybWF0ID09
IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cihncHIoKSwgZ3ByKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtF
TFkobmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKG90aGVyRGF0YUZvcm1hdCwgbXlOZXdEYXRhRm9y
bWF0KSkpIHsKKyAgICAgICAgICAgIGlmIChvdGhlckRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dGVnZXIpCisgICAgICAgICAgICAgICAgaml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlciwgb3RoZXIuZ3ByKCkpOworICAgICAgICAgICAgZWxzZSBpZiAob3RoZXJOZXdEYXRh
Rm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1B0cihvdGhlci5ncHIoKSwgb3RoZXIuZ3ByKCkpOworICAgICAgICB9CisgICAgfQor
Citwcml2YXRlOgorICAgIGJvb2wgbV9pc0ZQUjsKKyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJl
ZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgfSBtX3JlZ2lzdGVyOworfTsKKworc3Ry
dWN0IFNodWZmbGVkUmVnaXN0ZXIgeworICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIgcmVnOworICAg
IFNodWZmbGVkUmVnaXN0ZXIqIHByZXZpb3VzOworICAgIGJvb2wgaGFzRnJvbTsKKyAgICBib29s
IGhhc1RvOworICAgIGJvb2wgaGFuZGxlZDsKKyAgICAKKyAgICBTaHVmZmxlZFJlZ2lzdGVyKCkg
eyB9CisgICAgCisgICAgU2h1ZmZsZWRSZWdpc3RlcihHZW5lcmFsaXplZFJlZ2lzdGVyIHJlZykK
KyAgICAgICAgOiByZWcocmVnKQorICAgICAgICAsIHByZXZpb3VzKDApCisgICAgICAgICwgaGFz
RnJvbShmYWxzZSkKKyAgICAgICAgLCBoYXNUbyhmYWxzZSkKKyAgICAgICAgLCBoYW5kbGVkKGZh
bHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VuZE9mTm9uQ3ljbGluZ1Blcm11
dGF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNUbyAmJiAhaGFzRnJvbTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBoYW5kbGVOb25DeWNsaW5nUGVybXV0YXRpb24oY29uc3QgU3BlY3Vs
YXRpb25DaGVjayYgY2hlY2ssIGNvbnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5LCBKSVRDb21waWxl
ciYgaml0LCBGUFJSZWcmIHNjcmF0Y2hGUFIpCisgICAgeworICAgICAgICBTaHVmZmxlZFJlZ2lz
dGVyKiBjdXIgPSB0aGlzOworICAgICAgICB3aGlsZSAoY3VyLT5wcmV2aW91cykgeworICAgICAg
ICAgICAgY3VyLT5wcmV2aW91cy0+cmVnLm1vdmVUbyhjdXItPnJlZywgY3VyLT5wcmV2aW91cy0+
cmVnLnByZXZpb3VzRGF0YUZvcm1hdChjaGVjayksIGN1ci0+cmVnLm5leHREYXRhRm9ybWF0KGVu
dHJ5KSwgaml0KTsKKyAgICAgICAgICAgIGN1ci0+aGFuZGxlZCA9IHRydWU7CisgICAgICAgICAg
ICBpZiAoY3VyLT5yZWcuaXNGUFIoKSkKKyAgICAgICAgICAgICAgICBzY3JhdGNoRlBSID0gY3Vy
LT5yZWcuZnByKCk7CisgICAgICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOworICAgICAgICB9
CisgICAgICAgIGN1ci0+aGFuZGxlZCA9IHRydWU7CisgICAgICAgIGlmIChjdXItPnJlZy5pc0ZQ
UigpKQorICAgICAgICAgICAgc2NyYXRjaEZQUiA9IGN1ci0+cmVnLmZwcigpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGhhbmRsZUN5Y2xpbmdQZXJtdXRhdGlvbihjb25zdCBTcGVjdWxhdGlvbkNo
ZWNrJiBjaGVjaywgY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnksIEpJVENvbXBpbGVyJiBqaXQs
IEdQUlJlZyBzY3JhdGNoR1BSLCBGUFJSZWcgc2NyYXRjaEZQUikKKyAgICB7CisgICAgICAgIC8v
IGZpcnN0IGRldGVybWluZSB0aGUgY3ljbGUgbGVuZ3RoCisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBjeWNsZUxlbmd0aCA9IDA7CisgICAgICAgIAorICAgICAgICBTaHVmZmxlZFJlZ2lzdGVy
KiBjdXIgPSB0aGlzOworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBuZXh0ID0gMDsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgQVNTRVJUKGN1cik7CisgICAgICAgICAgICBjeWNsZUxlbmd0
aCsrOworICAgICAgICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG5leHQg
PSBjdXI7CisgICAgICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOworICAgICAgICB9IHdoaWxl
IChjdXIgIT0gdGhpcyk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoY3ljbGVMZW5ndGgpOwor
ICAgICAgICBBU1NFUlQobmV4dC0+cHJldmlvdXMgPT0gY3VyKTsKKyAgICAgICAgCisgICAgICAg
IC8vIG5vdyBkZXRlcm1pbmUgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGUgcGVybXV0YXRpb24s
IGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgLy8gbGVuZ3RoLgorICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChjeWNsZUxlbmd0aCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZWcu
Y29udmVydChyZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0
KGVudHJ5KSwgaml0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgIHJlZy5zd2FwV2l0aChwcmV2aW91cy0+cmVnLCByZWcucHJl
dmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgcHJldmlv
dXMtPnJlZy5wcmV2aW91c0RhdGFGb3JtYXQoY2hlY2spLCBwcmV2aW91cy0+cmVnLm5leHREYXRh
Rm9ybWF0KGVudHJ5KSwgaml0LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBHZW5l
cmFsaXplZFJlZ2lzdGVyIHNjcmF0Y2g7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkocmVnLmlz
RlBSKCkgJiYgbmV4dC0+cmVnLmlzRlBSKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNjcmF0
Y2hGUFIgPT0gSW52YWxpZEZQUlJlZykgeworICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0g
R2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlR1BSKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgICAgICByZWcubW92ZVRvKHNjcmF0Y2gsIERhdGFGb3JtYXREb3VibGUsIERhdGFGb3JtYXRK
U0RvdWJsZSwgaml0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoID0gR2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlRlBSKHNjcmF0Y2hGUFIp
OworICAgICAgICAgICAgICAgICAgICByZWcubW92ZVRvKHNjcmF0Y2gsIERhdGFGb3JtYXREb3Vi
bGUsIERhdGFGb3JtYXREb3VibGUsIGppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY3JhdGNoID0gR2VuZXJhbGl6ZWRSZWdpc3Rl
cjo6Y3JlYXRlR1BSKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHJlZy5tb3ZlVG8oc2Ny
YXRjaCwgcmVnLnByZXZpb3VzRGF0YUZvcm1hdChjaGVjayksIG5leHQtPnJlZy5uZXh0RGF0YUZv
cm1hdChlbnRyeSksIGppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGN1ciA9IHRoaXM7CisgICAgICAgICAgICB3aGlsZSAoY3VyLT5wcmV2aW91cyAhPSB0aGlz
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cik7CisgICAgICAgICAgICAgICAgY3VyLT5w
cmV2aW91cy0+cmVnLm1vdmVUbyhjdXItPnJlZywgY3VyLT5wcmV2aW91cy0+cmVnLnByZXZpb3Vz
RGF0YUZvcm1hdChjaGVjayksIGN1ci0+cmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0KTsK
KyAgICAgICAgICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkocmVnLmlzRlBSKCkgJiYgbmV4dC0+
cmVnLmlzRlBSKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hGUFIgPT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4dC0+cmVnLCBE
YXRhRm9ybWF0SlNEb3VibGUsIERhdGFGb3JtYXREb3VibGUsIGppdCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JhdGNoLm1vdmVUbyhuZXh0LT5yZWcsIERh
dGFGb3JtYXREb3VibGUsIERhdGFGb3JtYXREb3VibGUsIGppdCk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzY3JhdGNoLm1vdmVUbyhuZXh0LT5yZWcsIG5leHQtPnJlZy5u
ZXh0RGF0YUZvcm1hdChlbnRyeSksIG5leHQtPnJlZy5uZXh0RGF0YUZvcm1hdChlbnRyeSksIGpp
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgU2h1ZmZsZWRSZWdpc3RlciogbG9va3VwKFNodWZmbGVkUmVnaXN0ZXIqIGdwcnMsIFNodWZm
bGVkUmVnaXN0ZXIqIGZwcnMsIEdlbmVyYWxpemVkUmVnaXN0ZXImIHJlZykKKyAgICB7CisgICAg
ICAgIGlmIChyZWcuaXNGUFIoKSkKKyAgICAgICAgICAgIHJldHVybiBmcHJzICsgRlBSSW5mbzo6
dG9JbmRleChyZWcuZnByKCkpOworICAgICAgICByZXR1cm4gZ3BycyArIEdQUkluZm86OnRvSW5k
ZXgocmVnLmdwcigpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCYgbG9v
a3VwRm9yUmVnaXN0ZXIoVCogZ3BycywgVCogZnBycywgdW5zaWduZWQgaW5kZXgpCit7CisgICAg
QVNTRVJUKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyk7CisgICAgaWYgKGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMpCisgICAgICAgIHJldHVybiBncHJzW2luZGV4XTsKKyAgICByZXR1cm4gZnByc1tpbmRleCAt
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKK30KKworLy8gVGhpcyBpcyB3cml0dGVuIGlu
IGEgd2F5IHRoYXQgYWxsb3dzIGZvciBhIEhhc2hNYXA8Tm9kZUluZGV4LCBHZW5lcmFsaXplZFJl
Z2lzdGVyPiB0byBiZQorLy8gZWFzaWx5IHN1YnN0aXR1dGVkLCBpZiBpdCBpcyBmb3VuZCB0byBi
ZSB3aXNlIHRvIGRvIHNvLiBTbyBmYXIgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzCisvLyBpbmRp
Y2F0ZSB0aGF0IHRoaXMgaXMgZmFzdGVyLCBsaWtlbHkgYmVjYXVzZSB0aGUgSGFzaE1hcCB3b3Vs
ZCBoYXZlIG5ldmVyIGdyb3duIHZlcnkgYmlnCisvLyBhbmQgd2Ugd291bGQgdGh1cyBiZSB3YXN0
aW5nIHRpbWUgcGVyZm9ybWluZyBjb21wbGV4IGhhc2hpbmcgbG9naWMgdGhhdCwgdGhvdWdoIE8o
MSkgb24KKy8vIGF2ZXJhZ2UsIHdvdWxkIGJlIGxlc3MgdGhhbiB0aGUgfjcgbG9vcCBpdGVyYXRp
b25zIHRoYXQgdGhlIGZpbmQoKSBtZXRob2QgYmVsb3cgd291bGQgZG8KKy8vIChzaW5jZSBpdCdz
IHVuY29tbW9uIHRoYXQgd2UnZCBoYXZlIHJlZ2lzdGVyIGFsbG9jYXRlZCBtb3JlIHRoYW4gNyBy
ZWdpc3RlcnMsIGluIHRoZQorLy8gY3VycmVudCBzY2hlbWUpLgorY2xhc3MgTm9kZVRvUmVnaXN0
ZXJNYXAgeworcHVibGljOgorICAgIHN0cnVjdCBUdXBsZSB7CisgICAgICAgIE5vZGVJbmRleCBm
aXJzdDsKKyAgICAgICAgR2VuZXJhbGl6ZWRSZWdpc3RlciBzZWNvbmQ7CisgICAgICAgIAorICAg
ICAgICBUdXBsZSgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgdHlw
ZWRlZiBUdXBsZSogaXRlcmF0b3I7CisgICAgCisgICAgTm9kZVRvUmVnaXN0ZXJNYXAoKQorICAg
ICAgICA6IG1fb2NjdXBhbmN5KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChO
b2RlSW5kZXggZmlyc3QsIEdlbmVyYWxpemVkUmVnaXN0ZXIgc2Vjb25kKQorICAgIHsKKyAgICAg
ICAgbV9wYXlsb2FkW21fb2NjdXBhbmN5XS5maXJzdCA9IGZpcnN0OworICAgICAgICBtX3BheWxv
YWRbbV9vY2N1cGFuY3ldLnNlY29uZCA9IHNlY29uZDsKKyAgICAgICAgbV9vY2N1cGFuY3krKzsK
KyAgICB9CisgICAgCisgICAgVHVwbGUqIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgCisgICAgVHVwbGUqIGZpbmQoTm9kZUluZGV4IGZpcnN0KQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vY2N1cGFuY3k7IGktLSA+IDA7KSB7CisgICAgICAg
ICAgICBpZiAobV9wYXlsb2FkW2ldLmZpcnN0ID09IGZpcnN0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX3BheWxvYWQgKyBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fb2NjdXBhbmN5ID0gMDsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFR1cGxlIG1fcGF5bG9hZFtHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKKyAgICB1bnNpZ25l
ZCBtX29jY3VwYW5jeTsKK307CisKK3ZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRp
dmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNrLCBjb25zdCBF
bnRyeUxvY2F0aW9uJiBlbnRyeSwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnksIE5vZGVU
b1JlZ2lzdGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYg
ZW50cnlOb2RlVG9SZWdpc3Rlck1hcCkKIHsKICAgICBBU1NFUlQoY2hlY2subV9ub2RlSW5kZXgg
PT0gZW50cnkubV9ub2RlSW5kZXgpOwogCkBAIC0xMjUsMjAgKzQ2NSw4NSBAQCB2b2lkIEpJVENv
bXBpbGVyOjpqdW1wRnJvbVNwZWN1bGF0aXZlVG9OCiAgICAgICAgIC8vIFJldmVydCB0aGUgYWRk
LgogICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOwogICAg
IH0KKyAgICAKKyAgICAvLyBGaXJzdCwgd2UgbmVlZCBhIHJldmVyc2UgbWFwcGluZyB0aGF0IHRl
bGxzIHVzLCBmb3IgYSBOb2RlSW5kZXgsIHdoaWNoIHJlZ2lzdGVyCisgICAgLy8gdGhhdCBub2Rl
IGlzIGluLgorICAgIAorICAgIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuY2xlYXIoKTsKKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2su
bV9ncHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9O
b2RlKQorICAgICAgICAgICAgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5zZXQobm9kZUluZGV4LCBH
ZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkp
KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGNoZWNrLm1fZnBySW5mb1tpbmRleF0ubm9kZUluZGV4OworICAgICAgICBpZiAo
bm9kZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAu
c2V0KG5vZGVJbmRleCwgR2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlRlBSKEZQUkluZm86OnRv
UmVnaXN0ZXIoaW5kZXgpKSk7CisgICAgfQorICAgIAorICAgIGVudHJ5Tm9kZVRvUmVnaXN0ZXJN
YXAuY2xlYXIoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gZW50cnkubV9ncHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7CisgICAgICAgIGlm
IChub2RlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgZW50cnlOb2RlVG9SZWdpc3Rlck1h
cC5zZXQobm9kZUluZGV4LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoR1BSSW5mbzo6
dG9SZWdpc3RlcihpbmRleCkpKTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGVudHJ5Lm1fZnBySW5mb1tpbmRleF0ubm9kZUlu
ZGV4OworICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGVudHJ5
Tm9kZVRvUmVnaXN0ZXJNYXAuc2V0KG5vZGVJbmRleCwgR2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3Jl
YXRlRlBSKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpKSk7CisgICAgfQorICAgIAorICAgIC8v
IEhvdyB0aGlzIHdvcmtzOgorICAgIC8vIDEpIFNwaWxsIGFueSB2YWx1ZXMgdGhhdCBhcmUgbm90
IHNwaWxsZWQgb24gc3BlY3VsYXRpdmUsIGJ1dCBhcmUgc3BpbGxlZAorICAgIC8vICAgIG9uIG5v
bi1zcGVjdWxhdGl2ZS4KKyAgICAvLyAyKSBGb3IgdGhlIHNldCBvZiBub2RlcyB0aGF0IGFyZSBp
biByZWdpc3RlcnMgb24gYm90aCBwYXRocywgcGVyZm9ybSBhCisgICAgLy8gICAgc2h1ZmZsaW5n
LgorICAgIC8vIDMpIEZpbGwgYW55IHZhbHVlcyB0aGF0IHdlcmUgc3BpbGxlZCBvbiBzcGVjdWxh
dGl2ZSwgYnV0IGFyZSBub3Qgc3BpbGxlZAorICAgIC8vICAgIG9uIG5vbi1zcGVjdWxhdGl2ZS4K
KyAgICAKKyAgICAvLyBJZiB3ZSBmaW5kIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIGFzIHNj
cmF0Y2ggcmVnaXN0ZXJzIGFsb25nIHRoZSB3YXksCisgICAgLy8gc2F2ZSB0aGVtLgorICAgIAor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IEludmFsaWRGUFJSZWc7CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlVGFnTWFza1JlZ2lz
dGVyID0gZmFsc2U7CisgICAgCisgICAgLy8gUGFydCAxOiBzcGlsbCBhbnkgdmFsdWVzIHRoYXQg
YXJlIG5vdCBzcGlsbGVkIG9uIHNwZWN1bGF0aXZlLCBidXQgYXJlCisgICAgLy8gICAgICAgICBz
cGlsbGVkIG9uIG5vbi1zcGVjdWxhdGl2ZS4KKyAgICAKKyAgICAvLyBUaGlzIGFsc28gc2V0cyB1
cCBzb21lIGRhdGEgc3RydWN0dXJlcyB0aGF0IFBhcnQgMiB3aWxsIG5lZWQuCisgICAgCisgICAg
U2h1ZmZsZWRSZWdpc3RlciBncHJzW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKKyAgICBT
aHVmZmxlZFJlZ2lzdGVyIGZwcnNbRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2luZGV4KQorICAgICAgICBncHJzW2luZGV4XSA9IFNodWZmbGVkUmVnaXN0ZXIo
R2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlR1BSKEdQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgp
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraW5kZXgpCisgICAgICAgIGZwcnNbaW5kZXhdID0gU2h1ZmZsZWRSZWdp
c3RlcihHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdpc3Rlcihp
bmRleCkpKTsKIAotICAgIC8vIEZJWE1FOiAtIFRoaXMgaXMgaGlkZW91c2x5IGluZWZmaWNpZW50
IQotICAgIC8vIFdoZXJlIGEgdmFsdWUgaXMgbGl2ZSBpbiBhIHJlZ2lzdGVyIGluIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoLCBhbmQgaXMgcmVxdWlyZWQgaW4gYSByZWdpc3RlcgotICAgIC8vIG9uIHRo
ZSBub24tc3BlY3VsYXRpdmUgcGF0aCwgd2Ugc2hvdWxkIG5vdCBuZWVkIHRvIGJlIHNwaWxsaW5n
IGl0IGFuZCByZWxvYWRpbmcgKHdlIG1heQotICAgIC8vIG5lZWQgdG8gc3BpbGwgYW55d2F5LCBp
ZiB0aGUgdmFsdWUgaXMgbWFya2VkIGFzIHNwaWxsZWQgb24gdGhlIG5vbi1zcGVjdWxhdGl2ZSBw
YXRoKS4KLSAgICAvLyBUaGlzIG1heSBhbHNvIGJlIHNwaWxsaW5nIHZhbHVlcyB0aGF0IGRvbid0
IG5lZWQgc3BpbGxpbmcsIGUuZy4gYXJlIGFscmVhZHkgc3BpbGxlZCwKLSAgICAvLyBhcmUgY29u
c3RhbnRzLCBvciBhcmUgYXJndW1lbnRzLgotCi0gICAgLy8gU3BpbGwgYWxsIEdQUnMgaW4gdXNl
IGJ5IHRoZSBzcGVjdWxhdGl2ZSBwYXRoLgogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CiAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBjaGVjay5tX2dwckluZm9baW5kZXhdLm5vZGVJbmRleDsKLSAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIGlmIChub2RlSW5kZXggPT0g
Tm9Ob2RlIHx8IGNoZWNrLm1fZ3BySW5mb1tpbmRleF0uaXNTcGlsbGVkKSB7CisgICAgICAgICAg
ICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKLQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlVG9SZWdpc3Rlck1h
cDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwLmZpbmQobm9k
ZUluZGV4KTsKKyAgICAgICAgaWYgKG1hcEl0ZXJhdG9yICE9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJN
YXAuZW5kKCkpIHsKKyAgICAgICAgICAgIGdwcnNbaW5kZXhdLmhhc0Zyb20gPSB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBuZXh0ID0gU2h1ZmZsZWRS
ZWdpc3Rlcjo6bG9va3VwKGdwcnMsIGZwcnMsIG1hcEl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAg
ICAgICAgbmV4dC0+cHJldmlvdXMgPSBncHJzICsgaW5kZXg7CisgICAgICAgICAgICBuZXh0LT5o
YXNUbyA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbWFwSXRlcmF0b3It
PnNlY29uZC5maW5kSW5FbnRyeUxvY2F0aW9uKGVudHJ5KS5pc1NwaWxsZWQpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIERhdGFGb3JtYXQg
ZGF0YUZvcm1hdCA9IGNoZWNrLm1fZ3BySW5mb1tpbmRleF0uZm9ybWF0OwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZ3JhcGgoKVtub2RlSW5kZXhdLnZpcnR1YWxS
ZWdpc3RlcigpOwogCkBAIC0xNDYsMzQgKzU1MSw5MSBAQCB2b2lkIEpJVENvbXBpbGVyOjpqdW1w
RnJvbVNwZWN1bGF0aXZlVG9OCiAgICAgICAgIGlmIChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJ
bnRlZ2VyKQogICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSk7CiAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86
OnRvUmVnaXN0ZXIoaW5kZXgpLCBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOworICAgICAg
ICAKKyAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpOworICAg
IH0KKyAgICAKKyAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAg
IHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXI7CisgICAgICAgIG5lZWRUb1Jl
c3RvcmVUYWdNYXNrUmVnaXN0ZXIgPSB0cnVlOwogICAgIH0KIAotICAgIC8vIFNwaWxsIGFsbCBG
UFJzIGluIHVzZSBieSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4KICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewot
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJbmZvW2luZGV4XTsKLSAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBjaGVjay5tX2ZwckluZm9baW5kZXhdLm5vZGVJbmRleDsKKyAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUgfHwgY2hlY2subV9mcHJJbmZvW2luZGV4XS5pc1NwaWxsZWQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBOb2RlVG9SZWdpc3Rlck1hcDo6aXRlcmF0b3Ig
bWFwSXRlcmF0b3IgPSBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwLmZpbmQobm9kZUluZGV4KTsKKyAg
ICAgICAgaWYgKG1hcEl0ZXJhdG9yICE9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZW5kKCkpIHsK
KyAgICAgICAgICAgIGZwcnNbaW5kZXhdLmhhc0Zyb20gPSB0cnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBuZXh0ID0gU2h1ZmZsZWRSZWdpc3Rlcjo6bG9v
a3VwKGdwcnMsIGZwcnMsIG1hcEl0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgbmV4dC0+
cHJldmlvdXMgPSBmcHJzICsgaW5kZXg7CisgICAgICAgICAgICBuZXh0LT5oYXNUbyA9IHRydWU7
CisKKyAgICAgICAgICAgIGlmICghbWFwSXRlcmF0b3ItPnNlY29uZC5maW5kSW5FbnRyeUxvY2F0
aW9uKGVudHJ5KS5pc1NwaWxsZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZ3JhcGgoKVtu
b2RlSW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpOwogCi0gICAgICAgIG1vdmVEb3VibGVUb1B0cihG
UFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBzdWJQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlcikp
OworICAgICAgICBtb3ZlRG91YmxlVG9QdHIoRlBSSW5mbzo6dG9SZWdpc3RlcihpbmRleCksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgYWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAgCisgICAgICAgIHNjcmF0Y2hGUFIgPSBGUFJJbmZv
Ojp0b1JlZ2lzdGVyKGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gUGFydCAyOiBGb3IgdGhl
IHNldCBvZiBub2RlcyB0aGF0IGFyZSBpbiByZWdpc3RlcnMgb24gYm90aCBwYXRocywKKyAgICAv
LyAgICAgICAgIHBlcmZvcm0gYSBzaHVmZmxpbmcuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgeworICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyJiBy
ZWcgPSBsb29rdXBGb3JSZWdpc3RlcihncHJzLCBmcHJzLCBpbmRleCk7CisgICAgICAgIGlmICgh
cmVnLmlzRW5kT2ZOb25DeWNsaW5nUGVybXV0YXRpb24oKSB8fCByZWcuaGFuZGxlZCB8fCAoIXJl
Zy5oYXNGcm9tICYmICFyZWcuaGFzVG8pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICByZWcuaGFuZGxlTm9uQ3ljbGluZ1Blcm11dGF0aW9uKGNoZWNrLCBlbnRyeSwg
KnRoaXMsIHNjcmF0Y2hGUFIpOwogICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7CisgICAgICAgIFNodWZmbGVkUmVnaXN0ZXImIHJlZyA9
IGxvb2t1cEZvclJlZ2lzdGVyKGdwcnMsIGZwcnMsIGluZGV4KTsKKyAgICAgICAgaWYgKHJlZy5o
YW5kbGVkIHx8ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNUbykpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlZy5oYW5kbGVDeWNsaW5nUGVybXV0YXRpb24oY2hl
Y2ssIGVudHJ5LCAqdGhpcywgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7CisgICAgfQorCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aW5kZXgpIHsKKyAgICAgICAgU2h1ZmZsZWRSZWdpc3RlciYgcmVnID0gbG9va3VwRm9yUmVnaXN0
ZXIoZ3BycywgZnBycywgaW5kZXgpOworICAgICAgICBBU1NFUlQocmVnLmhhbmRsZWQgfHwgKCFy
ZWcuaGFzRnJvbSAmJiAhcmVnLmhhc1RvKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBQYXJ0
IDM6IEZpbGwgYW55IHZhbHVlcyB0aGF0IHdlcmUgc3BpbGxlZCBvbiBzcGVjdWxhdGl2ZSwgYnV0
IGFyZSBub3Qgc3BpbGxlZAorICAgIC8vICAgICAgICAgb24gbm9uLXNwZWN1bGF0aXZlLgogCi0g
ICAgLy8gRmlsbCBhbGwgRlBScyBpbiB1c2UgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgog
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEZQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2luZGV4KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBlbnRyeS5t
X2ZwckluZm9baW5kZXhdOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGVudHJ5Lm1fZnBySW5mb1tpbmRleF0ubm9kZUluZGV4
OworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBlbnRyeS5tX2ZwckluZm9baW5k
ZXhdLmlzU3BpbGxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAg
Tm9kZVRvUmVnaXN0ZXJNYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gY2hlY2tOb2RlVG9SZWdp
c3Rlck1hcC5maW5kKG5vZGVJbmRleCk7CisgICAgICAgIGlmIChtYXBJdGVyYXRvciAhPSBjaGVj
a05vZGVUb1JlZ2lzdGVyTWFwLmVuZCgpCisgICAgICAgICAgICAmJiAhbWFwSXRlcmF0b3ItPnNl
Y29uZC5maW5kSW5TcGVjdWxhdGlvbkNoZWNrKGNoZWNrKS5pc1NwaWxsZWQpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBmaWxsTnVtZXJpY1RvRG91YmxlKG5vZGVJbmRleCwgRlBS
SW5mbzo6dG9SZWdpc3RlcihpbmRleCksIEdQUkluZm86OnJlZ1QwKTsKICAgICB9CiAKLSAgICAv
LyBGaWxsIGFsbCBHUFJzIGluIHVzZSBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraW5kZXgpIHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGVudHJ5Lm1fZ3By
SW5mb1tpbmRleF0ubm9kZUluZGV4OwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkK
KyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgZW50cnkubV9ncHJJbmZvW2luZGV4
XS5pc1NwaWxsZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBOb2RlVG9SZWdp
c3Rlck1hcDo6aXRlcmF0b3IgbWFwSXRlcmF0b3IgPSBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLmZp
bmQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG1hcEl0ZXJhdG9yICE9IGNoZWNrTm9kZVRvUmVn
aXN0ZXJNYXAuZW5kKCkKKyAgICAgICAgICAgICYmICFtYXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJ
blNwZWN1bGF0aW9uQ2hlY2soY2hlY2spLmlzU3BpbGxlZCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCA9IGVudHJ5Lm1fZ3BySW5mb1tpbmRl
eF0uZm9ybWF0OwpAQCAtMTg1LDYgKzY0Nyw5IEBAIHZvaWQgSklUQ29tcGlsZXI6Omp1bXBGcm9t
U3BlY3VsYXRpdmVUb04KICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igc3VidHlwZXMgb2YgRGF0
YUZvcm1hdEpTLCBzaG91bGQgaml0QXNzZXJ0IHRoZSBzdWJ0eXBlPwogICAgICAgICB9CiAgICAg
fQorICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlVGFnTWFza1JlZ2lzdGVyKQorICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVGFnTWFzaykpLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogCiAgICAgLy8gSnVtcCBpbnRvIHRoZSBub24tc3BlY3Vs
YXRpdmUgcGF0aC4KICAgICBqdW1wKGVudHJ5Lm1fZW50cnkpOwpAQCAtMTk3LDcgKzY2MiwxMCBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MoCiAgICAgU3BlY3VsYXRp
b25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgY2hlY2tzRW5kID0gc3BlY3VsYXRpdmUuc3BlY3VsYXRp
b25DaGVja3MoKS5lbmQoKTsKICAgICBOb25TcGVjdWxhdGl2ZUpJVDo6RW50cnlMb2NhdGlvblZl
Y3Rvcjo6SXRlcmF0b3IgZW50cmllc0l0ZXIgPSBub25TcGVjdWxhdGl2ZS5lbnRyeUxvY2F0aW9u
cygpLmJlZ2luKCk7CiAgICAgTm9uU3BlY3VsYXRpdmVKSVQ6OkVudHJ5TG9jYXRpb25WZWN0b3I6
Okl0ZXJhdG9yIGVudHJpZXNFbmQgPSBub25TcGVjdWxhdGl2ZS5lbnRyeUxvY2F0aW9ucygpLmVu
ZCgpOwotCisgICAgCisgICAgTm9kZVRvUmVnaXN0ZXJNYXAgY2hlY2tOb2RlVG9SZWdpc3Rlck1h
cDsKKyAgICBOb2RlVG9SZWdpc3Rlck1hcCBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwOworICAgIAog
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc3BlY3VsYXRpb24gY2hlY2tzLgogICAgIHdoaWxlIChj
aGVja3NJdGVyICE9IGNoZWNrc0VuZCkgewogICAgICAgICAvLyBGb3IgZXZlcnkgYmFpbCBvdXQg
ZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCwgd2UgbXVzdCBoYXZlIHByb3ZpZGVkIGFuIGVudHJ5
IHBvaW50CkBAIC0yMTIsNyArNjgwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1bGF0
aW9uQ2hlY2tzKAogICAgICAgICAgICAgLy8gUGxhbnQgY29kZSB0byBsaW5rIHRoaXMgc3BlY3Vs
YXRpb24gZmFpbHVyZS4KICAgICAgICAgICAgIGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smIGNoZWNr
ID0gKmNoZWNrc0l0ZXI7CiAgICAgICAgICAgICBjb25zdCBFbnRyeUxvY2F0aW9uJiBlbnRyeSA9
ICplbnRyaWVzSXRlcjsKLSAgICAgICAgICAgIGp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1
bGF0aXZlKGNoZWNrLCBlbnRyeSwgc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25SZWNvdmVyeShjaGVj
ay5tX3JlY292ZXJ5SW5kZXgpKTsKKyAgICAgICAgICAgIGp1bXBGcm9tU3BlY3VsYXRpdmVUb05v
blNwZWN1bGF0aXZlKGNoZWNrLCBlbnRyeSwgc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25SZWNvdmVy
eShjaGVjay5tX3JlY292ZXJ5SW5kZXgpLCBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBlbnRyeU5v
ZGVUb1JlZ2lzdGVyTWFwKTsKICAgICAgICAgICAgICArK2NoZWNrc0l0ZXI7CiAgICAgICAgIH0g
d2hpbGUgKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kICYmIGNoZWNrc0l0ZXItPm1fbm9kZUluZGV4
ID09IGVudHJpZXNJdGVyLT5tX25vZGVJbmRleCk7CiAgICAgICAgICArK2VudHJpZXNJdGVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNp
b24gOTE3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSlNHbG9iYWxEYXRhOwogbmFt
ZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CitjbGFzcyBOb2RlVG9SZWdp
c3Rlck1hcDsKIGNsYXNzIE5vblNwZWN1bGF0aXZlSklUOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7
CiBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwpAQCAtMjkwLDcgKzI5MSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmaWxsTnVtZXJpY1RvRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcg
dGVtcG9yYXJ5KTsKICAgICB2b2lkIGZpbGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJl
Zyk7CiAgICAgdm9pZCBmaWxsVG9KUyhOb2RlSW5kZXgsIEdQUlJlZyk7Ci0gICAgdm9pZCBqdW1w
RnJvbVNwZWN1bGF0aXZlVG9Ob25TcGVjdWxhdGl2ZShjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiwg
Y29uc3QgRW50cnlMb2NhdGlvbiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKKyAgICB2b2lkIGp1
bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
LCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lz
dGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlO
b2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3Vs
YXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOwogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEs
IHVzZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiA5MTcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIEVudHJ5TG9jYXRp
b246OkVudHJ5TG9jYXRpb24oTWFjcm9Bc3NlbWIKICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gIGppdC0+bV9nZW5lcmF0aW9uSW5mb1tpdGVyLm5hbWUoKV07CiAgICAgICAgICAg
ICBtX2dwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwog
ICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0uZm9ybWF0ID0gaW5mby5yZWdpc3Rl
ckZvcm1hdCgpOworICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0uaXNTcGlsbGVk
ID0gaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsK
ICAgICB9CkBAIC01MCw5ICs1MSwxMSBAQCBFbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKE1h
Y3JvQXNzZW1iCiAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKSB7CiAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1fZ2VuZXJh
dGlvbkluZm9baXRlci5uYW1lKCldOwogICAgICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAgICAgICAgIG1fZnBySW5mb1tpdGVy
LmluZGV4KCldID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVy
LmluZGV4KCldLm5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICBtX2Zw
ckluZm9baXRlci5pbmRleCgpXS5mb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOworICAgICAgICAg
ICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0uaXNTcGlsbGVkID0gaW5mby5zcGlsbEZvcm1hdCgp
ICE9IERhdGFGb3JtYXROb25lOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnBySW5m
b1tpdGVyLmluZGV4KCldID0gTm9Ob2RlOworICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5k
ZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTE3
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEwIEBAIHN0cnVjdCBFbnRyeUxvY2F0aW9uIHsK
ICAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvIHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleDsK
ICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIGJvb2wgaXNTcGlsbGVkOwogICAg
IH07CiAgICAgUmVnaXN0ZXJJbmZvIG1fZ3BySW5mb1tHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
c107Ci0gICAgTm9kZUluZGV4IG1fZnBySW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107
CisgICAgUmVnaXN0ZXJJbmZvIG1fZnBySW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107
CiB9OwogCiAvLyA9PT0gTm9uU3BlY3VsYXRpdmVKSVQgPT09CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTE3MjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBAIFNwZWN1bGF0aW9uQ2hlY2s6OlNwZWN1bGF0
aW9uQ2hlY2soTWFjcm8KICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gIGppdC0+
bV9nZW5lcmF0aW9uSW5mb1tpdGVyLm5hbWUoKV07CiAgICAgICAgICAgICBtX2dwckluZm9baXRl
ci5pbmRleCgpXS5ub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICAgICAgbV9n
cHJJbmZvW2l0ZXIuaW5kZXgoKV0uZm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOworICAg
ICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0uaXNTcGlsbGVkID0gaW5mby5zcGlsbEZv
cm1hdCgpICE9IERhdGFGb3JtYXROb25lOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1f
Z3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CkBAIC0xNTcs
OSArMTU4LDExIEBAIFNwZWN1bGF0aW9uQ2hlY2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm8KICAg
ICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKICAgICAg
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gIGppdC0+bV9nZW5lcmF0aW9uSW5mb1tpdGVy
Lm5hbWUoKV07CiAgICAgICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERh
dGFGb3JtYXREb3VibGUpOwotICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0gPSBp
bmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9k
ZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmlu
ZGV4KCldLmZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAgICAgICAgICBtX2ZwckluZm9b
aXRlci5pbmRleCgpXS5pc1NwaWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1h
dE5vbmU7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgo
KV0gPSBOb05vZGU7CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5k
ZXggPSBOb05vZGU7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MTcyMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtODQs
OSArODQsMTAgQEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sgewogICAgIHN0cnVjdCBSZWdpc3Rl
ckluZm8gewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4OwogICAgICAgICBEYXRhRm9ybWF0
IGZvcm1hdDsKKyAgICAgICAgYm9vbCBpc1NwaWxsZWQ7CiAgICAgfTsKICAgICBSZWdpc3Rlcklu
Zm8gbV9ncHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBOb2RlSW5kZXgg
bV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKKyAgICBSZWdpc3RlckluZm8g
bV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKIH07CiB0eXBlZGVmIFNlZ21l
bnRlZFZlY3RvcjxTcGVjdWxhdGlvbkNoZWNrLCAxNj4gU3BlY3VsYXRpb25DaGVja1ZlY3RvcjsK
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>