<?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>68328</bug_id>
          
          <creation_ts>2011-09-18 15:40:50 -0700</creation_ts>
          <short_desc>The generator and intrinsic fields in HashTableValue/HashEntry and associated structures and methods are redundant</short_desc>
          <delta_ts>2011-12-06 12:47:17 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>barraclough</cc>
    
    <cc>gustavo</cc>
    
    <cc>sam</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>469200</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 15:40:50 -0700</bug_when>
    <thetext>The old JIT optimizes intrinsics with ThunkGenerators, which are functions that when called generate JIT code that implements the intrinsic.  The DFG JIT optimizes intrinsics by weaving them through the optimizing compiler, and only exposes an enum (DFG::Intrinsic) for declaring whether or not an ExecutableBase is intrinsic, and if so, which intrinsic it is.

These two mechanism require some redundancy in runtime/Lookup.h, and various scripts for creating JS bindings.

A good solution would be to have one enum (say, in jit/JITIntrinsic.h).  The DFG would simply switch to using this intrinsic, while the old JIT would abandon passing function pointers and simply select the thunk generator by switching on the intrinsic enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469207</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-18 16:16:59 -0700</bug_when>
    <thetext>If you are going to make this change, it might also be a good opportunity to remove the special casing from the generation script and put it in the lookup definitions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469634</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-19 13:23:18 -0700</bug_when>
    <thetext>It may even be that we don&apos;t want the enum to be in either JIT - we may with to make use of the intrinsic from the interpreter, in environments where we don&apos;t have the JIT enabled.  Maybe an enum in JSFunction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469636</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-19 13:24:31 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; It may even be that we don&apos;t want the enum to be in either JIT - we may with to make use of the intrinsic from the interpreter, in environments where we don&apos;t have the JIT enabled.  Maybe an enum in JSFunction?

How about runtime/Intrinsic.h?

The benefit of a separate file is that:

1) JSFunction and pretty much everything else in runtime/ is cluttered.

2) If we do our jobs correctly then this enum will get big. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471229</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-21 15:52:47 -0700</bug_when>
    <thetext>Agreed, that sounds even better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515692</commentid>
    <comment_count>5</comment_count>
      <attachid>117999</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-06 00:02:03 -0800</bug_when>
    <thetext>Created attachment 117999
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515699</commentid>
    <comment_count>6</comment_count>
      <attachid>117999</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-06 00:14:04 -0800</bug_when>
    <thetext>Comment on attachment 117999
Fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515701</commentid>
    <comment_count>7</comment_count>
      <attachid>117999</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-06 00:20:26 -0800</bug_when>
    <thetext>Comment on attachment 117999
Fix

Attachment 117999 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10690698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515704</commentid>
    <comment_count>8</comment_count>
      <attachid>117999</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-06 00:29:04 -0800</bug_when>
    <thetext>Comment on attachment 117999
Fix

Attachment 117999 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10728902</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515716</commentid>
    <comment_count>9</comment_count>
      <attachid>117999</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-06 00:42:21 -0800</bug_when>
    <thetext>Comment on attachment 117999
Fix

Attachment 117999 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10729969</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515900</commentid>
    <comment_count>10</comment_count>
      <attachid>117999</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-06 07:31:26 -0800</bug_when>
    <thetext>Comment on attachment 117999
Fix

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

