<?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>71681</bug_id>
          
          <creation_ts>2011-11-07 06:47:24 -0800</creation_ts>
          <short_desc>[Qt][WK2] Remove TiledDrawingArea and dependencies.</short_desc>
          <delta_ts>2012-02-06 05:12:23 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>eunsol47.park</cc>
    
    <cc>hyuki.kim</cc>
    
    <cc>jturcotte</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>youngtaeck.song</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497139</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-11-07 06:47:24 -0800</bug_when>
    <thetext>[Qt][WK2] Remove TiledDrawingArea and dependencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497142</commentid>
    <comment_count>1</comment_count>
      <attachid>113860</attachid>
    <who name="alan">zalan</who>
    <bug_when>2011-11-07 06:52:16 -0800</bug_when>
    <thetext>Created attachment 113860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497159</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-11-07 07:17:42 -0800</bug_when>
    <thetext>TiledDrawingArea and its dependencies are obsolete. In case that any port needs same/similar functionality, the current class structure needs to be reconsidered. Currently there are lots of duplicated code in TiledDrawingAreaProxy and DrawingAreaImpl. Either Tiled needs to be derived from Impl, or preferably Impl code should be moved up to the base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497614</commentid>
    <comment_count>3</comment_count>
    <who name="KwangHyuk">hyuki.kim</who>
    <bug_when>2011-11-07 17:16:36 -0800</bug_when>
    <thetext>Hi, zbujtas,

The internal version of WK2-efl&apos;s tiled backing store implementation is now based on TiledDrawingArea.

So, I would like to know the next plan after landing of this patch.
Should we have to move from TiledDrawingArea to DrawingArea or LayerTreeHost ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498030</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-11-08 07:14:17 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hi, zbujtas,
&gt; 
&gt; The internal version of WK2-efl&apos;s tiled backing store implementation is now based on TiledDrawingArea.
&gt; 
&gt; So, I would like to know the next plan after landing of this patch.
&gt; Should we have to move from TiledDrawingArea to DrawingArea or LayerTreeHost ?
It&apos;s really up to you whether you&apos;d like to keep the original tile approach with a little bit of different class structure (see comment#2). However, that most likely will not work properly in all the cases when both AC and non-AC content are present. Or, as you mentioned, follow the LayerTreeHost(Qt) (TiledBackingStoreRemoteTile) implementation, which properly synchronizes the non-AC with the AC content using tiles. https://bugs.webkit.org/show_bug.cgi?id=69151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498826</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-11-09 04:39:47 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hi, zbujtas,
&gt; 
&gt; The internal version of WK2-efl&apos;s tiled backing store implementation is now based on TiledDrawingArea.
&gt; 
&gt; So, I would like to know the next plan after landing of this patch.
&gt; Should we have to move from TiledDrawingArea to DrawingArea or LayerTreeHost ?
Could you let me know, if you are fine with removing these classes? (would be great to know before submitting it for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499560</commentid>
    <comment_count>6</comment_count>
    <who name="KwangHyuk">hyuki.kim</who>
    <bug_when>2011-11-09 18:09:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; Hi, zbujtas,
&gt; &gt; 
&gt; &gt; The internal version of WK2-efl&apos;s tiled backing store implementation is now based on TiledDrawingArea.
&gt; &gt; 
&gt; &gt; So, I would like to know the next plan after landing of this patch.
&gt; &gt; Should we have to move from TiledDrawingArea to DrawingArea or LayerTreeHost ?
&gt; Could you let me know, if you are fine with removing these classes? (would be great to know before submitting it for review)

Hi, zbujtas,

I am gathering idea from each related person to know whether anybody has any major issue caused by this patch. :)
I will give you any feedback for this soon.

I sincerely thank you for your notification of this patch in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500528</commentid>
    <comment_count>7</comment_count>
    <who name="KwangHyuk">hyuki.kim</who>
    <bug_when>2011-11-10 22:24:14 -0800</bug_when>
    <thetext>LGTM.

We are going to move into LayerTreeHost sooner or later.
However, I prefer it if you remove these files some days later. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500718</commentid>
    <comment_count>8</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-11-11 06:05:45 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; LGTM.
&gt; 
&gt; We are going to move into LayerTreeHost sooner or later.
&gt; However, I prefer it if you remove these files some days later. :)

sure, just let me know when. i prefer removing it sooner than latter to avoid confusion about its existence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501731</commentid>
    <comment_count>9</comment_count>
    <who name="KwangHyuk">hyuki.kim</who>
    <bug_when>2011-11-14 01:57:44 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; LGTM.
&gt; &gt; 
&gt; &gt; We are going to move into LayerTreeHost sooner or later.
&gt; &gt; However, I prefer it if you remove these files some days later. :)
&gt; 
&gt; sure, just let me know when. i prefer removing it sooner than latter to avoid confusion about its existence.

Thanks for your consideration. :)
Until the end of this month. if it won&apos;t hurt your work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501733</commentid>
    <comment_count>10</comment_count>
    <who name="KwangHyuk">hyuki.kim</who>
    <bug_when>2011-11-14 02:01:45 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; LGTM.
&gt; &gt; &gt; 
&gt; &gt; &gt; We are going to move into LayerTreeHost sooner or later.
&gt; &gt; &gt; However, I prefer it if you remove these files some days later. :)
&gt; &gt; 
&gt; &gt; sure, just let me know when. i prefer removing it sooner than latter to avoid confusion about its existence.
&gt; 
&gt; Thanks for your consideration. :)
&gt; Until the end of this month. if it won&apos;t hurt your work.

I want to see those files until the end of this month if it won&apos;t hurt your work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501741</commentid>
    <comment_count>11</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-11-14 02:16:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; LGTM.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; We are going to move into LayerTreeHost sooner or later.
&gt; &gt; &gt; &gt; However, I prefer it if you remove these files some days later. :)
&gt; &gt; &gt; 
&gt; &gt; &gt; sure, just let me know when. i prefer removing it sooner than latter to avoid confusion about its existence.
&gt; &gt; 
&gt; &gt; Thanks for your consideration. :)
&gt; &gt; Until the end of this month. if it won&apos;t hurt your work.
&gt; 
&gt; I want to see those files until the end of this month if it won&apos;t hurt your work.

alright. sounds ok. thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501748</commentid>
    <comment_count>12</comment_count>
    <who name="KwangHyuk">hyuki.kim</who>
    <bug_when>2011-11-14 02:26:02 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; LGTM.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; We are going to move into LayerTreeHost sooner or later.
&gt; &gt; &gt; &gt; &gt; However, I prefer it if you remove these files some days later. :)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; sure, just let me know when. i prefer removing it sooner than latter to avoid confusion about its existence.
&gt; &gt; &gt; 
&gt; &gt; &gt; Thanks for your consideration. :)
&gt; &gt; &gt; Until the end of this month. if it won&apos;t hurt your work.
&gt; &gt; 
&gt; &gt; I want to see those files until the end of this month if it won&apos;t hurt your work.
&gt; 
&gt; alright. sounds ok. thanks.

Thanks too. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548793</commentid>
    <comment_count>13</comment_count>
      <attachid>125352</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-02-03 09:34:00 -0800</bug_when>
    <thetext>Created attachment 125352
Patch

Also remove QtSGTileNode and QtSGUpdateQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549910</commentid>
    <comment_count>14</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-02-06 05:12:23 -0800</bug_when>
    <thetext>Committed r106800: &lt;http://trac.webkit.org/changeset/106800&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113860</attachid>
            <date>2011-11-07 06:52:16 -0800</date>
            <delta_ts>2012-02-03 09:33:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71681-20111107155215.patch</filename>
            <type>text/plain</type>
            <size>27726</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NDIxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMDcgIFphbGFuIEJ1
