<?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>79608</bug_id>
          
          <creation_ts>2012-02-26 13:26:17 -0800</creation_ts>
          <short_desc>Getting the instruction stream for a code block should not require two loads</short_desc>
          <delta_ts>2012-02-26 18:08:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>79609</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>565192</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 13:26:17 -0800</bug_when>
    <thetext>It should be one load at most.  Maybe someday we can even get it down to zero loads (i.e. the byte code is just appended to the CodeBlock).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565195</commentid>
    <comment_count>1</comment_count>
      <attachid>128927</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 13:31:52 -0800</bug_when>
    <thetext>Created attachment 128927
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565196</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-26 13:34:39 -0800</bug_when>
    <thetext>Attachment 128927 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/Label.h:49:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/wtf/CompactVector.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 13 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>565197</commentid>
    <comment_count>3</comment_count>
      <attachid>128927</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-02-26 14:00:27 -0800</bug_when>
    <thetext>Comment on attachment 128927
the patch

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

&gt; Source/JavaScriptCore/wtf/CompactVector.h:40
&gt; +// ** This could be modified to support non-POD values quite easily. It just
&gt; +//    hasn&apos;t been, so far, because there has been no need.

Seems like it would be worth adding COMPILE_ASSERTs to prevent usage of non-POD

&gt; Source/JavaScriptCore/wtf/CompactVector.h:71
&gt; +        for (unsigned i = other.size(); i--;)
&gt; +            m_data[i] = other[i];

Why not just use memcpy here? Also I&apos;m not 100% comfortable with the implicit vector copy -- at the very least can we make these contractors explicit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565198</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 14:03:14 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 128927 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128927&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/CompactVector.h:40
&gt; &gt; +// ** This could be modified to support non-POD values quite easily. It just
&gt; &gt; +//    hasn&apos;t been, so far, because there has been no need.
&gt; 
&gt; Seems like it would be worth adding COMPILE_ASSERTs to prevent usage of non-POD

Yeah, I&apos;ll do that.

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/CompactVector.h:71
&gt; &gt; +        for (unsigned i = other.size(); i--;)
&gt; &gt; +            m_data[i] = other[i];
&gt; 
&gt; Why not just use memcpy here? Also I&apos;m not 100% comfortable with the implicit vector copy -- at the very least can we make these contractors explicit?

You&apos;re right, this should be an explicit contractor.

