<?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>89551</bug_id>
          
          <creation_ts>2012-06-20 00:07:21 -0700</creation_ts>
          <short_desc>DFG should be able to print disassembly interleaved with the IR</short_desc>
          <delta_ts>2012-06-20 10:51:32 -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>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>653256</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 00:07:21 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653257</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 00:07:35 -0700</bug_when>
    <thetext>Here&apos;s a sample:



Generated JIT code for DFG CodeBlock 0x109905400:
    Code at [0x3ab1c260d960, 0x3ab1c260db2e):
          0x3ab1c260d960: pop %rcx
          0x3ab1c260d961: mov %rcx, -0x10(%r13)
          0x3ab1c260d965: mov 0x109905400, %r11
          0x3ab1c260d96f: mov %r11, -0x8(%r13)
          0x3ab1c260d973: lea 0x18(%r13), %rdx
          0x3ab1c260d977: mov 0x10986cea0, %r11
          0x3ab1c260d981: cmp %rdx, (%r11)
          0x3ab1c260d984: jb 0x3ab1c260da2d
          0x3ab1c260d98a: mov 0x109905e54, %r11
          0x3ab1c260d994: add 0x1, (%r11)
    Block #0 (bc#0): 
      Predecessors:
      Phi Nodes:
       0:           &lt; 3:-&gt;	SetArgument(, arg0(F&lt;Final&gt;))  predicting Final, double ratio 0.000000
       1:           &lt; 3:1&gt;	GetLocal(@0, JS, arg0(F&lt;Final&gt;))  predicting Final, double ratio 0.000000
          0x3ab1c260d998: mov -0x38(%r13), %rax
       2:           &lt;!0:-&gt;	CheckStructure(@1&lt;Final&gt;, MustGen|CanExit, struct(0x10a2b7c00))
          0x3ab1c260d99c: test %rax, %r15
          0x3ab1c260d99f: jnz 0x3ab1c260da94
          0x3ab1c260d9a5: mov 0x10a2b7c00, %r11
          0x3ab1c260d9af: cmp %r11, 0x8(%rax)
          0x3ab1c260d9b3: jnz 0x3ab1c260daaa
       4:           &lt; 1:1&gt;	GetByOffset(@1&lt;Final&gt;, JS, id0{direction}, 7)  predicting Int
          0x3ab1c260d9b9: mov 0x38(%rax), %rax
       6:           &lt;!2:2&gt;	GetGlobalVar(JS|MustGen, global20(0x1098bcf38))  predicting Final
          0x3ab1c260d9bd: mov 0x1098bcf38, %rdx
          0x3ab1c260d9c7: mov (%rdx), %rdx
       8:           &lt;!0:-&gt;	CheckStructure(@6&lt;Final&gt;, MustGen|CanExit, struct(0x10a2b9960))
          0x3ab1c260d9ca: test %rdx, %r15
          0x3ab1c260d9cd: jnz 0x3ab1c260dac0
          0x3ab1c260d9d3: mov 0x10a2b9960, %r11
          0x3ab1c260d9dd: cmp %r11, 0x8(%rdx)
          0x3ab1c260d9e1: jnz 0x3ab1c260dad6
       9:           &lt; 1:2&gt;	GetByOffset(@6&lt;Final&gt;, JS, id1{FORWARD}, 5)  predicting Int
          0x3ab1c260d9e7: mov 0x28(%rdx), %rdx
      11:           &lt;!1:2&gt;	CompareEq(@4&lt;Int32&gt;, @9&lt;Int32&gt;, Boolean|MustGen|MightClobber|CanExit)
          0x3ab1c260d9eb: cmp %r14, %rax
          0x3ab1c260d9ee: jb 0x3ab1c260daec
          0x3ab1c260d9f4: cmp %r14, %rdx
          0x3ab1c260d9f7: jb 0x3ab1c260db02
          0x3ab1c260d9fd: cmp %edx, %eax
          0x3ab1c260d9ff: jnz 0x3ab1c260da16
    Block #1 (bc#33): 
      Predecessors: #0
      Phi Nodes: @14-&gt;(@0)
      15:           &lt; 2:2&gt;	GetLocal(@14, JS, arg0(F&lt;Final&gt;))  predicting Final, double ratio 0.000000
          0x3ab1c260da05: mov -0x38(%r13), %rcx
      16:           &lt;!0:-&gt;	CheckStructure(@15&lt;Final&gt;, MustGen, struct(0x10a2b7c00))
      17:           &lt; 1:2&gt;	GetByOffset(@15&lt;Final&gt;, JS, id2{v2}, 6)  predicting Final
          0x3ab1c260da09: mov 0x30(%rcx), %rcx
      18:           &lt; 1:-&gt;	SetLocal(@17&lt;Final&gt;, , r0(J&lt;Final&gt;))  predicting Final, double ratio 0.000000
          0x3ab1c260da0d: mov %rcx, 0x0(%r13)
      19:           &lt;!0:-&gt;	Jump(MustGen, T:#3)
          0x3ab1c260da11: jmp 0x3ab1c260da1f
    Block #2 (bc#44): 
      Predecessors: #0
      Phi Nodes: @20-&gt;(@0)
      21:           &lt; 1:2&gt;	GetLocal(@20, JS, arg0(F&lt;Final&gt;))  predicting Final, double ratio 0.000000
          0x3ab1c260da16: mov -0x38(%r13), %rbx
      22:           &lt;!1:2&gt;	GetById(@21&lt;Final&gt;, JS|MustGen|Clobbers|CanExit, id3{v1})  predicting None
          0x3ab1c260da1a: jmp 0x3ab1c260db18
    Block #3 (bc#53): 
      Predecessors: #2 #1
      Phi Nodes: @25-&gt;(@23, @18)
      26:           &lt; 1:2&gt;	GetLocal(@25, JS, r0(J&lt;Final&gt;))  predicting Final, double ratio 0.000000
          0x3ab1c260da1f: mov 0x0(%r13), %rax
      27:           &lt;!0:-&gt;	Return(@26&lt;Final&gt;, MustGen)
          0x3ab1c260da23: mov -0x10(%r13), %rdx
          0x3ab1c260da27: mov -0x28(%r13), %r13
          0x3ab1c260da2b: push %rdx
          0x3ab1c260da2c: ret 
    (End Of Main Path)
          0x3ab1c260da2d: mov %rsp, %rdi
          0x3ab1c260da30: mov %r13, 0x58(%rsp)
          0x3ab1c260da35: mov 0x0, -0x2c(%r13)
          0x3ab1c260da3d: mov 0x10943e4c0, %r11
          0x3ab1c260da47: call %r11
          0x3ab1c260da4a: jmp 0x3ab1c260d98a
          0x3ab1c260da4f: pop %rcx
          0x3ab1c260da50: mov %rcx, -0x10(%r13)
          0x3ab1c260da54: mov 0x109905400, %r11
          0x3ab1c260da5e: mov %r11, -0x8(%r13)
          0x3ab1c260da62: mov -0x30(%r13), %edx
          0x3ab1c260da66: cmp 0x1, %edx
          0x3ab1c260da69: jae 0x3ab1c260d973
          0x3ab1c260da6f: mov %rsp, %rdi
          0x3ab1c260da72: mov %r13, 0x58(%rsp)
          0x3ab1c260da77: mov 0x1, -0x2c(%r13)
          0x3ab1c260da7f: mov 0x109440650, %r11
          0x3ab1c260da89: call %r11
          0x3ab1c260da8c: mov %rax, %r13
          0x3ab1c260da8f: jmp 0x3ab1c260d973
          0x3ab1c260da94: mov 0x109859828, %r11
          0x3ab1c260da9e: mov 0x0, (%r11)
          0x3ab1c260daa5: jmp 0x3ab1c260db40
          0x3ab1c260daaa: mov 0x109859828, %r11
          0x3ab1c260dab4: mov 0x1, (%r11)
          0x3ab1c260dabb: jmp 0x3ab1c260db40
          0x3ab1c260dac0: mov 0x109859828, %r11
          0x3ab1c260daca: mov 0x2, (%r11)
          0x3ab1c260dad1: jmp 0x3ab1c260db40
          0x3ab1c260dad6: mov 0x109859828, %r11
          0x3ab1c260dae0: mov 0x3, (%r11)
          0x3ab1c260dae7: jmp 0x3ab1c260db40
          0x3ab1c260daec: mov 0x109859828, %r11
          0x3ab1c260daf6: mov 0x4, (%r11)
          0x3ab1c260dafd: jmp 0x3ab1c260db40
          0x3ab1c260db02: mov 0x109859828, %r11
          0x3ab1c260db0c: mov 0x5, (%r11)
          0x3ab1c260db13: jmp 0x3ab1c260db40
          0x3ab1c260db18: mov 0x109859828, %r11
          0x3ab1c260db22: mov 0x6, (%r11)
          0x3ab1c260db29: jmp 0x3ab1c260db40</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653259</commentid>
    <comment_count>2</comment_count>
      <attachid>148517</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 00:11:53 -0700</bug_when>
    <thetext>Created attachment 148517
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653261</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 00:14:02 -0700</bug_when>
    <thetext>Attachment 148517 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGGraph.h:185:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:186:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 21 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>653266</commentid>
    <comment_count>4</comment_count>
      <attachid>148519</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 00:29:55 -0700</bug_when>
    <thetext>Created attachment 148519
improved patch

Fixed style issues.

Also fixed a small issue in dumping of code that was not generated. The previous patch would dump neither the IR nor the disassembly for such nodes. The current patch will dump the IR but not the disassembly, and will make sure that the disassembly for the previous node is dumped correctly.  To be clear, what I mean by &quot;code that was not generated&quot; is either code that was after a forced OSR exit (the IR for such code is relevant from the standpoint of liveness) or Branches that were not really emitted due to peephole optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653496</commentid>
    <comment_count>5</comment_count>
      <attachid>148519</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-20 08:23:02 -0700</bug_when>
    <thetext>Comment on attachment 148519
improved patch

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

r=me, but please double-check dominators removal, and add a comment to the ChangeLog explaining why.

&gt; Source/JavaScriptCore/dfg/DFGDriver.cpp:-95
&gt; -    dfg.m_dominators.compute(dfg);

Was this on purpose? Seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653632</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 10:45:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 148519 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148519&amp;action=review
&gt; 
&gt; r=me, but please double-check dominators removal, and add a comment to the ChangeLog explaining why.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGDriver.cpp:-95
&gt; &gt; -    dfg.m_dominators.compute(dfg);
&gt; 
&gt; Was this on purpose? Seems wrong.

It was, but then I forgot to finish the job.

We have a couple of things in the DFG code-base that were done as first steps to SSA but that we never used.  They should either get killed or find new life.

One is the redundant Phi elimination phase, which is just now wrong.  The code is sitting there but isn&apos;t called from anywhere.

The other is dominators.  I thought I&apos;d use them for arguments simplification, but then I decided not to.  But, in the meantime, I found dominators to be useful for IR dumps.  They make it easier for me to figure out block relationships.  So, what this patch was supposed to do, is remove unconditional dominator computation, and instead call Dominators::computeIfNecessary() inside of Disassembler.

I&apos;ll land with that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653636</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 10:49:02 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/120834</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653643</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-20 10:51:32 -0700</bug_when>
    <thetext>Forgot to add the ChangeLog comment, added in http://trac.webkit.org/changeset/120836</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148517</attachid>
            <date>2012-06-20 00:11:53 -0700</date>
            <delta_ts>2012-06-20 00:29:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dfgdisas_patch_1.diff</filename>
            <type>text/plain</type>
            <size>39615</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDEyLTA2LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIHByaW50IGRpc2Fzc2VtYmx5IGludGVybGVhdmVkIHdpdGgg
dGhlIElSCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMpOgorICAgICAg
ICAoQVJNdjdBc3NlbWJsZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgIChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChYODZBc3NlbWJsZXIp
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cyk6
CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6OnNob3VsZFNo
b3dEaXNhc3NlbWJseSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6RGlz
YXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxl
cjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1i
bHkpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoRGlzYXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3Nl
bWJsZXI6OnNldFN0YXJ0T2ZDb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6
OnNldEZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OnNldEZvck5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6c2V0RW5kT2ZNYWluUGF0aCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpzZXRFbmRPZkNvZGUpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBD
b2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVT
cGFjZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmludE5v
ZGVXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
Lmg6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OnNldFN0YXJ0T2ZDb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0
Rm9yQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRGb3JOb2RlKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZNYWluUGF0aCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgICogZGZn
L0RGR05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ondp
bGxIYXZlQ29kZUdlbik6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6bm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRp
dmVKSVQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChPcHRpb25z
KToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZU9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoT3B0aW9ucyk6CisKIDIwMTItMDYtMTkgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0Mgc2hvdWxkIGJlIGFi
bGUgdG8gc2hvdyBkaXNhc3NlbWJseSBmb3IgYWxsIGdlbmVyYXRlZCBKSVQgY29kZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIwNzk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2
ICs3MSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5jcHAKICAg
ICBkZmcvREZHQ1NFUGhhc2UuY3BwCisgICAgZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKICAgICBk
ZmcvREZHRG9taW5hdG9ycy5jcHAKICAgICBkZmcvREZHRHJpdmVyLmNwcAogICAgIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHJldmlzaW9uIDEyMDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9taW5hdG9ycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9taW5hdG9ycy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvdWJsZUZvcm1h
dFN0YXRlLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyMDc5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmNwcCBcCiAgICAg
ZGZnL0RGR0NTRVBoYXNlLmNwcCBcCisgICAgZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgXAogICAg
IGRmZy9ERkdEb21pbmF0b3JzLmNwcCBcCiAgICAgZGZnL0RGR0RyaXZlci5jcHAgXAogICAgIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTIwNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDks
OCBAQAogCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjczRjE1OEVCRDk0MDA0Q0I5
RkYgLyogdWRpczg2LmggKi87IH07CiAJCTBGRjQyNzREMTU4RUJGRTYwMDRDQjlGRiAvKiB1ZGlz
ODZfaXRhYl9ob2xkZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjQyNzRDMTU4RUJGRTEwMDRDQjlGRiAvKiB1ZGlzODZfaXRhYl9ob2xkZXIuYyAq
LzsgfTsKIAkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NTYxNTkxNEEy
MDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwICovOyB9OworCQkwRkY0Mjc2NDE1OTFBMUNDMDA0
Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzYxMTU5MUExQzkwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuY3BwICovOyB9OworCQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkY0Mjc2MjE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAw
NDFBMjRFIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJ
bnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAqLzsgfTsKIAkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgKi87
IH07CiAJCTBGRkZDOTU4MTRFRjkwQTIwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NEMxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTkyOSw2ICs5MzEsOCBAQAogCQkwRkY0MjczRjE1OEVCRDk0MDA0
Q0I5RkYgLyogdWRpczg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVkaXM4
Ni5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODYuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGNDI3NEMxNThFQkZFMTAwNENCOUZGIC8qIHVkaXM4Nl9pdGFiX2hv
bGRlci5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfaXRhYl9ob2xk
ZXIuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2l0YWJfaG9sZGVyLmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzU2MTU5MTRBMjAwMDRDQjlGRiAvKiBM
aW5rQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtC
dWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY0Mjc2MTE1OTFBMUM5
MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Rpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1i
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGNDI3NjIxNTkxQTFDOTAw
NENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRmZy9ERkdEaXNhc3NlbWJsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpT
Q0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQkwRkZGQzk0QjE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZB
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ0ZBUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0NGQVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGRkM5NEMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NGQVBoYXNlLmg7IHBhdGggPSBkZmcvREZH
Q0ZBUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDEsNiArMjIwNSw4
IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmggKi8sCiAJCQkJMEZDMDk3OUQxNDZCMjcxRTAwQ0YyNDQyIC8qIERGR0NvcnJlY3RhYmxl
SnVtcFBvaW50LmNwcCAqLywKIAkJCQkwRkMwOTc5QTE0NkE3NzIwMDBDRjI0NDIgLyogREZHQ29y
cmVjdGFibGVKdW1wUG9pbnQuaCAqLywKKwkJCQkwRkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyog
REZHRGlzYXNzZW1ibGVyLmNwcCAqLywKKwkJCQkwRkY0Mjc2MjE1OTFBMUM5MDA0Q0I5RkYgLyog
REZHRGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuY3BwICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggKi8sCkBAIC0yNzU5LDYgKzI3NjUsNyBAQAogCQkJCTBGRjQyNzQ4MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTMzNDUsNiArMzM1Miw3IEBACiAJCQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8q
IEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5
RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkQ1OEMzNDE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjcsNiArMTgyNywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDhJbW04KE9QX05PUF9U
MSwgMCk7CiAgICAgfQogICAgIAorICAgIEFzc2VtYmxlckxhYmVsIGxhYmVsSWdub3JpbmdXYXRj
aHBvaW50cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIubGFiZWwoKTsKKyAg
ICB9CisKICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbEZvcldhdGNocG9pbnQoKQogICAgIHsKICAg
ICAgICAgQXNzZW1ibGVyTGFiZWwgcmVzdWx0ID0gbV9mb3JtYXR0ZXIubGFiZWwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTU1LDYgKzU1NSwxNSBAQCBwdWJsaWM6CiAKIAogICAgIC8vIFNlY3Rpb24gMzogTWlzYyBhZG1p
biBtZXRob2RzCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgTGFiZWwgbGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCkKKyAgICB7CisgICAgICAgIExhYmVsIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fbGFiZWwgPSBtX2Fzc2VtYmxlci5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICBMYWJlbCBsYWJlbCgp
CiAgICAgewogICAgICAgICByZXR1cm4gTGFiZWwodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDEyMDc5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3MzAsNiArMTczMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faW5kZXhP
ZlRhaWxPZkxhc3RXYXRjaHBvaW50ID0gcmVzdWx0Lm1fb2Zmc2V0ICsgbWF4SnVtcFJlcGxhY2Vt
ZW50U2l6ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBBc3Nl
bWJsZXJMYWJlbCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZm9ybWF0dGVyLmxhYmVsKCk7CisgICAgfQogCiAgICAgQXNzZW1ibGVyTGFiZWwgbGFi
ZWwoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2
aXNpb24gMTIwNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMSBAQCBlbnVtIE5vUmVzdWx0VGFnIHsgTm9S
ZXN1bHQgfTsKIAogZW51bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbnRDb252
ZXJnZWQsIEZpeHBvaW50Tm90Q29udmVyZ2VkIH07CiAKK2lubGluZSBib29sIHNob3VsZFNob3dE
aXNhc3NlbWJseSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSB8fCBP
cHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Rpc2Fzc2VtYmxlci5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Rpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBo
JiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCit7CisgICAgbV9sYWJlbEZvckJsb2NrSW5k
ZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7CisgICAgbV9sYWJlbEZvck5vZGVJbmRl
eC5yZXNpemUoZ3JhcGguc2l6ZSgpKTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBkYXRhTG9nKCJHZW5lcmF0ZWQgSklUIGNvZGUg
Zm9yIERGRyBDb2RlQmxvY2sgJXA6XG4iLCBtX2dyYXBoLm1fY29kZUJsb2NrKTsKKyAgICBkYXRh
TG9nKCIgICAgQ29kZSBhdCBbJXAsICVwKTpcbiIsIGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCks
IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpKSArIGxpbmtCdWZm
ZXIuZGVidWdTaXplKCkpOworICAgIAorICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsK
KyAgICBjb25zdCBjaGFyKiBkaXNhc3NlbWJseVByZWZpeCA9ICIgICAgICAgICI7CisgICAgCisg
ICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBOb05vZGU7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIHByZXZpb3VzTGFiZWwgPSBtX3N0YXJ0T2ZDb2RlOworICAgIGZvciAoc2l6ZV90IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZHVtcERpc2Fzc2VtYmx5KGRpc2Fzc2VtYmx5UHJlZml4LCBsaW5rQnVm
ZmVyLCBwcmV2aW91c0xhYmVsLCBtX2xhYmVsRm9yQmxvY2tJbmRleFtibG9ja0luZGV4XSwgbGFz
dE5vZGVJbmRleCk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKHByZWZpeCwgYmxv
Y2tJbmRleCwgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOworICAgICAgICBOb2RlSW5kZXggbGFz
dE5vZGVJbmRleEZvckRpc2Fzc2VtYmx5ID0gYmxvY2stPmF0KDApOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFt
X2dyYXBoW2Jsb2NrLT5hdChpKV0ud2lsbEhhdmVDb2RlR2VuKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdGVycmlibGUgd29yay1hcm91bmQg
Zm9yIGNvbXBhcmlzb24gcGVlcGhvbGUgb3B0aW1pemF0aW9ucy4gVGhlCisgICAgICAgICAgICAv
LyBCcmFuY2ggd2lsbCBub3QgaGF2ZSBpdHMgbGFiZWwgc2V0LgorICAgICAgICAgICAgaWYgKCFt
X2xhYmVsRm9yTm9kZUluZGV4W2Jsb2NrLT5hdChpKV0uaXNTZXQoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseShkaXNhc3NlbWJseVByZWZp
eCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9sYWJlbEZvck5vZGVJbmRleFtibG9jay0+
YXQoaSldLCBsYXN0Tm9kZUluZGV4Rm9yRGlzYXNzZW1ibHkpOworICAgICAgICAgICAgbV9ncmFw
aC5kdW1wQ29kZU9yaWdpbihwcmVmaXgsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7Cisg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAocHJlZml4LCBibG9jay0+YXQoaSkpOworICAgICAgICAg
ICAgbGFzdE5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlSW5k
ZXhGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBk
dW1wRGlzYXNzZW1ibHkoZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZpb3VzTGFi
ZWwsIG1fZW5kT2ZNYWluUGF0aCwgbGFzdE5vZGVJbmRleCk7CisgICAgZGF0YUxvZygiJXMoRW5k
IE9mIE1haW4gUGF0aClcbiIsIHByZWZpeCk7CisgICAgZHVtcERpc2Fzc2VtYmx5KGRpc2Fzc2Vt
Ymx5UHJlZml4LCBsaW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2VuZE9mQ29kZSwgTm9Ob2Rl
KTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OmR1bXBEaXNhc3NlbWJseShjb25zdCBjaGFyKiBw
cmVmaXgsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCYgcHJl
dmlvdXNMYWJlbCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGN1cnJlbnRMYWJlbCwgTm9kZUluZGV4
IGNvbnRleHQpCit7CisgICAgc2l6ZV90IHByZWZpeExlbmd0aCA9IHN0cmxlbihwcmVmaXgpOwor
ICAgIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlOworICAgIGlmIChjb250ZXh0ID09IE5vTm9k
ZSkKKyAgICAgICAgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZSA9IDA7CisgICAgZWxzZQorICAgICAg
ICBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlID0gR3JhcGg6OmFtb3VudE9mTm9kZVdoaXRlU3BhY2Uo
bV9ncmFwaFtjb250ZXh0XSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gcHJlZml4QnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhcltwcmVmaXhMZW5ndGggKyBhbW91bnRPZk5vZGVXaGl0ZVNw
YWNlICsgMV0pOworICAgIHN0cmNweShwcmVmaXhCdWZmZXIuZ2V0KCksIHByZWZpeCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlOyArK2kpCisgICAgICAg
IHByZWZpeEJ1ZmZlcltpICsgcHJlZml4TGVuZ3RoXSA9ICcgJzsKKyAgICBwcmVmaXhCdWZmZXJb
cHJlZml4TGVuZ3RoICsgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZV0gPSAwOworICAgIAorICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByZXZpb3VzTGFi
ZWwpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihj
dXJyZW50TGFiZWwpOworICAgIHByZXZpb3VzTGFiZWwgPSBjdXJyZW50TGFiZWw7CisgICAgQVNT
RVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5leGVjdXRhYmxlQWRkcmVzcygpKSA+PSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAg
aWYgKHRyeVRvRGlzYXNzZW1ibGUoc3RhcnQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5l
eGVjdXRhYmxlQWRkcmVzcygpKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBwcmVmaXhCdWZmZXIuZ2V0KCksIFdURjo6ZGF0YUZpbGUoKSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkYXRhTG9nKCIlcyAgICBkaXNhc3NlbWJseSBub3Qg
YXZhaWxhYmxlIGZvciByYW5nZSAlcC4uLiVwXG4iLCBwcmVmaXhCdWZmZXIuZ2V0KCksIHN0YXJ0
LmV4ZWN1dGFibGVBZGRyZXNzKCksIGVuZC5leGVjdXRhYmxlQWRkcmVzcygpKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRGlzYXNzZW1ibGVyX2gKKyNkZWZpbmUgREZHRGlz
YXNzZW1ibGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2NsYXNz
IERpc2Fzc2VtYmxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRGlzYXNzZW1ibGVyKEdyYXBoJik7CisgICAgCisgICAgdm9pZCBzZXRTdGFydE9mQ29kZShN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpIHsgbV9zdGFydE9mQ29kZSA9IGxhYmVsOyB9Cisg
ICAgdm9pZCBzZXRGb3JCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2Nr
SW5kZXhdID0gbGFiZWw7CisgICAgfQorICAgIHZvaWQgc2V0Rm9yTm9kZShOb2RlSW5kZXggbm9k
ZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICBtX2xh
YmVsRm9yTm9kZUluZGV4W25vZGVJbmRleF0gPSBsYWJlbDsKKyAgICB9CisgICAgdm9pZCBzZXRF
bmRPZk1haW5QYXRoKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAg
IG1fZW5kT2ZNYWluUGF0aCA9IGxhYmVsOworICAgIH0KKyAgICB2b2lkIHNldEVuZE9mQ29kZShN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICBtX2VuZE9mQ29kZSA9
IGxhYmVsOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoTGlua0J1ZmZlciYpOworICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkIGR1bXBEaXNhc3NlbWJseShjb25zdCBjaGFyKiBwcmVmaXgsIExp
bmtCdWZmZXImLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBjdXJyZW50TGFiZWwsIE5vZGVJbmRleCBjb250ZXh0KTsKKyAgICAKKyAg
ICBHcmFwaCYgbV9ncmFwaDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydE9mQ29k
ZTsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2xhYmVsRm9yQmxvY2tJbmRl
eDsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX2xhYmVsRm9yTm9kZUluZGV4
OworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2VuZE9mTWFpblBhdGg7CisgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fZW5kT2ZDb2RlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEaXNhc3Nl
bWJsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2
aXNpb24gMTIwNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29t
cGlsZU1vZGUgY29tcGlsZU0KICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0
YUxvZygiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9u
cy5cbiIsIGNudCk7CiAjZW5kaWYKLSAgICBkZmcubV9kb21pbmF0b3JzLmNvbXB1dGUoZGZnKTsK
ICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogCiAgICAgR3JhcGhE
dW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IER1bXBHcmFwaDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyAr
ODksNyBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UodW5zaWduZWQgYW1vCiAgICAgICAg
IGRhdGFMb2coIiAiKTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4
IHByZXZOb2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgpCit2b2lkIEdyYXBoOjpkdW1wQ29k
ZU9yaWdpbihjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4LCBOb2Rl
SW5kZXggbm9kZUluZGV4KQogewogICAgIGlmIChwcmV2Tm9kZUluZGV4ID09IE5vTm9kZSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEyLDE4ICsxMTIsMzAgQEAgdm9pZCBHcmFwaDo6ZHVtcENvZGVP
cmlnaW4oTm9kZUluZGV4IHByZQogICAgIAogICAgIC8vIFByaW50IHRoZSBwb3BzLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpOyBpLS0gPiBpbmRleE9m
RGl2ZXJnZW5jZTspIHsKKyAgICAgICAgZGF0YUxvZygiJXMiLCBwcmVmaXgpOwogICAgICAgICBw
cmludFdoaXRlU3BhY2UoaSAqIDIpOwogICAgICAgICBkYXRhTG9nKCI8LS0gJXBcbiIsIHByZXZp
b3VzSW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gUHJpbnQgdGhlIHB1c2hlcy4KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpbmRleE9mRGl2ZXJnZW5jZTsgaSA8IGN1cnJlbnRJbmxpbmVTdGFjay5zaXplKCk7ICsraSkg
eworICAgICAgICBkYXRhTG9nKCIlcyIsIHByZWZpeCk7CiAgICAgICAgIHByaW50V2hpdGVTcGFj
ZShpICogMik7CiAgICAgICAgIGRhdGFMb2coIi0tPiAlcFxuIiwgY3VycmVudElubGluZVN0YWNr
W2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CiAgICAgfQogfQogCi12b2lk
IEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCitpbnQgR3JhcGg6OmFtb3VudE9mTm9k
ZVdoaXRlU3BhY2UoTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4gKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVEZXB0aCgpIC0gMSkgKiAyOworfQorCit2b2lkIEdyYXBoOjpwcmludE5vZGVXaGl0ZVNw
YWNlKE5vZGUmIG5vZGUpCit7CisgICAgcHJpbnRXaGl0ZVNwYWNlKGFtb3VudE9mTm9kZVdoaXRl
U3BhY2Uobm9kZSkpOworfQorCit2b2lkIEdyYXBoOjpkdW1wKGNvbnN0IGNoYXIqIHByZWZpeCwg
Tm9kZUluZGV4IG5vZGVJbmRleCkKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
ICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKQEAgLTEzNCw3ICsxNDYsOCBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgaWYgKG11c3RHZW5lcmF0ZSkKICAg
ICAgICAgLS1yZWZDb3VudDsKICAgICAKLSAgICBwcmludFdoaXRlU3BhY2UoKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVEZXB0aCgpIC0gMSkgKiAyKTsKKyAgICBkYXRhTG9nKCIlcyIsIHByZWZpeCk7
CisgICAgcHJpbnROb2RlV2hpdGVTcGFjZShub2RlKTsKIAogICAgIC8vIEV4YW1wbGUvZXhwbGFu
YXRpb24gb2YgZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtMjg4LDYgKzMwMSw1NCBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgZGF0YUxvZygiXG4i
KTsKIH0KIAordm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKGNvbnN0IGNoYXIqIHByZWZpeCwg
QmxvY2tJbmRleCBibG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQor
eworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisK
KyAgICBkYXRhTG9nKCIlc0Jsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCBwcmVmaXgsIChpbnQp
YmxvY2tJbmRleCwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIi
IDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAi
Iik7CisgICAgZGF0YUxvZygiJXMgIFByZWRlY2Vzc29yczoiLCBwcmVmaXgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQorICAg
ICAgICBkYXRhTG9nKCIgIyV1IiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICBkYXRh
TG9nKCJcbiIpOworICAgIGlmIChtX2RvbWluYXRvcnMuaXNWYWxpZCgpKSB7CisgICAgICAgIGRh
dGFMb2coIiVzICBEb21pbmF0ZWQgYnk6IiwgcHJlZml4KTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFtX2Rv
bWluYXRvcnMuZG9taW5hdGVzKGksIGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgZGF0YUxvZygiICMlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0
YUxvZygiJXMgIERvbWluYXRlczoiLCBwcmVmaXgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fZG9taW5h
dG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBkYXRhTG9nKCIgIyVsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KKyAgICBkYXRh
TG9nKCIlcyAgUGhpIE5vZGVzOiIsIHByZWZpeCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICBO
b2RlJiBwaGlOb2RlID0gYXQocGhpTm9kZUluZGV4KTsKKyAgICAgICAgaWYgKCFwaGlOb2RlLnNo
b3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCEoKCsrY291bnQpICUgNCkpCisgICAg
ICAgICAgICBkYXRhTG9nKCJcbiVzICAgICAgIiwgcHJlZml4KTsKKyAgICAgICAgZGF0YUxvZygi
IEAldS0+KCIsIHBoaU5vZGVJbmRleCk7CisgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMSgpKSB7
CisgICAgICAgICAgICBkYXRhTG9nKCJAJXUiLCBwaGlOb2RlLmNoaWxkMSgpLmluZGV4KCkpOwor
ICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIsIEAldSIsIHBoaU5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAg
aWYgKHBoaU5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiwgQCV1
IiwgcGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBkYXRhTG9nKCIpJXMiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIsIiA6
ICIiKTsKKyAgICB9CisgICAgZGF0YUxvZygiXG4iKTsKK30KKwogdm9pZCBHcmFwaDo6ZHVtcCgp
CiB7CiAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBOb05vZGU7CkBAIC0yOTUsMzMgKzM1
Niw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
YmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGRhdGFMb2coIkJsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCAoaW50KWIs
IGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBw
ZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOwotICAgICAg
ICBkYXRhTG9nKCIgIFByZWRlY2Vzc29yczoiKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgIyV1IiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKLSAgICAgICAgZGF0YUxvZygi
XG4iKTsKLSAgICAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAg
IGRhdGFMb2coIiAgRG9taW5hdGVkIGJ5OiIpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICghbV9k
b21pbmF0b3JzLmRvbWluYXRlcyhpLCBiKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICMlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAg
ICAgICAgICAgZGF0YUxvZygiICBEb21pbmF0ZXM6Iik7Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGIsIGkpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIyVsdSIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRhdGFMb2coIlxuIik7
Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YUxvZygiICBQaGkgTm9kZXM6XG4iKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgZHVtcENvZGVPcmlnaW4obGFzdE5vZGVJbmRleCwgYmxvY2stPnBoaXNbaV0pOwotICAg
ICAgICAgICAgZHVtcChibG9jay0+cGhpc1tpXSk7Ci0gICAgICAgICAgICBsYXN0Tm9kZUluZGV4
ID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgIH0KKyAgICAgICAgZHVtcEJsb2NrSGVhZGVyKCIi
LCBiLCBEdW1wQWxsUGhpcyk7CiAgICAgICAgIGRhdGFMb2coIiAgdmFycyBiZWZvcmU6ICIpOwog
ICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCiAgICAgICAgICAgICBkdW1wT3BlcmFu
ZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTMzMiw4ICszNjcs
OCBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQsIFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBkdW1wQ29kZU9yaWdpbihsYXN0Tm9kZUluZGV4LCBibG9jay0+YXQoaSkpOwotICAg
ICAgICAgICAgZHVtcChibG9jay0+YXQoaSkpOworICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4o
IiIsIGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5hdChpKSk7CisgICAgICAgICAgICBkdW1wKCIiLCBi
bG9jay0+YXQoaSkpOwogICAgICAgICAgICAgbGFzdE5vZGVJbmRleCA9IGJsb2NrLT5hdChpKTsK
ICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgIHZhcnMgYWZ0ZXI6ICIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTIwNzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTEg
KzE3OSwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBt
YXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRp
ZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1wKCk7Ci0gICAgdm9pZCBkdW1wKE5vZGVJbmRleCk7
CisgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhp
cyB9OworICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJ
bmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKKyAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogcHJlZml4
LCBOb2RlSW5kZXgpOworICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2Rl
JiBub2RlKTsKKyAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVXaGl0ZVNwYWNlKE5vZGUmIG5vZGUp
OwogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBk
aWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAgIC8vIHByZWNlZGluZyBub2RlLgot
ICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4LCBOb2RlSW5kZXgpOworICAgIHZvaWQg
ZHVtcENvZGVPcmlnaW4oY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgsIE5vZGVJbmRleCk7
CiAKICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8Qmxv
Y2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjA3
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCitKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKKyAgICA6IEND
YWxsSGVscGVycygmZGZnLm1fZ2xvYmFsRGF0YSwgZGZnLm1fY29kZUJsb2NrKQorICAgICwgbV9n
cmFwaChkZmcpCisgICAgLCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKK3sKKyAgICBpZiAo
c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQ
dHIobmV3IERpc2Fzc2VtYmxlcihkZmcpKTsKK30KKwogdm9pZCBKSVRDb21waWxlcjo6bGlua09T
UkV4aXRzKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrKCktPm51
bWJlck9mT1NSRXhpdHMoKTsgKytpKSB7CkBAIC0yMDEsOSArMjEwLDExIEBAIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKIAogYm9vbCBKSVRDb21waWxlcjo6Y29tcGls
ZShKSVRDb2RlJiBlbnRyeSkKIHsKKyAgICBzZXRTdGFydE9mQ29kZSgpOwogICAgIGNvbXBpbGVF
bnRyeSgpOwogICAgIFNwZWN1bGF0aXZlSklUIHNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICBjb21w
aWxlQm9keShzcGVjdWxhdGl2ZSk7CisgICAgc2V0RW5kT2ZNYWluUGF0aCgpOwogCiAgICAgLy8g
R2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCiAgICAgc3BlY3VsYXRpdmUucnVuU2xvd1BhdGhHZW5l
cmF0b3JzKCk7CkBAIC0yMTMsNiArMjI0LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShK
SVRDb2RlJiBlbnRyeQogICAgIAogICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMg
aWYgbmVjZXNzYXJ5LgogICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKKyAgICBz
ZXRFbmRPZkNvZGUoKTsKIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlu
a0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQpAQCAtMjIwLDE0ICsyMzIsMTggQEAgYm9vbCBK
SVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAgIGxpbmsobGlua0J1ZmZlcik7
CiAgICAgc3BlY3VsYXRpdmUubGlua09TUkVudHJpZXMobGlua0J1ZmZlcik7CiAKKyAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIp
OworCiAgICAgZW50cnkgPSBKSVRDb2RlKAotICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiREZHIHByb2dyYW0vZXZhbCBDb2RlQmxvY2sgJXAiLCBtX2NvZGVCbG9jaykpLAorICAg
ICAgICBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLAogICAgICAg
ICBKSVRDb2RlOjpERkdKSVQpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgZW50cnlXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBzZXRTdGFydE9mQ29kZSgpOwogICAgIGNv
bXBpbGVFbnRyeSgpOwogCiAgICAgLy8gPT09IEZ1bmN0aW9uIGhlYWRlciBjb2RlIGdlbmVyYXRp
b24gPT09CkBAIC0yNDYsNiArMjYyLDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0
aW9uKEpJVENvZAogICAgIC8vID09PSBGdW5jdGlvbiBib2R5IGNvZGUgZ2VuZXJhdGlvbiA9PT0K
ICAgICBTcGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGlsZUJvZHko
c3BlY3VsYXRpdmUpOworICAgIHNldEVuZE9mTWFpblBhdGgoKTsKIAogICAgIC8vID09PSBGdW5j
dGlvbiBmb290ZXIgY29kZSBnZW5lcmF0aW9uID09PQogICAgIC8vCkBAIC0yOTAsNyArMzA3LDcg
QEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIAogICAgIC8v
IENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIHNwZWN1bGF0
aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKLQorICAgIHNldEVuZE9mQ29kZSgpOwogCiAgICAgLy8g
PT09IExpbmsgPT09CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMzAyLDEwICszMTks
MTMgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIC8vIEZJ
WE1FOiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRv
IERGR09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbFJlZ2lzdGVyRmlsZUNoZWNrLCBjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7CiAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0
cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlD
aGVjayk7CisgICAgCisgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+ZHVtcChsaW5rQnVmZmVyKTsKIAogICAgIGVudHJ5V2l0aEFyaXR5Q2hlY2sgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgZW50cnkgPSBKSVRDb2RlKAotICAg
ICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiREZHIGZ1bmN0aW9uIENvZGVCbG9jayAl
cCIsIG1fY29kZUJsb2NrKSksCisgICAgICAgIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91
dERpc2Fzc2VtYmx5KCksCiAgICAgICAgIEpJVENvZGU6OkRGR0pJVCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkRGR0Rp
c2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJ
bmZvLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKQEAgLTIwOCwxMiArMjA5LDcgQEAgc3RydWN0
IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKIC8vIGNhbGwgdG8gYmUgbGlua2VkKS4KIGNsYXNzIEpJ
VENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiBwdWJsaWM6Ci0gICAgSklUQ29tcGls
ZXIoR3JhcGgmIGRmZykKLSAgICAgICAgOiBDQ2FsbEhlbHBlcnMoJmRmZy5tX2dsb2JhbERhdGEs
IGRmZy5tX2NvZGVCbG9jaykKLSAgICAgICAgLCBtX2dyYXBoKGRmZykKLSAgICAgICAgLCBtX2N1
cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKLSAgICB7Ci0gICAgfQorICAgIEpJVENvbXBpbGVyKEdy
YXBoJiBkZmcpOwogICAgIAogICAgIGJvb2wgY29tcGlsZShKSVRDb2RlJiBlbnRyeSk7CiAgICAg
Ym9vbCBjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgZW50cnlXaXRoQXJpdHlDaGVjayk7CkBAIC0yMjEsNiArMjE3LDQyIEBAIHB1YmxpYzoKICAg
ICAvLyBBY2Nlc3NvcnMgZm9yIHByb3BlcnRpZXMuCiAgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1
cm4gbV9ncmFwaDsgfQogICAgIAorICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhl
IGRpc2Fzc2VtYmxlci4KKyAgICB2b2lkIHNldFN0YXJ0T2ZDb2RlKCkKKyAgICB7CisgICAgICAg
IGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50
cygpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRGb3JCbG9jayhCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCbG9jayhibG9j
a0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0Rm9yTm9kZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKExJ
S0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlSW5kZXgsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50
cygpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRFbmRPZk1haW5QYXRoKCkKKyAgICB7Cisg
ICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEVuZE9mQ29kZSgpCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKICAgICAvLyBHZXQgYSB0b2tlbiBmb3IgYmVnaW5u
aW5nIGEgY2FsbCwgYW5kIHNldCB0aGUgY3VycmVudCBjb2RlIG9yaWdpbiBpbmRleCBpbgogICAg
IC8vIHRoZSBjYWxsIGZyYW1lLgogICAgIENhbGxCZWdpblRva2VuIGJlZ2luQ2FsbCgpCkBAIC0z
NTMsNiArMzg1LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgZGF0YWZsb3cgZ3JhcGggY3VycmVu
dGx5IGJlaW5nIGdlbmVyYXRlZC4KICAgICBHcmFwaCYgbV9ncmFwaDsKIAorICAgIE93blB0cjxE
aXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIAogICAgIC8vIFZlY3RvciBvZiBjYWxs
cyBvdXQgZnJvbSBKSVQgY29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBoYW5kbGVyIGluZm9ybWF0
aW9uLgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBleGNl
cHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxMaW5rUmVjb3JkPiBtX2NhbGxzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyMDc5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzAs
NiArNzMwLDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JlZkNv
dW50OwogICAgIH0KKyAgICAKKyAgICBib29sIHdpbGxIYXZlQ29kZUdlbigpCisgICAgeworICAg
ICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGUoKSAmJiBvcCgpICE9IFBoYW50b20gJiYgb3AoKSAh
PSBOb3A7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVmQ291bnQoKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHJldmlzaW9uIDEyMDc5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTkgKzQ2LDE5IEBAIGNvbnN0IGNoYXIqIG5vZGVGbGFnc0FzU3RyaW5n
KE5vZGVGbGFncyAKICAgICBpZiAoZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgewogICAgICAgICBz
d2l0Y2ggKGZsYWdzICYgTm9kZVJlc3VsdE1hc2spIHsKICAgICAgICAgY2FzZSBOb2RlUmVzdWx0
SlM6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJSZXN1bHRKUyIpOworICAgICAgICAgICAgcHRy
LnN0cmNhdCgiSlMiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGVSZXN1
bHROdW1iZXI6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJSZXN1bHROdW1iZXIiKTsKKyAgICAg
ICAgICAgIHB0ci5zdHJjYXQoIk51bWJlciIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiUmVzdWx0SW50
MzIiKTsKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoIkludDMyIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKLSAgICAgICAgICAgIHB0ci5zdHJj
YXQoIlJlc3VsdEJvb2xlYW4iKTsKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoIkJvb2xlYW4iKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGVSZXN1bHRTdG9yYWdlOgotICAg
ICAgICAgICAgcHRyLnN0cmNhdCgiUmVzdWx0U3RvcmFnZSIpOworICAgICAgICAgICAgcHRyLnN0
cmNhdCgiU3RvcmFnZSIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcwLDIxICs3MCwyMSBAQCBjb25z
dCBjaGFyKiBub2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgCiAgICAgaWYgKGZsYWdzICYgTm9k
ZU11c3RHZW5lcmF0ZSkgewogICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAgICAgIHB0
ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTXVzdEdlbmVyYXRlIik7CisgICAg
ICAgIHB0ci5zdHJjYXQoIk11c3RHZW4iKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAg
ICAgfQogICAgIAogICAgIGlmIChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgIGlm
IChoYXNQcmludGVkKQogICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIu
c3RyY2F0KCJIYXNWYXJBcmdzIik7CisgICAgICAgIHB0ci5zdHJjYXQoIlZhckFyZ3MiKTsKICAg
ICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGlmIChmbGFncyAmIE5v
ZGVDbG9iYmVyc1dvcmxkKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVkKQogICAgICAgICAgICAg
cHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJDbG9iYmVyc1dvcmxkIik7Cisg
ICAgICAgIHB0ci5zdHJjYXQoIkNsb2JiZXJzIik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KICAgICAKQEAgLTk1LDE4ICs5NSwyMyBAQCBjb25zdCBjaGFyKiBub2RlRmxhZ3NB
c1N0cmluZyhOb2RlRmxhZ3MgCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAg
ICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVyKSB7Ci0gICAgICAgIGlmIChoYXNQ
cmludGVkKQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0
KCJVc2VkQXNOdW0iKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQotICAgIAot
ICAgIGlmIChmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pIHsKLSAgICAgICAgaWYgKGhhc1ByaW50
ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQoIk5l
ZWRzTmVnWmVybyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICBpZiAoZmxhZ3Mg
JiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1i
ZXIpICYmICEoZmxhZ3MgJiBOb2RlTmVlZHNOZWdaZXJvKSkgeworICAgICAgICAgICAgaWYgKGhh
c1ByaW50ZWQpCisgICAgICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICAgICAg
cHRyLnN0cmNhdCgiUHVyZUludCIpOworICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpKSB7CisgICAgICAg
ICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Cisg
ICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJlSW50KHcvIG5lZyB6ZXJvKSIpOworICAgICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIE5vZGVO
ZWVkc05lZ1plcm8pKSB7CisgICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAg
ICAgICBwdHIuc3RyY2F0KCJ8Iik7CisgICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJlTnVtIik7
CisgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsKQEAgLTEyNiw3ICsxMzEsNyBAQCBj
b25zdCBjaGFyKiBub2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgCiAgICAgaWYgKGZsYWdzICYg
Tm9kZVVzZWRBc0ludCkgewogICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAgICAgIHB0
ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiVXNlZEFzSW50Iik7CisgICAgICAg
IHB0ci5zdHJjYXQoIlVzZUFzSW50Iik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNiw2ICsxMDI2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogCiAgICAgZm9y
IChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21f
aW5kZXhJbkJsb2NrKSB7CiAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2tbbV9pbmRleElu
QmxvY2tdOworICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgbV9jb2RlT3JpZ2lu
Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luOwogICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkgewpAQCAtMTMyMSw2ICsxMzIyLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSgpCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBmb3IgKG1fYmxvY2sgPSAw
OyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykgewor
ICAgICAgICBtX2ppdC5zZXRGb3JCbG9jayhtX2Jsb2NrKTsKICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgpOwogICAgICAgICBp
ZiAoYmxvY2spCiAgICAgICAgICAgICBjb21waWxlKCpibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjA3OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNjksNyArMjM2OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBWZWN0b3I8
U2xvd1BhdGhHZW5lcmF0b3IqLCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsgLy8gZG9lc24ndCB1
c2UgT3duUHRyPD4gYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBERkdTbG93UGF0aEdl
bmVyYXRvci5oCiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4+IG1fcGxhbnM7Ci0K
KyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZh
bHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KGludCBvcGVyYW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDEyMDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgT3B0aW9ucyB7CiBib29sIHVzZUpJVDsKIAogYm9vbCBzaG93RGlzYXNzZW1i
bHk7Citib29sIHNob3dERkdEaXNhc3NlbWJseTsKIAogdW5zaWduZWQgbWF4aW11bU9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKQEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lk
IGluaXRpYWxpemVPcHRpb25zKCkKICAgICBTRVQodXNlSklULCB0cnVlKTsKICAgICAKICAgICBT
RVQoc2hvd0Rpc2Fzc2VtYmx5LCBmYWxzZSk7CisgICAgU0VUKHNob3dERkdEaXNhc3NlbWJseSwg
ZmFsc2UpOwogICAgIAogICAgIFNFVChtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudCwgMTAwMDApOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIwNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgT3B0aW9ucyB7CiBleHRlcm4gYm9vbCB1c2VKSVQ7CiAKIGV4dGVy
biBib29sIHNob3dEaXNhc3NlbWJseTsKK2V4dGVybiBib29sIHNob3dERkdEaXNhc3NlbWJseTsg
Ly8gc2hvd0Rpc2Fzc2VtYmx5IGltcGxpZXMgc2hvd0RGR0Rpc2Fzc2VtYmx5LgogCiBleHRlcm4g
dW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148519</attachid>
            <date>2012-06-20 00:29:55 -0700</date>
            <delta_ts>2012-06-20 08:23:02 -0700</delta_ts>
            <desc>improved patch</desc>
            <filename>dfgdisas_patch_2.diff</filename>
            <type>text/plain</type>
            <size>40076</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDEyLTA2LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIHByaW50IGRpc2Fzc2VtYmx5IGludGVybGVhdmVkIHdpdGgg
dGhlIElSCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMpOgorICAgICAg
ICAoQVJNdjdBc3NlbWJsZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgIChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChYODZBc3NlbWJsZXIp
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cyk6
CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6OnNob3VsZFNo
b3dEaXNhc3NlbWJseSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6RGlz
YXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxl
cjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1i
bHkpOgorICAgICAgICAqIGRmZy9ERkdEaXNhc3NlbWJsZXIuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoRGlzYXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3Nl
bWJsZXI6OnNldFN0YXJ0T2ZDb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6
OnNldEZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3NlbWJsZXI6OnNldEZvck5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6c2V0RW5kT2ZNYWluUGF0aCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpzZXRFbmRPZkNvZGUpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBD
b2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YW1vdW50T2ZOb2RlV2hpdGVT
cGFjZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmludE5v
ZGVXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
Lmg6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OnNldFN0YXJ0T2ZDb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0
Rm9yQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpzZXRGb3JOb2RlKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0RW5kT2ZNYWluUGF0aCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEVuZE9mQ29kZSk6CisgICAgICAgICogZGZn
L0RGR05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ondp
bGxIYXZlQ29kZUdlbik6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6bm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRp
dmVKSVQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChPcHRpb25z
KToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZU9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoT3B0aW9ucyk6CisKIDIwMTItMDYtMTkgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0Mgc2hvdWxkIGJlIGFi
bGUgdG8gc2hvdyBkaXNhc3NlbWJseSBmb3IgYWxsIGdlbmVyYXRlZCBKSVQgY29kZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIwNzk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2
ICs3MSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5jcHAKICAg
ICBkZmcvREZHQ1NFUGhhc2UuY3BwCisgICAgZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKICAgICBk
ZmcvREZHRG9taW5hdG9ycy5jcHAKICAgICBkZmcvREZHRHJpdmVyLmNwcAogICAgIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHJldmlzaW9uIDEyMDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9taW5hdG9ycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9taW5hdG9ycy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvdWJsZUZvcm1h
dFN0YXRlLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyMDc5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmNwcCBcCiAgICAg
ZGZnL0RGR0NTRVBoYXNlLmNwcCBcCisgICAgZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgXAogICAg
IGRmZy9ERkdEb21pbmF0b3JzLmNwcCBcCiAgICAgZGZnL0RGR0RyaXZlci5jcHAgXAogICAgIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTIwNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDks
OCBAQAogCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0MjczRjE1OEVCRDk0MDA0Q0I5
RkYgLyogdWRpczg2LmggKi87IH07CiAJCTBGRjQyNzREMTU4RUJGRTYwMDRDQjlGRiAvKiB1ZGlz
ODZfaXRhYl9ob2xkZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjQyNzRDMTU4RUJGRTEwMDRDQjlGRiAvKiB1ZGlzODZfaXRhYl9ob2xkZXIuYyAq
LzsgfTsKIAkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NTYxNTkxNEEy
MDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwICovOyB9OworCQkwRkY0Mjc2NDE1OTFBMUNDMDA0
Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzYxMTU5MUExQzkwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuY3BwICovOyB9OworCQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkY0Mjc2MjE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAw
NDFBMjRFIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJ
bnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAqLzsgfTsKIAkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgKi87
IH07CiAJCTBGRkZDOTU4MTRFRjkwQTIwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRkM5NEMxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTkyOSw2ICs5MzEsOCBAQAogCQkwRkY0MjczRjE1OEVCRDk0MDA0
Q0I5RkYgLyogdWRpczg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVkaXM4
Ni5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL3VkaXM4Ni91ZGlzODYuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGNDI3NEMxNThFQkZFMTAwNENCOUZGIC8qIHVkaXM4Nl9pdGFiX2hv
bGRlci5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfaXRhYl9ob2xk
ZXIuYzsgcGF0aCA9IGRpc2Fzc2VtYmxlci91ZGlzODYvdWRpczg2X2l0YWJfaG9sZGVyLmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzU2MTU5MTRBMjAwMDRDQjlGRiAvKiBM
aW5rQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtC
dWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY0Mjc2MTE1OTFBMUM5
MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Rpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1i
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGNDI3NjIxNTkxQTFDOTAw
NENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRmZy9ERkdEaXNhc3NlbWJsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpT
Q0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQkwRkZGQzk0QjE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZB
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ0ZBUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0NGQVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGRkM5NEMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NGQVBoYXNlLmg7IHBhdGggPSBkZmcvREZH
Q0ZBUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDEsNiArMjIwNSw4
IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmggKi8sCiAJCQkJMEZDMDk3OUQxNDZCMjcxRTAwQ0YyNDQyIC8qIERGR0NvcnJlY3RhYmxl
SnVtcFBvaW50LmNwcCAqLywKIAkJCQkwRkMwOTc5QTE0NkE3NzIwMDBDRjI0NDIgLyogREZHQ29y
cmVjdGFibGVKdW1wUG9pbnQuaCAqLywKKwkJCQkwRkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyog
REZHRGlzYXNzZW1ibGVyLmNwcCAqLywKKwkJCQkwRkY0Mjc2MjE1OTFBMUM5MDA0Q0I5RkYgLyog
REZHRGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuY3BwICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggKi8sCkBAIC0yNzU5LDYgKzI3NjUsNyBAQAogCQkJCTBGRjQyNzQ4MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTMzNDUsNiArMzM1Miw3IEBACiAJCQkJQzJFNTI2QkQxNTkwRUYwMDAwNTRFNDhEIC8q
IEhlYXBUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5
RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkQ1OEMzNDE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjcsNiArMTgyNywx
MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDhJbW04KE9QX05PUF9U
MSwgMCk7CiAgICAgfQogICAgIAorICAgIEFzc2VtYmxlckxhYmVsIGxhYmVsSWdub3JpbmdXYXRj
aHBvaW50cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIubGFiZWwoKTsKKyAg
ICB9CisKICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbEZvcldhdGNocG9pbnQoKQogICAgIHsKICAg
ICAgICAgQXNzZW1ibGVyTGFiZWwgcmVzdWx0ID0gbV9mb3JtYXR0ZXIubGFiZWwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTU1LDYgKzU1NSwxNSBAQCBwdWJsaWM6CiAKIAogICAgIC8vIFNlY3Rpb24gMzogTWlzYyBhZG1p
biBtZXRob2RzCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgTGFiZWwgbGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCkKKyAgICB7CisgICAgICAgIExhYmVsIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fbGFiZWwgPSBtX2Fzc2VtYmxlci5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICBMYWJlbCBsYWJlbCgp
CiAgICAgewogICAgICAgICByZXR1cm4gTGFiZWwodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDEyMDc5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3MzAsNiArMTczMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faW5kZXhP
ZlRhaWxPZkxhc3RXYXRjaHBvaW50ID0gcmVzdWx0Lm1fb2Zmc2V0ICsgbWF4SnVtcFJlcGxhY2Vt
ZW50U2l6ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBBc3Nl
bWJsZXJMYWJlbCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZm9ybWF0dGVyLmxhYmVsKCk7CisgICAgfQogCiAgICAgQXNzZW1ibGVyTGFiZWwgbGFi
ZWwoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2
aXNpb24gMTIwNzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMSBAQCBlbnVtIE5vUmVzdWx0VGFnIHsgTm9S
ZXN1bHQgfTsKIAogZW51bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbnRDb252
ZXJnZWQsIEZpeHBvaW50Tm90Q29udmVyZ2VkIH07CiAKK2lubGluZSBib29sIHNob3VsZFNob3dE
aXNhc3NlbWJseSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSB8fCBP
cHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Rpc2Fzc2VtYmxlci5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Rpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBo
JiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCit7CisgICAgbV9sYWJlbEZvckJsb2NrSW5k
ZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7CisgICAgbV9sYWJlbEZvck5vZGVJbmRl
eC5yZXNpemUoZ3JhcGguc2l6ZSgpKTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBkYXRhTG9nKCJHZW5lcmF0ZWQgSklUIGNvZGUg
Zm9yIERGRyBDb2RlQmxvY2sgJXA6XG4iLCBtX2dyYXBoLm1fY29kZUJsb2NrKTsKKyAgICBkYXRh
TG9nKCIgICAgQ29kZSBhdCBbJXAsICVwKTpcbiIsIGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCks
IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpKSArIGxpbmtCdWZm
ZXIuZGVidWdTaXplKCkpOworICAgIAorICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsK
KyAgICBjb25zdCBjaGFyKiBkaXNhc3NlbWJseVByZWZpeCA9ICIgICAgICAgICI7CisgICAgCisg
ICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBOb05vZGU7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIHByZXZpb3VzTGFiZWwgPSBtX3N0YXJ0T2ZDb2RlOworICAgIGZvciAoc2l6ZV90IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZHVtcERpc2Fzc2VtYmx5KGRpc2Fzc2VtYmx5UHJlZml4LCBsaW5rQnVm
ZmVyLCBwcmV2aW91c0xhYmVsLCBtX2xhYmVsRm9yQmxvY2tJbmRleFtibG9ja0luZGV4XSwgbGFz
dE5vZGVJbmRleCk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKHByZWZpeCwgYmxv
Y2tJbmRleCwgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOworICAgICAgICBOb2RlSW5kZXggbGFz
dE5vZGVJbmRleEZvckRpc2Fzc2VtYmx5ID0gYmxvY2stPmF0KDApOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFt
X2dyYXBoW2Jsb2NrLT5hdChpKV0ud2lsbEhhdmVDb2RlR2VuKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVs
OworICAgICAgICAgICAgaWYgKG1fbGFiZWxGb3JOb2RlSW5kZXhbYmxvY2stPmF0KGkpXS5pc1Nl
dCgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fbGFiZWxGb3JOb2RlSW5kZXhb
YmxvY2stPmF0KGkpXTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIER1
bXAgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gYnkgdXNpbmcgdGhlIGZpcnN0IGxhYmVsIG9mIHRoZSBu
ZXh0IGJsb2NrCisgICAgICAgICAgICAgICAgLy8gYXMgdGhlIGVuZCBwb2ludC4gVGhpcyBjYXNl
IGlzIGhpdCBlaXRoZXIgZHVyaW5nIHBlZXBob2xlIGNvbXBhcmUKKyAgICAgICAgICAgICAgICAv
LyBvcHRpbWl6YXRpb25zICh0aGUgQnJhbmNoIHdvbid0IGhhdmUgaXRzIG93biBsYWJlbCkgb3Ig
aWYgd2UgaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gZm9yY2VkIE9TUiBleGl0LgorICAgICAg
ICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSBtX2xhYmVsRm9yQmxvY2tJbmRleFti
bG9ja0luZGV4ICsgMV07CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50TGFiZWwgPSBtX2VuZE9mTWFpblBhdGg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkdW1wRGlzYXNzZW1ibHkoZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZp
b3VzTGFiZWwsIGN1cnJlbnRMYWJlbCwgbGFzdE5vZGVJbmRleEZvckRpc2Fzc2VtYmx5KTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcENvZGVPcmlnaW4ocHJlZml4LCBsYXN0Tm9kZUluZGV4LCBi
bG9jay0+YXQoaSkpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKHByZWZpeCwgYmxvY2stPmF0
KGkpKTsKKyAgICAgICAgICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBsYXN0Tm9kZUluZGV4Rm9yRGlzYXNzZW1ibHkgPSBibG9jay0+YXQoaSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZHVtcERpc2Fzc2VtYmx5KGRpc2Fzc2VtYmx5UHJlZml4LCBsaW5rQnVm
ZmVyLCBwcmV2aW91c0xhYmVsLCBtX2VuZE9mTWFpblBhdGgsIGxhc3ROb2RlSW5kZXgpOworICAg
IGRhdGFMb2coIiVzKEVuZCBPZiBNYWluIFBhdGgpXG4iLCBwcmVmaXgpOworICAgIGR1bXBEaXNh
c3NlbWJseShkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJlbCwgbV9l
bmRPZkNvZGUsIE5vTm9kZSk7Cit9CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wRGlzYXNzZW1i
bHkoY29uc3QgY2hhciogcHJlZml4LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwmIHByZXZpb3VzTGFiZWwsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjdXJyZW50
TGFiZWwsIE5vZGVJbmRleCBjb250ZXh0KQoreworICAgIHNpemVfdCBwcmVmaXhMZW5ndGggPSBz
dHJsZW4ocHJlZml4KTsKKyAgICBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZTsKKyAgICBpZiAo
Y29udGV4dCA9PSBOb05vZGUpCisgICAgICAgIGFtb3VudE9mTm9kZVdoaXRlU3BhY2UgPSAwOwor
ICAgIGVsc2UKKyAgICAgICAgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZSA9IEdyYXBoOjphbW91bnRP
Zk5vZGVXaGl0ZVNwYWNlKG1fZ3JhcGhbY29udGV4dF0pOworICAgIE93bkFycmF5UHRyPGNoYXI+
IHByZWZpeEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbcHJlZml4TGVuZ3RoICsgYW1v
dW50T2ZOb2RlV2hpdGVTcGFjZSArIDFdKTsKKyAgICBzdHJjcHkocHJlZml4QnVmZmVyLmdldCgp
LCBwcmVmaXgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW1vdW50T2ZOb2RlV2hpdGVTcGFj
ZTsgKytpKQorICAgICAgICBwcmVmaXhCdWZmZXJbaSArIHByZWZpeExlbmd0aF0gPSAnICc7Cisg
ICAgcHJlZml4QnVmZmVyW3ByZWZpeExlbmd0aCArIGFtb3VudE9mTm9kZVdoaXRlU3BhY2VdID0g
MDsKKyAgICAKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihwcmV2aW91c0xhYmVsKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBlbmQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoY3VycmVudExhYmVsKTsKKyAgICBwcmV2aW91c0xhYmVsID0gY3VycmVu
dExhYmVsOworICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbmQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkgPj0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgIGlmICh0cnlUb0Rpc2Fzc2VtYmxlKHN0YXJ0LCBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihlbmQuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSwgcHJlZml4QnVmZmVyLmdldCgpLCBXVEY6
OmRhdGFGaWxlKCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZGF0YUxvZygiJXMgICAg
ZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBmb3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4QnVm
ZmVyLmdldCgpLCBzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCBlbmQuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNh
c3NlbWJsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Rpc2Fzc2VtYmxlcl9o
CisjZGVmaW5lIERGR0Rpc2Fzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworCitjbGFzcyBEaXNhc3NlbWJsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIERpc2Fzc2VtYmxlcihHcmFwaCYpOworICAgIAorICAgIHZvaWQg
c2V0U3RhcnRPZkNvZGUoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKSB7IG1fc3RhcnRPZkNv
ZGUgPSBsYWJlbDsgfQorICAgIHZvaWQgc2V0Rm9yQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4
LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICBtX2xhYmVsRm9y
QmxvY2tJbmRleFtibG9ja0luZGV4XSA9IGxhYmVsOworICAgIH0KKyAgICB2b2lkIHNldEZvck5v
ZGUoTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKQorICAg
IHsKKyAgICAgICAgbV9sYWJlbEZvck5vZGVJbmRleFtub2RlSW5kZXhdID0gbGFiZWw7CisgICAg
fQorICAgIHZvaWQgc2V0RW5kT2ZNYWluUGF0aChNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwp
CisgICAgeworICAgICAgICBtX2VuZE9mTWFpblBhdGggPSBsYWJlbDsKKyAgICB9CisgICAgdm9p
ZCBzZXRFbmRPZkNvZGUoTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKQorICAgIHsKKyAgICAg
ICAgbV9lbmRPZkNvZGUgPSBsYWJlbDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKExpbmtC
dWZmZXImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkdW1wRGlzYXNzZW1ibHkoY29uc3Qg
Y2hhciogcHJlZml4LCBMaW5rQnVmZmVyJiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBwcmV2aW91
c0xhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY3VycmVudExhYmVsLCBOb2RlSW5kZXggY29u
dGV4dCk7CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnRPZkNvZGU7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9s
YWJlbEZvckJsb2NrSW5kZXg7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9s
YWJlbEZvck5vZGVJbmRleDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9lbmRPZk1haW5Q
YXRoOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2VuZE9mQ29kZTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHRGlzYXNzZW1ibGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAJKHJldmlzaW9uIDEyMDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNiBAQCBpbmxpbmUg
Ym9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQogICAgIGRhdGFMb2coIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2Vk
IGluICV1IGl0ZXJhdGlvbnMuXG4iLCBjbnQpOwogI2VuZGlmCi0gICAgZGZnLm1fZG9taW5hdG9y
cy5jb21wdXRlKGRmZyk7CiAgICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZn
KTsKIAogICAgIEdyYXBoRHVtcE1vZGUgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTIw
Nzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKHVuc2ln
bmVkIGFtbwogICAgICAgICBkYXRhTG9nKCIgIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXBDb2Rl
T3JpZ2luKE5vZGVJbmRleCBwcmV2Tm9kZUluZGV4LCBOb2RlSW5kZXggbm9kZUluZGV4KQordm9p
ZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXggcHJl
dk5vZGVJbmRleCwgTm9kZUluZGV4IG5vZGVJbmRleCkKIHsKICAgICBpZiAocHJldk5vZGVJbmRl
eCA9PSBOb05vZGUpCiAgICAgICAgIHJldHVybjsKQEAgLTExMiwxOCArMTEyLDMwIEBAIHZvaWQg
R3JhcGg6OmR1bXBDb2RlT3JpZ2luKE5vZGVJbmRleCBwcmUKICAgICAKICAgICAvLyBQcmludCB0
aGUgcG9wcy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmV2aW91c0lubGluZVN0YWNrLnNpemUo
KTsgaS0tID4gaW5kZXhPZkRpdmVyZ2VuY2U7KSB7CisgICAgICAgIGRhdGFMb2coIiVzIiwgcHJl
Zml4KTsKICAgICAgICAgcHJpbnRXaGl0ZVNwYWNlKGkgKiAyKTsKICAgICAgICAgZGF0YUxvZygi
PC0tICVwXG4iLCBwcmV2aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0
YWJsZS5nZXQoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFByaW50IHRoZSBwdXNoZXMuCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gaW5kZXhPZkRpdmVyZ2VuY2U7IGkgPCBjdXJyZW50SW5saW5lU3Rh
Y2suc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZGF0YUxvZygiJXMiLCBwcmVmaXgpOwogICAgICAg
ICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOwogICAgICAgICBkYXRhTG9nKCItLT4gJXBcbiIsIGN1
cnJlbnRJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwog
ICAgIH0KIH0KIAotdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQoraW50IEdy
YXBoOjphbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMjsKK30KKwordm9pZCBHcmFwaDo6
cHJpbnROb2RlV2hpdGVTcGFjZShOb2RlJiBub2RlKQoreworICAgIHByaW50V2hpdGVTcGFjZShh
bW91bnRPZk5vZGVXaGl0ZVNwYWNlKG5vZGUpKTsKK30KKwordm9pZCBHcmFwaDo6ZHVtcChjb25z
dCBjaGFyKiBwcmVmaXgsIE5vZGVJbmRleCBub2RlSW5kZXgpCiB7CiAgICAgTm9kZSYgbm9kZSA9
IGF0KG5vZGVJbmRleCk7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CkBAIC0xMzQsNyAr
MTQ2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIGlmICht
dXN0R2VuZXJhdGUpCiAgICAgICAgIC0tcmVmQ291bnQ7CiAgICAgCi0gICAgcHJpbnRXaGl0ZVNw
YWNlKChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7CisgICAgZGF0YUxv
ZygiJXMiLCBwcmVmaXgpOworICAgIHByaW50Tm9kZVdoaXRlU3BhY2Uobm9kZSk7CiAKICAgICAv
LyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAg
LTI4OCw2ICszMDEsNTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQog
ICAgIGRhdGFMb2coIlxuIik7CiB9CiAKK3ZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihjb25z
dCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlIHBo
aU5vZGVEdW1wTW9kZSkKK3sKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworCisgICAgZGF0YUxvZygiJXNCbG9jayAjJXUgKGJjIyV1KTogJXMlc1xu
IiwgcHJlZml4LCAoaW50KWJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+
aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAo
T1NSIHRhcmdldCkiIDogIiIpOworICAgIGRhdGFMb2coIiVzICBQcmVkZWNlc3NvcnM6IiwgcHJl
Zml4KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5z
aXplKCk7ICsraSkKKyAgICAgICAgZGF0YUxvZygiICMldSIsIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1tpXSk7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQo
KSkgeworICAgICAgICBkYXRhTG9nKCIlcyAgRG9taW5hdGVkIGJ5OiIsIHByZWZpeCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9ja0luZGV4KSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAjJWx1Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIlxu
Iik7CisgICAgICAgIGRhdGFMb2coIiVzICBEb21pbmF0ZXM6IiwgcHJlZml4KTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2NrSW5kZXgsIGkpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZGF0YUxvZygiICMlbHUiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiXG4iKTsK
KyAgICB9CisgICAgZGF0YUxvZygiJXMgIFBoaSBOb2RlczoiLCBwcmVmaXgpOworICAgIHVuc2ln
bmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBibG9jay0+cGhp
c1tpXTsKKyAgICAgICAgTm9kZSYgcGhpTm9kZSA9IGF0KHBoaU5vZGVJbmRleCk7CisgICAgICAg
IGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1w
TGl2ZVBoaXNPbmx5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghKCgrK2Nv
dW50KSAlIDQpKQorICAgICAgICAgICAgZGF0YUxvZygiXG4lcyAgICAgICIsIHByZWZpeCk7Cisg
ICAgICAgIGRhdGFMb2coIiBAJXUtPigiLCBwaGlOb2RlSW5kZXgpOworICAgICAgICBpZiAocGhp
Tm9kZS5jaGlsZDEoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiQCV1IiwgcGhpTm9kZS5jaGls
ZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMigpKSB7CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiLCBAJXUiLCBwaGlOb2RlLmNoaWxkMigpLmluZGV4KCkpOwor
ICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIsIEAldSIsIHBoaU5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiKSVzIiwgaSArIDEgPCBibG9jay0+cGhp
cy5zaXplKCkgPyAiLCIgOiAiIik7CisgICAgfQorICAgIGRhdGFMb2coIlxuIik7Cit9CisKIHZv
aWQgR3JhcGg6OmR1bXAoKQogewogICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2Rl
OwpAQCAtMjk1LDMzICszNTYsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkYXRhTG9nKCJCbG9jayAjJXUgKGJjIyV1KTog
JXMlc1xuIiwgKGludCliLCBibG9jay0+Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlzUmVhY2hhYmxl
ID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQp
IiA6ICIiKTsKLSAgICAgICAgZGF0YUxvZygiICBQcmVkZWNlc3NvcnM6Iik7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgZGF0YUxvZygiICMldSIsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7Ci0g
ICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAgIGlmIChtX2RvbWluYXRvcnMuaXNWYWxpZCgp
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgIERvbWluYXRlZCBieToiKTsKLSAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoaSwgYikpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAjJWx1Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oaSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0
YUxvZygiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgRG9taW5hdGVzOiIpOwotICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhiLCBpKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICMlbHUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBkYXRhTG9nKCJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFMb2coIiAgUGhpIE5vZGVz
OlxuIik7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKGxhc3ROb2RlSW5kZXgsIGJsb2Nr
LT5waGlzW2ldKTsKLSAgICAgICAgICAgIGR1bXAoYmxvY2stPnBoaXNbaV0pOwotICAgICAgICAg
ICAgbGFzdE5vZGVJbmRleCA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICB9CisgICAgICAgIGR1
bXBCbG9ja0hlYWRlcigiIiwgYiwgRHVtcEFsbFBoaXMpOwogICAgICAgICBkYXRhTG9nKCIgIHZh
cnMgYmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAg
ICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIFdURjo6ZGF0YUZpbGUoKSk7
CkBAIC0zMzIsOCArMzY3LDggQEAgdm9pZCBHcmFwaDo6ZHVtcCgpCiAgICAgICAgIGR1bXBPcGVy
YW5kcyhibG9jay0+dmFyaWFibGVzQXRIZWFkLCBXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICBk
YXRhTG9nKCJcbiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4obGFzdE5vZGVJbmRleCwgYmxv
Y2stPmF0KGkpKTsKLSAgICAgICAgICAgIGR1bXAoYmxvY2stPmF0KGkpKTsKKyAgICAgICAgICAg
IGR1bXBDb2RlT3JpZ2luKCIiLCBsYXN0Tm9kZUluZGV4LCBibG9jay0+YXQoaSkpOworICAgICAg
ICAgICAgZHVtcCgiIiwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGxhc3ROb2RlSW5kZXgg
PSBibG9jay0+YXQoaSk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICB2YXJzIGFmdGVy
OiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEy
MDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDExICsxNzksMTUgQEAgcHVibGljOgogCiAgICAgLy8gQ29kZUJsb2NrIGlz
IG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVt
cGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcCgpOwotICAgIHZvaWQg
ZHVtcChOb2RlSW5kZXgpOworICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlz
T25seSwgRHVtcEFsbFBoaXMgfTsKKyAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihjb25zdCBjaGFy
KiBwcmVmaXgsIEJsb2NrSW5kZXgsIFBoaU5vZGVEdW1wTW9kZSk7CisgICAgdm9pZCBkdW1wKGNv
bnN0IGNoYXIqIHByZWZpeCwgTm9kZUluZGV4KTsKKyAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9k
ZVdoaXRlU3BhY2UoTm9kZSYpOworICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZVdoaXRlU3BhY2Uo
Tm9kZSYpOwogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUg
YXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAgIC8vIHByZWNlZGluZyBu
b2RlLgotICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4LCBOb2RlSW5kZXgpOworICAg
IHZvaWQgZHVtcENvZGVPcmlnaW4oY29uc3QgY2hhciogcHJlZml4LCBOb2RlSW5kZXgsIE5vZGVJ
bmRleCk7CiAKICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0
b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCitKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKKyAg
ICA6IENDYWxsSGVscGVycygmZGZnLm1fZ2xvYmFsRGF0YSwgZGZnLm1fY29kZUJsb2NrKQorICAg
ICwgbV9ncmFwaChkZmcpCisgICAgLCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKK3sKKyAg
ICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0g
YWRvcHRQdHIobmV3IERpc2Fzc2VtYmxlcihkZmcpKTsKK30KKwogdm9pZCBKSVRDb21waWxlcjo6
bGlua09TUkV4aXRzKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2Nr
KCktPm51bWJlck9mT1NSRXhpdHMoKTsgKytpKSB7CkBAIC0yMDEsOSArMjEwLDExIEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKIAogYm9vbCBKSVRDb21waWxlcjo6
Y29tcGlsZShKSVRDb2RlJiBlbnRyeSkKIHsKKyAgICBzZXRTdGFydE9mQ29kZSgpOwogICAgIGNv
bXBpbGVFbnRyeSgpOwogICAgIFNwZWN1bGF0aXZlSklUIHNwZWN1bGF0aXZlKCp0aGlzKTsKICAg
ICBjb21waWxlQm9keShzcGVjdWxhdGl2ZSk7CisgICAgc2V0RW5kT2ZNYWluUGF0aCgpOwogCiAg
ICAgLy8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCiAgICAgc3BlY3VsYXRpdmUucnVuU2xvd1Bh
dGhHZW5lcmF0b3JzKCk7CkBAIC0yMTMsNiArMjI0LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29t
cGlsZShKSVRDb2RlJiBlbnRyeQogICAgIAogICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJhbXBv
bGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsK
KyAgICBzZXRFbmRPZkNvZGUoKTsKIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBp
ZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQpAQCAtMjIwLDE0ICsyMzIsMTggQEAg
Ym9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAgIGxpbmsobGlua0J1
ZmZlcik7CiAgICAgc3BlY3VsYXRpdmUubGlua09TUkVudHJpZXMobGlua0J1ZmZlcik7CiAKKyAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtC
dWZmZXIpOworCiAgICAgZW50cnkgPSBKSVRDb2RlKAotICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiREZHIHByb2dyYW0vZXZhbCBDb2RlQmxvY2sgJXAiLCBtX2NvZGVCbG9jaykp
LAorICAgICAgICBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLAog
ICAgICAgICBKSVRDb2RlOjpERkdKSVQpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBzZXRTdGFydE9mQ29kZSgpOwog
ICAgIGNvbXBpbGVFbnRyeSgpOwogCiAgICAgLy8gPT09IEZ1bmN0aW9uIGhlYWRlciBjb2RlIGdl
bmVyYXRpb24gPT09CkBAIC0yNDYsNiArMjYyLDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGls
ZUZ1bmN0aW9uKEpJVENvZAogICAgIC8vID09PSBGdW5jdGlvbiBib2R5IGNvZGUgZ2VuZXJhdGlv
biA9PT0KICAgICBTcGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGls
ZUJvZHkoc3BlY3VsYXRpdmUpOworICAgIHNldEVuZE9mTWFpblBhdGgoKTsKIAogICAgIC8vID09
PSBGdW5jdGlvbiBmb290ZXIgY29kZSBnZW5lcmF0aW9uID09PQogICAgIC8vCkBAIC0yOTAsNyAr
MzA3LDcgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIAog
ICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIHNw
ZWN1bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKLQorICAgIHNldEVuZE9mQ29kZSgpOwogCiAg
ICAgLy8gPT09IExpbmsgPT09CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMzAyLDEw
ICszMTksMTMgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAg
IC8vIEZJWE1FOiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBv
dmVyIHRvIERGR09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbFJlZ2lzdGVyRmlsZUNoZWNrLCBjdGlfcmVnaXN0ZXJfZmlsZV9jaGVj
ayk7CiAgICAgbGlua0J1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9p
c0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxf
YXJpdHlDaGVjayk7CisgICAgCisgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+ZHVtcChsaW5rQnVmZmVyKTsKIAogICAgIGVudHJ5V2l0aEFyaXR5Q2hlY2sg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgZW50cnkgPSBKSVRDb2Rl
KAotICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiREZHIGZ1bmN0aW9uIENvZGVC
bG9jayAlcCIsIG1fY29kZUJsb2NrKSksCisgICAgICAgIGxpbmtCdWZmZXIuZmluYWxpemVDb2Rl
V2l0aG91dERpc2Fzc2VtYmx5KCksCiAgICAgICAgIEpJVENvZGU6OkRGR0pJVCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgorI2luY2x1ZGUg
IkRGR0Rpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKICNpbmNsdWRlICJE
RkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKQEAgLTIwOCwxMiArMjA5LDcgQEAg
c3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKIC8vIGNhbGwgdG8gYmUgbGlua2VkKS4KIGNs
YXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiBwdWJsaWM6Ci0gICAgSklU
Q29tcGlsZXIoR3JhcGgmIGRmZykKLSAgICAgICAgOiBDQ2FsbEhlbHBlcnMoJmRmZy5tX2dsb2Jh
bERhdGEsIGRmZy5tX2NvZGVCbG9jaykKLSAgICAgICAgLCBtX2dyYXBoKGRmZykKLSAgICAgICAg
LCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKLSAgICB7Ci0gICAgfQorICAgIEpJVENvbXBp
bGVyKEdyYXBoJiBkZmcpOwogICAgIAogICAgIGJvb2wgY29tcGlsZShKSVRDb2RlJiBlbnRyeSk7
CiAgICAgYm9vbCBjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVjayk7CkBAIC0yMjEsNiArMjE3LDQyIEBAIHB1Ymxp
YzoKICAgICAvLyBBY2Nlc3NvcnMgZm9yIHByb3BlcnRpZXMuCiAgICAgR3JhcGgmIGdyYXBoKCkg
eyByZXR1cm4gbV9ncmFwaDsgfQogICAgIAorICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBm
b3IgdGhlIGRpc2Fzc2VtYmxlci4KKyAgICB2b2lkIHNldFN0YXJ0T2ZDb2RlKCkKKyAgICB7Cisg
ICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRj
aHBvaW50cygpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRGb3JCbG9jayhCbG9ja0luZGV4
IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCbG9j
ayhibG9ja0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0Rm9yTm9kZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAg
aWYgKExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yTm9kZShub2RlSW5kZXgsIGxhYmVsSWdub3JpbmdXYXRj
aHBvaW50cygpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRFbmRPZk1haW5QYXRoKCkKKyAg
ICB7CisgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mTWFpblBhdGgobGFiZWxJZ25v
cmluZ1dhdGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEVuZE9mQ29kZSgp
CisgICAgeworICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWxJZ25v
cmluZ1dhdGNocG9pbnRzKCkpOworICAgIH0KKyAgICAKICAgICAvLyBHZXQgYSB0b2tlbiBmb3Ig
YmVnaW5uaW5nIGEgY2FsbCwgYW5kIHNldCB0aGUgY3VycmVudCBjb2RlIG9yaWdpbiBpbmRleCBp
bgogICAgIC8vIHRoZSBjYWxsIGZyYW1lLgogICAgIENhbGxCZWdpblRva2VuIGJlZ2luQ2FsbCgp
CkBAIC0zNTMsNiArMzg1LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgZGF0YWZsb3cgZ3JhcGgg
Y3VycmVudGx5IGJlaW5nIGdlbmVyYXRlZC4KICAgICBHcmFwaCYgbV9ncmFwaDsKIAorICAgIE93
blB0cjxEaXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIAogICAgIC8vIFZlY3RvciBv
ZiBjYWxscyBvdXQgZnJvbSBKSVQgY29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBoYW5kbGVyIGlu
Zm9ybWF0aW9uLgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0
aCBleGNlcHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxMaW5rUmVjb3JkPiBtX2NhbGxz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyMDc5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MzAsNiArNzMwLDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBt
X3JlZkNvdW50OwogICAgIH0KKyAgICAKKyAgICBib29sIHdpbGxIYXZlQ29kZUdlbigpCisgICAg
eworICAgICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGUoKSAmJiBvcCgpICE9IFBoYW50b20gJiYg
b3AoKSAhPSBOb3A7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVmQ291bnQoKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHJldmlzaW9u
IDEyMDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTkgKzQ2LDE5IEBAIGNvbnN0IGNoYXIqIG5vZGVGbGFnc0Fz
U3RyaW5nKE5vZGVGbGFncyAKICAgICBpZiAoZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgewogICAg
ICAgICBzd2l0Y2ggKGZsYWdzICYgTm9kZVJlc3VsdE1hc2spIHsKICAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0SlM6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJSZXN1bHRKUyIpOworICAgICAgICAg
ICAgcHRyLnN0cmNhdCgiSlMiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5v
ZGVSZXN1bHROdW1iZXI6Ci0gICAgICAgICAgICBwdHIuc3RyY2F0KCJSZXN1bHROdW1iZXIiKTsK
KyAgICAgICAgICAgIHB0ci5zdHJjYXQoIk51bWJlciIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiUmVz
dWx0SW50MzIiKTsKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoIkludDMyIik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKLSAgICAgICAgICAgIHB0
ci5zdHJjYXQoIlJlc3VsdEJvb2xlYW4iKTsKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoIkJvb2xl
YW4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGVSZXN1bHRTdG9yYWdl
OgotICAgICAgICAgICAgcHRyLnN0cmNhdCgiUmVzdWx0U3RvcmFnZSIpOworICAgICAgICAgICAg
cHRyLnN0cmNhdCgiU3RvcmFnZSIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTcwLDIxICs3MCwyMSBA
QCBjb25zdCBjaGFyKiBub2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgCiAgICAgaWYgKGZsYWdz
ICYgTm9kZU11c3RHZW5lcmF0ZSkgewogICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAg
ICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTXVzdEdlbmVyYXRlIik7
CisgICAgICAgIHB0ci5zdHJjYXQoIk11c3RHZW4iKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CiAgICAgfQogICAgIAogICAgIGlmIChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAg
ICAgIGlmIChoYXNQcmludGVkKQogICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAg
ICBwdHIuc3RyY2F0KCJIYXNWYXJBcmdzIik7CisgICAgICAgIHB0ci5zdHJjYXQoIlZhckFyZ3Mi
KTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGlmIChmbGFn
cyAmIE5vZGVDbG9iYmVyc1dvcmxkKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVkKQogICAgICAg
ICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIuc3RyY2F0KCJDbG9iYmVyc1dvcmxk
Iik7CisgICAgICAgIHB0ci5zdHJjYXQoIkNsb2JiZXJzIik7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwogICAgIH0KICAgICAKQEAgLTk1LDE4ICs5NSwyMyBAQCBjb25zdCBjaGFyKiBub2Rl
RmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KICAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVyKSB7Ci0gICAgICAgIGlm
IChoYXNQcmludGVkKQotICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOwotICAgICAgICBwdHIu
c3RyY2F0KCJVc2VkQXNOdW0iKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgfQot
ICAgIAotICAgIGlmIChmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pIHsKLSAgICAgICAgaWYgKGhh
c1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJj
YXQoIk5lZWRzTmVnWmVybyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICBpZiAo
ZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICBpZiAoIShmbGFncyAmIE5vZGVVc2Vk
QXNOdW1iZXIpICYmICEoZmxhZ3MgJiBOb2RlTmVlZHNOZWdaZXJvKSkgeworICAgICAgICAgICAg
aWYgKGhhc1ByaW50ZWQpCisgICAgICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOworICAgICAg
ICAgICAgcHRyLnN0cmNhdCgiUHVyZUludCIpOworICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpKSB7Cisg
ICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8
Iik7CisgICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJlSW50KHcvIG5lZyB6ZXJvKSIpOworICAg
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIShmbGFncyAm
IE5vZGVOZWVkc05lZ1plcm8pKSB7CisgICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAg
ICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7CisgICAgICAgICAgICBwdHIuc3RyY2F0KCJQdXJl
TnVtIik7CisgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsKQEAgLTEyNiw3ICsxMzEs
NyBAQCBjb25zdCBjaGFyKiBub2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgCiAgICAgaWYgKGZs
YWdzICYgTm9kZVVzZWRBc0ludCkgewogICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAg
ICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiVXNlZEFzSW50Iik7Cisg
ICAgICAgIHB0ci5zdHJjYXQoIlVzZUFzSW50Iik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNiw2
ICsxMDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogCiAg
ICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgp
OyArK21faW5kZXhJbkJsb2NrKSB7CiAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2tbbV9p
bmRleEluQmxvY2tdOworICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgbV9jb2Rl
T3JpZ2luRm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luOwogICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkgewpAQCAtMTMyMSw2ICsxMzIyLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSgpCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBmb3IgKG1fYmxv
Y2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9j
aykgeworICAgICAgICBtX2ppdC5zZXRGb3JCbG9jayhtX2Jsb2NrKTsKICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgpOwogICAg
ICAgICBpZiAoYmxvY2spCiAgICAgICAgICAgICBjb21waWxlKCpibG9jayk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
MjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzNjksNyArMjM2OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBW
ZWN0b3I8U2xvd1BhdGhHZW5lcmF0b3IqLCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsgLy8gZG9l
c24ndCB1c2UgT3duUHRyPD4gYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBERkdTbG93
UGF0aEdlbmVyYXRvci5oCiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4+IG1fcGxh
bnM7Ci0KKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNv
bnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKGludCBvcGVyYW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHJldmlzaW9uIDEyMDc5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgT3B0aW9ucyB7CiBib29sIHVzZUpJVDsKIAogYm9vbCBzaG93RGlz
YXNzZW1ibHk7Citib29sIHNob3dERkdEaXNhc3NlbWJseTsKIAogdW5zaWduZWQgbWF4aW11bU9w
dGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKQEAgLTE2NSw2ICsxNjYsNyBA
QCB2b2lkIGluaXRpYWxpemVPcHRpb25zKCkKICAgICBTRVQodXNlSklULCB0cnVlKTsKICAgICAK
ICAgICBTRVQoc2hvd0Rpc2Fzc2VtYmx5LCBmYWxzZSk7CisgICAgU0VUKHNob3dERkdEaXNhc3Nl
bWJseSwgdHJ1ZSk7CiAgICAgCiAgICAgU0VUKG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50LCAxMDAwMCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMjA3OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBPcHRpb25zIHsKIGV4dGVybiBib29sIHVzZUpJVDsKIAog
ZXh0ZXJuIGJvb2wgc2hvd0Rpc2Fzc2VtYmx5OworZXh0ZXJuIGJvb2wgc2hvd0RGR0Rpc2Fzc2Vt
Ymx5OyAvLyBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuCiAKIGV4
dGVybiB1bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dDsKIAo=
</data>
<flag name="review"
          id="156274"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>