anRhcyAgPHpidWp0YXNAZ21haWwuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBSZW1vdmUgVGls
ZWREcmF3aW5nQXJlYSBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaWxlZCBkcmF3aW5nIHN1cmZhY2UgZnVuY3Rpb25hbGl0
eSBnb3QgY29udmVydGVkIHRvIExheWVyVHJlZS4gVGlsZWREcmF3aW5nQXJlYSAKKyAgICAgICAg
YW5kIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG5vdCB1c2VkIGFueW1vcmUuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oOiBSZW1vdmVkLgorCiAyMDExLTEx
LTA3ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAg
ICBbUXRdIEZpeCBmYWlsaW5nIGluc3BlY3RvciB0ZXN0cyBhZnRlciBidWlsZCBzeXN0ZW0gY2hh
bmdlcwpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk5NDIxKQorKysgU291cmNl
L1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNiBA
QCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0
ZURhdGFNYW5hZ2VyLmNwcAogCiAgICAgVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuY3Bw
Ci0gICAgVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKICAgICBVSVByb2Nlc3Mv
VmlzaXRlZExpbmtQcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXJQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcApA
QCAtMzYxLDcgKzM2MCw2IEBAIFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAotICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViQ29udGV4dE1lbnUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkVkaXRDb21tYW5k
LmNwcApJbmRleDogU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDk5NDIxKQorKysgU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw4ICs1NjcsNiBA
QCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVGV4dENoZWNrZXIuaCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2lu
Z0FyZWFQcm94eS5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhUHJveHkuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlk
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlzaXRlZExpbmtQcm92aWRlci5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQ
cm94eS5oIFwKQEAgLTgzNSw4ICs4MzMsNiBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Lmgg
XAotCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNw
cCBcCi0JU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
aCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJDb250ZXh0TWVudS5jcHAgXApJbmRleDogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCShyZXZpc2lvbiA5OTQyMSkKKysr
IFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEs
NiBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvUHJvY2Vzc01vZGVsLmggXAogICAgIFVJ
UHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmggXAogICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tl
ci5oIFwKLSAgICBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmggXAogICAgIFVJUHJv
Y2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmggXAogICAgIFVJUHJvY2Vzcy9XZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmggXApAQCAt
NDU2LDcgKzQ1NSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3F0L1Bs
dWdpblByb2Nlc3NQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVn
aW5JbmZvU3RvcmVVbml4LmNwcCBcCiAgICAgVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIu
Y3BwIFwKLSAgICBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2Fy
ZExpc3QuY3BwIFwKQEAgLTUxMCw3ICs1MDgsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nl
c3MvcXQvcXdraGlzdG9yeS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFNHVXBkYXRlUXVldWUu
Y3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmNwcCBcCi0gICAgVUlQcm9jZXNz
L3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RleHRD
aGVja2VyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAgXApA
QCAtNTk4LDcgKzU5NSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5j
cHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkVkaXRDb21tYW5kLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAkocmV2aXNpb24gOTk0MjEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCi0KLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTWVz
c2FnZUlELmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1QYXNzT3duUHRyPFRpbGVkRHJhd2luZ0FyZWFQcm94eT4gVGlsZWREcmF3
aW5nQXJlYVByb3h5OjpjcmVhdGUoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHJv
eHkqIHdlYlBhZ2VQcm94eSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2lu
Z0FyZWFQcm94eSh3ZWJWaWV3LCB3ZWJQYWdlUHJveHkpKTsKLX0KLQotVGlsZWREcmF3aW5nQXJl
YVByb3h5OjpUaWxlZERyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKLSAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2lu
Z0FyZWFUeXBlVGlsZWQsIHdlYlBhZ2VQcm94eSkKLSAgICAsIG1faXNXYWl0aW5nRm9yRGlkU2V0
RnJhbWVOb3RpZmljYXRpb24oZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcod2ViVmlldykKLXsKLX0K
LQotVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp+VGlsZWREcmF3aW5nQXJlYVByb3h5KCkKLXsKLX0K
LQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNj
YWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgZmxvYXQgc2Nh
bGUpCi17Ci0gICAgcGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVh
OjpTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZSh2aXNpYmxlQ29udGVudFJlY3QsIHNjYWxl
KSwgcGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpz
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgcGFnZSgpLT5wcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKHRyYWplY3RvcnlWZWN0b3IpLCBwYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCi17Ci19Ci0KLXZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKCkKLXsKLSAgICBXZWJQYWdlUHJveHkqIHBh
Z2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24g
PSB0cnVlOwotCi0gICAgcGFnZS0+cHJvY2VzcygpLT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0
YXJ0KCk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6
U2V0U2l6ZShtX3NpemUpLCBwYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaAkocmV2
aXNpb24gOTk0MjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgVGlsZWREcmF3aW5nQXJlYVByb3h5X2gKLSNkZWZpbmUgVGls
ZWREcmF3aW5nQXJlYVByb3h5X2gKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0j
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLQotI2luY2x1ZGUgIlJ1bkxvb3AuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBXS1ZpZXc7
Ci0jZWxzZQotY2xhc3MgV0tWaWV3OwotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgU2hhcmVhYmxlQml0bWFwOwotY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ7Ci1j
bGFzcyBXZWJQYWdlUHJveHk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIFdLVmlldyBQ
bGF0Zm9ybVdlYlZpZXc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi1jbGFzcyBXZWJWaWV3OwotdHlw
ZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKLSNlbGlmIFBMQVRGT1JNKFFUKQotY2xhc3Mg
UXRUb3VjaFZpZXdJbnRlcmZhY2U7Ci10eXBlZGVmIFF0VG91Y2hWaWV3SW50ZXJmYWNlIFBsYXRm
b3JtV2ViVmlldzsKLSNlbmRpZgotCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVhUHJveHkgOiBwdWJs
aWMgRHJhd2luZ0FyZWFQcm94eSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGls
ZWREcmF3aW5nQXJlYVByb3h5PiBjcmVhdGUoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQ
YWdlUHJveHkqKTsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFQcm94eShQbGF0Zm9ybVdlYlZpZXcq
LCBXZWJQYWdlUHJveHkqKTsKLSAgICB2aXJ0dWFsIH5UaWxlZERyYXdpbmdBcmVhUHJveHkoKTsK
LQotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVh
bCB2b2lkIGF0dGFjaENvbXBvc2l0aW5nQ29udGV4dCh1aW50MzJfdCAvKiBjb250ZXh0SUQgKi8p
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hDb21wb3NpdGluZ0NvbnRleHQoKSB7IH0KLSNl
bmRpZgotCi1wcml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpOwotICAgIHZvaWQgdXBk
YXRlV2ViVmlldyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsK
LQotICAgIC8vIERyYXdpbmdBcmVhUHJveHkKLSAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5n
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYp
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUlu
Zm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKLQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1dh
aXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbjsKLQotICAgIFBsYXRmb3JtV2ViVmlldyog
bV93ZWJWaWV3OwotI2lmIFBMQVRGT1JNKFFUKQotICAgIC8vIE1hcHMgdGlsZSBJRHMgdG8gbm9k
ZSBJRHMuCi0gICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlTm9kZU1hcDsKLSNlbmRpZgotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKLQotI2VuZGlmIC8vIFRpbGVkRHJhd2luZ0FyZWFQcm94eV9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlR
dC5jcHAJKHJldmlzaW9uIDk5NDIxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Rp
bGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCi0KLSNpbmNsdWRlICJRdFNHVXBkYXRlUXVldWUu
aCIKLSNpbmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXS0FQSUNhc3Qu
aCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLSNkZWZpbmUgVElMRV9ERUJVR19MT0cKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgcGFpbnRlZEFyZWEpCi17Ci0gICAgLy8gU0cgdXBkYXRlcyBhcmUgdHJpZ2dlcmVkIHRocm91
Z2ggUXRTR1VwZGF0ZVF1ZXVlLgotfQotCi1XZWJQYWdlUHJveHkqIFRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6cGFnZSgpCi17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5OwotfQotCi12b2lkIFRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQotewotICAgIGludCBub2RlSUQgPSBtX3dlYlZpZXctPnNjZW5lR3Jh
cGhVcGRhdGVRdWV1ZSgpLT5jcmVhdGVUaWxlTm9kZSh1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFj
dG9yKTsKLSAgICBtX3RpbGVOb2RlTWFwLnNldCh0aWxlSUQsIG5vZGVJRCk7Ci0gICAgdXBkYXRl
VGlsZSh0aWxlSUQsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQot
ewotICAgIGludCBub2RlSUQgPSBtX3RpbGVOb2RlTWFwLmdldCh0aWxlSUQpOwotICAgIEFTU0VS
VChub2RlSUQpOwotCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOwotICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBhdm9pZCB0aGlzIGNvcHkgYnkgY2FyeWluZyB0aGUgU2hhcmVhYmxlQml0bWFw
IGFsbCB0aGUgd2F5IHVwIHRvIHRleHR1cmUgdXBsb2FkaW5nLgotICAgIC8vIEN1cnJlbnRseSB3
b24ndCB3b3JrIHNpbmNlIHRoZSBTaGFyZWRNZW1vcnkgaGFuZGxlIGlzIG93bmVkIGJ5IHVwZGF0
ZUluZm8uCi0gICAgUUltYWdlIGltYWdlKGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpKTsK
LSAgICBRUmVjdCBzb3VyY2VSZWN0KDAsIDAsIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy53
aWR0aCgpLCB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fd2Vi
Vmlldy0+c2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCktPnNldE5vZGVCYWNrQnVmZmVyKG5vZGVJRCwg
aW1hZ2UsIHNvdXJjZVJlY3QsIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcyk7Ci19Ci0KLXZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAgbV93ZWJW
aWV3LT5zY2VuZUdyYXBoVXBkYXRlUXVldWUoKS0+c3dhcFRpbGVCdWZmZXJzKCk7Ci19Ci0KLXZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCi17Ci0gICAg
aW50IG5vZGVJRCA9IG1fdGlsZU5vZGVNYXAudGFrZSh0aWxlSUQpOwotICAgIG1fd2ViVmlldy0+
c2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCktPnJlbW92ZVRpbGVOb2RlKG5vZGVJRCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCShyZXZpc2lvbiA5OTQyMSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDExICsyOCw2IEBACiAKIC8vIFN1YmNsYXNzZXMKICNpbmNsdWRlICJEcmF3aW5nQXJl
YUltcGwuaCIKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIlRpbGVk
RHJhd2luZ0FyZWEuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQyLDEwICszNyw2IEBAIFBhc3NPd25Q
dHI8RHJhd2luZ0FyZWE+IERyYXdpbmdBcmVhOjpjcmUKICAgICBzd2l0Y2ggKHBhcmFtZXRlcnMu
ZHJhd2luZ0FyZWFUeXBlKSB7CiAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVJbXBsOgogICAgICAg
ICByZXR1cm4gRHJhd2luZ0FyZWFJbXBsOjpjcmVhdGUod2ViUGFnZSwgcGFyYW1ldGVycyk7Ci0j
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVUaWxl
ZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhKHdlYlBhZ2Up
KTsKLSNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNw
cAkocmV2aXNpb24gOTk0MjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VGlsZWREcmF3aW5nQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUaWxlZERyYXdpbmdBcmVhLmgiCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
LQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1lc3Nh
Z2VJRC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVRp
bGVkRHJhd2luZ0FyZWE6OlRpbGVkRHJhd2luZ0FyZWEoV2ViUGFnZSogd2ViUGFnZSkKLSAgICA6
IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3ZWJQYWdlKQotICAgICwgbV9zdXNw
ZW5kZWQoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKLSAgICAs
IG1fZGlkU2VuZFRpbGVVcGRhdGUoZmFsc2UpCi0gICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRv
cHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpKQotewotfQotCi1UaWxlZERyYXdpbmdBcmVhOjp+
VGlsZWREcmF3aW5nQXJlYSgpCi17Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2Nyb2xs
KGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQot
ewotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgbXVjaCBzbWFydGVyLgotICAgIHNldE5lZWRz
RGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX21haW5CYWNraW5nU3RvcmUt
PmludmFsaWRhdGUocmVjdCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0U2l6ZShj
b25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKLXsKLSAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKLSAg
ICBBU1NFUlRfQVJHKHZpZXdTaXplLCAhdmlld1NpemUuaXNFbXB0eSgpKTsKLQotICAgIG1fd2Vi
UGFnZS0+c2V0U2l6ZSh2aWV3U2l6ZSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJs
ZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgbV92aXNpYmxlQ29udGVudFJlY3Qg
PSB2aXNpYmxlQ29udGVudHNSZWN0OwotCi0gICAgaWYgKHNjYWxlICE9IG1fbWFpbkJhY2tpbmdT
dG9yZS0+Y29udGVudHNTY2FsZSgpKSB7Ci0gICAgICAgIC8vIEtlZXAgdGhlIHRpbGVzIGZvciB0
aGUgcHJldmlvdXMgc2NhbGUgdW50aWwgZW5vdWdoIGNvbnRlbnQgaXMgYXZhaWxhYmxlIHRvIGJl
IHNob3duIG9uIHRoZSBzY3JlZW4gZm9yIHRoZSBuZXcgc2NhbGUuCi0gICAgICAgIC8vIElmIHdl
IGFscmVhZHkgaGF2ZSBhIHByZXZpb3VzIHNldCBvZiB0aWxlcyBpdCBtZWFucyB0aGF0IHR3byBz
Y2FsZSBjaGFuZ2VkIGhhcHBlbmVkIHN1Y2Nlc3NpdmVseS4KLSAgICAgICAgLy8gSW4gdGhhdCBj
YXNlLCBtYWtlIHN1cmUgdGhhdCBvdXIgY3VycmVudCBtYWluIHRpbGVzIGhhdmUgbW9yZSBjb250
ZW50IHRvIHNob3cgdGhhbiB0aGUgInByZXZpb3VzIHByZXZpb3VzIgotICAgICAgICAvLyB3aXRo
aW4gdGhlIHZpc2libGUgcmVjdCBiZWZvcmUgcmVwbGFjaW5nIGl0LgotICAgICAgICBpZiAoIW1f
cHJldmlvdXNCYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcmFnZVJhdGlv
KG1fdmlzaWJsZUNvbnRlbnRSZWN0KSA+IG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPmNvdmVyYWdl
UmF0aW8obV92aXNpYmxlQ29udGVudFJlY3QpKQotICAgICAgICAgICAgbV9wcmV2aW91c0JhY2tp
bmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0KLSAgICAgICAgbV9tYWlu
QmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOwotICAgICAgICBt
X21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwotICAgIH0gZWxzZQot
ICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmFkanVzdFZpc2libGVSZWN0KCk7Ci19Ci0KLXZv
aWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIG1f
bWFpbkJhY2tpbmdTdG9yZS0+c2V0VmlzaWJsZVJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3Rv
cnlWZWN0b3IpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnJlbmRlck5leHRGcmFtZSgp
Ci17Ci0gICAgbV9pc1dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBtX21haW5CYWNr
aW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJl
YTo6c3VzcGVuZFBhaW50aW5nKCkKLXsKLSAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKLQotICAg
IG1fc3VzcGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpyZXN1bWVQ
YWludGluZygpCi17Ci0gICAgQVNTRVJUKG1fc3VzcGVuZGVkKTsKLQotICAgIG1fc3VzcGVuZGVk
ID0gZmFsc2U7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwot
fQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigp
Ci17Ci0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotfQotCi12b2lkIFRpbGVkRHJh
d2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIG1fd2ViUGFnZS0+
ZHJhd1JlY3QoKmdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QpOwotfQotCi12b2lkIFRpbGVk
RHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJl
Y3Q+JiBwYWludGVkQXJlYSkKLXsKLSAgICBpZiAobV9kaWRTZW5kVGlsZVVwZGF0ZSkgewotICAg
ICAgICAvLyBTaW5jZSB3ZSBrbm93IHRoYXQgYWxsIHRpbGUgdXBkYXRlcyBmb2xsb3dpbmcgYSBw
YWdlIGludmFsaWRhdGUgd2lsbCBhbGwgYmUgcmVuZGVyZWQKLSAgICAgICAgLy8gaW4gb25lIHBh
aW50IHBhc3MgZm9yIGFsbCB0aGUgdGlsZXMsIHdlIGNhbiBzZW5kIHRoZSBzd2FwIHRpbGUgbWVz
c2FnZSBoZXJlLgotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVh
UHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOwotICAgICAgICBtX2lzV2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IHRydWU7Ci0gICAgICAgIG1fZGlkU2VuZFRpbGVVcGRhdGUgPSBmYWxzZTsKLQotICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkZXN0cm95IHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3Jl
IGFuZCByZW1vdmUgaXRzIHRpbGVzIG9ubHkgYWZ0ZXIgRGlkUmVuZGVyRnJhbWUKLSAgICAgICAg
Ly8gd2FzIHNlbnQgdG8gc3dhcCByZWNlbnRseSBjcmVhdGVkIHRpbGVzJyBidWZmZXIuIEVsc2Ug
YSBmcmFtZSBjb3VsZCBiZSByZW5kZXJlZCBhZnRlciB0aGUgcHJldmlvdXMKLSAgICAgICAgLy8g
dGlsZXMgd2VyZSByZW1vdmVkIGFuZCBiZWZvcmUgdGhlIG5ldyB0aWxlIGhhdmUgdGhlaXIgZmly
c3QgYmFjayBidWZmZXIgc3dhcHBlZC4KLSAgICAgICAgaWYgKG1fcHJldmlvdXNCYWNraW5nU3Rv
cmUgJiYgbV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcmFnZVJhdGlvKG1fdmlzaWJsZUNvbnRlbnRS
ZWN0KSA+PSAxLjBmKQotICAgICAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigp
OwotICAgIH0KLX0KLQotYm9vbCBUaWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZVVw
ZGF0ZXNBbGxvd2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fc3VzcGVuZGVkICYmICFtX2lz
V2FpdGluZ0ZvclVJUHJvY2VzczsKLX0KLQotSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhOjp0aWxl
ZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgbV93ZWJQYWdlLT5zaXplKCkpOwotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2lu
Z0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQotewotICAgIHJldHVybiBtX3Zp
c2libGVDb250ZW50UmVjdDsKLX0KLQotQ29sb3IgVGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNr
aW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6dHJh
bnNwYXJlbnQ7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6Y3JlYXRlVGlsZShpbnQgdGls
ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6Q3JlYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZUlu
Zm8pKTsKLSAgICBtX2RpZFNlbmRUaWxlVXBkYXRlID0gdHJ1ZTsKLX0KLXZvaWQgVGlsZWREcmF3
aW5nQXJlYTo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6
VXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZUluZm8pKTsKLSAgICBtX2RpZFNlbmRUaWxlVXBkYXRl
ID0gdHJ1ZTsKLX0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cmVtb3ZlVGlsZShpbnQgdGlsZUlE
KQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6UmVt
b3ZlVGlsZSh0aWxlSUQpKTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZl
TGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKLXsK
LX0KLSNlbmRpZgotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZERyYXdpbmdBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAkocmV2aXNpb24gOTk0MjEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
VGlsZWREcmF3aW5nQXJlYV9oCi0jZGVmaW5lIFRpbGVkRHJhd2luZ0FyZWFfaAotCi0jaWYgVVNF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1
ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVh
LCBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVDbGllbnQsIHB1YmxpYyBUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQgewotcHVibGljOgotICAgIGV4cGxpY2l0IFRpbGVk
RHJhd2luZ0FyZWEoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgflRpbGVkRHJhd2luZ0FyZWEoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Ny
b2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hDb21wb3Np
dGluZ0NvbnRleHQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250
ZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyU3luYygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXll
cnMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgLy8gQ29yZUlQQyBtZXNzYWdl
IGhhbmRsZXJzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHZpZXdTaXplKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5k
U2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGFpbnRp
bmcoKTsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lk
IHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOwotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJh
Y2tpbmdTdG9yZVBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNvbnRlbnRSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3Rv
cmVQYWludEVuZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsK
LSAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRz
UmVjdCgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZp
c2libGVSZWN0KCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpDb2xvciB0aWxlZEJhY2tpbmdTdG9y
ZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFVwZGF0ZUluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGls
ZUlEKTsKLQotICAgIGJvb2wgbV9zdXNwZW5kZWQ7Ci0gICAgYm9vbCBtX2lzV2FpdGluZ0ZvclVJ
UHJvY2VzczsKLSAgICBib29sIG1fZGlkU2VuZFRpbGVVcGRhdGU7Ci0gICAgV2ViQ29yZTo6SW50
UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKLQotICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJh
Y2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOwotICAgIE93blB0cjxXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0KLSNlbmRp
ZiAvLyBUaWxlZERyYXdpbmdBcmVhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125352</attachid>
            <date>2012-02-03 09:34:00 -0800</date>
            <delta_ts>2012-02-06 04:01:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71681-20120203182939.patch</filename>
            <type>text/plain</type>
            <size>49750</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWE0OWE2YmE5ODBlNTFl