(Contractor is the new constructor.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565201</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 14:22:35 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 128927 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128927&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wtf/CompactVector.h:40
&gt; &gt; &gt; +// ** This could be modified to support non-POD values quite easily. It just
&gt; &gt; &gt; +//    hasn&apos;t been, so far, because there has been no need.
&gt; &gt; 
&gt; &gt; Seems like it would be worth adding COMPILE_ASSERTs to prevent usage of non-POD
&gt; 
&gt; Yeah, I&apos;ll do that.

Scratch that.  JSC::Instruction is not POD.  I mean, it is for our purposes, but Clang disagrees.

I&apos;d rather not spend too much time thinking about what assertions to add to this class given that we&apos;ll rapidly end up in weirdo C++ type land.  What matters is that the class does exactly what it is supposed to do for byte code sequences.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wtf/CompactVector.h:71
&gt; &gt; &gt; +        for (unsigned i = other.size(); i--;)
&gt; &gt; &gt; +            m_data[i] = other[i];
&gt; &gt; 
&gt; &gt; Why not just use memcpy here? Also I&apos;m not 100% comfortable with the implicit vector copy -- at the very least can we make these contractors explicit?
&gt; 
&gt; You&apos;re right, this should be an explicit contractor.
&gt; 
&gt; (Contractor is the new constructor.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565202</commentid>
    <comment_count>6</comment_count>
      <attachid>128929</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 14:25:44 -0800</bug_when>
    <thetext>Created attachment 128929
the patch

Changed CompactVector(const Vector&amp;) constructor to be explicit, and to use memcpy.

Tried, and failed, to add static asserts for T being POD.  I failed because JSC::Instruction is not POD according to Clang, but we use it as if it were POD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565203</commentid>
    <comment_count>7</comment_count>
      <attachid>128929</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-26 14:30:21 -0800</bug_when>
    <thetext>Comment on attachment 128929
the patch

Attachment 128929 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11630765</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565204</commentid>
    <comment_count>8</comment_count>
      <attachid>128929</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-26 14:42:07 -0800</bug_when>
    <thetext>Comment on attachment 128929
the patch

Attachment 128929 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11632729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565205</commentid>
    <comment_count>9</comment_count>
      <attachid>128929</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-26 14:46:36 -0800</bug_when>
    <thetext>Comment on attachment 128929
the patch

Attachment 128929 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11627790</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565210</commentid>
    <comment_count>10</comment_count>
      <attachid>128930</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 14:53:26 -0800</bug_when>
    <thetext>Created attachment 128930
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565218</commentid>
    <comment_count>11</comment_count>
      <attachid>128930</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-02-26 15:48:03 -0800</bug_when>
    <thetext>Comment on attachment 128930
the patch

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

In addition to the rename and comment fix.  Please consider adding basic unit tests to TestWebKitAPI.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        This patch also gets rid of the bytecode discarding logic, since we don&apos;t
&gt; +        use it anymore and it&apos;s unlikely to ever work right with DFG or LLInt. And
&gt; +        I didn&apos;t feel like porting dead code to use CompactVector.

Sadness.

&gt; Source/JavaScriptCore/wtf/CompactVector.h:33
&gt; +// This implements a resizeable array for POD** values, which is optimized for:

This isn&apos;t actually resizable.

&gt; Source/JavaScriptCore/wtf/CompactVector.h:47
&gt; +template&lt;typename T&gt;
&gt; +class CompactVector {

I think this name is misleading.  Really, this is just an array with an efficiently RefCounted data part.  RefCountedArray?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565225</commentid>
    <comment_count>12</comment_count>
      <attachid>128935</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 16:53:24 -0800</bug_when>
    <thetext>Created attachment 128935
the patch

Renamed and fixed comment.  Will see what EWS thinks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565245</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-26 18:08:22 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/108943</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128927</attachid>
            <date>2012-02-26 13:31:52 -0800</date>
            <delta_ts>2012-02-26 14:25:44 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>compactvector_patch_1.diff</filename>
            <type>text/plain</type>
            <size>32530</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTAyLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGZvciBhIGNvZGUgYmxvY2sgc2hvdWxkIG5v
dCByZXF1aXJlIHR3byBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEludHJvZHVjZWQgdGhlIENvbXBhY3RWZWN0b3IgY2xhc3MsIHdo
aWNoIGNvbnRhaW5zIGEgc2luZ2xlIGlubGluZSBwb2ludGVyCisgICAgICAgIHRvIGEgcmVmLWNv
dW50ZWQgbm9uLXJlc2l6ZWFibGUgdmVjdG9yIGJhY2tpbmcgc3RvcmUuIFRoaXMgc2F0aXNmaWVz
IHRoZQorICAgICAgICByZXF1aXJlbWVudHMgb2YgQ29kZUJsb2NrLCB3aGljaCBkZXNpcmVzIHRo
ZSBhYmlsaXR5IHRvIHNoYXJlIGluc3RydWN0aW9uCisgICAgICAgIHN0cmVhbXMgd2l0aCBvdGhl
ciBDb2RlQmxvY2tzLiBJdCBhbHNvIHJlZHVjZXMgdGhlIG51bWJlciBvZiBsb2FkcyByZXF1aXJl
ZAorICAgICAgICBmb3IgZ2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGJ5IG9uZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgYnl0ZWNvZGUg
ZGlzY2FyZGluZyBsb2dpYywgc2luY2Ugd2UgZG9uJ3QKKyAgICAgICAgdXNlIGl0IGFueW1vcmUg
YW5kIGl0J3MgdW5saWtlbHkgdG8gZXZlciB3b3JrIHJpZ2h0IHdpdGggREZHIG9yIExMSW50LiBB
bmQKKyAgICAgICAgSSBkaWRuJ3QgZmVlbCBsaWtlIHBvcnRpbmcgZGVhZCBjb2RlIHRvIHVzZSBD
b21wYWN0VmVjdG9yLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6Omluc3RydWN0aW9uT2Zmc2V0Rm9y
TnRoKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29k
ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0KToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZJbnN0cnVjdGlvbnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5z
dHJ1Y3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpMYWJlbDo6c2V0TG9jYXRpb24p
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om5ld0xhYmVsKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjppbnN0cnVjdGlvbnMpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAg
ICAgICAoSlNDOjpMYWJlbDo6TGFiZWwpOgorICAgICAgICAoTGFiZWwpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6
fkJ5dGVDb2RlQ2FjaGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2FjaGU6OmdldCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VGhyb3cpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
ZGVCbG9ja1dpdGhCeXRlY29kZUZvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6cHJvZHVjZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICogd3RmL0NvbXBhY3RWZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoQ29tcGFjdFZlY3Rvcik6CisgICAgICAg
IChXVEY6OkNvbXBhY3RWZWN0b3I6OkNvbXBhY3RWZWN0b3IpOgorICAgICAgICAoV1RGOjpDb21w
YWN0VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDb21wYWN0VmVjdG9yOjp+Q29t
cGFjdFZlY3Rvcik6CisgICAgICAgIChXVEY6OkNvbXBhY3RWZWN0b3I6OnNpemUpOgorICAgICAg
ICAoV1RGOjpDb21wYWN0VmVjdG9yOjpkYXRhKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rv
cjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpDb21wYWN0VmVjdG9yOjplbmQpOgorICAgICAgICAo
V1RGOjpDb21wYWN0VmVjdG9yOjphdCk6CisgICAgICAgIChXVEY6OkNvbXBhY3RWZWN0b3I6Om9w
ZXJhdG9yW10pOgorICAgICAgICAoSGVhZGVyKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rv
cjo6SGVhZGVyOjpzaXplKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rvcjo6SGVhZGVyOjpw
YXlsb2FkKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rvcjo6SGVhZGVyOjpmcm9tUGF5bG9h
ZCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTItMDItMjYgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQg
Zml4IGZvciBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgYWZ0ZXIgcjEwODY4MS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDg5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDYgKzU4Myw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9DaGVja2VkQm9vbGVhbi5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBh
Y3RWZWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Db21waWxlci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBsZXguaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwODkzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCNTQ2OTAxNEZBREE3QjAwMkMyOTg5IC8qIENvbXBh
Y3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBDb21wYWN0VmVjdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
QzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDgsNiArMTAw
OSw3IEBACiAJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdB
MTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBDb21w
YWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RWZWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDQsNiArMjIwNiw3IEBACiAJCQkJQTdBMUY3QUIwRjI1MkIz
QzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovLAogCQkJCUE3QkMwQzgxMTQwNjA4QjAwMEIxQkI3
MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLAogCQkJCUMyRDlDQTEyMTRCQ0MwNDYwMDMwNEI0
NiAvKiBDaGVja2VkQm9vbGVhbi5oICovLAorCQkJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAv
KiBDb21wYWN0VmVjdG9yLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFFIC8qIENv
bXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAq
LywKIAkJCQk5Nzk0MUE3QzEzMDJBMDk4MDA0QTM0NDcgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuY3BwICovLApAQCAtMzQwMSw2ICszNDA0LDcgQEAKIAkJCQkxNDk3MjA5MTE0RUI4
MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRG
NTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjU0NjkwMTRGQURBN0IwMDJDMjk4OSAvKiBD
b21wYWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI2LDcgKzIyNiw3IEBAIHN0YXRpYyBib29sIGlzUHJvcGVydHlBY2Nlc3MoT3Bjb2RlSUQgb3AK
ICAgICB9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldEZvck50aChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucywgaW50
IG50aCwgYm9vbCAoKnByZWRpY2F0ZSkoT3Bjb2RlSUQpKQorc3RhdGljIHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0Rm9yTnRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ29tcGFjdFZlY3RvcjxJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucywgaW50IG50aCwgYm9vbCAoKnByZWRpY2F0ZSkoT3Bj
b2RlSUQpKQogewogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGluc3RydWN0aW9u
cy5zaXplKCkpIHsKQEAgLTM0NywxOCArMzQ3LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0
cnVjdHVyZXMoY29uc3QgSW4KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewotICAgIGlmICghbV9pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgZGF0YUxvZygi
Tm8gaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZS5cbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQgPSAwOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5p
bnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQog
ICAgICAgICArK2luc3RydWN0aW9uQ291bnQ7CiAKICAgICBkYXRhTG9nKCIlbHUgbV9pbnN0cnVj
dGlvbnM7ICVsdSBieXRlcyBhdCAlcDsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0
ZXIocyk7ICVkIHZhcmlhYmxlKHMpXG5cbiIsCi0gICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9uQ291bnQpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSwKICAg
ICAgICAgdGhpcywgbV9udW1QYXJhbWV0ZXJzLCBtX251bUNhbGxlZVJlZ2lzdGVycywgbV9udW1W
YXJzKTsKIApAQCAtMTQyNCwxMSArMTQxOSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9ja1RhZywKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBt
X251bUNhcHR1cmVkVmFycyhvdGhlci5tX251bUNhcHR1cmVkVmFycykKICAgICAsIG1faXNDb25z
dHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAgLCBtX3Nob3VsZERpc2NhcmRCeXRl
Y29kZShmYWxzZSkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEs
IG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSkKICAgICAsIG1fZ2xvYmFsRGF0YShvdGhlci5tX2dsb2JhbERhdGEpCiAgICAgLCBtX2lu
c3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKLSAgICAsIG1faW5zdHJ1Y3Rpb25Db3Vu
dChvdGhlci5tX2luc3RydWN0aW9uQ291bnQpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5t
X3RoaXNSZWdpc3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVu
dHNSZWdpc3RlcikKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlv
blJlZ2lzdGVyKQpAQCAtMTQ4NCwxMiArMTQ3Nyw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBt
X251bVZhcnMoMCkKICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQotICAgICwg
bV9zaG91bGREaXNjYXJkQnl0ZWNvZGUoZmFsc2UpCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkK
ICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25l
ckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fZ2xvYmFsRGF0YSgwKQotICAg
ICwgbV9pbnN0cnVjdGlvbnMoYWRvcHRSZWYobmV3IEluc3RydWN0aW9ucykpCi0gICAgLCBtX2lu
c3RydWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEpCiAgICAgLCBt
X25lZWRzRnVsbFNjb3BlQ2hhaW4ob3duZXJFeGVjdXRhYmxlLT5uZWVkc0FjdGl2YXRpb24oKSkK
ICAgICAsIG1fdXNlc0V2YWwob3duZXJFeGVjdXRhYmxlLT51c2VzRXZhbCgpKQpAQCAtMTkwMywx
MiArMTg5Myw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAg
ICAgICAgfQogICAgIH0KICNlbmRpZgotCi0gICAgLy8gSGFuZGxlIHRoZSBieXRlY29kZSBkaXNj
YXJkaW5nIGNob3JlLgotICAgIGlmIChtX3Nob3VsZERpc2NhcmRCeXRlY29kZSkgewotICAgICAg
ICBkaXNjYXJkQnl0ZWNvZGUoKTsKLSAgICAgICAgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUgPSBm
YWxzZTsKLSAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE5ODAsNyArMTk2NCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4KIAogSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQog
ewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IG1faW5zdHJ1Y3Rpb25Db3VudCk7CisgICAg
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAogICAgIGlm
ICghbV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTk4LDcgKzE5ODIsNyBAQCBI
YW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAKIGludCBDb2RlQmxvY2s6
OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsK
LSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9uQ291bnQpOworICAgIEFT
U0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKICAgICBpZiAo
IW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybiBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlKCku
Zmlyc3RMaW5lKCk7CkBAIC0yMDIyLDcgKzIwMDYsNyBAQCBpbnQgQ29kZUJsb2NrOjpsaW5lTnVt
YmVyRm9yQnl0ZWNvZGVPZmZzCiAKIHZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0
IDwgbV9pbnN0cnVjdGlvbkNvdW50KTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOwogCiAgICAgaWYgKCFtX3JhcmVEYXRhKSB7CiAgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gMDsKQEAgLTIxMDIsOCArMjA4Niw2IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNH
bG9iYWxSZXNvbHZlSW5mb0F0QnkKIAogdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KCkKIHsK
LSAgICBpbnN0cnVjdGlvbnMoKS5zaHJpbmtUb0ZpdCgpOwotCiAjaWYgRU5BQkxFKENMQVNTSUNf
SU5URVJQUkVURVIpCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0Zp
dCgpOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKKyNpbmNsdWRlIDx3dGYvQ29tcGFjdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC0xMjcsOCArMTI4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICAKLSAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgp
IHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNz
KCk7CkBAIC0zNDEsMjAgKzM0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBz
ZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24p
IHsgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVuY3Rpb247
IH0KICAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSB7IHJldHVybiBtX2lz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCi0gICAgICAgIGJvb2wgaGFzSW5zdHJ1Y3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gISFtX2luc3RydWN0aW9uczsgfQotICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2luc3RydWN0aW9ucyA/IDAg
OiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0gICAgICAgIFZlY3Rv
cjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLT5t
X2luc3RydWN0aW9uczsgfQotICAgICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0
cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnM7
IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFy
KCk7IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGVMYXRlcigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gdHJ1ZTsKLSAgICAgICAgfQorICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgICAgICBDb21wYWN0VmVjdG9yPEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyAgICAgICAgY29uc3Qg
Q29tcGFjdFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIAogICAgICAgICBib29sIHVzZXNPcGNvZGUoT3Bj
b2RlSUQpOwogCi0gICAgICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQoKSB7IHJldHVybiBt
X2luc3RydWN0aW9uQ291bnQ7IH0KLSAgICAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbkNvdW50KHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQpIHsgbV9pbnN0cnVjdGlvbkNvdW50ID0gaW5zdHJ1Y3Rp
b25Db3VudDsgfQorICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lk
IHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVXaXRoQXJpdHlDaGVjaykKQEAgLTU0MSwxMSArNTMzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFdURjo6Z2VuZXJp
Y0JpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVP
ZmZzZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAt
MSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWhhc0luc3RydWN0aW9ucygpCi0gICAgICAgICAgICAg
ICAgICAgfHwgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5nZXRP
cGNvZGVJRCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXRdLnUub3Bj
b2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKKyAgICAgICAgICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChpbnQg
Ynl0ZWNvZGVPZmZzZXQpCkBAIC0xMDQ3LDkgKzEwMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzOwogICAgICAgICBib29sIG1faXNDb25zdHJ1Y3Rv
cjsKIAotICAgICAgICAvLyBUaGlzIGlzIHB1YmxpYyBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b3Vs
ZCBoYXZlIG1hbnkgZnJpZW5kcy4KLSAgICAgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRCeXRlY29k
ZTsKLQogICAgIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2aXJ0dWFsIHZv
aWQgaml0Q29tcGlsZUltcGwoSlNHbG9iYWxEYXRhJikgPSAwOwpAQCAtMTExNSwxMSArMTEwMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJs
ZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogCi0gICAgICAgIHN0cnVjdCBJbnN0cnVjdGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnN0
cnVjdGlvbnM+IHsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlv
bnM7Ci0gICAgICAgIH07Ci0gICAgICAgIFJlZlB0cjxJbnN0cnVjdGlvbnM+IG1faW5zdHJ1Y3Rp
b25zOwotICAgICAgICB1bnNpZ25lZCBtX2luc3RydWN0aW9uQ291bnQ7CisgICAgICAgIENvbXBh
Y3RWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGludCBtX3Ro
aXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkBAIC0xMzc5LDI3
ICsxMzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8gVXNl
IHRoaXMgaWYgeW91IHdhbnQgdG8gY29weSBhIGNvZGUgYmxvY2sgYW5kIHlvdSdyZSBwYXJhbm9p
ZCBhYm91dCBhIEdDCi0gICAgLy8gaGFwcGVuaW5nLgotICAgIGNsYXNzIEJ5dGVjb2RlRGVzdHJ1
Y3Rpb25CbG9ja2VyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rpb25C
bG9ja2VyKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICAgICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgICAgICAgICAsIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29k
ZShjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIH5CeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9
IG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICBwcml2YXRlOgotICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgICAgICBi
b29sIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICB9OwotCiAgICAgaW5s
aW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOSw2ICsxMTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZXhwZWN0ZWQgYnkg
dGhlIGNhbGxlZS4KICovCiAKK3ZvaWQgTGFiZWw6OnNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0
aW9uKQoreworICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAKKyAgICB1bnNpZ25lZCBz
aXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZ2VuZXJhdG9yLT5tX2luc3RydWN0aW9uc1ttX3Vu
cmVzb2x2ZWRKdW1wc1tpXS5zZWNvbmRdLnUub3BlcmFuZCA9IG1fbG9jYXRpb24gLSBtX3VucmVz
b2x2ZWRKdW1wc1tpXS5maXJzdDsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgUmVzb2x2ZVJl
c3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB7CkBAIC0xNzEsOCArMTgwLDggQEAgSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAgbV9jb2RlQmxvY2stPnNldFRoaXNSZWdp
c3RlcihtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0
ZWNvZGUoKnRoaXMpOwotCi0gICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9uQ291bnQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpID0gQ29tcGFjdFZlY3RvcjxJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlv
bnMpOwogCiAgICAgaWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQogICAgICAgICBtX2NvZGVCbG9j
ay0+ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKQEAgLTYw
Nyw3ICs2MTYsNyBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3CiAg
ICAgICAgIG1fbGFiZWxzLnJlbW92ZUxhc3QoKTsKIAogICAgIC8vIEFsbG9jYXRlIG5ldyBsYWJl
bCBJRC4KLSAgICBtX2xhYmVscy5hcHBlbmQobV9jb2RlQmxvY2spOworICAgIG1fbGFiZWxzLmFw
cGVuZCh0aGlzKTsKICAgICByZXR1cm4gJm1fbGFiZWxzLmxhc3QoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIElkZW50aWZpZXI7CisgICAgY2xhc3Mg
TGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKICAgICBjbGFzcyBDYWxsQXJndW1l
bnRzIHsKQEAgLTUzMiw2ICs1MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW4uZ2V0KCk7
IH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBMYWJlbDsKKyAgICAgICAg
CiAgICAgICAgIHZvaWQgZW1pdE9wY29kZShPcGNvZGVJRCk7CiAgICAgICAgIFZhbHVlUHJvZmls
ZSogZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxh
c3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgp
OwpAQCAtNjExLDcgKzYxNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKIAotICAgICAgICBWZWN0b3I8
SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCk7IH0KKyAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KIAogICAgICAgICBib29sIHNob3VsZE9w
dGltaXplTG9jYWxzKCkKQEAgLTY0NCw2ICs2NDcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogICAgICAgICB2b2lkIGNyZWF0
ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wgbV9zaG91bGRF
bWl0RGVidWdIb29rczsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oCShyZXZpc2lv
biAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDIxICszOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIExhYmVsIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IExhYmVsKENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgICAgICBleHBsaWNpdCBMYWJlbChCeXRlY29kZUdlbmVyYXRv
ciogZ2VuZXJhdG9yKQogICAgICAgICAgICAgOiBtX3JlZkNvdW50KDApCiAgICAgICAgICAgICAs
IG1fbG9jYXRpb24oaW52YWxpZExvY2F0aW9uKQotICAgICAgICAgICAgLCBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCisgICAgICAgICAgICAsIG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2NhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBzaXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV91bnJlc29sdmVkSnVtcHNbaV0uc2Vjb25k
XS51Lm9wZXJhbmQgPSBtX2xvY2F0aW9uIC0gbV91bnJlc29sdmVkSnVtcHNbaV0uZmlyc3Q7Ci0g
ICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2NhdGlvbik7CiAK
ICAgICAgICAgaW50IGJpbmQoaW50IG9wY29kZSwgaW50IG9mZnNldCkgY29uc3QKICAgICAgICAg
ewpAQCAtODEsNyArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgbV9yZWZD
b3VudDsKICAgICAgICAgdW5zaWduZWQgbV9sb2NhdGlvbjsKLSAgICAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yOwogICAg
ICAgICBtdXRhYmxlIEp1bXBWZWN0b3IgbV91bnJlc29sdmVkSnVtcHM7CiAgICAgfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgJKHJldmlz
aW9uIDEwODkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGRlbGV0ZSBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLmNvZGVCbG9j
ay0+bV9zaG91bGREaXNjYXJkQnl0ZWNvZGUgPSBpdGVyLT5zZWNvbmQub2xkVmFsdWVPZlNob3Vs
ZERpc2NhcmRCeXRlY29kZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE1NSw3ICsxNTQs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCkt
PmNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihrZXkua2luZCgpKTsKICAgICAgICAgaWYgKHZhbHVl
LmNvZGVCbG9jaykgewogICAgICAgICAgICAgdmFsdWUub3duZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHZhbHVlLm9sZFZhbHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGUgPSB2YWx1ZS5jb2RlQmxv
Y2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gTm9wZSwgc28gdHJ5IHRvIHBhcnNlIG9uZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiBl
eGNlcHRpb247CkBAIC0xNzEsMTMgKzE2OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZhbHVl
LmNvZGVCbG9jayA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3Jl
IGFib3V0IHRvIHJldHVybiBhIGNvZGUgYmxvY2ssIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIG5vdCBn
b2luZwotICAgICAgICAvLyB0byBiZSBkaXNjYXJkaW5nIGl0cyBieXRlY29kZSBpZiBhIEdDIHdl
cmUgdG8gaGFwcGVuIGR1cmluZyBERkcKLSAgICAgICAgLy8gY29tcGlsYXRpb24uIFRoYXQncyB1
bmxpa2VseSwgYnV0IGl0J3MgZ29vZCB0byB0aG9yb3VnaGx5IGVuam95IHRoaXMKLSAgICAgICAg
Ly8ga2luZCBvZiBwYXJhbm9pYS4KLSAgICAgICAgaWYgKCEhdmFsdWUuY29kZUJsb2NrKQotICAg
ICAgICAgICAgdmFsdWUuY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9IGZhbHNl
OwotICAgICAgICAKICAgICAgICAgbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHZhbHVlLmNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
OCArNDgsNyBAQCBFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhCiAgICAg
SW5zdHJ1Y3Rpb24qIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IDA7CiAgICAgaWYgKGhhbmRsZXIp
IHsKICAgICAgICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxl
QWRkcmVzcygpOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzSW5zdHJ1
Y3Rpb25zKCkpCi0gICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAmY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbaGFuZGxlci0+dGFyZ2V0XTsKKyAgICAgICAg
Y2F0Y2hQQ0ZvckludGVycHJldGVyID0gJmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpW2hhbmRsZXItPnRhcmdldF07CiAgICAgfSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGlu
ZSA9IEZ1bmN0aW9uUHRyKGN0aU9wVGhyb3dOb3RDYXVnaHQpLnZhbHVlKCk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTQ0Myw4ICs0NDMsNyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9j
CiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIAogICAgICMgU2V0IHVwIHRoZSBQQy4KLSAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW3QxXSwgdDAKLSAgICBsb2FkcCBDb2Rl
QmxvY2s6Okluc3RydWN0aW9uczo6bV9pbnN0cnVjdGlvbnMgKyBWZWN0b3JCdWZmZXJPZmZzZXRb
dDBdLCBQQworICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCBQQwogZW5k
CiAKICMgRXhwZWN0cyB0aGF0IENvZGVCbG9jayBpcyBpbiB0MSwgd2hpY2ggaXMgd2hhdCBwcm9s
b2d1ZSgpIGxlYXZlcyBiZWhpbmQuCkBAIC01MDMsOCArNTAyLDcgQEAgbWFjcm8gZnVuY3Rpb25B
cml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwogLmNvbnRpbnVlOgogICAgICMgUmVsb2FkIENvZGVC
bG9jayBhbmQgUEMsIHNpbmNlIHRoZSBzbG93X3BhdGggY2xvYmJlcmVkIGl0LgogICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MQotICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNb
dDFdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6SW5zdHJ1Y3Rpb25zOjptX2luc3RydWN0aW9u
cyArIFZlY3RvckJ1ZmZlck9mZnNldFt0MF0sIFBDCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2lu
c3RydWN0aW9uc1t0MV0sIFBDCiAgICAgam1wIGRvbmVMYWJlbAogZW5kCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMDg5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEwLDggKzIxMCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6
Y29tcGlsZUludGVybmEKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIGlmICghIW1fZXZhbENvZGVCbG9j
ayAmJiBtX2V2YWxDb2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKLSAg
ICAgICAgQnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihtX2V2YWxDb2RlQmxvY2su
Z2V0KCkpOworICAgIGlmICghIW1fZXZhbENvZGVCbG9jaykgewogICAgICAgICBPd25QdHI8RXZh
bENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2soQ29k
ZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2RlQmxvY2spKTsKICAgICAgICAgbmV3
Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4o
bV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBu
ZXdDb2RlQmxvY2sucmVsZWFzZSgpOwpAQCAtMzQ2LDggKzM0NSw3IEBAIEpTT2JqZWN0KiBQcm9n
cmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIGlmICghIW1f
cHJvZ3JhbUNvZGVCbG9jayAmJiBtX3Byb2dyYW1Db2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0
aEJ5dGVjb2RlKCkpIHsKLSAgICAgICAgQnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tl
cihtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpOworICAgIGlmICghIW1fcHJvZ3JhbUNvZGVCbG9j
aykgewogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gYWRv
cHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpt
X3Byb2dyYW1Db2RlQmxvY2spKTsKICAgICAgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2
ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVh
c2UoKSkpOwogICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBuZXdDb2RlQmxvY2sucmVsZWFz
ZSgpOwpAQCAtNDk0LDE4ICs0OTIsMTMgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENv
bXBpbGVGb3JDbwogCiBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2Rl
QmxvY2tXaXRoQnl0ZWNvZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihraW5k
KTsKLSAgICBpZiAoY29kZUJsb2NrLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKQotICAg
ICAgICByZXR1cm4gY29kZUJsb2NrOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihraW5kKTsKIH0KIAogUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQog
ewotICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpICYmIGNvZGVCbG9j
a0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKSB7
Ci0gICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rpb25CbG9ja2VyIGJsb2NrZXIoY29kZUJsb2NrRm9y
KHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOworICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29k
ZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxp
emF0aW9uS2luZCkpKTsKLSAgICB9CiAgICAgCiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ29tcGFjdFZlY3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ29tcGFjdFZlY3Rvci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Db21wYWN0VmVjdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ29tcGFjdFZlY3Rvcl9oCisjZGVmaW5lIENvbXBhY3RWZWN0b3Jf
aAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisvLyBUaGlzIGltcGxlbWVudHMgYSBy
ZXNpemVhYmxlIGFycmF5IGZvciBQT0QqKiB2YWx1ZXMsIHdoaWNoIGlzIG9wdGltaXplZCBmb3I6
CisvLyAtIEFuIGVtcHR5IGFycmF5IG9ubHkgdXNlcyBvbmUgd29yZC4KKy8vIC0gQSBjb3B5IG9m
IHRoZSBhcnJheSBvbmx5IHVzZXMgb25lIHdvcmQgKGkuZS4gYXNzaWdubWVudCBtZWFucyBhbGlh
c2luZykuCisvLyAtIFRoZSB2ZWN0b3IgY2FuJ3QgZ3JvdyBiZXlvbmQgMl4zMi0xIGVsZW1lbnRz
LgorLy8gLSBJbiBhbGwgb3RoZXIgcmVnYXJkcyB0aGlzIGhhcyBzaW1pbGFyIHNwYWNlIHVzYWdl
IHRvIGEgVmVjdG9yLgorLy8KKy8vICoqIFRoaXMgY291bGQgYmUgbW9kaWZpZWQgdG8gc3VwcG9y
dCBub24tUE9EIHZhbHVlcyBxdWl0ZSBlYXNpbHkuIEl0IGp1c3QKKy8vICAgIGhhc24ndCBiZWVu
LCBzbyBmYXIsIGJlY2F1c2UgdGhlcmUgaGFzIGJlZW4gbm8gbmVlZC4KKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDb21wYWN0VmVjdG9yIHsKK3B1Ymxp
YzoKKyAgICBDb21wYWN0VmVjdG9yKCkKKyAgICAgICAgOiBtX2RhdGEoMCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIENvbXBhY3RWZWN0b3IoY29uc3QgQ29tcGFjdFZlY3RvciYgb3RoZXIpCisg
ICAgICAgIDogbV9kYXRhKG90aGVyLm1fZGF0YSkKKyAgICB7CisgICAgICAgIGlmIChtX2RhdGEp
CisgICAgICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNvdW50Kys7Cisg
ICAgfQorICAgIAorICAgIENvbXBhY3RWZWN0b3IoY29uc3QgVmVjdG9yPFQ+JiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmIChvdGhlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YSA9
IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
ZGF0YSA9IChzdGF0aWNfY2FzdDxIZWFkZXIqPihmYXN0TWFsbG9jKEhlYWRlcjo6c2l6ZSgpICsg
c2l6ZW9mKFQpICogb3RoZXIuc2l6ZSgpKSkpLT5wYXlsb2FkKCk7CisgICAgICAgIEhlYWRlcjo6
ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQgPSAxOworICAgICAgICBIZWFkZXI6OmZyb21Q
YXlsb2FkKG1fZGF0YSktPmxlbmd0aCA9IG90aGVyLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKEhl
YWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG90aGVyLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG1f
ZGF0YVtpXSA9IG90aGVyW2ldOworICAgIH0KKyAgICAKKyAgICBDb21wYWN0VmVjdG9yJiBvcGVy
YXRvcj0oY29uc3QgQ29tcGFjdFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBUKiBvbGRE
YXRhID0gbV9kYXRhOworICAgICAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgICAgIGlm
IChtX2RhdGEpCisgICAgICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNv
dW50Kys7CisgICAgICAgIAorICAgICAgICBpZiAoIW9sZERhdGEpCisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPnJl
ZkNvdW50KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBmYXN0RnJlZShIZWFk
ZXI6OmZyb21QYXlsb2FkKG9sZERhdGEpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICAKKyAgICB+Q29tcGFjdFZlY3RvcigpCisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKC0tSGVhZGVyOjpmcm9tUGF5bG9hZCht
X2RhdGEpLT5yZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZmFzdEZyZWUo
SGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3Ro
OworICAgIH0KKyAgICAKKyAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVCog
YmVnaW4oKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBUKiBlbmQoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fZGF0
YSArIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgY29uc3QgVCog
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBUKiBlbmQoKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PENvbXBhY3RWZWN0b3IqPih0aGlzKS0+ZW5kKCk7IH0KKyAg
ICAKKyAgICBUJiBhdChzaXplX3QgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgc2l6ZSgp
KTsKKyAgICAgICAgcmV0dXJuIGJlZ2luKClbaV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQm
IGF0KHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBzaXplKCkpOwor
ICAgICAgICByZXR1cm4gYmVnaW4oKVtpXTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNp
emVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgSGVhZGVyIHsKKyAgICAgICAgdW5zaWduZWQgcmVmQ291bnQ7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAoc2l6ZW9mKEhlYWRlcikgKyA3KSAmIH43OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBUKiBwYXlsb2FkKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzaXplKCk7
CisgICAgICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihyZXN1bHQpICYg
NykpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBIZWFkZXIqIGZyb21QYXlsb2FkKFQq
IHBheWxvYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEhlYWRlcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBheWxvYWQpIC0gc2l6ZSgpKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgCisgICAgVCogbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6Q29tcGFjdFZlY3RvcjsKKworI2VuZGlmIC8vIENvbXBhY3RW
ZWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lv
biAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyMCw3ICs5MjAsNyBAQAogI2RlZmluZSBFTkFCTEVfSklUIDAKICNlbmRp
ZgogCi0vKiBUaGUgSklUIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBhbGwgeDg2LCB4NjQtNjQs
IEFSTSAmIE1JUFMgcGxhdGZvcm1zLiAqLworLyogVGhlIEpJVCBpcyBlbmFibGVkIGJ5IGRlZmF1
bHQgb24gYWxsIHg4NiwgeDg2LTY0LCBBUk0gJiBNSVBTIHBsYXRmb3Jtcy4gKi8KICNpZiAhZGVm
aW5lZChFTkFCTEVfSklUKSBcCiAgICAgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQ
VShBUk0pIHx8IENQVShNSVBTKSkgXAogICAgICYmIChPUyhEQVJXSU4pIHx8ICFDT01QSUxFUihH
Q0MpIHx8IEdDQ19WRVJTSU9OX0FUX0xFQVNUKDQsIDEsIDApKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128929</attachid>
            <date>2012-02-26 14:25:44 -0800</date>
            <delta_ts>2012-02-26 14:53:26 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>compactvector_patch_2.diff</filename>
            <type>text/plain</type>
            <size>32678</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTAyLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGZvciBhIGNvZGUgYmxvY2sgc2hvdWxkIG5v
dCByZXF1aXJlIHR3byBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEludHJvZHVjZWQgdGhlIENvbXBhY3RWZWN0b3IgY2xhc3MsIHdo
aWNoIGNvbnRhaW5zIGEgc2luZ2xlIGlubGluZSBwb2ludGVyCisgICAgICAgIHRvIGEgcmVmLWNv
dW50ZWQgbm9uLXJlc2l6ZWFibGUgdmVjdG9yIGJhY2tpbmcgc3RvcmUuIFRoaXMgc2F0aXNmaWVz
IHRoZQorICAgICAgICByZXF1aXJlbWVudHMgb2YgQ29kZUJsb2NrLCB3aGljaCBkZXNpcmVzIHRo
ZSBhYmlsaXR5IHRvIHNoYXJlIGluc3RydWN0aW9uCisgICAgICAgIHN0cmVhbXMgd2l0aCBvdGhl
ciBDb2RlQmxvY2tzLiBJdCBhbHNvIHJlZHVjZXMgdGhlIG51bWJlciBvZiBsb2FkcyByZXF1aXJl
ZAorICAgICAgICBmb3IgZ2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGJ5IG9uZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgYnl0ZWNvZGUg
ZGlzY2FyZGluZyBsb2dpYywgc2luY2Ugd2UgZG9uJ3QKKyAgICAgICAgdXNlIGl0IGFueW1vcmUg
YW5kIGl0J3MgdW5saWtlbHkgdG8gZXZlciB3b3JrIHJpZ2h0IHdpdGggREZHIG9yIExMSW50LiBB
bmQKKyAgICAgICAgSSBkaWRuJ3QgZmVlbCBsaWtlIHBvcnRpbmcgZGVhZCBjb2RlIHRvIHVzZSBD
b21wYWN0VmVjdG9yLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6Omluc3RydWN0aW9uT2Zmc2V0Rm9y
TnRoKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29k
ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0KToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZJbnN0cnVjdGlvbnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5z
dHJ1Y3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpMYWJlbDo6c2V0TG9jYXRpb24p
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om5ld0xhYmVsKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjppbnN0cnVjdGlvbnMpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAg
ICAgICAoSlNDOjpMYWJlbDo6TGFiZWwpOgorICAgICAgICAoTGFiZWwpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6
fkJ5dGVDb2RlQ2FjaGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2FjaGU6OmdldCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VGhyb3cpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
ZGVCbG9ja1dpdGhCeXRlY29kZUZvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6cHJvZHVjZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICogd3RmL0NvbXBhY3RWZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoQ29tcGFjdFZlY3Rvcik6CisgICAgICAg
IChXVEY6OkNvbXBhY3RWZWN0b3I6OkNvbXBhY3RWZWN0b3IpOgorICAgICAgICAoV1RGOjpDb21w
YWN0VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDb21wYWN0VmVjdG9yOjp+Q29t
cGFjdFZlY3Rvcik6CisgICAgICAgIChXVEY6OkNvbXBhY3RWZWN0b3I6OnNpemUpOgorICAgICAg
ICAoV1RGOjpDb21wYWN0VmVjdG9yOjpkYXRhKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rv
cjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpDb21wYWN0VmVjdG9yOjplbmQpOgorICAgICAgICAo
V1RGOjpDb21wYWN0VmVjdG9yOjphdCk6CisgICAgICAgIChXVEY6OkNvbXBhY3RWZWN0b3I6Om9w
ZXJhdG9yW10pOgorICAgICAgICAoSGVhZGVyKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rv
cjo6SGVhZGVyOjpzaXplKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rvcjo6SGVhZGVyOjpw
YXlsb2FkKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rvcjo6SGVhZGVyOjpmcm9tUGF5bG9h
ZCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTItMDItMjYgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQg
Zml4IGZvciBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgYWZ0ZXIgcjEwODY4MS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDg5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDYgKzU4Myw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9DaGVja2VkQm9vbGVhbi5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBh
Y3RWZWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Db21waWxlci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBsZXguaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwODkzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCNTQ2OTAxNEZBREE3QjAwMkMyOTg5IC8qIENvbXBh
Y3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBDb21wYWN0VmVjdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
QzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDgsNiArMTAw
OSw3IEBACiAJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdB
MTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBDb21w
YWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RWZWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDQsNiArMjIwNiw3IEBACiAJCQkJQTdBMUY3QUIwRjI1MkIz
QzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovLAogCQkJCUE3QkMwQzgxMTQwNjA4QjAwMEIxQkI3
MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLAogCQkJCUMyRDlDQTEyMTRCQ0MwNDYwMDMwNEI0
NiAvKiBDaGVja2VkQm9vbGVhbi5oICovLAorCQkJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAv
KiBDb21wYWN0VmVjdG9yLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFFIC8qIENv
bXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAq
LywKIAkJCQk5Nzk0MUE3QzEzMDJBMDk4MDA0QTM0NDcgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuY3BwICovLApAQCAtMzQwMSw2ICszNDA0LDcgQEAKIAkJCQkxNDk3MjA5MTE0RUI4
MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRG
NTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjU0NjkwMTRGQURBN0IwMDJDMjk4OSAvKiBD
b21wYWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI2LDcgKzIyNiw3IEBAIHN0YXRpYyBib29sIGlzUHJvcGVydHlBY2Nlc3MoT3Bjb2RlSUQgb3AK
ICAgICB9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldEZvck50aChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucywgaW50
IG50aCwgYm9vbCAoKnByZWRpY2F0ZSkoT3Bjb2RlSUQpKQorc3RhdGljIHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0Rm9yTnRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ29tcGFjdFZlY3RvcjxJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucywgaW50IG50aCwgYm9vbCAoKnByZWRpY2F0ZSkoT3Bj
b2RlSUQpKQogewogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGluc3RydWN0aW9u
cy5zaXplKCkpIHsKQEAgLTM0NywxOCArMzQ3LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0
cnVjdHVyZXMoY29uc3QgSW4KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewotICAgIGlmICghbV9pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgZGF0YUxvZygi
Tm8gaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZS5cbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQgPSAwOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5p
bnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQog
ICAgICAgICArK2luc3RydWN0aW9uQ291bnQ7CiAKICAgICBkYXRhTG9nKCIlbHUgbV9pbnN0cnVj
dGlvbnM7ICVsdSBieXRlcyBhdCAlcDsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0
ZXIocyk7ICVkIHZhcmlhYmxlKHMpXG5cbiIsCi0gICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9uQ291bnQpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSwKICAg
ICAgICAgdGhpcywgbV9udW1QYXJhbWV0ZXJzLCBtX251bUNhbGxlZVJlZ2lzdGVycywgbV9udW1W
YXJzKTsKIApAQCAtMTQyNCwxMSArMTQxOSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9ja1RhZywKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBt
X251bUNhcHR1cmVkVmFycyhvdGhlci5tX251bUNhcHR1cmVkVmFycykKICAgICAsIG1faXNDb25z
dHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAgLCBtX3Nob3VsZERpc2NhcmRCeXRl
Y29kZShmYWxzZSkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEs
IG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSkKICAgICAsIG1fZ2xvYmFsRGF0YShvdGhlci5tX2dsb2JhbERhdGEpCiAgICAgLCBtX2lu
c3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKLSAgICAsIG1faW5zdHJ1Y3Rpb25Db3Vu
dChvdGhlci5tX2luc3RydWN0aW9uQ291bnQpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5t
X3RoaXNSZWdpc3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVu
dHNSZWdpc3RlcikKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlv
blJlZ2lzdGVyKQpAQCAtMTQ4NCwxMiArMTQ3Nyw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBt
X251bVZhcnMoMCkKICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQotICAgICwg
bV9zaG91bGREaXNjYXJkQnl0ZWNvZGUoZmFsc2UpCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkK
ICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25l
ckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fZ2xvYmFsRGF0YSgwKQotICAg
ICwgbV9pbnN0cnVjdGlvbnMoYWRvcHRSZWYobmV3IEluc3RydWN0aW9ucykpCi0gICAgLCBtX2lu
c3RydWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEpCiAgICAgLCBt
X25lZWRzRnVsbFNjb3BlQ2hhaW4ob3duZXJFeGVjdXRhYmxlLT5uZWVkc0FjdGl2YXRpb24oKSkK
ICAgICAsIG1fdXNlc0V2YWwob3duZXJFeGVjdXRhYmxlLT51c2VzRXZhbCgpKQpAQCAtMTkwMywx
MiArMTg5Myw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAg
ICAgICAgfQogICAgIH0KICNlbmRpZgotCi0gICAgLy8gSGFuZGxlIHRoZSBieXRlY29kZSBkaXNj
YXJkaW5nIGNob3JlLgotICAgIGlmIChtX3Nob3VsZERpc2NhcmRCeXRlY29kZSkgewotICAgICAg
ICBkaXNjYXJkQnl0ZWNvZGUoKTsKLSAgICAgICAgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUgPSBm
YWxzZTsKLSAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE5ODAsNyArMTk2NCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4KIAogSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQog
ewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IG1faW5zdHJ1Y3Rpb25Db3VudCk7CisgICAg
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAogICAgIGlm
ICghbV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTk4LDcgKzE5ODIsNyBAQCBI
YW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAKIGludCBDb2RlQmxvY2s6
OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsK
LSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9uQ291bnQpOworICAgIEFT
U0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKICAgICBpZiAo
IW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybiBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlKCku
Zmlyc3RMaW5lKCk7CkBAIC0yMDIyLDcgKzIwMDYsNyBAQCBpbnQgQ29kZUJsb2NrOjpsaW5lTnVt
YmVyRm9yQnl0ZWNvZGVPZmZzCiAKIHZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0
IDwgbV9pbnN0cnVjdGlvbkNvdW50KTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOwogCiAgICAgaWYgKCFtX3JhcmVEYXRhKSB7CiAgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gMDsKQEAgLTIxMDIsOCArMjA4Niw2IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNH
bG9iYWxSZXNvbHZlSW5mb0F0QnkKIAogdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KCkKIHsK
LSAgICBpbnN0cnVjdGlvbnMoKS5zaHJpbmtUb0ZpdCgpOwotCiAjaWYgRU5BQkxFKENMQVNTSUNf
SU5URVJQUkVURVIpCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0Zp
dCgpOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKKyNpbmNsdWRlIDx3dGYvQ29tcGFjdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC0xMjcsOCArMTI4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICAKLSAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgp
IHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNz
KCk7CkBAIC0zNDEsMjAgKzM0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBz
ZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24p
IHsgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVuY3Rpb247
IH0KICAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSB7IHJldHVybiBtX2lz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCi0gICAgICAgIGJvb2wgaGFzSW5zdHJ1Y3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gISFtX2luc3RydWN0aW9uczsgfQotICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2luc3RydWN0aW9ucyA/IDAg
OiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0gICAgICAgIFZlY3Rv
cjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLT5t
X2luc3RydWN0aW9uczsgfQotICAgICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0
cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnM7
IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFy
KCk7IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGVMYXRlcigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gdHJ1ZTsKLSAgICAgICAgfQorICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgICAgICBDb21wYWN0VmVjdG9yPEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyAgICAgICAgY29uc3Qg
Q29tcGFjdFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIAogICAgICAgICBib29sIHVzZXNPcGNvZGUoT3Bj
b2RlSUQpOwogCi0gICAgICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQoKSB7IHJldHVybiBt
X2luc3RydWN0aW9uQ291bnQ7IH0KLSAgICAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbkNvdW50KHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQpIHsgbV9pbnN0cnVjdGlvbkNvdW50ID0gaW5zdHJ1Y3Rp
b25Db3VudDsgfQorICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lk
IHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVXaXRoQXJpdHlDaGVjaykKQEAgLTU0MSwxMSArNTMzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFdURjo6Z2VuZXJp
Y0JpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVP
ZmZzZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAt
MSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWhhc0luc3RydWN0aW9ucygpCi0gICAgICAgICAgICAg
ICAgICAgfHwgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5nZXRP
cGNvZGVJRCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXRdLnUub3Bj
b2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKKyAgICAgICAgICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChpbnQg
Ynl0ZWNvZGVPZmZzZXQpCkBAIC0xMDQ3LDkgKzEwMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzOwogICAgICAgICBib29sIG1faXNDb25zdHJ1Y3Rv
cjsKIAotICAgICAgICAvLyBUaGlzIGlzIHB1YmxpYyBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b3Vs
ZCBoYXZlIG1hbnkgZnJpZW5kcy4KLSAgICAgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRCeXRlY29k
ZTsKLQogICAgIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2aXJ0dWFsIHZv
aWQgaml0Q29tcGlsZUltcGwoSlNHbG9iYWxEYXRhJikgPSAwOwpAQCAtMTExNSwxMSArMTEwMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJs
ZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogCi0gICAgICAgIHN0cnVjdCBJbnN0cnVjdGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnN0
cnVjdGlvbnM+IHsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlv
bnM7Ci0gICAgICAgIH07Ci0gICAgICAgIFJlZlB0cjxJbnN0cnVjdGlvbnM+IG1faW5zdHJ1Y3Rp
b25zOwotICAgICAgICB1bnNpZ25lZCBtX2luc3RydWN0aW9uQ291bnQ7CisgICAgICAgIENvbXBh
Y3RWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGludCBtX3Ro
aXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkBAIC0xMzc5LDI3
ICsxMzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8gVXNl
IHRoaXMgaWYgeW91IHdhbnQgdG8gY29weSBhIGNvZGUgYmxvY2sgYW5kIHlvdSdyZSBwYXJhbm9p
ZCBhYm91dCBhIEdDCi0gICAgLy8gaGFwcGVuaW5nLgotICAgIGNsYXNzIEJ5dGVjb2RlRGVzdHJ1
Y3Rpb25CbG9ja2VyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rpb25C
bG9ja2VyKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICAgICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgICAgICAgICAsIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29k
ZShjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIH5CeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9
IG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICBwcml2YXRlOgotICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgICAgICBi
b29sIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICB9OwotCiAgICAgaW5s
aW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOSw2ICsxMTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZXhwZWN0ZWQgYnkg
dGhlIGNhbGxlZS4KICovCiAKK3ZvaWQgTGFiZWw6OnNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0
aW9uKQoreworICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAKKyAgICB1bnNpZ25lZCBz
aXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZ2VuZXJhdG9yLT5tX2luc3RydWN0aW9uc1ttX3Vu
cmVzb2x2ZWRKdW1wc1tpXS5zZWNvbmRdLnUub3BlcmFuZCA9IG1fbG9jYXRpb24gLSBtX3VucmVz
b2x2ZWRKdW1wc1tpXS5maXJzdDsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgUmVzb2x2ZVJl
c3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB7CkBAIC0xNzEsOCArMTgwLDggQEAgSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAgbV9jb2RlQmxvY2stPnNldFRoaXNSZWdp
c3RlcihtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0
ZWNvZGUoKnRoaXMpOwotCi0gICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9uQ291bnQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpID0gQ29tcGFjdFZlY3RvcjxJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlv
bnMpOwogCiAgICAgaWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQogICAgICAgICBtX2NvZGVCbG9j
ay0+ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKQEAgLTYw
Nyw3ICs2MTYsNyBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3CiAg
ICAgICAgIG1fbGFiZWxzLnJlbW92ZUxhc3QoKTsKIAogICAgIC8vIEFsbG9jYXRlIG5ldyBsYWJl
bCBJRC4KLSAgICBtX2xhYmVscy5hcHBlbmQobV9jb2RlQmxvY2spOworICAgIG1fbGFiZWxzLmFw
cGVuZCh0aGlzKTsKICAgICByZXR1cm4gJm1fbGFiZWxzLmxhc3QoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIElkZW50aWZpZXI7CisgICAgY2xhc3Mg
TGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKICAgICBjbGFzcyBDYWxsQXJndW1l
bnRzIHsKQEAgLTUzMiw2ICs1MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW4uZ2V0KCk7
IH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBMYWJlbDsKKyAgICAgICAg
CiAgICAgICAgIHZvaWQgZW1pdE9wY29kZShPcGNvZGVJRCk7CiAgICAgICAgIFZhbHVlUHJvZmls
ZSogZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxh
c3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgp
OwpAQCAtNjExLDcgKzYxNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKIAotICAgICAgICBWZWN0b3I8
SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCk7IH0KKyAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KIAogICAgICAgICBib29sIHNob3VsZE9w
dGltaXplTG9jYWxzKCkKQEAgLTY0NCw2ICs2NDcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogICAgICAgICB2b2lkIGNyZWF0
ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wgbV9zaG91bGRF
bWl0RGVidWdIb29rczsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oCShyZXZpc2lv
biAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDIxICszOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIExhYmVsIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IExhYmVsKENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgICAgICBleHBsaWNpdCBMYWJlbChCeXRlY29kZUdlbmVyYXRv
ciogZ2VuZXJhdG9yKQogICAgICAgICAgICAgOiBtX3JlZkNvdW50KDApCiAgICAgICAgICAgICAs
IG1fbG9jYXRpb24oaW52YWxpZExvY2F0aW9uKQotICAgICAgICAgICAgLCBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCisgICAgICAgICAgICAsIG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2NhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBzaXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV91bnJlc29sdmVkSnVtcHNbaV0uc2Vjb25k
XS51Lm9wZXJhbmQgPSBtX2xvY2F0aW9uIC0gbV91bnJlc29sdmVkSnVtcHNbaV0uZmlyc3Q7Ci0g
ICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRMb2NhdGlvbih1bnNpZ25lZCk7CiAKICAgICAgICAg
aW50IGJpbmQoaW50IG9wY29kZSwgaW50IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtODEs
NyArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgbV9yZWZDb3VudDsKICAg
ICAgICAgdW5zaWduZWQgbV9sb2NhdGlvbjsKLSAgICAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yOwogICAgICAgICBtdXRh
YmxlIEp1bXBWZWN0b3IgbV91bnJlc29sdmVkSnVtcHM7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgJKHJldmlzaW9uIDEwODkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGRl
bGV0ZSBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLmNvZGVCbG9jay0+bV9zaG91
bGREaXNjYXJkQnl0ZWNvZGUgPSBpdGVyLT5zZWNvbmQub2xkVmFsdWVPZlNob3VsZERpc2NhcmRC
eXRlY29kZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE1NSw3ICsxNTQsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCktPmNvZGVCbG9j
a1dpdGhCeXRlY29kZUZvcihrZXkua2luZCgpKTsKICAgICAgICAgaWYgKHZhbHVlLmNvZGVCbG9j
aykgewogICAgICAgICAgICAgdmFsdWUub3duZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhbHVl
Lm9sZFZhbHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGUgPSB2YWx1ZS5jb2RlQmxvY2stPm1fc2hv
dWxkRGlzY2FyZEJ5dGVjb2RlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTm9w
ZSwgc28gdHJ5IHRvIHBhcnNlIG9uZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb247
CkBAIC0xNzEsMTMgKzE2OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZhbHVlLmNvZGVCbG9j
ayA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRv
IHJldHVybiBhIGNvZGUgYmxvY2ssIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIG5vdCBnb2luZwotICAg
ICAgICAvLyB0byBiZSBkaXNjYXJkaW5nIGl0cyBieXRlY29kZSBpZiBhIEdDIHdlcmUgdG8gaGFw
cGVuIGR1cmluZyBERkcKLSAgICAgICAgLy8gY29tcGlsYXRpb24uIFRoYXQncyB1bmxpa2VseSwg
YnV0IGl0J3MgZ29vZCB0byB0aG9yb3VnaGx5IGVuam95IHRoaXMKLSAgICAgICAgLy8ga2luZCBv
ZiBwYXJhbm9pYS4KLSAgICAgICAgaWYgKCEhdmFsdWUuY29kZUJsb2NrKQotICAgICAgICAgICAg
dmFsdWUuY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9IGZhbHNlOwotICAgICAg
ICAKICAgICAgICAgbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgcmV0
dXJuIHZhbHVlLmNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNyBA
QCBFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhCiAgICAgSW5zdHJ1Y3Rp
b24qIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IDA7CiAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzSW5zdHJ1Y3Rpb25zKCkp
Ci0gICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAmY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKClbaGFuZGxlci0+dGFyZ2V0XTsKKyAgICAgICAgY2F0Y2hQQ0Zv
ckludGVycHJldGVyID0gJmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2hh
bmRsZXItPnRhcmdldF07CiAgICAgfSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IEZ1bmN0
aW9uUHRyKGN0aU9wVGhyb3dOb3RDYXVnaHQpLnZhbHVlKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw4ICs0
NDMsNyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29k
ZUJsb2NrU2V0dGVyKHQxKQogICAgIAogICAgICMgU2V0IHVwIHRoZSBQQy4KLSAgICBsb2FkcCBD
b2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW3QxXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Oklu
c3RydWN0aW9uczo6bV9pbnN0cnVjdGlvbnMgKyBWZWN0b3JCdWZmZXJPZmZzZXRbdDBdLCBQQwor
ICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCBQQwogZW5kCiAKICMgRXhw
ZWN0cyB0aGF0IENvZGVCbG9jayBpcyBpbiB0MSwgd2hpY2ggaXMgd2hhdCBwcm9sb2d1ZSgpIGxl
YXZlcyBiZWhpbmQuCkBAIC01MDMsOCArNTAyLDcgQEAgbWFjcm8gZnVuY3Rpb25Bcml0eUNoZWNr
KGRvbmVMYWJlbCwgc2xvdwogLmNvbnRpbnVlOgogICAgICMgUmVsb2FkIENvZGVCbG9jayBhbmQg
UEMsIHNpbmNlIHRoZSBzbG93X3BhdGggY2xvYmJlcmVkIGl0LgogICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCB0MQotICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCB0MAot
ICAgIGxvYWRwIENvZGVCbG9jazo6SW5zdHJ1Y3Rpb25zOjptX2luc3RydWN0aW9ucyArIFZlY3Rv
ckJ1ZmZlck9mZnNldFt0MF0sIFBDCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1t0MV0sIFBDCiAgICAgam1wIGRvbmVMYWJlbAogZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMDg5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEwLDggKzIxMCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUlu
dGVybmEKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIGlmICghIW1fZXZhbENvZGVCbG9jayAmJiBtX2V2
YWxDb2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKLSAgICAgICAgQnl0
ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOwor
ICAgIGlmICghIW1fZXZhbENvZGVCbG9jaykgewogICAgICAgICBPd25QdHI8RXZhbENvZGVCbG9j
az4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2soQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2RlQmxvY2spKTsKICAgICAgICAgbmV3Q29kZUJsb2Nr
LT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4obV9ldmFsQ29k
ZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBuZXdDb2RlQmxv
Y2sucmVsZWFzZSgpOwpAQCAtMzQ2LDggKzM0NSw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0
YWJsZTo6Y29tcGlsZUludGUKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIGlmICghIW1fcHJvZ3JhbUNv
ZGVCbG9jayAmJiBtX3Byb2dyYW1Db2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2Rl
KCkpIHsKLSAgICAgICAgQnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihtX3Byb2dy
YW1Db2RlQmxvY2suZ2V0KCkpOworICAgIGlmICghIW1fcHJvZ3JhbUNvZGVCbG9jaykgewogICAg
ICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3
IFByb2dyYW1Db2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX3Byb2dyYW1D
b2RlQmxvY2spKTsKICAgICAgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNf
cG9pbnRlcl9jYXN0PENvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwog
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwpAQCAt
NDk0LDE4ICs0OTIsMTMgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JD
bwogCiBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxvY2tXaXRo
Qnl0ZWNvZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAgIEZ1bmN0aW9u
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKLSAgICBp
ZiAoY29kZUJsb2NrLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKQotICAgICAgICByZXR1
cm4gY29kZUJsb2NrOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
a0ZvcihraW5kKTsKIH0KIAogUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25F
eGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewotICAgIGlm
ICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpICYmIGNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKSB7Ci0gICAgICAg
IEJ5dGVjb2RlRGVzdHJ1Y3Rpb25CbG9ja2VyIGJsb2NrZXIoY29kZUJsb2NrRm9yKHNwZWNpYWxp
emF0aW9uS2luZCkuZ2V0KCkpOworICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlv
bktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENv
ZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCkpKTsKLSAgICB9CiAgICAgCiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ29tcGFjdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ29tcGFjdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9Db21wYWN0VmVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQ29tcGFjdFZlY3Rvcl9oCisjZGVmaW5lIENvbXBhY3RWZWN0b3JfaAorCisjaW5j
bHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisvLyBUaGlz
IGltcGxlbWVudHMgYSByZXNpemVhYmxlIGFycmF5IGZvciBQT0QqKiB2YWx1ZXMsIHdoaWNoIGlz
IG9wdGltaXplZCBmb3I6CisvLyAtIEFuIGVtcHR5IGFycmF5IG9ubHkgdXNlcyBvbmUgd29yZC4K
Ky8vIC0gQSBjb3B5IG9mIHRoZSBhcnJheSBvbmx5IHVzZXMgb25lIHdvcmQgKGkuZS4gYXNzaWdu
bWVudCBtZWFucyBhbGlhc2luZykuCisvLyAtIFRoZSB2ZWN0b3IgY2FuJ3QgZ3JvdyBiZXlvbmQg
Ml4zMi0xIGVsZW1lbnRzLgorLy8gLSBJbiBhbGwgb3RoZXIgcmVnYXJkcyB0aGlzIGhhcyBzaW1p
bGFyIHNwYWNlIHVzYWdlIHRvIGEgVmVjdG9yLgorLy8KKy8vICoqIFRoaXMgY291bGQgYmUgbW9k
aWZpZWQgdG8gc3VwcG9ydCBub24tUE9EIHZhbHVlcyBxdWl0ZSBlYXNpbHkuIEl0IGp1c3QKKy8v
ICAgIGhhc24ndCBiZWVuLCBzbyBmYXIsIGJlY2F1c2UgdGhlcmUgaGFzIGJlZW4gbm8gbmVlZC4g
TW9yZW92ZXIsIGV2ZW4gbm93LAorLy8gICAgaXQncyB1c2VkIGZvciB0aGluZ3MgdGhhdCBhcmVu
J3QgcXVpdGUgUE9EIGFjY29yZGluZyB0byB0aGUgb2ZmaWNpYWwKKy8vICAgIGRlZmludGlvbiwg
c3VjaCBhcyBKU0M6Okluc3RydWN0aW9uLgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIENvbXBhY3RWZWN0b3IgeworcHVibGljOgorICAgIENvbXBhY3RW
ZWN0b3IoKQorICAgICAgICA6IG1fZGF0YSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29t
cGFjdFZlY3Rvcihjb25zdCBDb21wYWN0VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2RhdGEo
b3RoZXIubV9kYXRhKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIEhl
YWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQrKzsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgQ29tcGFjdFZlY3Rvcihjb25zdCBWZWN0b3I8VD4mIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9kYXRhID0gMDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9kYXRhID0g
KHN0YXRpY19jYXN0PEhlYWRlcio+KGZhc3RNYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2Yo
VCkgKiBvdGhlci5zaXplKCkpKSktPnBheWxvYWQoKTsKKyAgICAgICAgSGVhZGVyOjpmcm9tUGF5
bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9IDE7CisgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQo
bV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6ZSgpOworICAgICAgICBBU1NFUlQoSGVhZGVyOjpm
cm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPT0gb3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbWVt
Y3B5KG1fZGF0YSwgb3RoZXIuYmVnaW4oKSwgc2l6ZW9mKFQpICogb3RoZXIuc2l6ZSgpKTsKKyAg
ICB9CisgICAgCisgICAgQ29tcGFjdFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IENvbXBhY3RWZWN0
b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgVCogb2xkRGF0YSA9IG1fZGF0YTsKKyAgICAgICAg
bV9kYXRhID0gb3RoZXIubV9kYXRhOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAg
SGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCsrOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFvbGREYXRhKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBpZiAo
LS1IZWFkZXI6OmZyb21QYXlsb2FkKG9sZERhdGEpLT5yZWZDb3VudCkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgZmFzdEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRh
KSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgfkNvbXBhY3RWZWN0
b3IoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGZhc3RGcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQobV9k
YXRhKSk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBI
ZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aDsKKyAgICB9CisgICAgCisgICAgVCog
ZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIFQqIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRh
OyB9CisgICAgVCogZW5kKCkKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2RhdGEgKyBIZWFkZXI6OmZyb21QYXlsb2Fk
KG1fZGF0YSktPmxlbmd0aDsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGNvbnN0IFQqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisgICAgY29uc3QgVCogZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxD
b21wYWN0VmVjdG9yKj4odGhpcyktPmVuZCgpOyB9CisgICAgCisgICAgVCYgYXQoc2l6ZV90IGkp
CisgICAgeworICAgICAgICBBU1NFUlQoaSA8IHNpemUoKSk7CisgICAgICAgIHJldHVybiBiZWdp
bigpW2ldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdChzaXplX3QgaSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGJlZ2luKClb
aV07CisgICAgfQorICAgIAorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
YXQoaSk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RydWN0IEhlYWRlciB7CisgICAgICAgIHVu
c2lnbmVkIHJlZkNvdW50OworICAgICAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KHNpemVvZihIZWFkZXIpICsgNykgJiB+NzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
VCogcGF5bG9hZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKCEo
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0KSAmIDcpKTsKKyAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFQqPihyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgSGVhZGVyKiBmcm9tUGF5bG9hZChUKiBwYXlsb2FkKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIZWFkZXIqPihyZWludGVycHJldF9j
YXN0PGNoYXIqPihwYXlsb2FkKSAtIHNpemUoKSk7CisgICAgICAgIH0KKyAgICB9OworICAgIAor
ICAgIFQqIG1fZGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNv
bXBhY3RWZWN0b3I7CisKKyNlbmRpZiAvLyBDb21wYWN0VmVjdG9yX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIw
LDcgQEAKICNkZWZpbmUgRU5BQkxFX0pJVCAwCiAjZW5kaWYKIAotLyogVGhlIEpJVCBpcyBlbmFi
bGVkIGJ5IGRlZmF1bHQgb24gYWxsIHg4NiwgeDY0LTY0LCBBUk0gJiBNSVBTIHBsYXRmb3Jtcy4g
Ki8KKy8qIFRoZSBKSVQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGFsbCB4ODYsIHg4Ni02NCwg
QVJNICYgTUlQUyBwbGF0Zm9ybXMuICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgXAogICAg
ICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoTUlQUykpIFwK
ICAgICAmJiAoT1MoREFSV0lOKSB8fCAhQ09NUElMRVIoR0NDKSB8fCBHQ0NfVkVSU0lPTl9BVF9M
RUFTVCg0LCAxLCAwKSkgXAo=
</data>
<flag name="commit-queue"
          id="131444"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128930</attachid>
            <date>2012-02-26 14:53:26 -0800</date>
            <delta_ts>2012-02-26 16:53:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>compactvector_patch_3.diff</filename>
            <type>text/plain</type>
            <size>32654</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTAyLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGZvciBhIGNvZGUgYmxvY2sgc2hvdWxkIG5v
dCByZXF1aXJlIHR3byBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEludHJvZHVjZWQgdGhlIENvbXBhY3RWZWN0b3IgY2xhc3MsIHdo
aWNoIGNvbnRhaW5zIGEgc2luZ2xlIGlubGluZSBwb2ludGVyCisgICAgICAgIHRvIGEgcmVmLWNv
dW50ZWQgbm9uLXJlc2l6ZWFibGUgdmVjdG9yIGJhY2tpbmcgc3RvcmUuIFRoaXMgc2F0aXNmaWVz
IHRoZQorICAgICAgICByZXF1aXJlbWVudHMgb2YgQ29kZUJsb2NrLCB3aGljaCBkZXNpcmVzIHRo
ZSBhYmlsaXR5IHRvIHNoYXJlIGluc3RydWN0aW9uCisgICAgICAgIHN0cmVhbXMgd2l0aCBvdGhl
ciBDb2RlQmxvY2tzLiBJdCBhbHNvIHJlZHVjZXMgdGhlIG51bWJlciBvZiBsb2FkcyByZXF1aXJl
ZAorICAgICAgICBmb3IgZ2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGJ5IG9uZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBnZXRzIHJpZCBvZiB0aGUgYnl0ZWNvZGUg
ZGlzY2FyZGluZyBsb2dpYywgc2luY2Ugd2UgZG9uJ3QKKyAgICAgICAgdXNlIGl0IGFueW1vcmUg
YW5kIGl0J3MgdW5saWtlbHkgdG8gZXZlciB3b3JrIHJpZ2h0IHdpdGggREZHIG9yIExMSW50LiBB
bmQKKyAgICAgICAgSSBkaWRuJ3QgZmVlbCBsaWtlIHBvcnRpbmcgZGVhZCBjb2RlIHRvIHVzZSBD
b21wYWN0VmVjdG9yLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6Omluc3RydWN0aW9uT2Zmc2V0Rm9y
TnRoKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29k
ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0KToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZJbnN0cnVjdGlvbnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5z
dHJ1Y3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpMYWJlbDo6c2V0TG9jYXRpb24p
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om5ld0xhYmVsKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjppbnN0cnVjdGlvbnMpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9MYWJlbC5oOgorICAg
ICAgICAoSlNDOjpMYWJlbDo6TGFiZWwpOgorICAgICAgICAoTGFiZWwpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6
fkJ5dGVDb2RlQ2FjaGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2FjaGU6OmdldCk6
CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VGhyb3cpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
ZGVCbG9ja1dpdGhCeXRlY29kZUZvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6cHJvZHVjZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICogd3RmL0NvbXBhY3RWZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoQ29tcGFjdFZlY3Rvcik6CisgICAgICAg
IChXVEY6OkNvbXBhY3RWZWN0b3I6OkNvbXBhY3RWZWN0b3IpOgorICAgICAgICAoV1RGOjpDb21w
YWN0VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDb21wYWN0VmVjdG9yOjp+Q29t
cGFjdFZlY3Rvcik6CisgICAgICAgIChXVEY6OkNvbXBhY3RWZWN0b3I6OnNpemUpOgorICAgICAg
ICAoV1RGOjpDb21wYWN0VmVjdG9yOjpkYXRhKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rv
cjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpDb21wYWN0VmVjdG9yOjplbmQpOgorICAgICAgICAo
V1RGOjpDb21wYWN0VmVjdG9yOjphdCk6CisgICAgICAgIChXVEY6OkNvbXBhY3RWZWN0b3I6Om9w
ZXJhdG9yW10pOgorICAgICAgICAoSGVhZGVyKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rv
cjo6SGVhZGVyOjpzaXplKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rvcjo6SGVhZGVyOjpw
YXlsb2FkKToKKyAgICAgICAgKFdURjo6Q29tcGFjdFZlY3Rvcjo6SGVhZGVyOjpmcm9tUGF5bG9h
ZCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTItMDItMjYgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQg
Zml4IGZvciBFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgYWZ0ZXIgcjEwODY4MS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDg5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDYgKzU4Myw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9DaGVja2VkQm9vbGVhbi5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBh
Y3RWZWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Db21waWxlci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBsZXguaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwODkzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCNTQ2OTAxNEZBREE3QjAwMkMyOTg5IC8qIENvbXBh
Y3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBDb21wYWN0VmVjdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
QzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDgsNiArMTAw
OSw3IEBACiAJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdB
MTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBDb21w
YWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RWZWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDQsNiArMjIwNiw3IEBACiAJCQkJQTdBMUY3QUIwRjI1MkIz
QzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovLAogCQkJCUE3QkMwQzgxMTQwNjA4QjAwMEIxQkI3
MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLAogCQkJCUMyRDlDQTEyMTRCQ0MwNDYwMDMwNEI0
NiAvKiBDaGVja2VkQm9vbGVhbi5oICovLAorCQkJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAv
KiBDb21wYWN0VmVjdG9yLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFFIC8qIENv
bXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAq
LywKIAkJCQk5Nzk0MUE3QzEzMDJBMDk4MDA0QTM0NDcgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuY3BwICovLApAQCAtMzQwMSw2ICszNDA0LDcgQEAKIAkJCQkxNDk3MjA5MTE0RUI4
MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRG
NTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjU0NjkwMTRGQURBN0IwMDJDMjk4OSAvKiBD
b21wYWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI2LDcgKzIyNiw3IEBAIHN0YXRpYyBib29sIGlzUHJvcGVydHlBY2Nlc3MoT3Bjb2RlSUQgb3AK
ICAgICB9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldEZvck50aChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucywgaW50
IG50aCwgYm9vbCAoKnByZWRpY2F0ZSkoT3Bjb2RlSUQpKQorc3RhdGljIHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0Rm9yTnRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ29tcGFjdFZlY3RvcjxJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucywgaW50IG50aCwgYm9vbCAoKnByZWRpY2F0ZSkoT3Bj
b2RlSUQpKQogewogICAgIHNpemVfdCBpID0gMDsKICAgICB3aGlsZSAoaSA8IGluc3RydWN0aW9u
cy5zaXplKCkpIHsKQEAgLTM0NywxOCArMzQ3LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludFN0
cnVjdHVyZXMoY29uc3QgSW4KIAogdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewotICAgIGlmICghbV9pbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgZGF0YUxvZygi
Tm8gaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZS5cbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQgPSAwOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5p
bnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQog
ICAgICAgICArK2luc3RydWN0aW9uQ291bnQ7CiAKICAgICBkYXRhTG9nKCIlbHUgbV9pbnN0cnVj
dGlvbnM7ICVsdSBieXRlcyBhdCAlcDsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0
ZXIocyk7ICVkIHZhcmlhYmxlKHMpXG5cbiIsCi0gICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9uQ291bnQpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSwKICAg
ICAgICAgdGhpcywgbV9udW1QYXJhbWV0ZXJzLCBtX251bUNhbGxlZVJlZ2lzdGVycywgbV9udW1W
YXJzKTsKIApAQCAtMTQyNCwxMSArMTQxOSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9ja1RhZywKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBt
X251bUNhcHR1cmVkVmFycyhvdGhlci5tX251bUNhcHR1cmVkVmFycykKICAgICAsIG1faXNDb25z
dHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAgLCBtX3Nob3VsZERpc2NhcmRCeXRl
Y29kZShmYWxzZSkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEs
IG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSkKICAgICAsIG1fZ2xvYmFsRGF0YShvdGhlci5tX2dsb2JhbERhdGEpCiAgICAgLCBtX2lu
c3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKLSAgICAsIG1faW5zdHJ1Y3Rpb25Db3Vu
dChvdGhlci5tX2luc3RydWN0aW9uQ291bnQpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5t
X3RoaXNSZWdpc3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVu
dHNSZWdpc3RlcikKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlv
blJlZ2lzdGVyKQpAQCAtMTQ4NCwxMiArMTQ3Nyw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBt
X251bVZhcnMoMCkKICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQotICAgICwg
bV9zaG91bGREaXNjYXJkQnl0ZWNvZGUoZmFsc2UpCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkK
ICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25l
ckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fZ2xvYmFsRGF0YSgwKQotICAg
ICwgbV9pbnN0cnVjdGlvbnMoYWRvcHRSZWYobmV3IEluc3RydWN0aW9ucykpCi0gICAgLCBtX2lu
c3RydWN0aW9uQ291bnQoMCkKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoLTEpCiAgICAgLCBt
X25lZWRzRnVsbFNjb3BlQ2hhaW4ob3duZXJFeGVjdXRhYmxlLT5uZWVkc0FjdGl2YXRpb24oKSkK
ICAgICAsIG1fdXNlc0V2YWwob3duZXJFeGVjdXRhYmxlLT51c2VzRXZhbCgpKQpAQCAtMTkwMywx
MiArMTg5Myw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAg
ICAgICAgfQogICAgIH0KICNlbmRpZgotCi0gICAgLy8gSGFuZGxlIHRoZSBieXRlY29kZSBkaXNj
YXJkaW5nIGNob3JlLgotICAgIGlmIChtX3Nob3VsZERpc2NhcmRCeXRlY29kZSkgewotICAgICAg
ICBkaXNjYXJkQnl0ZWNvZGUoKTsKLSAgICAgICAgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUgPSBm
YWxzZTsKLSAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE5ODAsNyArMTk2NCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW4KIAogSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQog
ewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IG1faW5zdHJ1Y3Rpb25Db3VudCk7CisgICAg
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAogICAgIGlm
ICghbV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTk4LDcgKzE5ODIsNyBAQCBI
YW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAKIGludCBDb2RlQmxvY2s6
OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsK
LSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9uQ291bnQpOworICAgIEFT
U0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKICAgICBpZiAo
IW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybiBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlKCku
Zmlyc3RMaW5lKCk7CkBAIC0yMDIyLDcgKzIwMDYsNyBAQCBpbnQgQ29kZUJsb2NrOjpsaW5lTnVt
YmVyRm9yQnl0ZWNvZGVPZmZzCiAKIHZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0
IDwgbV9pbnN0cnVjdGlvbkNvdW50KTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOwogCiAgICAgaWYgKCFtX3JhcmVEYXRhKSB7CiAgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gMDsKQEAgLTIxMDIsOCArMjA4Niw2IEBAIGJvb2wgQ29kZUJsb2NrOjpoYXNH
bG9iYWxSZXNvbHZlSW5mb0F0QnkKIAogdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KCkKIHsK
LSAgICBpbnN0cnVjdGlvbnMoKS5zaHJpbmtUb0ZpdCgpOwotCiAjaWYgRU5BQkxFKENMQVNTSUNf
SU5URVJQUkVURVIpCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaHJpbmtUb0Zp
dCgpOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKKyNpbmNsdWRlIDx3dGYvQ29tcGFjdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC0xMjcsOCArMTI4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICAKLSAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgp
IHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNz
KCk7CkBAIC0zNDEsMjAgKzM0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBz
ZXRJc051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24p
IHsgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVuY3Rpb247
IH0KICAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSB7IHJldHVybiBtX2lz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCi0gICAgICAgIGJvb2wgaGFzSW5zdHJ1Y3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gISFtX2luc3RydWN0aW9uczsgfQotICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2luc3RydWN0aW9ucyA/IDAg
OiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0gICAgICAgIFZlY3Rv
cjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLT5t
X2luc3RydWN0aW9uczsgfQotICAgICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0
cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnM7
IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFy
KCk7IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGVMYXRlcigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gdHJ1ZTsKLSAgICAgICAgfQorICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgICAgICBDb21wYWN0VmVjdG9yPEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKyAgICAgICAgY29uc3Qg
Q29tcGFjdFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIAogICAgICAgICBib29sIHVzZXNPcGNvZGUoT3Bj
b2RlSUQpOwogCi0gICAgICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQoKSB7IHJldHVybiBt
X2luc3RydWN0aW9uQ291bnQ7IH0KLSAgICAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbkNvdW50KHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQpIHsgbV9pbnN0cnVjdGlvbkNvdW50ID0gaW5zdHJ1Y3Rp
b25Db3VudDsgfQorICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lk
IHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVXaXRoQXJpdHlDaGVjaykKQEAgLTU0MSwxMSArNTMzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFdURjo6Z2VuZXJp
Y0JpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVP
ZmZzZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAt
MSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWhhc0luc3RydWN0aW9ucygpCi0gICAgICAgICAgICAg
ICAgICAgfHwgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5nZXRP
cGNvZGVJRCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXRdLnUub3Bj
b2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKKyAgICAgICAgICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChpbnQg
Ynl0ZWNvZGVPZmZzZXQpCkBAIC0xMDQ3LDkgKzEwMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzOwogICAgICAgICBib29sIG1faXNDb25zdHJ1Y3Rv
cjsKIAotICAgICAgICAvLyBUaGlzIGlzIHB1YmxpYyBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b3Vs
ZCBoYXZlIG1hbnkgZnJpZW5kcy4KLSAgICAgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRCeXRlY29k
ZTsKLQogICAgIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2aXJ0dWFsIHZv
aWQgaml0Q29tcGlsZUltcGwoSlNHbG9iYWxEYXRhJikgPSAwOwpAQCAtMTExNSwxMSArMTEwMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJs
ZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogCi0gICAgICAgIHN0cnVjdCBJbnN0cnVjdGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnN0
cnVjdGlvbnM+IHsKLSAgICAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlv
bnM7Ci0gICAgICAgIH07Ci0gICAgICAgIFJlZlB0cjxJbnN0cnVjdGlvbnM+IG1faW5zdHJ1Y3Rp
b25zOwotICAgICAgICB1bnNpZ25lZCBtX2luc3RydWN0aW9uQ291bnQ7CisgICAgICAgIENvbXBh
Y3RWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGludCBtX3Ro
aXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkBAIC0xMzc5LDI3
ICsxMzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8gVXNl
IHRoaXMgaWYgeW91IHdhbnQgdG8gY29weSBhIGNvZGUgYmxvY2sgYW5kIHlvdSdyZSBwYXJhbm9p
ZCBhYm91dCBhIEdDCi0gICAgLy8gaGFwcGVuaW5nLgotICAgIGNsYXNzIEJ5dGVjb2RlRGVzdHJ1
Y3Rpb25CbG9ja2VyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rpb25C
bG9ja2VyKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICAgICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgICAgICAgICAsIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29k
ZShjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIH5CeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9
IG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICBwcml2YXRlOgotICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgICAgICBi
b29sIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICB9OwotCiAgICAgaW5s
aW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOSw2ICsxMTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZXhwZWN0ZWQgYnkg
dGhlIGNhbGxlZS4KICovCiAKK3ZvaWQgTGFiZWw6OnNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0
aW9uKQoreworICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAKKyAgICB1bnNpZ25lZCBz
aXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZ2VuZXJhdG9yLT5tX2luc3RydWN0aW9uc1ttX3Vu
cmVzb2x2ZWRKdW1wc1tpXS5zZWNvbmRdLnUub3BlcmFuZCA9IG1fbG9jYXRpb24gLSBtX3VucmVz
b2x2ZWRKdW1wc1tpXS5maXJzdDsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgUmVzb2x2ZVJl
c3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB7CkBAIC0xNzEsOCArMTgwLDggQEAgSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAgbV9jb2RlQmxvY2stPnNldFRoaXNSZWdp
c3RlcihtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0
ZWNvZGUoKnRoaXMpOwotCi0gICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9uQ291bnQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpID0gQ29tcGFjdFZlY3RvcjxJbnN0cnVjdGlvbj4obV9pbnN0cnVjdGlv
bnMpOwogCiAgICAgaWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQogICAgICAgICBtX2NvZGVCbG9j
ay0+ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKQEAgLTYw
Nyw3ICs2MTYsNyBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3CiAg
ICAgICAgIG1fbGFiZWxzLnJlbW92ZUxhc3QoKTsKIAogICAgIC8vIEFsbG9jYXRlIG5ldyBsYWJl
bCBJRC4KLSAgICBtX2xhYmVscy5hcHBlbmQobV9jb2RlQmxvY2spOworICAgIG1fbGFiZWxzLmFw
cGVuZCh0aGlzKTsKICAgICByZXR1cm4gJm1fbGFiZWxzLmxhc3QoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIElkZW50aWZpZXI7CisgICAgY2xhc3Mg
TGFiZWw7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKICAgICBjbGFzcyBDYWxsQXJndW1l
bnRzIHsKQEAgLTUzMiw2ICs1MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW4uZ2V0KCk7
IH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBMYWJlbDsKKyAgICAgICAg
CiAgICAgICAgIHZvaWQgZW1pdE9wY29kZShPcGNvZGVJRCk7CiAgICAgICAgIFZhbHVlUHJvZmls
ZSogZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxh
c3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgp
OwpAQCAtNjExLDcgKzYxNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKIAotICAgICAgICBWZWN0b3I8
SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCk7IH0KKyAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KIAogICAgICAgICBib29sIHNob3VsZE9w
dGltaXplTG9jYWxzKCkKQEAgLTY0NCw2ICs2NDcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogICAgICAgICB2b2lkIGNyZWF0
ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKik7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wgbV9zaG91bGRF
bWl0RGVidWdIb29rczsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9MYWJlbC5oCShyZXZpc2lv
biAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDIxICszOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIExhYmVsIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IExhYmVsKENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgICAgICBleHBsaWNpdCBMYWJlbChCeXRlY29kZUdlbmVyYXRv
ciogZ2VuZXJhdG9yKQogICAgICAgICAgICAgOiBtX3JlZkNvdW50KDApCiAgICAgICAgICAgICAs
IG1fbG9jYXRpb24oaW52YWxpZExvY2F0aW9uKQotICAgICAgICAgICAgLCBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCisgICAgICAgICAgICAsIG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2NhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBzaXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV91bnJlc29sdmVkSnVtcHNbaV0uc2Vjb25k
XS51Lm9wZXJhbmQgPSBtX2xvY2F0aW9uIC0gbV91bnJlc29sdmVkSnVtcHNbaV0uZmlyc3Q7Ci0g
ICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRMb2NhdGlvbih1bnNpZ25lZCk7CiAKICAgICAgICAg
aW50IGJpbmQoaW50IG9wY29kZSwgaW50IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtODEs
NyArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgbV9yZWZDb3VudDsKICAg
ICAgICAgdW5zaWduZWQgbV9sb2NhdGlvbjsKLSAgICAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yOwogICAgICAgICBtdXRh
YmxlIEp1bXBWZWN0b3IgbV91bnJlc29sdmVkSnVtcHM7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgJKHJldmlzaW9uIDEwODkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGRl
bGV0ZSBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLmNvZGVCbG9jay0+bV9zaG91
bGREaXNjYXJkQnl0ZWNvZGUgPSBpdGVyLT5zZWNvbmQub2xkVmFsdWVPZlNob3VsZERpc2NhcmRC
eXRlY29kZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE1NSw3ICsxNTQsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCktPmNvZGVCbG9j
a1dpdGhCeXRlY29kZUZvcihrZXkua2luZCgpKTsKICAgICAgICAgaWYgKHZhbHVlLmNvZGVCbG9j
aykgewogICAgICAgICAgICAgdmFsdWUub3duZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhbHVl
Lm9sZFZhbHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGUgPSB2YWx1ZS5jb2RlQmxvY2stPm1fc2hv
dWxkRGlzY2FyZEJ5dGVjb2RlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTm9w
ZSwgc28gdHJ5IHRvIHBhcnNlIG9uZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb247
CkBAIC0xNzEsMTMgKzE2OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZhbHVlLmNvZGVCbG9j
ayA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRv
IHJldHVybiBhIGNvZGUgYmxvY2ssIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIG5vdCBnb2luZwotICAg
ICAgICAvLyB0byBiZSBkaXNjYXJkaW5nIGl0cyBieXRlY29kZSBpZiBhIEdDIHdlcmUgdG8gaGFw
cGVuIGR1cmluZyBERkcKLSAgICAgICAgLy8gY29tcGlsYXRpb24uIFRoYXQncyB1bmxpa2VseSwg
YnV0IGl0J3MgZ29vZCB0byB0aG9yb3VnaGx5IGVuam95IHRoaXMKLSAgICAgICAgLy8ga2luZCBv
ZiBwYXJhbm9pYS4KLSAgICAgICAgaWYgKCEhdmFsdWUuY29kZUJsb2NrKQotICAgICAgICAgICAg
dmFsdWUuY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9IGZhbHNlOwotICAgICAg
ICAKICAgICAgICAgbV9tYXAuYWRkKGtleSwgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgcmV0
dXJuIHZhbHVlLmNvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNyBA
QCBFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNUaHJvdyhKU0dsb2JhbERhCiAgICAgSW5zdHJ1Y3Rp
b24qIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IDA7CiAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAg
ICAgY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzSW5zdHJ1Y3Rpb25zKCkp
Ci0gICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAmY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKClbaGFuZGxlci0+dGFyZ2V0XTsKKyAgICAgICAgY2F0Y2hQQ0Zv
ckludGVycHJldGVyID0gJmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2hh
bmRsZXItPnRhcmdldF07CiAgICAgfSBlbHNlCiAgICAgICAgIGNhdGNoUm91dGluZSA9IEZ1bmN0
aW9uUHRyKGN0aU9wVGhyb3dOb3RDYXVnaHQpLnZhbHVlKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw4ICs0
NDMsNyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29k
ZUJsb2NrU2V0dGVyKHQxKQogICAgIAogICAgICMgU2V0IHVwIHRoZSBQQy4KLSAgICBsb2FkcCBD
b2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zW3QxXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Oklu
c3RydWN0aW9uczo6bV9pbnN0cnVjdGlvbnMgKyBWZWN0b3JCdWZmZXJPZmZzZXRbdDBdLCBQQwor
ICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCBQQwogZW5kCiAKICMgRXhw
ZWN0cyB0aGF0IENvZGVCbG9jayBpcyBpbiB0MSwgd2hpY2ggaXMgd2hhdCBwcm9sb2d1ZSgpIGxl
YXZlcyBiZWhpbmQuCkBAIC01MDMsOCArNTAyLDcgQEAgbWFjcm8gZnVuY3Rpb25Bcml0eUNoZWNr
KGRvbmVMYWJlbCwgc2xvdwogLmNvbnRpbnVlOgogICAgICMgUmVsb2FkIENvZGVCbG9jayBhbmQg
UEMsIHNpbmNlIHRoZSBzbG93X3BhdGggY2xvYmJlcmVkIGl0LgogICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCB0MQotICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCB0MAot
ICAgIGxvYWRwIENvZGVCbG9jazo6SW5zdHJ1Y3Rpb25zOjptX2luc3RydWN0aW9ucyArIFZlY3Rv
ckJ1ZmZlck9mZnNldFt0MF0sIFBDCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1t0MV0sIFBDCiAgICAgam1wIGRvbmVMYWJlbAogZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMDg5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEwLDggKzIxMCw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUlu
dGVybmEKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIGlmICghIW1fZXZhbENvZGVCbG9jayAmJiBtX2V2
YWxDb2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKLSAgICAgICAgQnl0
ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOwor
ICAgIGlmICghIW1fZXZhbENvZGVCbG9jaykgewogICAgICAgICBPd25QdHI8RXZhbENvZGVCbG9j
az4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2soQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2RlQmxvY2spKTsKICAgICAgICAgbmV3Q29kZUJsb2Nr
LT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4obV9ldmFsQ29k
ZUJsb2NrLnJlbGVhc2UoKSkpOwogICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBuZXdDb2RlQmxv
Y2sucmVsZWFzZSgpOwpAQCAtMzQ2LDggKzM0NSw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0
YWJsZTo6Y29tcGlsZUludGUKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIGlmICghIW1fcHJvZ3JhbUNv
ZGVCbG9jayAmJiBtX3Byb2dyYW1Db2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2Rl
KCkpIHsKLSAgICAgICAgQnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihtX3Byb2dy
YW1Db2RlQmxvY2suZ2V0KCkpOworICAgIGlmICghIW1fcHJvZ3JhbUNvZGVCbG9jaykgewogICAg
ICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3
IFByb2dyYW1Db2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX3Byb2dyYW1D
b2RlQmxvY2spKTsKICAgICAgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNf
cG9pbnRlcl9jYXN0PENvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwog
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOwpAQCAt
NDk0LDE4ICs0OTIsMTMgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JD
bwogCiBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2RlQmxvY2tXaXRo
Qnl0ZWNvZGVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAgIEZ1bmN0aW9u
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKLSAgICBp
ZiAoY29kZUJsb2NrLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKQotICAgICAgICByZXR1
cm4gY29kZUJsb2NrOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
a0ZvcihraW5kKTsKIH0KIAogUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25F
eGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewotICAgIGlm
ICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpICYmIGNvZGVCbG9ja0ZvcihzcGVj
aWFsaXphdGlvbktpbmQpLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKSB7Ci0gICAgICAg
IEJ5dGVjb2RlRGVzdHJ1Y3Rpb25CbG9ja2VyIGJsb2NrZXIoY29kZUJsb2NrRm9yKHNwZWNpYWxp
emF0aW9uS2luZCkuZ2V0KCkpOworICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlv
bktpbmQpKQogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENv
ZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCkpKTsKLSAgICB9CiAgICAgCiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ29tcGFjdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ29tcGFjdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9Db21wYWN0VmVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQ29tcGFjdFZlY3Rvcl9oCisjZGVmaW5lIENvbXBhY3RWZWN0b3JfaAorCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisvLyBUaGlzIGltcGxlbWVudHMgYSByZXNpemVhYmxl
IGFycmF5IGZvciBQT0QqKiB2YWx1ZXMsIHdoaWNoIGlzIG9wdGltaXplZCBmb3I6CisvLyAtIEFu
IGVtcHR5IGFycmF5IG9ubHkgdXNlcyBvbmUgd29yZC4KKy8vIC0gQSBjb3B5IG9mIHRoZSBhcnJh
eSBvbmx5IHVzZXMgb25lIHdvcmQgKGkuZS4gYXNzaWdubWVudCBtZWFucyBhbGlhc2luZykuCisv
LyAtIFRoZSB2ZWN0b3IgY2FuJ3QgZ3JvdyBiZXlvbmQgMl4zMi0xIGVsZW1lbnRzLgorLy8gLSBJ
biBhbGwgb3RoZXIgcmVnYXJkcyB0aGlzIGhhcyBzaW1pbGFyIHNwYWNlIHVzYWdlIHRvIGEgVmVj
dG9yLgorLy8KKy8vICoqIFRoaXMgY291bGQgYmUgbW9kaWZpZWQgdG8gc3VwcG9ydCBub24tUE9E
IHZhbHVlcyBxdWl0ZSBlYXNpbHkuIEl0IGp1c3QKKy8vICAgIGhhc24ndCBiZWVuLCBzbyBmYXIs
IGJlY2F1c2UgdGhlcmUgaGFzIGJlZW4gbm8gbmVlZC4gTW9yZW92ZXIsIGV2ZW4gbm93LAorLy8g
ICAgaXQncyB1c2VkIGZvciB0aGluZ3MgdGhhdCBhcmVuJ3QgcXVpdGUgUE9EIGFjY29yZGluZyB0
byB0aGUgb2ZmaWNpYWwKKy8vICAgIGRlZmludGlvbiwgc3VjaCBhcyBKU0M6Okluc3RydWN0aW9u
LgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIENvbXBh
Y3RWZWN0b3IgeworcHVibGljOgorICAgIENvbXBhY3RWZWN0b3IoKQorICAgICAgICA6IG1fZGF0
YSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29tcGFjdFZlY3Rvcihjb25zdCBDb21wYWN0
VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2RhdGEob3RoZXIubV9kYXRhKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRh
KS0+cmVmQ291bnQrKzsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgQ29tcGFjdFZlY3Rvcihj
b25zdCBWZWN0b3I8VD4mIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgbV9kYXRhID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbV9kYXRhID0gKHN0YXRpY19jYXN0PEhlYWRlcio+KGZh
c3RNYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBvdGhlci5zaXplKCkpKSktPnBh
eWxvYWQoKTsKKyAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCA9
IDE7CisgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoID0gb3RoZXIu
c2l6ZSgpOworICAgICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5n
dGggPT0gb3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KG1fZGF0YSwgb3RoZXIuYmVnaW4o
KSwgc2l6ZW9mKFQpICogb3RoZXIuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQ29tcGFjdFZl
Y3RvciYgb3BlcmF0b3I9KGNvbnN0IENvbXBhY3RWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAg
ICAgVCogb2xkRGF0YSA9IG1fZGF0YTsKKyAgICAgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwor
ICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2Rh
dGEpLT5yZWZDb3VudCsrOworICAgICAgICAKKyAgICAgICAgaWYgKCFvbGREYXRhKQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBpZiAoLS1IZWFkZXI6OmZyb21QYXlsb2FkKG9s
ZERhdGEpLT5yZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgZmFz
dEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKSk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgCisgICAgfkNvbXBhY3RWZWN0b3IoKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgtLUhlYWRlcjo6ZnJv
bVBheWxvYWQobV9kYXRhKS0+cmVmQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGZhc3RGcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKSk7CisgICAgfQorICAgIAorICAg
IHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0
YSktPmxlbmd0aDsKKyAgICB9CisgICAgCisgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsg
fQorICAgIFQqIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVCogZW5kKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBtX2RhdGEgKyBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPmxlbmd0aDsKKyAgICB9
CisgICAgCisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAg
IGNvbnN0IFQqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgY29uc3QgVCog
ZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxDb21wYWN0VmVjdG9yKj4odGhpcyktPmVu
ZCgpOyB9CisgICAgCisgICAgVCYgYXQoc2l6ZV90IGkpCisgICAgeworICAgICAgICBBU1NFUlQo
aSA8IHNpemUoKSk7CisgICAgICAgIHJldHVybiBiZWdpbigpW2ldOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBUJiBhdChzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGJlZ2luKClbaV07CisgICAgfQorICAgIAorICAgIFQm
IG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CisgICAgY29uc3QgVCYgb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKyAgICAKK3ByaXZhdGU6
CisgICAgc3RydWN0IEhlYWRlciB7CisgICAgICAgIHVuc2lnbmVkIHJlZkNvdW50OworICAgICAg
ICB1bnNpZ25lZCBsZW5ndGg7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKHNpemVvZihIZWFkZXIpICsgNykgJiB+
NzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCogcGF5bG9hZCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
cmVzdWx0KSAmIDcpKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSGVhZGVyKiBmcm9t
UGF5bG9hZChUKiBwYXlsb2FkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxIZWFkZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihwYXlsb2FkKSAtIHNp
emUoKSk7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIFQqIG1fZGF0YTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNvbXBhY3RWZWN0b3I7CisKKyNlbmRpZiAv
LyBDb21wYWN0VmVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAKICNkZWZpbmUgRU5BQkxFX0pJ
VCAwCiAjZW5kaWYKIAotLyogVGhlIEpJVCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gYWxsIHg4
NiwgeDY0LTY0LCBBUk0gJiBNSVBTIHBsYXRmb3Jtcy4gKi8KKy8qIFRoZSBKSVQgaXMgZW5hYmxl
ZCBieSBkZWZhdWx0IG9uIGFsbCB4ODYsIHg4Ni02NCwgQVJNICYgTUlQUyBwbGF0Zm9ybXMuICov
CiAjaWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgXAogICAgICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoTUlQUykpIFwKICAgICAmJiAoT1MoREFSV0lOKSB8fCAh
Q09NUElMRVIoR0NDKSB8fCBHQ0NfVkVSU0lPTl9BVF9MRUFTVCg0LCAxLCAwKSkgXAo=
</data>
<flag name="review"
          id="131445"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128935</attachid>
            <date>2012-02-26 16:53:24 -0800</date>
            <delta_ts>2012-02-26 16:53:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>compactvector_patch_4.diff</filename>
            <type>text/plain</type>
            <size>32755</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTAyLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0dGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGZvciBhIGNvZGUgYmxvY2sgc2hvdWxkIG5v
dCByZXF1aXJlIHR3byBsb2FkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEludHJvZHVjZWQgdGhlIFJlZkNvdW50ZWRBcnJheSBjbGFzcywg
d2hpY2ggY29udGFpbnMgYSBzaW5nbGUgaW5saW5lIHBvaW50ZXIKKyAgICAgICAgdG8gYSByZWYt
Y291bnRlZCBub24tcmVzaXplYWJsZSB2ZWN0b3IgYmFja2luZyBzdG9yZS4gVGhpcyBzYXRpc2Zp
ZXMgdGhlCisgICAgICAgIHJlcXVpcmVtZW50cyBvZiBDb2RlQmxvY2ssIHdoaWNoIGRlc2lyZXMg
dGhlIGFiaWxpdHkgdG8gc2hhcmUgaW5zdHJ1Y3Rpb24KKyAgICAgICAgc3RyZWFtcyB3aXRoIG90
aGVyIENvZGVCbG9ja3MuIEl0IGFsc28gcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGxvYWRzIHJlcXVp
cmVkCisgICAgICAgIGZvciBnZXR0aW5nIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gYnkgb25lLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGdldHMgcmlkIG9mIHRoZSBieXRlY29k
ZSBkaXNjYXJkaW5nIGxvZ2ljLCBzaW5jZSB3ZSBkb24ndAorICAgICAgICB1c2UgaXQgYW55bW9y
ZSBhbmQgaXQncyB1bmxpa2VseSB0byBldmVyIHdvcmsgcmlnaHQgd2l0aCBERkcgb3IgTExJbnQu
IEFuZAorICAgICAgICBJIGRpZG4ndCBmZWVsIGxpa2UgcG9ydGluZyBkZWFkIGNvZGUgdG8gdXNl
IFJlZkNvdW50ZWRBcnJheS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjppbnN0cnVjdGlvbk9mZnNl
dEZvck50aCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFuZGxlckZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSW5zdHJ1Y3Rpb25zKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjppbnN0cnVjdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Omluc3RydWN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TGFiZWw6OnNldExvY2F0
aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdMYWJlbCk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoQnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6aW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTGFiZWwuaDoK
KyAgICAgICAgKEpTQzo6TGFiZWw6OkxhYmVsKToKKyAgICAgICAgKExhYmVsKToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2Fj
aGU6On5CeXRlQ29kZUNhY2hlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZUNhY2hlOjpn
ZXQpOgorICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJpY1Rocm93KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV2YWxF
eGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0
YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb2RlQmxvY2tXaXRoQnl0ZWNvZGVGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJy
YXkuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoUmVmQ291bnRlZEFycmF5KToK
KyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpSZWZDb3VudGVkQXJyYXkpOgorICAgICAg
ICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlJlZkNv
dW50ZWRBcnJheTo6flJlZkNvdW50ZWRBcnJheSk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRB
cnJheTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZGF0YSk6CisgICAg
ICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6YmVnaW4pOgorICAgICAgICAoV1RGOjpSZWZDb3Vu
dGVkQXJyYXk6OmVuZCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6YXQpOgorICAg
ICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6Om9wZXJhdG9yW10pOgorICAgICAgICAoSGVhZGVy
KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpIZWFkZXI6OnNpemUpOgorICAgICAg
ICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OkhlYWRlcjo6cGF5bG9hZCk6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWRBcnJheTo6SGVhZGVyOjpmcm9tUGF5bG9hZCk6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisKIDIwMTItMDItMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4IGZvciBFTkFCTEUoQ0xBU1NJ
Q19JTlRFUlBSRVRFUikgYWZ0ZXIgcjEwODY4MS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTgzLDYgKzU4
Myw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQnl0ZUFycmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DaGVja2VkQm9vbGVhbi5o
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRBcnJheS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBpbGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ29tcGxleC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsx
NDMsNyBAQAogCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAq
LzsgfTsKIAkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2N0Mx
NEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovOyB9
OworCQkwRkI1NDY5MDE0RkFEQTdCMDAyQzI5ODkgLyogUmVmQ291bnRlZEFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY4RTE0RkFEQTZG
MDAyQzI5ODkgLyogUmVmQ291bnRlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4
aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07
CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmln
aW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3
RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDgsNiArMTAwOSw3IEBACiAJCTBGQjU0
Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjU0NjhFMTRGQURBNkYwMDJDMjk4OSAvKiBSZWZDb3VudGVkQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmQ291bnRlZEFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdF
eGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdF
eGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1MTQ5
NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMjA0LDYgKzIyMDYsNyBAQAogCQkJCUE3QTFGN0FCMEYyNTJCM0MwMEUxODRFMiAv
KiBCeXRlQXJyYXkuaCAqLywKIAkJCQlBN0JDMEM4MTE0MDYwOEIwMDBCMUJCNzEgLyogQ2hlY2tl
ZEFyaXRobWV0aWMuaCAqLywKIAkJCQlDMkQ5Q0ExMjE0QkNDMDQ2MDAzMDRCNDYgLyogQ2hlY2tl
ZEJvb2xlYW4uaCAqLywKKwkJCQkwRkI1NDY4RTE0RkFEQTZGMDAyQzI5ODkgLyogUmVmQ291bnRl
ZEFycmF5LmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFFIC8qIENvbXBpbGVyLmgg
Ki8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAqLywKIAkJCQk5
Nzk0MUE3QzEzMDJBMDk4MDA0QTM0NDcgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
Y3BwICovLApAQCAtMzQwMSw2ICszNDA0LDcgQEAKIAkJCQkxNDk3MjA5MTE0RUI4MzE1MDBGRUIx
QjcgLyogUGFzc1dlYWsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
NTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjU0NjkwMTRGQURBN0IwMDJDMjk4OSAvKiBSZWZDb3VudGVk
QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwODkzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyAr
MjI2LDcgQEAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFjY2VzcyhPcGNvZGVJRCBvcAogICAgIH0K
IH0KIAotc3RhdGljIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0Rm9yTnRoKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zLCBpbnQgbnRoLCBi
b29sICgqcHJlZGljYXRlKShPcGNvZGVJRCkpCitzdGF0aWMgdW5zaWduZWQgaW5zdHJ1Y3Rpb25P
ZmZzZXRGb3JOdGgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1
Y3Rpb24+JiBpbnN0cnVjdGlvbnMsIGludCBudGgsIGJvb2wgKCpwcmVkaWNhdGUpKE9wY29kZUlE
KSkKIHsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBpbnN0cnVjdGlvbnMuc2l6
ZSgpKSB7CkBAIC0zNDcsMTggKzM0NywxMyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1
cmVzKGNvbnN0IEluCiAKIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKLSAgICBpZiAoIW1faW5zdHJ1Y3Rpb25zKSB7Ci0gICAgICAgIGRhdGFMb2coIk5vIGlu
c3RydWN0aW9ucyBhdmFpbGFibGUuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gMDsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBpICs9IG9wY29kZUxlbmd0aHNbZXhlYy0+aW50ZXJw
cmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zKClbaV0udS5vcGNvZGUpXSkKICAgICAg
ICAgKytpbnN0cnVjdGlvbkNvdW50OwogCiAgICAgZGF0YUxvZygiJWx1IG1faW5zdHJ1Y3Rpb25z
OyAlbHUgYnl0ZXMgYXQgJXA7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVyKHMp
OyAlZCB2YXJpYWJsZShzKVxuXG4iLAotICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihpbnN0cnVjdGlvbkNvdW50KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCiAgICAgICAg
IHRoaXMsIG1fbnVtUGFyYW1ldGVycywgbV9udW1DYWxsZWVSZWdpc3RlcnMsIG1fbnVtVmFycyk7
CiAKQEAgLTE0MjQsMTEgKzE0MTksOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQogICAgICwgbV9udW1D
YXB0dXJlZFZhcnMob3RoZXIubV9udW1DYXB0dXJlZFZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0
b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQotICAgICwgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUo
ZmFsc2UpCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV9nbG9iYWxEYXRhLCBvdGhl
ci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkp
CiAgICAgLCBtX2dsb2JhbERhdGEob3RoZXIubV9nbG9iYWxEYXRhKQogICAgICwgbV9pbnN0cnVj
dGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCi0gICAgLCBtX2luc3RydWN0aW9uQ291bnQob3Ro
ZXIubV9pbnN0cnVjdGlvbkNvdW50KQogICAgICwgbV90aGlzUmVnaXN0ZXIob3RoZXIubV90aGlz
UmVnaXN0ZXIpCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKG90aGVyLm1fYXJndW1lbnRzUmVn
aXN0ZXIpCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcihvdGhlci5tX2FjdGl2YXRpb25SZWdp
c3RlcikKQEAgLTE0ODQsMTIgKzE0NzcsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1W
YXJzKDApCiAgICAgLCBtX2lzQ29uc3RydWN0b3IoaXNDb25zdHJ1Y3RvcikKLSAgICAsIG1fc2hv
dWxkRGlzY2FyZEJ5dGVjb2RlKGZhbHNlKQogICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCiAgICAg
LCBtX293bmVyRXhlY3V0YWJsZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVj
dXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX2dsb2JhbERhdGEoMCkKLSAgICAsIG1f
aW5zdHJ1Y3Rpb25zKGFkb3B0UmVmKG5ldyBJbnN0cnVjdGlvbnMpKQotICAgICwgbV9pbnN0cnVj
dGlvbkNvdW50KDApCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKC0xKQogICAgICwgbV9uZWVk
c0Z1bGxTY29wZUNoYWluKG93bmVyRXhlY3V0YWJsZS0+bmVlZHNBY3RpdmF0aW9uKCkpCiAgICAg
LCBtX3VzZXNFdmFsKG93bmVyRXhlY3V0YWJsZS0+dXNlc0V2YWwoKSkKQEAgLTE5MDMsMTIgKzE4
OTMsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAg
IH0KICAgICB9CiAjZW5kaWYKLQotICAgIC8vIEhhbmRsZSB0aGUgYnl0ZWNvZGUgZGlzY2FyZGlu
ZyBjaG9yZS4KLSAgICBpZiAobV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpIHsKLSAgICAgICAgZGlz
Y2FyZEJ5dGVjb2RlKCk7Ci0gICAgICAgIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7
Ci0gICAgfQogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xOTgwLDcgKzE5NjQsNyBAQCB2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuCiAKIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6
OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKLSAg
ICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBtX2luc3RydWN0aW9uQ291bnQpOworICAgIEFTU0VS
VChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKICAgICBpZiAoIW1f
cmFyZURhdGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTk5OCw3ICsxOTgyLDcgQEAgSGFuZGxl
ckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjbwogCiBpbnQgQ29kZUJsb2NrOjpsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7Ci0gICAg
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgbV9pbnN0cnVjdGlvbkNvdW50KTsKKyAgICBBU1NFUlQo
Ynl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCiAgICAgaWYgKCFtX3Jh
cmVEYXRhKQogICAgICAgICByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpLmZpcnN0
TGluZSgpOwpAQCAtMjAyMiw3ICsyMDA2LDcgQEAgaW50IENvZGVCbG9jazo6bGluZU51bWJlckZv
ckJ5dGVjb2RlT2ZmcwogCiB2b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRP
ZmZzZXQsIGludCYgZW5kT2Zmc2V0KQogewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IG1f
aW5zdHJ1Y3Rpb25Db3VudCk7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKIAogICAgIGlmICghbV9yYXJlRGF0YSkgewogICAgICAgICBzdGFydE9m
ZnNldCA9IDA7CkBAIC0yMTAyLDggKzIwODYsNiBAQCBib29sIENvZGVCbG9jazo6aGFzR2xvYmFs
UmVzb2x2ZUluZm9BdEJ5CiAKIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdCgpCiB7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuc2hyaW5rVG9GaXQoKTsKLQogI2lmIEVOQUJMRShDTEFTU0lDX0lOVEVS
UFJFVEVSKQogICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsK
ICAgICBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwODkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRl
ICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NC
YXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CkBAIC0xMjcsOCArMTI4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRp
ZgogICAgICAgICAKLSAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpIHsg
cmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9Ci0KICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7
CkBAIC0zNDEsMjAgKzM0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJ
c051bWVyaWNDb21wYXJlRnVuY3Rpb24oYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24pIHsg
bV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBpc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0K
ICAgICAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSB7IHJldHVybiBtX2lzTnVt
ZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCi0gICAgICAgIGJvb2wgaGFzSW5zdHJ1Y3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gISFtX2luc3RydWN0aW9uczsgfQotICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2luc3RydWN0aW9ucyA/IDAgOiBt
X2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0gICAgICAgIFZlY3RvcjxJ
bnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLT5tX2lu
c3RydWN0aW9uczsgfQotICAgICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVj
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnM7IH0K
LSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFyKCk7
IH0KLSAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGVMYXRlcigpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gdHJ1ZTsKLSAgICAgICAgfQorICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zLnNpemUoKTsgfQorICAgICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBp
bnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQorICAgICAgICBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2luc3RydWN0aW9uczsgfQogICAgICAgICAKICAgICAgICAgYm9vbCB1c2VzT3Bjb2RlKE9w
Y29kZUlEKTsKIAotICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbkNvdW50OyB9Ci0gICAgICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Db3VudCh1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KSB7IG1faW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0
aW9uQ291bnQ7IH0KKyAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9p
ZCBzZXRKSVRDb2RlKGNvbnN0IEpJVENvZGUmIGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlV2l0aEFyaXR5Q2hlY2spCkBAIC01NDEsMTEgKzUzMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBXVEY6OmdlbmVy
aWNCaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBpbnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2Rl
T2Zmc2V0PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2Rl
T2Zmc2V0KTsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0g
LTEpOwotICAgICAgICAgICAgQVNTRVJUKCFoYXNJbnN0cnVjdGlvbnMoKQotICAgICAgICAgICAg
ICAgICAgIHx8IGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClb
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0XS51Lm9w
Y29kZSkpIC0gMV0udS5wcm9maWxlID09IHJlc3VsdCk7CisgICAgICAgICAgICBBU1NFUlQoaW5z
dHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCisgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0g
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAg
UHJlZGljdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtMTA0Nyw5ICsxMDM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGludCBtX251bUNhcHR1cmVkVmFyczsKICAgICAgICAgYm9vbCBtX2lzQ29uc3RydWN0
b3I7CiAKLSAgICAgICAgLy8gVGhpcyBpcyBwdWJsaWMgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291
bGQgaGF2ZSBtYW55IGZyaWVuZHMuCi0gICAgICAgIGJvb2wgbV9zaG91bGREaXNjYXJkQnl0ZWNv
ZGU7Ci0KICAgICBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdmlydHVhbCB2
b2lkIGppdENvbXBpbGVJbXBsKEpTR2xvYmFsRGF0YSYpID0gMDsKQEAgLTExMTUsMTEgKzExMDMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFi
bGU+IG1fb3duZXJFeGVjdXRhYmxlOwogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKIAotICAgICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb25zIDogcHVibGljIFJlZkNvdW50ZWQ8SW5z
dHJ1Y3Rpb25zPiB7Ci0gICAgICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rp
b25zOwotICAgICAgICB9OwotICAgICAgICBSZWZQdHI8SW5zdHJ1Y3Rpb25zPiBtX2luc3RydWN0
aW9uczsKLSAgICAgICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbkNvdW50OworICAgICAgICBSZWZD
b3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGludCBt
X3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkBAIC0xMzc5
LDI3ICsxMzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8g
VXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gY29weSBhIGNvZGUgYmxvY2sgYW5kIHlvdSdyZSBwYXJh
bm9pZCBhYm91dCBhIEdDCi0gICAgLy8gaGFwcGVuaW5nLgotICAgIGNsYXNzIEJ5dGVjb2RlRGVz
dHJ1Y3Rpb25CbG9ja2VyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rp
b25CbG9ja2VyKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCi0gICAgICAgICAgICAsIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRl
Y29kZShjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIH5CeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29k
ZSA9IG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICBwcml2YXRlOgotICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgICAg
ICBib29sIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZTsKLSAgICB9OwotCiAgICAg
aW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw2ICsxMTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZXhwZWN0ZWQg
YnkgdGhlIGNhbGxlZS4KICovCiAKK3ZvaWQgTGFiZWw6OnNldExvY2F0aW9uKHVuc2lnbmVkIGxv
Y2F0aW9uKQoreworICAgIG1fbG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAKKyAgICB1bnNpZ25l
ZCBzaXplID0gbV91bnJlc29sdmVkSnVtcHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fZ2VuZXJhdG9yLT5tX2luc3RydWN0aW9uc1tt
X3VucmVzb2x2ZWRKdW1wc1tpXS5zZWNvbmRdLnUub3BlcmFuZCA9IG1fbG9jYXRpb24gLSBtX3Vu
cmVzb2x2ZWRKdW1wc1tpXS5maXJzdDsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgUmVzb2x2
ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB7CkBAIC0xNzEsOCArMTgwLDggQEAgSlNPYmplY3Qq
IEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAgbV9jb2RlQmxvY2stPnNldFRoaXNS
ZWdpc3RlcihtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0
Qnl0ZWNvZGUoKnRoaXMpOwotCi0gICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9uQ291bnQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgCisgICAgbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpID0gUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPihtX2luc3Ry
dWN0aW9ucyk7CiAKICAgICBpZiAoc19kdW1wc0dlbmVyYXRlZENvZGUpCiAgICAgICAgIG1fY29k
ZUJsb2NrLT5kdW1wKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwpA
QCAtNjA3LDcgKzYxNiw3IEBAIFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjpu
ZXcKICAgICAgICAgbV9sYWJlbHMucmVtb3ZlTGFzdCgpOwogCiAgICAgLy8gQWxsb2NhdGUgbmV3
IGxhYmVsIElELgotICAgIG1fbGFiZWxzLmFwcGVuZChtX2NvZGVCbG9jayk7CisgICAgbV9sYWJl
bHMuYXBwZW5kKHRoaXMpOwogICAgIHJldHVybiAmbV9sYWJlbHMubGFzdCgpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSWRlbnRpZmllcjsKKyAgICBj
bGFzcyBMYWJlbDsKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKIAogICAgIGNsYXNzIENhbGxB
cmd1bWVudHMgewpAQCAtNTMyLDYgKzUzMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVDaGFpbi5n
ZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIExhYmVsOworICAg
ICAgICAKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgVmFsdWVQ
cm9maWxlKiBlbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOwogICAgICAgICB2b2lkIHJldHJp
ZXZlTGFzdEJpbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNyYzJJ
bmRleCk7CkBAIC02MTEsNyArNjE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEluaXRMYXp5UmVnaXN0ZXIoUmVnaXN0ZXJJRCopOwogCi0gICAgICAgIFZl
Y3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKTsgfQorICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlv
bnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogICAgICAgICBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogCiAgICAgICAgIGJvb2wgc2hv
dWxkT3B0aW1pemVMb2NhbHMoKQpAQCAtNjQ0LDYgKzY0Nyw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIHZvaWQg
Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0
ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CiAKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29r
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgJKHJl
dmlzaW9uIDEwODkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFi
ZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMjEgKzM5LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgTGFiZWwgewogICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgTGFiZWwo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIGV4cGxpY2l0IExhYmVsKEJ5dGVjb2RlR2Vu
ZXJhdG9yKiBnZW5lcmF0b3IpCiAgICAgICAgICAgICA6IG1fcmVmQ291bnQoMCkKICAgICAgICAg
ICAgICwgbV9sb2NhdGlvbihpbnZhbGlkTG9jYXRpb24pCi0gICAgICAgICAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKKyAgICAgICAgICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldExvY2F0aW9uKHVuc2lnbmVkIGxv
Y2F0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xvY2F0aW9uID0gbG9jYXRpb247Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3VucmVzb2x2ZWRKdW1wcy5zaXplKCk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX3VucmVzb2x2ZWRKdW1wc1tpXS5z
ZWNvbmRdLnUub3BlcmFuZCA9IG1fbG9jYXRpb24gLSBtX3VucmVzb2x2ZWRKdW1wc1tpXS5maXJz
dDsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHNldExvY2F0aW9uKHVuc2lnbmVkKTsKIAogICAg
ICAgICBpbnQgYmluZChpbnQgb3Bjb2RlLCBpbnQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBA
IC04MSw3ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGludCBtX3JlZkNvdW50
OwogICAgICAgICB1bnNpZ25lZCBtX2xvY2F0aW9uOwotICAgICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvciogbV9nZW5lcmF0b3I7CiAgICAgICAg
IG11dGFibGUgSnVtcFZlY3RvciBtX3VucmVzb2x2ZWRKdW1wczsKICAgICB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAkocmV2aXNpb24g
MTA4OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgZGVsZXRlIGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpdGVyLT5zZWNvbmQuY29kZUJsb2NrLT5t
X3Nob3VsZERpc2NhcmRCeXRlY29kZSA9IGl0ZXItPnNlY29uZC5vbGRWYWx1ZU9mU2hvdWxkRGlz
Y2FyZEJ5dGVjb2RlOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU1LDcgKzE1NCw2IEBA
IHB1YmxpYzoKICAgICAgICAgdmFsdWUuY29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUoKS0+Y29k
ZUJsb2NrV2l0aEJ5dGVjb2RlRm9yKGtleS5raW5kKCkpOwogICAgICAgICBpZiAodmFsdWUuY29k
ZUJsb2NrKSB7CiAgICAgICAgICAgICB2YWx1ZS5vd25lZCA9IGZhbHNlOwotICAgICAgICAgICAg
dmFsdWUub2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZSA9IHZhbHVlLmNvZGVCbG9jay0+
bV9zaG91bGREaXNjYXJkQnl0ZWNvZGU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBOb3BlLCBzbyB0cnkgdG8gcGFyc2Ugb25lLgogICAgICAgICAgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbjsKQEAgLTE3MSwxMyArMTY5LDYgQEAgcHVibGljOgogICAgICAgICAgICAgdmFsdWUuY29k
ZUJsb2NrID0gMDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UncmUgYWJv
dXQgdG8gcmV0dXJuIGEgY29kZSBibG9jaywgbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IGdvaW5n
Ci0gICAgICAgIC8vIHRvIGJlIGRpc2NhcmRpbmcgaXRzIGJ5dGVjb2RlIGlmIGEgR0Mgd2VyZSB0
byBoYXBwZW4gZHVyaW5nIERGRwotICAgICAgICAvLyBjb21waWxhdGlvbi4gVGhhdCdzIHVubGlr
ZWx5LCBidXQgaXQncyBnb29kIHRvIHRob3JvdWdobHkgZW5qb3kgdGhpcwotICAgICAgICAvLyBr
aW5kIG9mIHBhcmFub2lhLgotICAgICAgICBpZiAoISF2YWx1ZS5jb2RlQmxvY2spCi0gICAgICAg
ICAgICB2YWx1ZS5jb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7Ci0g
ICAgICAgIAogICAgICAgICBtX21hcC5hZGQoa2V5LCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gdmFsdWUuY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0
OCw3IEBAIEV4Y2VwdGlvbkhhbmRsZXIgZ2VuZXJpY1Rocm93KEpTR2xvYmFsRGEKICAgICBJbnN0
cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKICAgICBpZiAoaGFuZGxlcikgewog
ICAgICAgICBjYXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5oYXNJbnN0cnVjdGlv
bnMoKSkKLSAgICAgICAgICAgIGNhdGNoUENGb3JJbnRlcnByZXRlciA9ICZjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKVtoYW5kbGVyLT50YXJnZXRdOworICAgICAgICBjYXRj
aFBDRm9ySW50ZXJwcmV0ZXIgPSAmY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25z
KClbaGFuZGxlci0+dGFyZ2V0XTsKICAgICB9IGVsc2UKICAgICAgICAgY2F0Y2hSb3V0aW5lID0g
RnVuY3Rpb25QdHIoY3RpT3BUaHJvd05vdENhdWdodCkudmFsdWUoKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMDg5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQz
LDggKzQ0Myw3IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAg
ICBjb2RlQmxvY2tTZXR0ZXIodDEpCiAgICAgCiAgICAgIyBTZXQgdXAgdGhlIFBDLgotICAgIGxv
YWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCB0MAotICAgIGxvYWRwIENvZGVCbG9j
azo6SW5zdHJ1Y3Rpb25zOjptX2luc3RydWN0aW9ucyArIFZlY3RvckJ1ZmZlck9mZnNldFt0MF0s
IFBDCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1t0MV0sIFBDCiBlbmQKIAog
IyBFeHBlY3RzIHRoYXQgQ29kZUJsb2NrIGlzIGluIHQxLCB3aGljaCBpcyB3aGF0IHByb2xvZ3Vl
KCkgbGVhdmVzIGJlaGluZC4KQEAgLTUwMyw4ICs1MDIsNyBAQCBtYWNybyBmdW5jdGlvbkFyaXR5
Q2hlY2soZG9uZUxhYmVsLCBzbG93CiAuY29udGludWU6CiAgICAgIyBSZWxvYWQgQ29kZUJsb2Nr
IGFuZCBQQywgc2luY2UgdGhlIHNsb3dfcGF0aCBjbG9iYmVyZWQgaXQuCiAgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIHQxCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1t0MV0s
IHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjpJbnN0cnVjdGlvbnM6Om1faW5zdHJ1Y3Rpb25zICsg
VmVjdG9yQnVmZmVyT2Zmc2V0W3QwXSwgUEMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1faW5zdHJ1
Y3Rpb25zW3QxXSwgUEMKICAgICBqbXAgZG9uZUxhYmVsCiBlbmQKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDEwODkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTAsOCArMjEwLDcgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYQogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgaWYgKCEhbV9ldmFsQ29kZUJsb2NrICYm
IG1fZXZhbENvZGVCbG9jay0+Y2FuUHJvZHVjZUNvcHlXaXRoQnl0ZWNvZGUoKSkgewotICAgICAg
ICBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlciBibG9ja2VyKG1fZXZhbENvZGVCbG9jay5nZXQo
KSk7CisgICAgaWYgKCEhbV9ldmFsQ29kZUJsb2NrKSB7CiAgICAgICAgIE93blB0cjxFdmFsQ29k
ZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayhDb2RlQmxv
Y2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fZXZhbENvZGVCbG9jaykpOwogICAgICAgICBuZXdDb2Rl
QmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX2V2
YWxDb2RlQmxvY2sucmVsZWFzZSgpKSk7CiAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IG5ld0Nv
ZGVCbG9jay5yZWxlYXNlKCk7CkBAIC0zNDYsOCArMzQ1LDcgQEAgSlNPYmplY3QqIFByb2dyYW1F
eGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgaWYgKCEhbV9wcm9n
cmFtQ29kZUJsb2NrICYmIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y2FuUHJvZHVjZUNvcHlXaXRoQnl0
ZWNvZGUoKSkgewotICAgICAgICBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlciBibG9ja2VyKG1f
cHJvZ3JhbUNvZGVCbG9jay5nZXQoKSk7CisgICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7
CiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0
cihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJv
Z3JhbUNvZGVCbG9jaykpOwogICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0
YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgp
KSk7CiAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IG5ld0NvZGVCbG9jay5yZWxlYXNlKCk7
CkBAIC00OTQsMTggKzQ5MiwxMyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGls
ZUZvckNvCiAKIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9j
a1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwot
ICAgIGlmIChjb2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpCi0gICAgICAg
IHJldHVybiBjb2RlQmxvY2s7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGtpbmQpOwogfQogCiBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5j
dGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pCiB7Ci0g
ICAgaWYgKCEhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkgJiYgY29kZUJsb2NrRm9y
KHNwZWNpYWxpemF0aW9uS2luZCktPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKLSAg
ICAgICAgQnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihjb2RlQmxvY2tGb3Ioc3Bl
Y2lhbGl6YXRpb25LaW5kKS5nZXQoKSk7CisgICAgaWYgKCEhY29kZUJsb2NrRm9yKHNwZWNpYWxp
emF0aW9uS2luZCkpCiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxv
Y2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRp
b25LaW5kKSkpOwotICAgIH0KICAgICAKICAgICBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTA4OTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyAr
OTIwLDcgQEAKICNkZWZpbmUgRU5BQkxFX0pJVCAwCiAjZW5kaWYKIAotLyogVGhlIEpJVCBpcyBl
bmFibGVkIGJ5IGRlZmF1bHQgb24gYWxsIHg4NiwgeDY0LTY0LCBBUk0gJiBNSVBTIHBsYXRmb3Jt
cy4gKi8KKy8qIFRoZSBKSVQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGFsbCB4ODYsIHg4Ni02
NCwgQVJNICYgTUlQUyBwbGF0Zm9ybXMuICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgXAog
ICAgICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoTUlQUykp
IFwKICAgICAmJiAoT1MoREFSV0lOKSB8fCAhQ09NUElMRVIoR0NDKSB8fCBHQ0NfVkVSU0lPTl9B
VF9MRUFTVCg0LCAxLCAwKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZD
b3VudGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Jl
ZkNvdW50ZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9SZWZDb3VudGVkQXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWZDb3Vu
dGVkQXJyYXlfaAorI2RlZmluZSBSZWZDb3VudGVkQXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisvLyBUaGlzIGltcGxlbWVudHMgYSByZWZlcmVuY2UgY291bnRlZCBhcnJh
eSBmb3IgUE9EKiogdmFsdWVzLCB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yOgorLy8gLSBBbiBlbXB0
eSBhcnJheSBvbmx5IHVzZXMgb25lIHdvcmQuCisvLyAtIEEgY29weSBvZiB0aGUgYXJyYXkgb25s
eSB1c2VzIG9uZSB3b3JkIChpLmUuIGFzc2lnbm1lbnQgbWVhbnMgYWxpYXNpbmcpLgorLy8gLSBU
aGUgdmVjdG9yIGNhbid0IGdyb3cgYmV5b25kIDJeMzItMSBlbGVtZW50cy4KKy8vIC0gSW4gYWxs
IG90aGVyIHJlZ2FyZHMgdGhpcyBoYXMgc2ltaWxhciBzcGFjZSB1c2FnZSB0byBhIFZlY3Rvci4K
Ky8vCisvLyAqKiBUaGlzIGNvdWxkIGJlIG1vZGlmaWVkIHRvIHN1cHBvcnQgbm9uLVBPRCB2YWx1
ZXMgcXVpdGUgZWFzaWx5LiBJdCBqdXN0CisvLyAgICBoYXNuJ3QgYmVlbiwgc28gZmFyLCBiZWNh
dXNlIHRoZXJlIGhhcyBiZWVuIG5vIG5lZWQuIE1vcmVvdmVyLCBldmVuIG5vdywKKy8vICAgIGl0
J3MgdXNlZCBmb3IgdGhpbmdzIHRoYXQgYXJlbid0IHF1aXRlIFBPRCBhY2NvcmRpbmcgdG8gdGhl
IG9mZmljaWFsCisvLyAgICBkZWZpbnRpb24sIHN1Y2ggYXMgSlNDOjpJbnN0cnVjdGlvbi4KKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBSZWZDb3VudGVk
QXJyYXkgeworcHVibGljOgorICAgIFJlZkNvdW50ZWRBcnJheSgpCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWZDb3VudGVkQXJyYXkoY29uc3QgUmVmQ291
bnRlZEFycmF5JiBvdGhlcikKKyAgICAgICAgOiBtX2RhdGEob3RoZXIubV9kYXRhKQorICAgIHsK
KyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9k
YXRhKS0+cmVmQ291bnQrKzsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgUmVmQ291bnRlZEFy
cmF5KGNvbnN0IFZlY3RvcjxUPiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBtX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2RhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVy
Kj4oZmFzdE1hbGxvYyhIZWFkZXI6OnNpemUoKSArIHNpemVvZihUKSAqIG90aGVyLnNpemUoKSkp
KS0+cGF5bG9hZCgpOworICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSktPnJlZkNv
dW50ID0gMTsKKyAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5sZW5ndGggPSBv
dGhlci5zaXplKCk7CisgICAgICAgIEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSkt
Pmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOworICAgICAgICBtZW1jcHkobV9kYXRhLCBvdGhlci5i
ZWdpbigpLCBzaXplb2YoVCkgKiBvdGhlci5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBSZWZD
b3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQorICAg
IHsKKyAgICAgICAgVCogb2xkRGF0YSA9IG1fZGF0YTsKKyAgICAgICAgbV9kYXRhID0gb3RoZXIu
bV9kYXRhOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5
bG9hZChtX2RhdGEpLT5yZWZDb3VudCsrOworICAgICAgICAKKyAgICAgICAgaWYgKCFvbGREYXRh
KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBpZiAoLS1IZWFkZXI6OmZyb21Q
YXlsb2FkKG9sZERhdGEpLT5yZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgZmFzdEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgflJlZkNvdW50ZWRBcnJheSgpCisgICAgewor
ICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKC0t
SGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZmFzdEZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpKTsKKyAgICB9
CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBh
eWxvYWQobV9kYXRhKS0+bGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBUKiBkYXRhKCkgeyByZXR1
cm4gbV9kYXRhOyB9CisgICAgVCogYmVnaW4oKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBUKiBl
bmQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG1fZGF0YSArIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVu
Z3RoOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CisgICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAg
ICBjb25zdCBUKiBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFJlZkNvdW50ZWRBcnJh
eSo+KHRoaXMpLT5lbmQoKTsgfQorICAgIAorICAgIFQmIGF0KHNpemVfdCBpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGkgPCBzaXplKCkpOworICAgICAgICByZXR1cm4gYmVnaW4oKVtpXTsKKyAg
ICB9CisgICAgCisgICAgY29uc3QgVCYgYXQoc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaSA8IHNpemUoKSk7CisgICAgICAgIHJldHVybiBiZWdpbigpW2ldOworICAgIH0K
KyAgICAKKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQorICAg
IGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHN0cnVjdCBIZWFkZXIgeworICAgICAgICB1bnNpZ25lZCByZWZD
b3VudDsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoOworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IHNpemVfdCBzaXplKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChzaXplb2YoSGVh
ZGVyKSArIDcpICYgfjc7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFQqIHBheWxvYWQo
KQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPih0aGlzKSArIHNpemUoKTsKKyAgICAgICAgICAgIEFTU0VSVCghKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHJlc3VsdCkgJiA3KSk7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4ocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlj
IEhlYWRlciogZnJvbVBheWxvYWQoVCogcGF5bG9hZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGVhZGVyKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
cGF5bG9hZCkgLSBzaXplKCkpOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBUKiBtX2Rh
dGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSZWZDb3VudGVkQXJy
YXk7CisKKyNlbmRpZiAvLyBSZWZDb3VudGVkQXJyYXlfaAorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>