&gt; Source/JavaScriptCore/create_hash_table:276
&gt;          if ($key eq &quot;charCodeAt&quot;) {
&gt;              $thunkGenerator = &quot;charCodeAtThunkGenerator&quot;;
&gt; -            $intrinsic = &quot;DFG::CharCodeAtIntrinsic&quot;;
&gt; +            $intrinsic = &quot;CharCodeAtIntrinsic&quot;;

Do we really need this specialized check? Can&apos;t we just write CharCodeAtIntrinsic at the definition site?

&gt; Source/JavaScriptCore/create_hash_table:323
&gt;                  $thunkGenerator = &quot;logThunkGenerator&quot;;
&gt; +                $intrinsic = &quot;LogIntrinsic&quot;;

Is $thunkGenerator still being used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516115</commentid>
    <comment_count>11</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-06 11:51:30 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 117999 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117999&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/create_hash_table:276
&gt; &gt;          if ($key eq &quot;charCodeAt&quot;) {
&gt; &gt;              $thunkGenerator = &quot;charCodeAtThunkGenerator&quot;;
&gt; &gt; -            $intrinsic = &quot;DFG::CharCodeAtIntrinsic&quot;;
&gt; &gt; +            $intrinsic = &quot;CharCodeAtIntrinsic&quot;;
&gt; 
&gt; Do we really need this specialized check? Can&apos;t we just write CharCodeAtIntrinsic at the definition site?

I definitely agree with you that we should do this, but I don&apos;t think it&apos;s a part of this change.  This patch changes the data in the table output by the create_hash_table script, you&apos;re proposing changing the data in the tables parsed in by create_hash_table, these two changes are completely independent of each other.
 
&gt; &gt; Source/JavaScriptCore/create_hash_table:323
&gt; &gt;                  $thunkGenerator = &quot;logThunkGenerator&quot;;
&gt; &gt; +                $intrinsic = &quot;LogIntrinsic&quot;;
&gt; 
&gt; Is $thunkGenerator still being used?

Ooops - meant to remove them - thanks! - will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516166</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-12-06 12:47:17 -0800</bug_when>
    <thetext>Fixed in r102167</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117999</attachid>
            <date>2011-12-06 00:02:03 -0800</date>
            <delta_ts>2011-12-06 07:31:25 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>68328.patch</filename>
            <type>text/plain</type>
            <size>35390</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyMDk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDExLTEyLTA1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzMjgK
KyAgICAgICAgVGhlIGdlbmVyYXRvciBhbmQgaW50cmluc2ljIGZpZWxkcyBpbiBIYXNoVGFibGVW
YWx1ZS9IYXNoRW50cnkgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlcyBhbmQgbWV0aG9kcyBhcmUg
cmVkdW5kYW50CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW92ZSB0aGUgaW5zdHJpbnNpYyBlbnVtIG91dCBvZiB0aGUgREZHLCBpbnRvIHJ1bnRpbWUu
IEFkZCBlbnRpcmVzIGZvciBhbGwgaG9zdCBmdW5jdGlvbnMKKyAgICAgICAgdGhhdCBoYXZlIGFu
IGludHJpbnNpYyBpbiB0aGUgZm9ybSBvZiBhIGdlbmVyYXRlZCB0aHVuay4gUmVtb3ZlIHRoZSB0
aHVuayBwb2ludGVyIGZyb20gdGhlCisgICAgICAgIGhhc2h0YWJsZSwgYW5kIG1ha2UgSW50cmlu
c2ljIGZpZWxkIG5vIGxvbmdlciBpZmRlZiBvbiBKSVQvREZHLiBJbiBnZXRIb3N0RnVuY3Rpb24g
c2VsZWN0CisgICAgICAgIGEgdGh1bmsgZ2VuZXJ0YW9yIHRvIHVzZSBiYXNlZCBvbiB0aGUgSW50
cmluc2ljLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBjcmVhdGVfaGFzaF90YWJsZToKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgICogZGZnL0RG
R0ludHJpbnNpYy5oOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUJhc2U6OmludHJpbnNpYyk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1
dGFibGU6OmludHJpbnNpYyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppbnRyaW5zaWNGb3IpOgorICAgICAgICAoSlNDOjpO
YXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxl
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRyaW5zaWMuaC4KKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OnRodW5rR2VuZXJhdG9y
Rm9ySW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVudGlt
ZS9Mb29rdXAuY3BwOgorICAgICAgICAoSlNDOjpIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKToKKyAg
ICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
TG9va3VwLmg6CisgICAgICAgIChKU0M6Okhhc2hFbnRyeTo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChKU0M6Okhhc2hFbnRyeTo6aW50cmluc2ljKToKKwogMjAxMS0xMi0wNSAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBIYXNoTWFwOjprZXlzKCkg
YW5kIEhhc2hNYXA6OnZhbHVlcygpIGZvciBlYXN5IGl0ZXJhdGlvbiBvZiBoYXNoIG1hcCBrZXlz
IGFuZCB2YWx1ZXMgaW4gQysrMTEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRl
X2hhc2hfdGFibGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9o
YXNoX3RhYmxlCShyZXZpc2lvbiAxMDIwODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3Jl
YXRlX2hhc2hfdGFibGUJKHdvcmtpbmcgY29weSkKQEAgLTI1MCwxNiArMjUwLDYgQEAgc3ViIG91
dHB1dCgpIHsKICAgICAgICAgcHJpbnQgIlxubmFtZXNwYWNlIEpTQyB7XG4iOwogICAgIH0KICAg
ICBteSAkY291bnQgPSBzY2FsYXIgQGtleXMgKyAxOwotICAgIHByaW50ICIjaWYgRU5BQkxFKEpJ
VClcbiI7Ci0gICAgcHJpbnQgIiNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBn
ZW5lcmF0b3JcbiI7Ci0gICAgcHJpbnQgIiNlbHNlXG4iOwotICAgIHByaW50ICIjZGVmaW5lIFRI
VU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpXG4iOwotICAgIHByaW50ICIjZW5kaWZcbiI7Ci0gICAg
cHJpbnQgIiNpZiBFTkFCTEUoREZHX0pJVClcbiI7Ci0gICAgcHJpbnQgIiNkZWZpbmUgSU5UUklO
U0lDKGludHJpbnNpYykgLCBpbnRyaW5zaWNcbiI7Ci0gICAgcHJpbnQgIiNlbHNlXG4iOwotICAg
IHByaW50ICIjZGVmaW5lIElOVFJJTlNJQyhpbnRyaW5zaWMpXG4iOwotICAgIHByaW50ICIjZW5k
aWZcbiI7CiAgICAgcHJpbnQgIlxuc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSAk
e25hbWVFbnRyaWVzfVxbJGNvdW50XF0gPSB7XG4iOwogICAgIG15ICRpID0gMDsKICAgICBmb3Jl
YWNoIG15ICRrZXkgKEBrZXlzKSB7CkBAIC0yODAsNjYgKzI3MCw3MiBAQCBzdWIgb3V0cHV0KCkg
ewogICAgICAgICAgICAgJHNlY29uZFZhbHVlID0gIjAiOwogICAgICAgICB9CiAgICAgICAgIG15
ICR0aHVua0dlbmVyYXRvciA9ICIwIjsKLSAgICAgICAgbXkgJGludHJpbnNpYyA9ICJERkc6Ok5v
SW50cmluc2ljIjsKKyAgICAgICAgbXkgJGludHJpbnNpYyA9ICJOb0ludHJpbnNpYyI7CiAgICAg
ICAgIGlmICgka2V5IGVxICJjaGFyQ29kZUF0IikgewogICAgICAgICAgICAgJHRodW5rR2VuZXJh
dG9yID0gImNoYXJDb2RlQXRUaHVua0dlbmVyYXRvciI7Ci0gICAgICAgICAgICAkaW50cmluc2lj
ID0gIkRGRzo6Q2hhckNvZGVBdEludHJpbnNpYyI7CisgICAgICAgICAgICAkaW50cmluc2ljID0g
IkNoYXJDb2RlQXRJbnRyaW5zaWMiOwogICAgICAgICB9CiAgICAgICAgIGlmICgka2V5IGVxICJj
aGFyQXQiKSB7CiAgICAgICAgICAgICAkdGh1bmtHZW5lcmF0b3IgPSAiY2hhckF0VGh1bmtHZW5l
cmF0b3IiOwotICAgICAgICAgICAgJGludHJpbnNpYyA9ICJERkc6OkNoYXJBdEludHJpbnNpYyI7
CisgICAgICAgICAgICAkaW50cmluc2ljID0gIkNoYXJBdEludHJpbnNpYyI7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCRrZXkgZXEgImZyb21DaGFyQ29kZSIpIHsKICAgICAgICAgICAgICR0aHVu
a0dlbmVyYXRvciA9ICJmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvciI7CisgICAgICAgICAgICAk
aW50cmluc2ljID0gIkZyb21DaGFyQ29kZUludHJpbnNpYyI7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCRuYW1lIGVxICJtYXRoVGFibGUiKSB7CiAgICAgICAgICAgICBpZiAoJGtleSBlcSAibWlu
IikgewotICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAiREZHOjpNaW5JbnRyaW5zaWMiOwor
ICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAiTWluSW50cmluc2ljIjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICgka2V5IGVxICJtYXgiKSB7Ci0gICAgICAgICAgICAgICAgJGlu
dHJpbnNpYyA9ICJERkc6Ok1heEludHJpbnNpYyI7CisgICAgICAgICAgICAgICAgJGludHJpbnNp
YyA9ICJNYXhJbnRyaW5zaWMiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCRrZXkg
ZXEgInNxcnQiKSB7CiAgICAgICAgICAgICAgICAgJHRodW5rR2VuZXJhdG9yID0gInNxcnRUaHVu
a0dlbmVyYXRvciI7Ci0gICAgICAgICAgICAgICAgJGludHJpbnNpYyA9ICJERkc6OlNxcnRJbnRy
aW5zaWMiOworICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAiU3FydEludHJpbnNpYyI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBlcSAicG93IikgewogICAgICAgICAg
ICAgICAgICR0aHVua0dlbmVyYXRvciA9ICJwb3dUaHVua0dlbmVyYXRvciI7CisgICAgICAgICAg
ICAgICAgJGludHJpbnNpYyA9ICJQb3dJbnRyaW5zaWMiOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKCRrZXkgZXEgImFicyIpIHsKICAgICAgICAgICAgICAgICAkdGh1bmtHZW5lcmF0
b3IgPSAiYWJzVGh1bmtHZW5lcmF0b3IiOwotICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAi
REZHOjpBYnNJbnRyaW5zaWMiOworICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAiQWJzSW50
cmluc2ljIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgka2V5IGVxICJmbG9vciIp
IHsKICAgICAgICAgICAgICAgICAkdGh1bmtHZW5lcmF0b3IgPSAiZmxvb3JUaHVua0dlbmVyYXRv
ciI7CisgICAgICAgICAgICAgICAgJGludHJpbnNpYyA9ICJGbG9vckludHJpbnNpYyI7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBlcSAiY2VpbCIpIHsKICAgICAgICAgICAg
ICAgICAkdGh1bmtHZW5lcmF0b3IgPSAiY2VpbFRodW5rR2VuZXJhdG9yIjsKKyAgICAgICAgICAg
ICAgICAkaW50cmluc2ljID0gIkNlaWxJbnRyaW5zaWMiOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKCRrZXkgZXEgInJvdW5kIikgewogICAgICAgICAgICAgICAgICR0aHVua0dlbmVy
YXRvciA9ICJyb3VuZFRodW5rR2VuZXJhdG9yIjsKKyAgICAgICAgICAgICAgICAkaW50cmluc2lj
ID0gIlJvdW5kSW50cmluc2ljIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgka2V5
IGVxICJleHAiKSB7CiAgICAgICAgICAgICAgICAgJHRodW5rR2VuZXJhdG9yID0gImV4cFRodW5r
R2VuZXJhdG9yIjsKKyAgICAgICAgICAgICAgICAkaW50cmluc2ljID0gIkV4cEludHJpbnNpYyI7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGtleSBlcSAibG9nIikgewogICAgICAg
ICAgICAgICAgICR0aHVua0dlbmVyYXRvciA9ICJsb2dUaHVua0dlbmVyYXRvciI7CisgICAgICAg
ICAgICAgICAgJGludHJpbnNpYyA9ICJMb2dJbnRyaW5zaWMiOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGlmICgkbmFtZSBlcSAiYXJyYXlQcm90b3R5cGVUYWJsZSIpIHsKICAg
ICAgICAgICAgIGlmICgka2V5IGVxICJwdXNoIikgewotICAgICAgICAgICAgICAgICRpbnRyaW5z
aWMgPSAiREZHOjpBcnJheVB1c2hJbnRyaW5zaWMiOworICAgICAgICAgICAgICAgICRpbnRyaW5z
aWMgPSAiQXJyYXlQdXNoSW50cmluc2ljIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICgka2V5IGVxICJwb3AiKSB7Ci0gICAgICAgICAgICAgICAgJGludHJpbnNpYyA9ICJERkc6OkFy
cmF5UG9wSW50cmluc2ljIjsKKyAgICAgICAgICAgICAgICAkaW50cmluc2ljID0gIkFycmF5UG9w
SW50cmluc2ljIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwcmludCAiICAg
eyBcIiRrZXlcIiwgJGF0dHJzWyRpXSwgKGludHB0cl90KSIgLiAkY2FzdFN0ciAuICIoJGZpcnN0
VmFsdWUpLCAoaW50cHRyX3QpJHNlY29uZFZhbHVlIFRIVU5LX0dFTkVSQVRPUigkdGh1bmtHZW5l
cmF0b3IpIElOVFJJTlNJQygkaW50cmluc2ljKSB9LFxuIjsKKyAgICAgICAgcHJpbnQgIiAgIHsg
XCIka2V5XCIsICRhdHRyc1skaV0sIChpbnRwdHJfdCkiIC4gJGNhc3RTdHIgLiAiKCRmaXJzdFZh
bHVlKSwgKGludHB0cl90KSRzZWNvbmRWYWx1ZSwgJGludHJpbnNpYyB9LFxuIjsKICAgICAgICAg
JGkrKzsKICAgICB9Ci0gICAgcHJpbnQgIiAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1Io
MCkgSU5UUklOU0lDKERGRzo6Tm9JbnRyaW5zaWMpIH1cbiI7CisgICAgcHJpbnQgIiAgIHsgMCwg
MCwgMCwgMCwgTm9JbnRyaW5zaWMgfVxuIjsKICAgICBwcmludCAifTtcblxuIjsKLSAgICBwcmlu
dCAiI3VuZGVmIFRIVU5LX0dFTkVSQVRPUlxuIjsKICAgICBwcmludCAiZXh0ZXJuIGNvbnN0IHN0
cnVjdCBIYXNoVGFibGUgJG5hbWUgPVxuIjsKICAgICBwcmludCAiICAgIFx7ICRjb21wYWN0U2l6
ZSwgJGNvbXBhY3RIYXNoU2l6ZU1hc2ssICRuYW1lRW50cmllcywgMCBcfTtcbiI7CiAgICAgcHJp
bnQgIn0gLy8gbmFtZXNwYWNlXG4iOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDEwMjA4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDYgQEAKIAkJMEZEODJFODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4
MjE0MUYzRkM5MDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU4NjE0MUYzRkYxMDAx
NzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
OEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi87IH07Ci0JCTBGRDgyRUY1
MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJ
bnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlD
OTQgLyogQml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFC
MjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIEhldXJpc3Rp
Y3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
MjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwICovOyB9OwpAQCAtODg0LDcg
Kzg4Myw2IEBACiAJCTBGRDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9p
bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3VuZHNDaGVja2VkUG9p
bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAx
NzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2lj
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJpbnNpYy5oOyBwYXRo
ID0gZGZnL0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4
MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXVyaXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGV1cmlzdGljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTAwNCw3ICsxMDAyLDcgQEAKIAkJMUEwODI3NzcxNDIxNjhENzAw
OTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCaW5hcnlTZW1hcGhvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTA4Mjc3ODE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5RDAgLyogVmVyc2lvbi54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmln
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQzkwNTE0MzBCQTlFOEE3MDA4MUU5RDAg
LyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0
aCA9IC4uL0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0NDBCQTlFOEE3MDA4MUU5RDAgLyogRGVidWdSZWxl
YXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFz
ZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDUwQkE5RThB
NzAwODFFOUQwIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBQThCNEEw
RDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSmF2YVNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE0
OSw2ICsxMTQ3LDcgQEAKIAkJODZCOTlBRTExMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHJpbmdCdWZmZXIuaDsgcGF0
aCA9IHRleHQvU3RyaW5nQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1JlcGF0Y2guY3BwOyBwYXRoID0gZGZnL0RGR1JlcGF0
Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJCMDlCRjEzOEUzODFCMDA1
NjcwMkYgLyogREZHUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdSZXBhdGNoLmg7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NkJGNjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDNTY4REQxMUEyMTNFRTAwMDdGN0YwIC8qIE1h
Y3JvQXNzZW1ibGVyQVJNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyQVJNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZD
NTY4REUxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlck1JUFMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NjMsNiArMTc2Miw3IEBACiAJCTE0MzJFQkQ3MEEzNENBRDQw
MDcxN0I5RiAvKiBBUEkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZp
ZyAqLywKIAkJCQkxNDgyQjc4QTBBNDMwNUFCMDA1MTdDRkMgLyogQVBJQ2FzdC5oICovLAogCQkJ
CTg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovLAogCQkJCTFDQUE4QjRB
MEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCkBAIC0xODU2LDcgKzE4NTYsNiBA
QAogCQkJCTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8sCiAJCQkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnICovLAogCQkJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8s
Ci0JCQkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmln
ICovLAogCQkJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICov
LAogCQkJCTVEQUZENkNDMTQ2QjY4QjkwMEZCRUZCNCAvKiBUZXN0UmVnRXhwLnhjY29uZmlnICov
LAogCQkJCTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLApA
QCAtMjEwNCwxMCArMjEwMyw2IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50
aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkUy
MjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8sCi0JCQkJMEZFMjI4RUIx
NDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAqLywKLQkJCQkwRjc3MDA5MTE0MDJGRjI4
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKLQkJCQkwRjc3MDA4RTE0MDJGREQ2
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0RCAv
KiBBcmdMaXN0LmggKi8sCiAJCQkJQkMyNTdERTUwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50
cy5jcHAgKi8sCkBAIC0yMTYzLDEyICsyMTU4LDE1IEBACiAJCQkJRERGN0FCRDMxMUY2MEVEMjAw
MTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFja0NGLmNwcCAqLywKIAkJCQlCQzAyRTlCODBFMTg0
NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4
MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2
QzQ4IC8qIEhldXJpc3RpY3MuY3BwICovLAorCQkJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAv
KiBIZXVyaXN0aWNzLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50
aWZpZXIuY3BwICovLAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVDRSAvKiBJZGVudGlmaWVy
LmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRp
bmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhy
ZWFkaW5nLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVu
Y3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1
bmN0aW9uLmggKi8sCisJCQkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIEludHJpbnNpYy5o
ICovLAogCQkJCTE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uY3BwICov
LAogCQkJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLywKIAkJ
CQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCkBAIC0yMjYxLDYg
KzIyNTksOCBAQAogCQkJCUY2OTJBODdDMDI1NTU5N0QwMUZGNjBGNyAvKiBSZWdFeHBPYmplY3Qu
aCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNw
cCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmgg
Ki8sCisJCQkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAg
Ki8sCisJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICov
LAogCQkJCTkzNzREM0E4MDM4RDlENzQwMDg2MzVDRSAvKiBTY29wZUNoYWluLmNwcCAqLywKIAkJ
CQk5Mzc0RDNBNzAzOEQ5RDc0MDA4NjM1Q0UgLyogU2NvcGVDaGFpbi5oICovLAogCQkJCTdFMkM2
Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBTY29wZUNoYWluTWFyay5oICovLApAQCAtMjM2Niw3ICsy
MzY2LDYgQEAKIAkJCQk4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICov
LAogCQkJCTg2RUM5REI3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgKi8sCiAJCQkJ
ODZFQzlEQjgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggKi8sCi0JCQkJMEZEODJFRjMx
NDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oICovLAogCQkJCTg2RUM5REJCMTMyOERG
ODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggKi8sCiAJCQkJODZFQ0EzRTkxMzJERUYxQzAw
MkIyQUQ3IC8qIERGR05vZGUuaCAqLywKQEAgLTI1NjksNyArMjU2OCw2IEBACiAJCQkJODZBREQx
NDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEZEODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNr
ZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU1MTQxREFFRUUwMDE3
OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTAyMDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMiw3ICs5MDIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgICAgICAgICBuZXh0T2Zmc2V0ICs9IE9QQ09ERV9M
RU5HVEgob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBKU0Z1bmN0aW9u
KiBleHBlY3RlZEZ1bmN0aW9uOwotICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWM7Cisg
ICAgICAgIEludHJpbnNpYyBpbnRyaW5zaWM7CiAgICAgICAgIGJvb2wgY2VydGFpbkFib3V0RXhw
ZWN0ZWRGdW5jdGlvbjsKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24p
IHsKICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2dyYXBoLnZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KTsKQEAgLTEyMjUsNyArMTIyNSw2IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICB9CiAKICAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlQoaW50cmluc2ljID09IE5vSW50cmluc2ljKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTAyMDgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2lmbmRlZiBERkdDYXBhYmlsaXRpZXNfaAogI2RlZmluZSBERkdDYXBhYmlsaXRp
ZXNfaAogCi0jaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCisjaW5jbHVkZSAiSW50cmluc2ljLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRl
ICJIZXVyaXN0aWNzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludHJp
bnNpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50cmlu
c2ljLmgJKHJldmlzaW9uIDEwMjA4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR0ludHJpbnNpY19o
Ci0jZGVmaW5lIERGR0ludHJpbnNpY19oCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKLQotZW51bSBJbnRyaW5zaWMgewotICAgIE5vSW50cmluc2ljLAotICAgIEFic0ludHJpbnNp
YywKLSAgICBNaW5JbnRyaW5zaWMsCi0gICAgTWF4SW50cmluc2ljLAotICAgIFNxcnRJbnRyaW5z
aWMsCi0gICAgQXJyYXlQdXNoSW50cmluc2ljLAotICAgIEFycmF5UG9wSW50cmluc2ljLAotICAg
IENoYXJDb2RlQXRJbnRyaW5zaWMsCi0gICAgQ2hhckF0SW50cmluc2ljCi19OwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBERkdJbnRyaW5zaWNfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEwMjA4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NzQyLDExICszNzQyLDExIEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0
aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+
IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAg
ZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBm
dW5jdGlvbiksIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNvbnN0cnVjdG9yLCBERkc6Ok5vSW50
cmluc2ljKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBO
YXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjb25z
dHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5n
ZXQoKTsKIH0KIAotTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHVi
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljKQorTmF0aXZlRXhl
Y3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwg
SW50cmluc2ljIGludHJpbnNpYykKIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1h
cDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVu
Y3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3Qt
PnNlY29uZCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNp
b24gMTAyMDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIEpJVFN0dWJzX2gKIAogI2luY2x1
ZGUgIkNhbGxEYXRhLmgiCi0jaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCisjaW5jbHVkZSAiSW50
cmluc2ljLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXIuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKQEAgLTMwMCw3ICszMDAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0
dWIoSlNHbG9iYWxEYXRhKiwgVGh1bmtHZW5lcmF0b3IpOwogCiAgICAgICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9z
dEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0
b3IsIERGRzo6SW50cmluc2ljKTsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0
aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIElu
dHJpbnNpYyk7CiAKICAgICAgICAgdm9pZCBjbGVhckhvc3RGdW5jdGlvblN0dWJzKCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAxMDIwODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDExIEBAIGlubGluZSB2b2lkIEV4ZWN1
dGFibGVCYXNlOjpjbGVhckNvZGUoKQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1ERkc6Oklu
dHJpbnNpYyBFeGVjdXRhYmxlQmFzZTo6aW50cmluc2ljKCkgY29uc3QKK0ludHJpbnNpYyBFeGVj
dXRhYmxlQmFzZTo6aW50cmluc2ljKCkgY29uc3QKIHsKICAgICBpZiAoY29uc3QgTmF0aXZlRXhl
Y3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8Y29uc3QgTmF0aXZlRXhl
Y3V0YWJsZSo+KHRoaXMpKQogICAgICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZS0+aW50cmlu
c2ljKCk7Ci0gICAgcmV0dXJuIERGRzo6Tm9JbnRyaW5zaWM7CisgICAgcmV0dXJuIE5vSW50cmlu
c2ljOwogfQogI2VuZGlmCiAKQEAgLTY2LDcgKzY2LDcgQEAgTmF0aXZlRXhlY3V0YWJsZTo6fk5h
dGl2ZUV4ZWN1dGFibGUoKQogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1ERkc6OkludHJpbnNp
YyBOYXRpdmVFeGVjdXRhYmxlOjppbnRyaW5zaWMoKSBjb25zdAorSW50cmluc2ljIE5hdGl2ZUV4
ZWN1dGFibGU6OmludHJpbnNpYygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW50cmluc2ljOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2
aXNpb24gMTAyMDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTcgKzE1NCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiBoYXNKSVRDb2RlRm9yQ29uc3RydWN0KCk7CiAgICAgICAgIH0K
IAotI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICAvLyBJbnRyaW5zaWNzIGFyZSBvbmx5IGZv
ciBjYWxscywgY3VycmVudGx5LgotICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMoKSBj
b25zdDsKKyAgICAgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OwogICAgICAgICAKLSAg
ICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkgY29uc3QKKyAgICAgICAgSW50cmluc2ljIGludHJpbnNpY0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0NhbGwo
a2luZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpYygpOwotICAgICAgICAgICAg
cmV0dXJuIERGRzo6Tm9JbnRyaW5zaWM7CisgICAgICAgICAgICByZXR1cm4gTm9JbnRyaW5zaWM7
CiAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKSVRDb2RlIG1f
aml0Q29kZUZvckNhbGw7CkBAIC0xODEsNyArMTc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAg
ICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvciwgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljKQorICAgICAgICBzdGF0aWMg
TmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0
b3IsIEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChn
bG9iYWxEYXRhLmNhblVzZUpJVCgpKTsKICAgICAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGU7CkBAIC0yMTcsMTMgKzIxNSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgICAgIERGRzo6SW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OwotI2VuZGlm
CisgICAgICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoK
ICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSklUQ29kZSBjYWxsVGh1bmssIEpJVENvZGUgY29uc3RydWN0VGh1bmss
IERGRzo6SW50cmluc2ljIGludHJpbnNpYykKKyAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpJVENvZGUgY2FsbFRodW5rLCBKSVRDb2RlIGNvbnN0
cnVjdFRodW5rLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoZ2xvYmFsRGF0YS5jYW5Vc2VKSVQoKSk7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKQEAgLTIzMSwxMSArMjI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsKICAg
ICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGNhbGxUaHVuay5hZGRy
ZXNzRm9yQ2FsbCgpOwogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuay5hZGRyZXNzRm9yQ2FsbCgpOwotI2lmIEVOQUJMRShERkdf
SklUKQogICAgICAgICAgICAgbV9pbnRyaW5zaWMgPSBpbnRyaW5zaWM7Ci0jZWxzZQotICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKGludHJpbnNpYyk7Ci0jZW5kaWYKICAgICAgICAgfQogI2VuZGlm
CiAKQEAgLTI0NCw2ICsyMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmNhblVzZUpJVCgpKTsKICAgICAgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgbV9pbnRyaW5zaWMgPSBO
b0ludHJpbnNpYzsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTI2MCw3ICsyNTMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgTmF0aXZlRnVuY3Rpb24gbV9mdW5jdGlvbjsKICAgICAgICAg
TmF0aXZlRnVuY3Rpb24gbV9jb25zdHJ1Y3RvcjsKICAgICAgICAgCi0gICAgICAgIERGRzo6SW50
cmluc2ljIG1faW50cmluc2ljOworICAgICAgICBJbnRyaW5zaWMgbV9pbnRyaW5zaWM7CiAgICAg
fTsKIAogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2Ug
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJldmlz
aW9uIDEwMjA4MSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRyaW5zaWMu
aDoxMDIwODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSW50cmluc2ljX2gKKyNkZWZpbmUgREZH
SW50cmluc2ljX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIElu
dHJpbnNpYyB7CisgICAgTm9JbnRyaW5zaWMsCisgICAgQWJzSW50cmluc2ljLAorICAgIE1pbklu
dHJpbnNpYywKKyAgICBNYXhJbnRyaW5zaWMsCisgICAgU3FydEludHJpbnNpYywKKyAgICBBcnJh
eVB1c2hJbnRyaW5zaWMsCisgICAgQXJyYXlQb3BJbnRyaW5zaWMsCisgICAgQ2hhckNvZGVBdElu
dHJpbnNpYywKKyAgICBDaGFyQXRJbnRyaW5zaWMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIERGR0ludHJpbnNpY19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkocmV2aXNpb24gMTAyMDgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEw
ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBERkdJbnRyaW5zaWNf
aAotI2RlZmluZSBERkdJbnRyaW5zaWNfaAorI2lmbmRlZiBJbnRyaW5zaWNfaAorI2RlZmluZSBJ
bnRyaW5zaWNfaAogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CituYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBJbnRyaW5zaWMgewogICAgIE5vSW50cmluc2ljLApAQCAtMzcsOSArMzcs
MTYgQEAgZW51bSBJbnRyaW5zaWMgewogICAgIEFycmF5UHVzaEludHJpbnNpYywKICAgICBBcnJh
eVBvcEludHJpbnNpYywKICAgICBDaGFyQ29kZUF0SW50cmluc2ljLAotICAgIENoYXJBdEludHJp
bnNpYworICAgIENoYXJBdEludHJpbnNpYywKKyAgICBGcm9tQ2hhckNvZGVJbnRyaW5zaWMsCisg
ICAgUG93SW50cmluc2ljLAorICAgIEZsb29ySW50cmluc2ljLAorICAgIENlaWxJbnRyaW5zaWMs
CisgICAgUm91bmRJbnRyaW5zaWMsCisgICAgRXhwSW50cmluc2ljLAorICAgIExvZ0ludHJpbnNp
YywKIH07CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKK30gLy8gbmFtZXNwYWNlIEpTQwog
Ci0jZW5kaWYgLy8gREZHSW50cmluc2ljX2gKKyNlbmRpZiAvLyBJbnRyaW5zaWNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiAxMDIwODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNiArNDEyLDM2IEBAIEpTR2xvYmFsRGF0YSom
IEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGEKIH0KIAogI2lmIEVOQUJMRShKSVQpCitzdGF0aWMg
VGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJp
bnNpYykKK3sKKyAgICBzd2l0Y2ggKGludHJpbnNpYykgeworICAgIGNhc2UgQ2hhckNvZGVBdElu
dHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcjsKKyAgICBj
YXNlIENoYXJBdEludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGNoYXJBdFRodW5rR2VuZXJhdG9y
OworICAgIGNhc2UgRnJvbUNoYXJDb2RlSW50cmluc2ljOgorICAgICAgICByZXR1cm4gZnJvbUNo
YXJDb2RlVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBTcXJ0SW50cmluc2ljOgorICAgICAgICBy
ZXR1cm4gc3FydFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgUG93SW50cmluc2ljOgorICAgICAg
ICByZXR1cm4gcG93VGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBBYnNJbnRyaW5zaWM6CisgICAg
ICAgIHJldHVybiBhYnNUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIEZsb29ySW50cmluc2ljOgor
ICAgICAgICByZXR1cm4gZmxvb3JUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIENlaWxJbnRyaW5z
aWM6CisgICAgICAgIHJldHVybiBjZWlsVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBSb3VuZElu
dHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIHJvdW5kVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBF
eHBJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBleHBUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNl
IExvZ0ludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIGxvZ1RodW5rR2VuZXJhdG9yOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogTmF0aXZlRXhlY3V0YWJsZSog
SlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKQEAg
LTQyMCwxMCArNDUwLDEwIEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9z
dEYKICNlbmRpZgogICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBm
dW5jdGlvbiwgY29uc3RydWN0b3IpOwogfQotTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRh
OjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljKQorTmF0aXZlRXhlY3V0YWJsZSog
SlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIElu
dHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgQVNTRVJUKGNhblVzZUpJVCgpKTsKLSAgICByZXR1
cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24sIGdlbmVyYXRvciwg
aW50cmluc2ljKTsKKyAgICByZXR1cm4gaml0U3R1YnMtPmhvc3RGdW5jdGlvblN0dWIodGhpcywg
ZnVuY3Rpb24sIGludHJpbnNpYyAhPSBOb0ludHJpbnNpYyA/IHRodW5rR2VuZXJhdG9yRm9ySW50
cmluc2ljKGludHJpbnNpYykgOiAwLCBpbnRyaW5zaWMpOwogfQogI2Vsc2UKIE5hdGl2ZUV4ZWN1
dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMDIwODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBKU0dsb2JhbERhdGFfaAogCiAjaW5jbHVkZSAiQ2Fj
aGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkRGR0ludHJpbnNpYy5oIgor
I2luY2x1ZGUgIkludHJpbnNpYy5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNhY2hlLmgiCiAj
aW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTI0
Niw3ICsyNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7CiAgICAgICAgIH0KLSAgICAg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBUaHVu
a0dlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMpOworICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBn
ZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyk7CiAjZW5kaWYKICAgICAg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uLCBOYXRp
dmVGdW5jdGlvbiBjb25zdHJ1Y3Rvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xvb2t1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTG9va3VwLmNwcAkocmV2aXNpb24gMTAyMDgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDcgQEAg
dm9pZCBIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKEpTR2xvYmFsRGF0YQogICAgICAgICAgICAgZW50
cnkgPSBlbnRyeS0+bmV4dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgZW50cnktPmluaXRpYWxp
emUoaWRlbnRpZmllciwgdmFsdWVzW2ldLmF0dHJpYnV0ZXMsIHZhbHVlc1tpXS52YWx1ZTEsIHZh
bHVlc1tpXS52YWx1ZTIKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHZhbHVlc1tpXS5nZW5lcmF0b3IKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCB2YWx1ZXNbaV0uaW50cmluc2ljCi0jZW5kaWYKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBlbnRyeS0+aW5pdGlhbGl6ZShpZGVu
dGlmaWVyLCB2YWx1ZXNbaV0uYXR0cmlidXRlcywgdmFsdWVzW2ldLnZhbHVlMSwgdmFsdWVzW2ld
LnZhbHVlMiwgdmFsdWVzW2ldLmludHJpbnNpYyk7CiAgICAgfQogICAgIHRhYmxlID0gZW50cmll
czsKIH0KQEAgLTg2LDggKzc5LDggQEAgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVj
U3RhdGUqIAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXNPYmotPmdsb2JhbE9iamVjdCgpOwogI2lmIEVOQUJM
RShKSVQpCi0gICAgICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkgJiYgKGVu
dHJ5LT5nZW5lcmF0b3IoKSB8fCBlbnRyeS0+aW50cmluc2ljKCkgIT0gREZHOjpOb0ludHJpbnNp
YykpCi0gICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9i
YWxPYmplY3QsIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmds
b2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5l
cmF0b3IoKSwgZW50cnktPmludHJpbnNpYygpKSk7CisgICAgICAgIGlmIChleGVjLT5nbG9iYWxE
YXRhKCkuY2FuVXNlSklUKCkgJiYgZW50cnktPmludHJpbnNpYygpICE9IE5vSW50cmluc2ljKQor
ICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxE
YXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+aW50cmluc2lj
KCkpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgp
LCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAxMDIwODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA
QAogI2RlZmluZSBMb29rdXBfaAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAi
REZHSW50cmluc2ljLmgiCisjaW5jbHVkZSAiSW50cmluc2ljLmgiCiAjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlT
bG90LmgiCkBAIC0zNiwxMiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhdHRyaWJ1dGVzOyAvLyBKU09iamVjdCBhdHRyaWJ1dGVzCiAgICAgICAgIGludHB0
cl90IHZhbHVlMTsKICAgICAgICAgaW50cHRyX3QgdmFsdWUyOwotI2lmIEVOQUJMRShKSVQpCi0g
ICAgICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcjsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOwotI2VuZGlmCi0jZW5kaWYKKyAgICAgICAg
SW50cmluc2ljIGludHJpbnNpYzsKICAgICB9OwogCiAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5v
IHJlYXNvbiB0aGlzIGdldCBmdW5jdGlvbiBjYW4ndCBiZSBzaW1wbGVyLgpAQCAtNTIsMjUgKzQ3
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEhhc2hFbnRyeSB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBpbml0aWFs
aXplKFN0cmluZ0ltcGwqIGtleSwgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGVzLCBpbnRwdHJfdCB2
MSwgaW50cHRyX3QgdjIKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgICAgICAgICAgICAg
LCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSAwCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAsIERGRzo6SW50cmluc2ljIGludHJpbnNpYyA9IERGRzo6Tm9J
bnRyaW5zaWMKLSNlbmRpZgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApCisgICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmdJbXBsKiBrZXksIHVuc2lnbmVkIGNoYXIgYXR0cmli
dXRlcywgaW50cHRyX3QgdjEsIGludHB0cl90IHYyLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2tleSA9IGtleTsKICAgICAgICAgICAgIG1fYXR0cmlidXRl
cyA9IGF0dHJpYnV0ZXM7CiAgICAgICAgICAgICBtX3Uuc3RvcmUudmFsdWUxID0gdjE7CiAgICAg
ICAgICAgICBtX3Uuc3RvcmUudmFsdWUyID0gdjI7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
ICAgIG1fdS5mdW5jdGlvbi5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0jaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgICAgICBtX3UuZnVuY3Rpb24uaW50cmluc2ljID0gaW50cmluc2ljOwotI2Vu
ZGlmCi0jZW5kaWYKICAgICAgICAgICAgIG1fbmV4dCA9IDA7CiAgICAgICAgIH0KIApAQCAtNzks
MTggKzYyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYXR0
cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQogCi0jaWYgRU5BQkxFKEpJ
VCkKLSAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKCkgY29uc3QgeyBBU1NFUlQobV9h
dHRyaWJ1dGVzICYgRnVuY3Rpb24pOyByZXR1cm4gbV91LmZ1bmN0aW9uLmdlbmVyYXRvcjsgfQot
ICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdAorICAgICAgICBJbnRyaW5z
aWMgaW50cmluc2ljKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fYXR0
cmlidXRlcyAmIEZ1bmN0aW9uKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgICAgIHJl
dHVybiBtX3UuZnVuY3Rpb24uaW50cmluc2ljOwotI2Vsc2UKLSAgICAgICAgICAgIHJldHVybiBE
Rkc6Ok5vSW50cmluc2ljOwotI2VuZGlmCiAgICAgICAgIH0KLSNlbmRpZgorCiAgICAgICAgIE5h
dGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKCkgY29uc3QgeyBBU1NFUlQobV9hdHRyaWJ1dGVzICYgRnVu
Y3Rpb24pOyByZXR1cm4gbV91LmZ1bmN0aW9uLmZ1bmN0aW9uVmFsdWU7IH0KICAgICAgICAgdW5z
aWduZWQgY2hhciBmdW5jdGlvbkxlbmd0aCgpIGNvbnN0IHsgQVNTRVJUKG1fYXR0cmlidXRlcyAm
IEZ1bmN0aW9uKTsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fdS5mdW5jdGlv
bi5sZW5ndGgpOyB9CiAKQEAgLTExNCwxMiArOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb25W
YWx1ZTsKICAgICAgICAgICAgICAgICBpbnRwdHJfdCBsZW5ndGg7IC8vIG51bWJlciBvZiBhcmd1
bWVudHMgZm9yIGZ1bmN0aW9uCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgICAgICBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3I7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICAg
ICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOwotI2VuZGlmCi0jZW5kaWYKKyAgICAgICAgICAg
ICAgICBJbnRyaW5zaWMgaW50cmluc2ljOwogICAgICAgICAgICAgfSBmdW5jdGlvbjsKICAgICAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgR2V0RnVuY3Rpb24gZ2V0Owo=
</data>
<flag name="review"
          id="117636"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="117639"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>