ZGE2ZDcyY2ZhY2M5ZTFlZjZhOGNhMDllZC4uNzA3ZDlhNTdkYzA1YTk1N2EwYmI5ODdlMjI5YThi
N2ZjOTEzNmY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAyLTAzICBaYWxh
biBCdWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4gIGFuZCAgSm9jZWx5biBUdXJjb3R0ZSAgPGpv
Y2VseW4udHVyY290dGVAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBSZW1vdmUgVGls
ZWREcmF3aW5nQXJlYSBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaWxlZCBkcmF3aW5nIHN1cmZhY2UgZnVuY3Rpb25hbGl0
eSBnb3QgY29udmVydGVkIHRvIExheWVyVHJlZS4KKyAgICAgICAgVGlsZWREcmF3aW5nQXJlYSBh
bmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgbm90IHVzZWQgYnkgYW55IHBvcnQgYW55bW9yZS4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFNoYXJlZC9EcmF3aW5nQXJlYUluZm8uaDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChR
UXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFNHVGlsZU5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFNH
VGlsZU5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRTR1VwZGF0ZVF1
ZXVlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRTR1VwZGF0ZVF1ZXVl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94
eVF0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6Y3JlYXRlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYlBhZ2UpOgorCiAyMDEyLTAyLTAz
ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBEb24ndCB2ZXJzaW9uIFF0V2ViS2l0LmV4cGVyaW1lbnRhbC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKaW5kZXggM2M0YThkMGNhNTY2YjgxNGY5ZWJlOTE2MGE3YzljN2M5Y2I4NTFiNS4uMTE5
ZTUwZDY0Nzc4OTBmYzE3ZDM1MjM3YTU4MjIzMWFjYTAyNGNmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQKQEAgLTIxOSw3ICsyMTksNiBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiAgICAgVUlQcm9j
ZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAKICAgICBVSVByb2Nlc3Mv
UmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAKLSAgICBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVBy
b3h5LmNwcAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNwcAogICAgIFVJUHJv
Y2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0zNzMsNyArMzcyLDYgQEAgU0VUKFdlYktpdDJfU09V
UkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
UGFnZU92ZXJsYXkuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDFjZjFhMmQ5
MGU5YjY1ZGRlNDc0YTRmMzZmZWNkZTcxZmZhNjE5ZmYuLjFmNDYxMjc5OGIzMzJkNWRlNTY1MjIy
YmQ3NzhjM2E0NmUwODdhYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC02MzUsOCArNjM1LDYg
QEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUmVz
cG9uc2l2ZW5lc3NUaW1lci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9SZXNwb25z
aXZlbmVzc1RpbWVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5o
IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBc
Ci0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlzaXRlZExpbmtQcm92aWRlci5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmggXApAQCAtOTIx
LDggKzkxOSw2IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAotCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcCBcCi0JU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmggXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCmluZGV4IGIzOGI3MTRlYTYwYzRjMjI4ZjlhZDdhYzFj
Y2FiNzE3ZTY0MDY1YjUuLjMzYzQ5OTNlNjUwOTBlZjUyMDc2YzBhMjBkY2ViMDBjYzBlM2E1ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9EcmF3aW5nQXJlYUluZm8uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKQEAgLTMwLDkgKzMwLDYg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGVudW0gRHJhd2luZ0FyZWFUeXBlIHsKICAgICBEcmF3
aW5nQXJlYVR5cGVJbXBsLAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIERyYXdp
bmdBcmVhVHlwZVRpbGVkLAotI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIERyYXdpbmdB
cmVhVHlwZVRpbGVkQ29yZUFuaW1hdGlvbiwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggN2JkNGE3
MmEwNjA2YWFlMjUwYzgxMmY4NWEzNDAyZmI3NmJkNTI3Yi4uNDMyNmE0YTk5NzRiY2ViOWFiNGQ0
MjBmZTkzNWE5YjRhYmE3ODBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yMTEsNyArMjExLDYgQEAgSEVB
REVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1Byb2Nlc3NNb2RlbC5oIFwKICAgICBVSVByb2Nlc3Mv
UmVzcG9uc2l2ZW5lc3NUaW1lci5oIFwKICAgICBVSVByb2Nlc3MvVGV4dENoZWNrZXIuaCBcCi0g
ICAgVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvVmlz
aXRlZExpbmtQcm92aWRlci5oIFwKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmggXApAQCAt
MjY3LDggKzI2Niw2IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VM
b2FkQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQb2xpY3lDbGllbnQuaCBc
CiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50LmggXAotICAgIFVJUHJvY2Vzcy9x
dC9RdFNHVXBkYXRlUXVldWUuaCBcCi0gICAgVUlQcm9jZXNzL3F0L1F0U0dUaWxlTm9kZS5oIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggXAogICAgIFVJ
UHJvY2Vzcy9xdC9RdFdlYlVuZG9Db250cm9sbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdl
Ykljb25EYXRhYmFzZUNsaWVudC5oIFwKQEAgLTU0MSw3ICs1MzgsNiBAQCBTT1VSQ0VTICs9IFwK
ICAgICBVSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9jZXNzUHJveHlRdC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBcCi0gICAgVUlQcm9jZXNzL1RpbGVkRHJh
d2luZ0FyZWFQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNw
cCBcCiAgICAgVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwIFwK
ICAgICBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBcCkBAIC01OTcsOSArNTkzLDYg
QEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUxvYWRDbGllbnQuY3Bw
IFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUG9saWN5Q2xpZW50LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50LmNwcCBcCi0gICAgVUlQcm9jZXNzL3F0L1F0U0dV
cGRhdGVRdWV1ZS5jcHAgXAotICAgIFVJUHJvY2Vzcy9xdC9RdFNHVGlsZU5vZGUuY3BwIFwKLSAg
ICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nl
c3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94
eVF0LmNwcCBcCkBAIC03MDQsNyArNjk3LDYgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFn
ZU92ZXJsYXkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlLmNwcCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IGNkMmExYjYwYTc2MmYzZDVlZmE0
NzEyY2NmY2RhNTg3NmI2ZWQyMTMuLjIyYzY3MDNjNGFiMDczN2JhNGRiNjQyNWY2ZmMyZWM3NjNl
OTg1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcApAQCAtNDYsMTYgKzQ2LDEwIEBAIFFRdWlja1dlYlBhZ2U6On5RUXVpY2tXZWJQ
YWdlKCkKICAgICBkZWxldGUgZDsKIH0KIAotUXRTR1VwZGF0ZVF1ZXVlICpRUXVpY2tXZWJQYWdl
OjpzY2VuZUdyYXBoVXBkYXRlUXVldWUoKSBjb25zdAotewotICAgIHJldHVybiAmZC0+c2dVcGRh
dGVRdWV1ZTsKLX0KLQogUVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlja1dlYlBhZ2VQcml2YXRl
KFFRdWlja1dlYlBhZ2UqIHEsIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSkKICAgICA6IHEo
cSkKICAgICAsIHZpZXdwb3J0SXRlbSh2aWV3cG9ydEl0ZW0pCiAgICAgLCB3ZWJQYWdlUHJveHko
MCkKLSAgICAsIHNnVXBkYXRlUXVldWUocSkKICAgICAsIHBhaW50aW5nSXNJbml0aWFsaXplZChm
YWxzZSkKICAgICAsIG1fcGFpbnROb2RlKDApCiAgICAgLCBjb250ZW50c1NjYWxlKDEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3AuaAppbmRl
eCA4YzcxMGMzYmM2OGZkYmE3N2QzZjcxNjJiYWM3Y2JmNzhlMDZlNWU1Li45ZDc5MWFjMjUzYTc5
YjFhOWJkYTZmYjVkNTM5OTcxYzZiNjFjZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wLmgKQEAgLTMxLDEwICszMSw2IEBAIGNsYXNz
IFFRdWlja1dlYlZpZXc7CiBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiBjbGFzcyBRV2Vi
UHJlZmVyZW5jZXM7CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXRTR1VwZGF0ZVF1ZXVl
OwotfQotCiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJQYWdlIDogcHVibGljIFFRdWlj
a0l0ZW0gewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CkBAIC01MSw5ICs0Nyw2IEBAIHB1YmxpYzoK
IAogICAgIFF0V2ViUGFnZUV2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCkgY29uc3Q7CiAKLSAg
ICAvLyBJbnRlcm5hbC4gVG8gYmUgcmVtb3ZlZCBzb29uLgotICAgIFdlYktpdDo6UXRTR1VwZGF0
ZVF1ZXVlKiBzY2VuZUdyYXBoVXBkYXRlUXVldWUoKSBjb25zdDsKLQogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgUVNHTm9kZSogdXBkYXRlUGFpbnROb2RlKFFTR05vZGUqLCBVcGRhdGVQYWludE5v
ZGVEYXRhKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZV9wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZV9wX3AuaAppbmRleCA4OGM3MWVlOGQ2MTNhNzBkZWQ5MzIxM2ZlYjQ1ZjhkMjUz
YjM4MTc5Li5kZmQyMjNkYmUzZWI4YzIyMTJkZmE3Njc3N2JhOTA1MTc5MzliMzkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5o
CkBAIC0yMSw3ICsyMSw2IEBACiAjaWZuZGVmIHFxdWlja3dlYnBhZ2VfcF9wX2gKICNkZWZpbmUg
cXF1aWNrd2VicGFnZV9wX3BfaAogCi0jaW5jbHVkZSAiUXRTR1VwZGF0ZVF1ZXVlLmgiCiAjaW5j
bHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4KIApAQCAtNTAs
NyArNDksNiBAQCBwdWJsaWM6CiAgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgcTsKICAgICBRUXVp
Y2tXZWJWaWV3KiBjb25zdCB2aWV3cG9ydEl0ZW07CiAgICAgV2ViS2l0OjpXZWJQYWdlUHJveHkq
IHdlYlBhZ2VQcm94eTsKLSAgICBXZWJLaXQ6OlF0U0dVcGRhdGVRdWV1ZSBzZ1VwZGF0ZVF1ZXVl
OwogICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOwogICAgIFFTR05vZGUqIG1fcGFpbnRO
b2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRl
eCA2MTdjMTc1MDY1NTk0NTdjYmM5YmI3MDkwNDk4ZGE2ZjUyOGUyZWNlLi5jNWI3MTNjMzliMTE0
NWIwMzUyYWRjYTczZjc4MTEyYmY5OTM5YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTEzMCwxNCArMTMwLDYgQEAgcHJpdmF0ZToKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUdlb21ldHJ5KCkgeyB9CiAj
ZW5kaWYKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2aXJ0dWFsIHZvaWQgc25h
cHNob3RUYWtlbihjb25zdCBVcGRhdGVJbmZvJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGFsbFRpbGVVcGRhdGVzUHJvY2Vzc2VkKCkgeyB9Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4OWY3MzI4YTM3Y2RmZWYyYzYwNDJiMGY2NGJjNjRm
NDJjNzMyOGJiLi5lMjdiNWJmMjY5NDE3MjVkOTBiMDRiYjE5MTJiMTc1MTM4NDk3ZGI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNz
YWdlcy5pbgpAQCAtMzIsMTIgKzMyLDQgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWFQcm94eSB7
CiAgICAgLy8gVXNlZCBieSBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LgogICAg
IERpZFVwZGF0ZUdlb21ldHJ5KCkKICNlbmRpZgotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCi0gICAgQ3JlYXRlVGlsZShpbnQgdGlsZUlELCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRl
SW5mbykKLSAgICBVcGRhdGVUaWxlKGludCB0aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQotICAgIERpZFJlbmRlckZyYW1lKCkKLSAgICBSZW1vdmVUaWxlKGludCB0aWxlSUQp
Ci0gICAgU25hcHNob3RUYWtlbihXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSNlbmRp
ZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0Fy
ZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVBy
b3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1NDQ0MDdlMWFiMTljODc0
MjNlOTBhM2NlMTRkMmNkZjM2YTQ0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVBy
b3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUaWxlZERyYXdpbmdBcmVh
UHJveHkuaCIKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIkRyYXdp
bmdBcmVhTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NPd25QdHI8VGlsZWREcmF3aW5nQXJlYVBy
b3h5PiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZp
ZXcsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQotewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgVGlsZWREcmF3aW5nQXJlYVByb3h5KHdlYlZpZXcsIHdlYlBhZ2VQcm94eSkpOwotfQotCi1U
aWxlZERyYXdpbmdBcmVhUHJveHk6OlRpbGVkRHJhd2luZ0FyZWFQcm94eShQbGF0Zm9ybVdlYlZp
ZXcqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQotICAgIDogRHJhd2luZ0Fy
ZWFQcm94eShEcmF3aW5nQXJlYVR5cGVUaWxlZCwgd2ViUGFnZVByb3h5KQotICAgICwgbV9pc1dh
aXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKLSAgICAsIG1fd2ViVmlldyh3
ZWJWaWV3KQotewotfQotCi1UaWxlZERyYXdpbmdBcmVhUHJveHk6On5UaWxlZERyYXdpbmdBcmVh
UHJveHkoKQotewotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRS
ZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBwYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWE6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHZpc2libGVDb250
ZW50UmVjdCwgc2NhbGUpLCBwYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBwYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlNldFZpc2libGVDb250ZW50UmVj
dFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3RvciksIHBhZ2UoKS0+cGFnZUlEKCkpOwot
fQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLX0K
LQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRDaGFuZ2UoKQotewotICAgIFdl
YlBhZ2VQcm94eSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UgfHwgIXBhZ2Ut
PmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90
aWZpY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFt
ZU5vdGlmaWNhdGlvbiA9IHRydWU7Ci0KLSAgICBwYWdlLT5wcm9jZXNzKCktPnJlc3BvbnNpdmVu
ZXNzVGltZXIoKS0+c3RhcnQoKTsKLSAgICBwYWdlLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhOjpTZXRTaXplKG1fc2l6ZSksIHBhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmY2NjZjRlMTg1NmZkZTU3M2MyZDY4
MjNiZDZiOTczMGRiNmQ0MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgVGlsZWREcmF3aW5nQXJlYVByb3h5X2gKLSNkZWZpbmUgVGlsZWREcmF3aW5n
QXJlYVByb3h5X2gKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAi
RHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBXS1ZpZXc7Ci0j
ZWxzZQotY2xhc3MgV0tWaWV3OwotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotfQotCi0jaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBR
UXVpY2tXZWJQYWdlOwotdHlwZWRlZiBRUXVpY2tXZWJQYWdlIFBsYXRmb3JtV2ViVmlldzsKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU2hhcmVhYmxlQml0bWFwOwotY2xh
c3MgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi10eXBlZGVmIFdLVmlldyBQbGF0Zm9ybVdlYlZpZXc7Ci0jZWxpZiBQTEFU
Rk9STShXSU4pCi1jbGFzcyBXZWJWaWV3OwotdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmll
dzsKLSNlbmRpZgotCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVhUHJveHkgOiBwdWJsaWMgRHJhd2lu
Z0FyZWFQcm94eSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGlsZWREcmF3aW5n
QXJlYVByb3h5PiBjcmVhdGUoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkq
KTsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFQcm94eShQbGF0Zm9ybVdlYlZpZXcqLCBXZWJQYWdl
UHJveHkqKTsKLSAgICB2aXJ0dWFsIH5UaWxlZERyYXdpbmdBcmVhUHJveHkoKTsKLQotICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Io
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGF0
dGFjaENvbXBvc2l0aW5nQ29udGV4dCh1aW50MzJfdCAvKiBjb250ZXh0SUQgKi8pIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hDb21wb3NpdGluZ0NvbnRleHQoKSB7IH0KLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpOwotICAgIHZvaWQgdXBkYXRlV2ViVmll
dyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsKLQotICAgIC8v
IERyYXdpbmdBcmVhUHJveHkKLSAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZSgpOwotICAg
IHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwotCi0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZShpbnQgdGlsZUlEKTsKLQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JE
aWRTZXRGcmFtZU5vdGlmaWNhdGlvbjsKLQotICAgIFBsYXRmb3JtV2ViVmlldyogbV93ZWJWaWV3
OwotI2lmIFBMQVRGT1JNKFFUKQotICAgIC8vIE1hcHMgdGlsZSBJRHMgdG8gbm9kZSBJRHMuCi0g
ICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlTm9kZU1hcDsKLSNlbmRpZgotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQot
I2VuZGlmIC8vIFRpbGVkRHJhd2luZ0FyZWFQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFNHVGlsZU5vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
MjliYWZjN2NjODIzMDUxZTYzMjlhMzc0ZDlhZDA3OWE0ZWUzZDMwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFNHVGlsZU5vZGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdFNHVGls
ZU5vZGUuaCIKLQotI2luY2x1ZGUgPFF0UXVpY2svUVNHRW5naW5lPgotI2luY2x1ZGUgPFF0UXVp
Y2svUVNHRmxhdENvbG9yTWF0ZXJpYWw+Ci0jaW5jbHVkZSA8UXRRdWljay9RU0dUZXh0dXJlPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUXRTR1RpbGVOb2RlOjpRdFNHVGlsZU5vZGUoUVNHRW5n
aW5lKiBlbmdpbmUpCi0gICAgOiBtX2VuZ2luZShlbmdpbmUpCi0gICAgLCBtX2dlb21ldHJ5KFFT
R0dlb21ldHJ5OjpkZWZhdWx0QXR0cmlidXRlc19UZXh0dXJlZFBvaW50MkQoKSwgNCkKLSAgICAs
IG1fdGV4dHVyZU1hdGVyaWFsc0NyZWF0ZWQoZmFsc2UpCi17Ci0gICAgc2V0RmxhZ3MoT3duc01h
dGVyaWFsIHwgT3duc09wYXF1ZU1hdGVyaWFsKTsKLSAgICBzZXRHZW9tZXRyeSgmbV9nZW9tZXRy
eSk7Ci0gICAgc2V0TWF0ZXJpYWwobmV3IFFTR0ZsYXRDb2xvck1hdGVyaWFsKTsKLSAgICBzZXRP
cGFxdWVNYXRlcmlhbChuZXcgUVNHRmxhdENvbG9yTWF0ZXJpYWwpOwotfQotCi12b2lkIFF0U0dU
aWxlTm9kZTo6c2V0QmFja0J1ZmZlcihjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0IFFS
ZWN0RiYgc291cmNlUmVjdCwgY29uc3QgUVJlY3RGJiB0YXJnZXRSZWN0KQotewotICAgIG1fYmFj
a0J1ZmZlclRleHR1cmUucmVzZXQobV9lbmdpbmUtPmNyZWF0ZVRleHR1cmVGcm9tSW1hZ2UoYmFj
a0J1ZmZlcikpOwotICAgIG1fYmFja0J1ZmZlclRhcmdldFJlY3QgPSB0YXJnZXRSZWN0OwotICAg
IG1fYmFja0J1ZmZlclNvdXJjZVJlY3QgPSBtX2JhY2tCdWZmZXJUZXh0dXJlLT5jb252ZXJ0VG9O
b3JtYWxpemVkU291cmNlUmVjdChzb3VyY2VSZWN0KTsKLQotICAgIC8vIEZvcmNlIHRoZSB0ZXh0
dXJlIHVwbG9hZC4KLSAgICBtX2JhY2tCdWZmZXJUZXh0dXJlLT5iaW5kKCk7Ci19Ci0KLXZvaWQg
UXRTR1RpbGVOb2RlOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYmFja0J1
ZmZlclRleHR1cmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV90ZXh0dXJlTWF0ZXJp
YWxzQ3JlYXRlZCkgewotICAgICAgICBzZXRNYXRlcmlhbChuZXcgUVNHVGV4dHVyZU1hdGVyaWFs
KTsKLSAgICAgICAgc2V0T3BhcXVlTWF0ZXJpYWwobmV3IFFTR09wYXF1ZVRleHR1cmVNYXRlcmlh
bCk7Ci0gICAgICAgIG1fdGV4dHVyZU1hdGVyaWFsc0NyZWF0ZWQgPSB0cnVlOwotICAgIH0KLQot
ICAgIHN0YXRpY19jYXN0PFFTR1RleHR1cmVNYXRlcmlhbCo+KG1hdGVyaWFsKCkpLT5zZXRUZXh0
dXJlKG1fYmFja0J1ZmZlclRleHR1cmUuZGF0YSgpKTsKLSAgICBzdGF0aWNfY2FzdDxRU0dPcGFx
dWVUZXh0dXJlTWF0ZXJpYWwqPihvcGFxdWVNYXRlcmlhbCgpKS0+c2V0VGV4dHVyZShtX2JhY2tC
dWZmZXJUZXh0dXJlLmRhdGEoKSk7Ci0gICAgbWFya0RpcnR5KERpcnR5TWF0ZXJpYWwpOwotCi0g
ICAgUVNHR2VvbWV0cnk6OnVwZGF0ZVRleHR1cmVkUmVjdEdlb21ldHJ5KCZtX2dlb21ldHJ5LCBt
X2JhY2tCdWZmZXJUYXJnZXRSZWN0LCBtX2JhY2tCdWZmZXJTb3VyY2VSZWN0KTsKLSAgICBtYXJr
RGlydHkoRGlydHlHZW9tZXRyeSk7Ci0KLSAgICBtX2Zyb250QnVmZmVyVGV4dHVyZS5zd2FwKG1f
YmFja0J1ZmZlclRleHR1cmUpOwotICAgIG1fYmFja0J1ZmZlclRleHR1cmUucmVzZXQoKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0U0dUaWxlTm9k
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0U0dUaWxlTm9kZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWFhZWNhZDhmMmU1M2QwZWQ3ZWJhOThmNTBmYTY2Mzcz
ODc1MWEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFNHVGlsZU5vZGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFF0U0dUaWxlTm9kZV9o
Ci0jZGVmaW5lIFF0U0dUaWxlTm9kZV9oCi0KLSNpbmNsdWRlIDxRdFF1aWNrL1FTR0dlb21ldHJ5
Tm9kZT4KLSNpbmNsdWRlIDxRdFF1aWNrL1FTR09wYXF1ZVRleHR1cmVNYXRlcmlhbD4KLSNpbmNs
dWRlIDxRdFF1aWNrL1FTR1RleHR1cmVNYXRlcmlhbD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1j
bGFzcyBRU0dFbmdpbmU7Ci1jbGFzcyBRU0dUZXh0dXJlOwotUVRfRU5EX05BTUVTUEFDRQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUXRTR1RpbGVOb2RlIDogcHVibGljIFFTR0dlb21l
dHJ5Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgUXRTR1RpbGVOb2RlKFFTR0VuZ2luZSopOwotICAgIHZv
aWQgc2V0QmFja0J1ZmZlcihjb25zdCBRSW1hZ2UmLCBjb25zdCBRUmVjdEYmIHNvdXJjZVJlY3Qs
IGNvbnN0IFFSZWN0RiYgdGFyZ2V0UmVjdCk7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVk
KCk7Ci0KLXByaXZhdGU6Ci0gICAgUVNHRW5naW5lKiBtX2VuZ2luZTsKLSAgICBRU0dHZW9tZXRy
eSBtX2dlb21ldHJ5OwotICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fZnJvbnRCdWZm
ZXJUZXh0dXJlOwotICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fYmFja0J1ZmZlclRl
eHR1cmU7Ci0gICAgYm9vbCBtX3RleHR1cmVNYXRlcmlhbHNDcmVhdGVkOwotCi0gICAgUVJlY3RG
IG1fYmFja0J1ZmZlclRhcmdldFJlY3Q7Ci0gICAgUVJlY3RGIG1fYmFja0J1ZmZlclNvdXJjZVJl
Y3Q7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBRdFNHVGlsZU5vZGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0U0dVcGRhdGVRdWV1ZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRTR1VwZGF0ZVF1ZXVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2IxNjc1ZGZlOWY3NDZjYWNiZjFmM2YyNjkzNWQyNjcyZGJjOTYwOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRTR1VwZGF0ZVF1ZXVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlF0U0dVcGRhdGVRdWV1ZS5oIgotCi0jaW5jbHVkZSAiUGFzc093blB0ci5oIgot
I2luY2x1ZGUgIlF0U0dUaWxlTm9kZS5oIgotI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrSXRlbT4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBOb2RlVXBkYXRlQ3JlYXRlVGlsZSA6IHB1
YmxpYyBOb2RlVXBkYXRlIHsKLSAgICBOb2RlVXBkYXRlQ3JlYXRlVGlsZShpbnQgbm9kZUlELCBm
bG9hdCBzY2FsZSkKLSAgICAgICAgOiBOb2RlVXBkYXRlKENyZWF0ZVRpbGUpCi0gICAgICAgICwg
bm9kZUlEKG5vZGVJRCkKLSAgICAgICAgLCBzY2FsZShzY2FsZSkKLSAgICB7IH0KLSAgICBpbnQg
bm9kZUlEOwotICAgIGZsb2F0IHNjYWxlOwotfTsKLQotc3RydWN0IE5vZGVVcGRhdGVSZW1vdmVU
aWxlIDogcHVibGljIE5vZGVVcGRhdGUgewotICAgIE5vZGVVcGRhdGVSZW1vdmVUaWxlKGludCBu
b2RlSUQpCi0gICAgICAgIDogTm9kZVVwZGF0ZShSZW1vdmVUaWxlKQotICAgICAgICAsIG5vZGVJ
RChub2RlSUQpCi0gICAgeyB9Ci0gICAgaW50IG5vZGVJRDsKLX07Ci0KLXN0cnVjdCBOb2RlVXBk
YXRlU2V0QmFja0J1ZmZlciA6IHB1YmxpYyBOb2RlVXBkYXRlIHsKLSAgICBOb2RlVXBkYXRlU2V0
QmFja0J1ZmZlcihpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0IFFS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKLSAgICAgICAgOiBOb2Rl
VXBkYXRlKFNldEJhY2tCdWZmZXIpCi0gICAgICAgICwgbm9kZUlEKG5vZGVJRCkKLSAgICAgICAg
LCBiYWNrQnVmZmVyKGJhY2tCdWZmZXIpCi0gICAgICAgICwgc291cmNlUmVjdChzb3VyY2VSZWN0
KQotICAgICAgICAsIHRhcmdldFJlY3QodGFyZ2V0UmVjdCkKLSAgICB7IH0KLSAgICBpbnQgbm9k
ZUlEOwotICAgIFFJbWFnZSBiYWNrQnVmZmVyOwotICAgIFFSZWN0IHNvdXJjZVJlY3Q7Ci0gICAg
UVJlY3QgdGFyZ2V0UmVjdDsKLX07Ci0KLXN0cnVjdCBOb2RlVXBkYXRlU3dhcFRpbGVCdWZmZXJz
IDogcHVibGljIE5vZGVVcGRhdGUgewotICAgIE5vZGVVcGRhdGVTd2FwVGlsZUJ1ZmZlcnMoKQot
ICAgICAgICA6IE5vZGVVcGRhdGUoU3dhcFRpbGVCdWZmZXJzKQotICAgIHsgfQotfTsKLQotUXRT
R1VwZGF0ZVF1ZXVlOjpRdFNHVXBkYXRlUXVldWUoUVF1aWNrSXRlbSAqaXRlbSkKLSAgICA6IGl0
ZW0oaXRlbSkKLSAgICAsIGxhc3RTY2FsZSgwKQotICAgICwgbGFzdFNjYWxlTm9kZSgwKQotICAg
ICwgbmV4dE5vZGVJRCgxKQotICAgICwgbV9pc1N3YXBQZW5kaW5nKGZhbHNlKQotewotfQotCi1p
bnQgUXRTR1VwZGF0ZVF1ZXVlOjpjcmVhdGVUaWxlTm9kZShmbG9hdCBzY2FsZSkKLXsKLSAgICBp
bnQgbm9kZUlEID0gbmV4dE5vZGVJRCsrOwotICAgIG5vZGVVcGRhdGVRdWV1ZS5hcHBlbmQoYWRv
cHRQdHIobmV3IE5vZGVVcGRhdGVDcmVhdGVUaWxlKG5vZGVJRCwgc2NhbGUpKSk7Ci0gICAgaXRl
bS0+dXBkYXRlKCk7Ci0gICAgcmV0dXJuIG5vZGVJRDsKLX0KLQotdm9pZCBRdFNHVXBkYXRlUXVl
dWU6OnJlbW92ZVRpbGVOb2RlKGludCBub2RlSUQpCi17Ci0gICAgbm9kZVVwZGF0ZVF1ZXVlLmFw
cGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZVRpbGUobm9kZUlEKSkpOwotICAgIGl0
ZW0tPnVwZGF0ZSgpOwotfQotCi12b2lkIFF0U0dVcGRhdGVRdWV1ZTo6c2V0Tm9kZUJhY2tCdWZm
ZXIoaW50IG5vZGVJRCwgY29uc3QgUUltYWdlJiBiYWNrQnVmZmVyLCBjb25zdCBRUmVjdCYgc291
cmNlUmVjdCwgY29uc3QgUVJlY3QmIHRhcmdldFJlY3QpCi17Ci0gICAgbm9kZVVwZGF0ZVF1ZXVl
LmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVNldEJhY2tCdWZmZXIobm9kZUlELCBiYWNr
QnVmZmVyLCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0KSkpOwotICAgIGl0ZW0tPnVwZGF0ZSgpOwot
fQotCi12b2lkIFF0U0dVcGRhdGVRdWV1ZTo6c3dhcFRpbGVCdWZmZXJzKCkKLXsKLSAgICBub2Rl
VXBkYXRlUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlU3dhcFRpbGVCdWZmZXJz
KCkpKTsKLSAgICBtX2lzU3dhcFBlbmRpbmcgPSB0cnVlOwotICAgIGl0ZW0tPnVwZGF0ZSgpOwot
fQotCi12b2lkIFF0U0dVcGRhdGVRdWV1ZTo6YXBwbHlVcGRhdGVzKFFTR05vZGUqIGl0ZW1Ob2Rl
KQotewotICAgIHdoaWxlICghbm9kZVVwZGF0ZVF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBP
d25QdHI8Tm9kZVVwZGF0ZT4gbm9kZVVwZGF0ZShub2RlVXBkYXRlUXVldWUudGFrZUZpcnN0KCkp
OwotICAgICAgICBzd2l0Y2ggKG5vZGVVcGRhdGUtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBOb2Rl
VXBkYXRlOjpDcmVhdGVUaWxlOiB7Ci0gICAgICAgICAgICBOb2RlVXBkYXRlQ3JlYXRlVGlsZSog
Y3JlYXRlVGlsZVVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVDcmVhdGVUaWxlKj4obm9k
ZVVwZGF0ZS5nZXQoKSk7Ci0gICAgICAgICAgICBRdFNHVGlsZU5vZGUqIHRpbGVOb2RlID0gbmV3
IFF0U0dUaWxlTm9kZShpdGVtLT5zY2VuZUdyYXBoRW5naW5lKCkpOwotICAgICAgICAgICAgZ2V0
U2NhbGVOb2RlKGNyZWF0ZVRpbGVVcGRhdGUtPnNjYWxlLCBpdGVtTm9kZSktPnByZXBlbmRDaGls
ZE5vZGUodGlsZU5vZGUpOwotICAgICAgICAgICAgbm9kZXMuc2V0KGNyZWF0ZVRpbGVVcGRhdGUt
Pm5vZGVJRCwgdGlsZU5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBOb2RlVXBkYXRlOjpSZW1vdmVUaWxlOiB7Ci0gICAgICAgICAgICBOb2RlVXBkYXRl
UmVtb3ZlVGlsZSogcmVtb3ZlVXBkYXRlID0gc3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZVJlbW92ZVRp
bGUqPihub2RlVXBkYXRlLmdldCgpKTsKLSAgICAgICAgICAgIFFTR05vZGUqIG5vZGUgPSBub2Rl
cy50YWtlKHJlbW92ZVVwZGF0ZS0+bm9kZUlEKTsKLSAgICAgICAgICAgIFFTR05vZGUqIHNjYWxl
Tm9kZSA9IG5vZGUtPnBhcmVudCgpOwotCi0gICAgICAgICAgICBzY2FsZU5vZGUtPnJlbW92ZUNo
aWxkTm9kZShub2RlKTsKLSAgICAgICAgICAgIGlmICghc2NhbGVOb2RlLT5jaGlsZENvdW50KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc2NhbGVOb2RlID09IGxhc3RTY2FsZU5vZGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbGFzdFNjYWxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbGFz
dFNjYWxlTm9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlbGV0
ZSBzY2FsZU5vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWxldGUgbm9kZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZVVwZGF0ZTo6U2V0
QmFja0J1ZmZlcjogewotICAgICAgICAgICAgTm9kZVVwZGF0ZVNldEJhY2tCdWZmZXIqIHNldEJh
Y2tCdWZmZXJVcGRhdGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlU2V0QmFja0J1ZmZlcio+KG5v
ZGVVcGRhdGUuZ2V0KCkpOwotICAgICAgICAgICAgUXRTR1RpbGVOb2RlKiB0aWxlTm9kZSA9IG5v
ZGVzLmdldChzZXRCYWNrQnVmZmVyVXBkYXRlLT5ub2RlSUQpOwotICAgICAgICAgICAgdGlsZU5v
ZGUtPnNldEJhY2tCdWZmZXIoc2V0QmFja0J1ZmZlclVwZGF0ZS0+YmFja0J1ZmZlciwgc2V0QmFj
a0J1ZmZlclVwZGF0ZS0+c291cmNlUmVjdCwgc2V0QmFja0J1ZmZlclVwZGF0ZS0+dGFyZ2V0UmVj
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRh
dGU6OlN3YXBUaWxlQnVmZmVyczogewotICAgICAgICAgICAgSGFzaE1hcDxpbnQsIFF0U0dUaWxl
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBub2Rlcy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoSGFz
aE1hcDxpbnQsIFF0U0dUaWxlTm9kZSo+OjppdGVyYXRvciBpdCA9IG5vZGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLT5zd2FwQnVmZmVyc0lm
TmVlZGVkKCk7Ci0gICAgICAgICAgICBtX2lzU3dhcFBlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUVNHTm9kZSogUXRTR1Vw
ZGF0ZVF1ZXVlOjpnZXRTY2FsZU5vZGUoZmxvYXQgc2NhbGUsIFFTR05vZGUqIGl0ZW1Ob2RlKQot
ewotICAgIGlmIChzY2FsZSA9PSBsYXN0U2NhbGUpCi0gICAgICAgIHJldHVybiBsYXN0U2NhbGVO
b2RlOwotCi0gICAgUVNHVHJhbnNmb3JtTm9kZSogc2NhbGVOb2RlID0gbmV3IFFTR1RyYW5zZm9y
bU5vZGU7Ci0gICAgUU1hdHJpeDR4NCBzY2FsZU1hdHJpeDsKLSAgICAvLyBVc2Ugc2NhbGUoZmxv
YXQsZmxvYXQpIHRvIHByZXZlbnQgc2NhbGluZyB0aGUgWiBjb21wb25lbnQuCi0gICAgLy8gUmV2
ZXJzZSB0aGUgaXRlbSdzIHRyYW5zZm9ybSBzY2FsZSBzaW5jZSBvdXIgdGlsZXMgd2VyZSBnZW5l
cmF0ZWQgZm9yIHRoaXMgc3BlY2lmaWMgc2NhbGUuCi0gICAgc2NhbGVNYXRyaXguc2NhbGUoMSAv
IHNjYWxlLCAxIC8gc2NhbGUpOwotICAgIHNjYWxlTm9kZS0+c2V0TWF0cml4KHNjYWxlTWF0cml4
KTsKLSAgICAvLyBQcmVwZW5kIGluc3RlYWQgb2YgYXBwZW5kIHRvIHBhaW50IHRoZSBuZXcsIGlu
Y29tcGxldGUsIHNjYWxlIGJlZm9yZS9iZWhpbmQgdGhlIHByZXZpb3VzIG9uZS4KLSAgICBpdGVt
Tm9kZS0+cHJlcGVuZENoaWxkTm9kZShzY2FsZU5vZGUpOwotCi0gICAgbGFzdFNjYWxlID0gc2Nh
bGU7Ci0gICAgbGFzdFNjYWxlTm9kZSA9IHNjYWxlTm9kZTsKLSAgICByZXR1cm4gbGFzdFNjYWxl
Tm9kZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
U0dVcGRhdGVRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0U0dVcGRhdGVR
dWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzBjNTA2NjgwNTNkMmYyNmNk
YTdiOTAxMTI5MDliZTczNDViYzMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFNHVXBkYXRlUXVldWUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZu
ZGVmIFF0U0dVcGRhdGVRdWV1ZV9oCi0jZGVmaW5lIFF0U0dVcGRhdGVRdWV1ZV9oCi0KLSNpbmNs
dWRlICJEZXF1ZS5oIgotI2luY2x1ZGUgIkhhc2hNYXAuaCIKLSNpbmNsdWRlICJPd25QdHIuaCIK
LQotY2xhc3MgUUltYWdlOwotY2xhc3MgUVJlY3Q7Ci1jbGFzcyBRUXVpY2tJdGVtOwotY2xhc3Mg
UVNHTm9kZTsKLWNsYXNzIFFTaXplOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTm9k
ZVVwZGF0ZTsKLWNsYXNzIFBhZ2VOb2RlOwotY2xhc3MgUXRTR1RpbGVOb2RlOwotCi0vLyBUYWtl
cyBjYXJlIG9mIHRha2luZyB1cGRhdGUgcmVxdWVzdHMgdGhlbiBmdWxmaWxsaW5nIHRoZW0gYXN5
bmNocm9ub3VzbHkgb24gdGhlIHNjZW5lIGdyYXBoIHRocmVhZC4KLWNsYXNzIFF0U0dVcGRhdGVR
dWV1ZSB7Ci1wdWJsaWM6Ci0gICAgUXRTR1VwZGF0ZVF1ZXVlKFFRdWlja0l0ZW0qKTsKLQotICAg
IGludCBjcmVhdGVUaWxlTm9kZShmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlTm9k
ZShpbnQgbm9kZUlEKTsKLSAgICB2b2lkIHNldE5vZGVCYWNrQnVmZmVyKGludCBub2RlSUQsIGNv
bnN0IFFJbWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0
JiB0YXJnZXRSZWN0KTsKLSAgICB2b2lkIHN3YXBUaWxlQnVmZmVycygpOwotCi0gICAgLy8gQ2Fs
bGVkIGJ5IHRoZSBRUXVpY2tJdGVtLgotICAgIHZvaWQgYXBwbHlVcGRhdGVzKFFTR05vZGUqIGl0
ZW1Ob2RlKTsKLSAgICBib29sIGlzU3dhcFBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzU3dh
cFBlbmRpbmc7IH0KLQotcHJpdmF0ZToKLSAgICBRU0dOb2RlKiBnZXRTY2FsZU5vZGUoZmxvYXQg
c2NhbGUsIFFTR05vZGUqIGl0ZW1Ob2RlKTsKLQotICAgIFFRdWlja0l0ZW0qIGl0ZW07Ci0gICAg
RGVxdWU8T3duUHRyPE5vZGVVcGRhdGU+ID4gbm9kZVVwZGF0ZVF1ZXVlOwotICAgIEhhc2hNYXA8
aW50LCBRdFNHVGlsZU5vZGUqPiBub2RlczsKLSAgICBmbG9hdCBsYXN0U2NhbGU7Ci0gICAgUVNH
Tm9kZSogbGFzdFNjYWxlTm9kZTsKLSAgICBpbnQgbmV4dE5vZGVJRDsKLSAgICBib29sIG1faXNT
d2FwUGVuZGluZzsKLX07Ci0KLXN0cnVjdCBOb2RlVXBkYXRlIHsKLSAgICBlbnVtIFR5cGUgewot
ICAgICAgICBDcmVhdGVUaWxlLAotICAgICAgICBSZW1vdmVUaWxlLAotICAgICAgICBTZXRCYWNr
QnVmZmVyLAotICAgICAgICBTd2FwVGlsZUJ1ZmZlcnMKLSAgICB9OwotICAgIE5vZGVVcGRhdGUo
VHlwZSB0eXBlKQotICAgICAgICA6IHR5cGUodHlwZSkKLSAgICB7IH0KLSAgICB2aXJ0dWFsIH5O
b2RlVXBkYXRlKCkgeyB9Ci0gICAgVHlwZSB0eXBlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUXRT
R1VwZGF0ZVF1ZXVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9U
aWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
VGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyYzc2MDYyZjVhM2E2OTVhMjIzMzNiMzRlZDU0YmFkZTdlNzRkNGRjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCi0KLSNpbmNsdWRlICJRdFNHVXBkYXRl
UXVldWUuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV0tBUElDYXN0
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi0jZGVmaW5lIFRJTEVfREVCVUdfTE9HCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lk
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlV2ViVmlldyhjb25zdCBWZWN0b3I8SW50UmVj
dD4mIHBhaW50ZWRBcmVhKQotewotICAgIC8vIFNHIHVwZGF0ZXMgYXJlIHRyaWdnZXJlZCB0aHJv
dWdoIFF0U0dVcGRhdGVRdWV1ZS4KLX0KLQotV2ViUGFnZVByb3h5KiBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OnBhZ2UoKQotewotICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eTsKLX0KLQotdm9pZCBU
aWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBpbnQgbm9kZUlEID0gbV93ZWJWaWV3LT5zY2VuZUdy
YXBoVXBkYXRlUXVldWUoKS0+Y3JlYXRlVGlsZU5vZGUodXBkYXRlSW5mby51cGRhdGVTY2FsZUZh
Y3Rvcik7Ci0gICAgbV90aWxlTm9kZU1hcC5zZXQodGlsZUlELCBub2RlSUQpOwotICAgIHVwZGF0
ZVRpbGUodGlsZUlELCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
LXsKLSAgICBpbnQgbm9kZUlEID0gbV90aWxlTm9kZU1hcC5nZXQodGlsZUlEKTsKLSAgICBBU1NF
UlQobm9kZUlEKTsKLQotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKLSAgICAvLyBGSVhN
RTogV2UgY291bGQgYXZvaWQgdGhpcyBjb3B5IGJ5IGNhcnlpbmcgdGhlIFNoYXJlYWJsZUJpdG1h
cCBhbGwgdGhlIHdheSB1cCB0byB0ZXh0dXJlIHVwbG9hZGluZy4KLSAgICAvLyBDdXJyZW50bHkg
d29uJ3Qgd29yayBzaW5jZSB0aGUgU2hhcmVkTWVtb3J5IGhhbmRsZSBpcyBvd25lZCBieSB1cGRh
dGVJbmZvLgotICAgIFFJbWFnZSBpbWFnZShiaXRtYXAtPmNyZWF0ZVFJbWFnZSgpLmNvcHkoKSk7
Ci0gICAgUVJlY3Qgc291cmNlUmVjdCgwLCAwLCB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMu
d2lkdGgoKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLmhlaWdodCgpKTsKLSAgICBtX3dl
YlZpZXctPnNjZW5lR3JhcGhVcGRhdGVRdWV1ZSgpLT5zZXROb2RlQmFja0J1ZmZlcihub2RlSUQs
IGltYWdlLCBzb3VyY2VSZWN0LCB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMpOwotfQotCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQotewotICAgIG1fd2Vi
Vmlldy0+c2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCktPnN3YXBUaWxlQnVmZmVycygpOwotfQotCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQotewotICAg
IGludCBub2RlSUQgPSBtX3RpbGVOb2RlTWFwLnRha2UodGlsZUlEKTsKLSAgICBtX3dlYlZpZXct
PnNjZW5lR3JhcGhVcGRhdGVRdWV1ZSgpLT5yZW1vdmVUaWxlTm9kZShub2RlSUQpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuY3BwCmluZGV4IDlkNDJjZTRhNWU1MDhkOGUyZTYyNmM5ZjNkNWY0
MzFjOWEyNzJiYTkuLjg0MWUzNWFiODdiZDE5MDM1NGNkMjIxZjg5OTJmZDdiMWI2ZGVmNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNw
cApAQCAtMjksMTAgKzI5LDYgQEAKIC8vIFN1YmNsYXNzZXMKICNpbmNsdWRlICJEcmF3aW5nQXJl
YUltcGwuaCIKIAotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIlRpbGVk
RHJhd2luZ0FyZWEuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIlRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgiCiAjZW5kaWYKQEAgLTQ2LDEwICs0Miw2IEBA
IFBhc3NPd25QdHI8RHJhd2luZ0FyZWE+IERyYXdpbmdBcmVhOjpjcmVhdGUoV2ViUGFnZSogd2Vi
UGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0CiAgICAgc3dpdGNoIChwYXJhbWV0ZXJzLmRyYXdpbmdB
cmVhVHlwZSkgewogICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlSW1wbDoKICAgICAgICAgcmV0dXJu
IERyYXdpbmdBcmVhSW1wbDo6Y3JlYXRlKHdlYlBhZ2UsIHBhcmFtZXRlcnMpOwotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlVGlsZWQ6Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJlYSh3ZWJQYWdlKSk7Ci0jZW5k
aWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVUaWxlZENvcmVB
bmltYXRpb246CiAgICAgICAgIHJldHVybiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
Y3JlYXRlKHdlYlBhZ2UsIHBhcmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCBmZmJiZGJiNTc4ZjBhOTQ1NDI5YzhiOGYz
ODAzOGU0YzA3OWY1MWQ5Li5hZWU3N2Y1ODg2ZDAzYjVjYmYyODk0MTFjMjBiN2M2MGNkNmY3OTUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aApAQCAtMTA2LDE1ICsxMDYsNiBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgYnkgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWEuCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlb21ldHJ5KGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplKSB7IH0KICNlbmRpZgotCi0jaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgdmlld1NpemUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudFJlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
Y2FsZShmbG9hdCBzY2FsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB0YWtlU25hcHNob3QoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgdGFyZ2V0U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVudHNSZWN0KSB7IH0K
LSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5k
ZXggNDhjM2UxYWU1Y2EzMmRmMDM3MGZhMjgwODA4ZmRiYzRjMDkxOWNmNi4uNDFhMWFhMzYyNzY5
ZDdiMmFkMDZmOWNmOGQyYzJiN2NlODYwMTcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAtMzEs
MTIgKzMxLDQgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgewogICAgIC8vIFVzZWQgYnkgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuCiAgICAgVXBkYXRlR2VvbWV0cnkoV2ViQ29yZTo6
SW50U2l6ZSB2aWV3U2l6ZSkKICNlbmRpZgotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgU2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKQotICAgIFNldFZpc2libGVD
b250ZW50UmVjdEFuZFNjYWxlKFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0LCBm
bG9hdCBzY2FsZSkKLSAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKFdl
YkNvcmU6OkZsb2F0UG9pbnQgdHJhamVjdG9yeVZlY3RvcikKLSAgICBSZW5kZXJOZXh0RnJhbWUo
KQotICAgIFRha2VTbmFwc2hvdChXZWJDb3JlOjpJbnRTaXplIHNpemUsIFdlYkNvcmU6OkludFJl
Y3QgY29udGVudHNSZWN0KQotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM0ODJlNjY0YmQ0MzczODgyMDgzMmUxOWY5ZTc4NjQxYTFmYjE2NmIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUaWxlZERyYXdpbmdBcmVhLmgiCi0KLSNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVRpbGVkRHJhd2luZ0FyZWE6OlRpbGVkRHJhd2luZ0FyZWEoV2Vi
UGFnZSogd2ViUGFnZSkKLSAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3
ZWJQYWdlKQotICAgICwgbV9zdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGluZ0ZvclVJ
UHJvY2VzcyhmYWxzZSkKLSAgICAsIG1fZGlkU2VuZFRpbGVVcGRhdGUoZmFsc2UpCi0gICAgLCBt
X21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpKQotewotfQot
Ci1UaWxlZERyYXdpbmdBcmVhOjp+VGlsZWREcmF3aW5nQXJlYSgpCi17Ci19Ci0KLXZvaWQgVGls
ZWREcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhKQotewotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgbXVjaCBz
bWFydGVyLgotICAgIHNldE5lZWRzRGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotdm9pZCBUaWxl
ZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUocmVjdCk7Ci19Ci0KLXZvaWQgVGlsZWRE
cmF3aW5nQXJlYTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKLXsKLSAgICBBU1NF
UlQoIW1fc3VzcGVuZGVkKTsKLSAgICBBU1NFUlRfQVJHKHZpZXdTaXplLCAhdmlld1NpemUuaXNF
bXB0eSgpKTsKLQotICAgIG1fd2ViUGFnZS0+c2V0U2l6ZSh2aWV3U2l6ZSk7Ci19Ci0KLXZvaWQg
VGlsZWREcmF3aW5nQXJlYTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUpCi17Ci0gICAg
bV92aXNpYmxlQ29udGVudFJlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0OwotCi0gICAgaWYgKHNj
YWxlICE9IG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSB7Ci0gICAgICAgIC8v
IEtlZXAgdGhlIHRpbGVzIGZvciB0aGUgcHJldmlvdXMgc2NhbGUgdW50aWwgZW5vdWdoIGNvbnRl
bnQgaXMgYXZhaWxhYmxlIHRvIGJlIHNob3duIG9uIHRoZSBzY3JlZW4gZm9yIHRoZSBuZXcgc2Nh
bGUuCi0gICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHByZXZpb3VzIHNldCBvZiB0aWxl
cyBpdCBtZWFucyB0aGF0IHR3byBzY2FsZSBjaGFuZ2VkIGhhcHBlbmVkIHN1Y2Nlc3NpdmVseS4K
LSAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCBtYWtlIHN1cmUgdGhhdCBvdXIgY3VycmVudCBtYWlu
IHRpbGVzIGhhdmUgbW9yZSBjb250ZW50IHRvIHNob3cgdGhhbiB0aGUgInByZXZpb3VzIHByZXZp
b3VzIgotICAgICAgICAvLyB3aXRoaW4gdGhlIHZpc2libGUgcmVjdCBiZWZvcmUgcmVwbGFjaW5n
IGl0LgotICAgICAgICBpZiAoIW1fcHJldmlvdXNCYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2lu
Z1N0b3JlLT5jb3ZlcmFnZVJhdGlvKG1fdmlzaWJsZUNvbnRlbnRSZWN0KSA+IG1fcHJldmlvdXNC
YWNraW5nU3RvcmUtPmNvdmVyYWdlUmF0aW8obV92aXNpYmxlQ29udGVudFJlY3QpKQotICAgICAg
ICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNl
KCk7Ci0KLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFj
a2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0
ZSh0aGlzKSkpOwotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUo
c2NhbGUpOwotICAgIH0gZWxzZQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmFkanVzdFZp
c2libGVSZWN0KCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0
b3J5VmVjdG9yKQotewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0VmlzaWJsZVJlY3RUcmFq
ZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0Fy
ZWE6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV9pc1dhaXRpbmdGb3JVSVByb2Nlc3MgPSBm
YWxzZTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci19Ci0K
LXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c3VzcGVuZFBhaW50aW5nKCkKLXsKLSAgICBBU1NFUlQo
IW1fc3VzcGVuZGVkKTsKLQotICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBUaWxl
ZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGluZygpCi17Ci0gICAgQVNTRVJUKG1fc3VzcGVuZGVk
KTsKLQotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT51
cGRhdGVUaWxlQnVmZmVycygpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnRCZWdpbigpCi17Ci0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgp
OwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQotewotICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoKmdyYXBoaWNzQ29udGV4dCwgY29udGVudFJl
Y3QpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRF
bmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkKLXsKLSAgICBpZiAobV9kaWRT
ZW5kVGlsZVVwZGF0ZSkgewotICAgICAgICAvLyBTaW5jZSB3ZSBrbm93IHRoYXQgYWxsIHRpbGUg
dXBkYXRlcyBmb2xsb3dpbmcgYSBwYWdlIGludmFsaWRhdGUgd2lsbCBhbGwgYmUgcmVuZGVyZWQK
LSAgICAgICAgLy8gaW4gb25lIHBhaW50IHBhc3MgZm9yIGFsbCB0aGUgdGlsZXMsIHdlIGNhbiBz
ZW5kIHRoZSBzd2FwIHRpbGUgbWVzc2FnZSBoZXJlLgotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOwotICAgICAgICBt
X2lzV2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1fZGlkU2VuZFRpbGVVcGRh
dGUgPSBmYWxzZTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkZXN0cm95IHRoZSBw
cmV2aW91cyBiYWNraW5nIHN0b3JlIGFuZCByZW1vdmUgaXRzIHRpbGVzIG9ubHkgYWZ0ZXIgRGlk
UmVuZGVyRnJhbWUKLSAgICAgICAgLy8gd2FzIHNlbnQgdG8gc3dhcCByZWNlbnRseSBjcmVhdGVk
IHRpbGVzJyBidWZmZXIuIEVsc2UgYSBmcmFtZSBjb3VsZCBiZSByZW5kZXJlZCBhZnRlciB0aGUg
cHJldmlvdXMKLSAgICAgICAgLy8gdGlsZXMgd2VyZSByZW1vdmVkIGFuZCBiZWZvcmUgdGhlIG5l
dyB0aWxlIGhhdmUgdGhlaXIgZmlyc3QgYmFjayBidWZmZXIgc3dhcHBlZC4KLSAgICAgICAgaWYg
KG1fcHJldmlvdXNCYWNraW5nU3RvcmUgJiYgbV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcmFnZVJh
dGlvKG1fdmlzaWJsZUNvbnRlbnRSZWN0KSA+PSAxLjBmKQotICAgICAgICAgICAgbV9wcmV2aW91
c0JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIH0KLX0KLQotYm9vbCBUaWxlZERyYXdpbmdBcmVh
Ojp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
IW1fc3VzcGVuZGVkICYmICFtX2lzV2FpdGluZ0ZvclVJUHJvY2VzczsKLX0KLQotSW50UmVjdCBU
aWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlLT5zaXplKCkpOwotfQot
Ci1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3Qo
KQotewotICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50UmVjdDsKLX0KLQotQ29sb3IgVGlsZWRE
cmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewot
ICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJl
YTo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQot
ewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6Q3JlYXRl
VGlsZSh0aWxlSUQsIHVwZGF0ZUluZm8pKTsKLSAgICBtX2RpZFNlbmRUaWxlVXBkYXRlID0gdHJ1
ZTsKLX0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25z
dCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZUluZm8pKTsKLSAg
ICBtX2RpZFNlbmRUaWxlVXBkYXRlID0gdHJ1ZTsKLX0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6
cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
RHJhd2luZ0FyZWFQcm94eTo6UmVtb3ZlVGlsZSh0aWxlSUQpKTsKLX0KLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBUaWxlZERy
YXdpbmdBcmVhOjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50cykKLXsKLX0KLSNlbmRpZgotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjYmNiZDMwOTA5YjUyMDI4MzJhYmU3OWFmYjU5ZTEyZDVjZGYyYzdj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRp
bGVkRHJhd2luZ0FyZWFfaAotI2RlZmluZSBUaWxlZERyYXdpbmdBcmVhX2gKLQotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRl
ICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgVGlsZWREcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSwg
cHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LCBwdWJsaWMgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBUaWxlZERy
YXdpbmdBcmVhKFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5UaWxlZERyYXdpbmdBcmVhKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKTsKLQotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoQ29tcG9zaXRp
bmdDb250ZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaENvbXBvc2l0aW5nQ29udGV4
dCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllclN5bmMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhv
c3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciopOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgLy8gQ29yZUlQ
QyBtZXNzYWdlIGhhbmRsZXJzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHZpZXdTaXplKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
dW1lUGFpbnRpbmcoKTsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOwotICAgIHZpcnR1YWwgdm9p
ZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRC
YWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHBhaW50
ZWRBcmVhKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dl
ZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9y
ZUNvbnRlbnRzUmVjdCgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB0aWxlZEJhY2tp
bmdTdG9yZVZpc2libGVSZWN0KCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpDb2xvciB0aWxlZEJh
Y2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgLy8gVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRp
bGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGls
ZShpbnQgdGlsZUlEKTsKLQotICAgIGJvb2wgbV9zdXNwZW5kZWQ7Ci0gICAgYm9vbCBtX2lzV2Fp
dGluZ0ZvclVJUHJvY2VzczsKLSAgICBib29sIG1fZGlkU2VuZFRpbGVVcGRhdGU7Ci0gICAgV2Vi
Q29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKLQotICAgIE93blB0cjxXZWJDb3Jl
OjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOwotICAgIE93blB0cjxXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
Ci0KLSNlbmRpZiAvLyBUaWxlZERyYXdpbmdBcmVhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDA5ZWVmMjcyYTk0YWI2OGNjMzk2OTNkYjlhMGJh
NTA5Y2QzZWY1YjguLmI1ZGQ1NjBhMDk1YTZmNWYwNTIwZTAzY2Y4M2JlODU3NDdiNzRiOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzE2LDcg
KzcxNiw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQotICAgIFdlYkNvcmU6OkludFNpemUgbV9yZXNpemVzVG9Db250ZW50c0xheW91dFNpemU7CiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKICNlbmRpZgogCg==
</data>
<flag name="review"
          id="126841"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>