<?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>60234</bug_id>
          
          <creation_ts>2011-05-04 17:56:19 -0700</creation_ts>
          <short_desc>Rename SelectionController to FrameSelection</short_desc>
          <delta_ts>2011-05-05 11:20:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60228</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>leviw</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398452</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-04 17:56:19 -0700</bug_when>
    <thetext>SelectionController isn&apos;t really a controller in the sense that it contains a selection. It does have public member functions called by various parts of WebCore to update the selection state but it really is the selection of a frame, not a mere controller of the selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398594</commentid>
    <comment_count>1</comment_count>
      <attachid>92383</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-05 00:43:33 -0700</bug_when>
    <thetext>Created attachment 92383
Renamed SelectionController to FrameSelection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398707</commentid>
    <comment_count>2</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-05-05 07:22:08 -0700</bug_when>
    <thetext>Attachment 92383 did not build on gtk:
Build output: http://queues.webkit.org/results/8571435</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398750</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-05 09:01:30 -0700</bug_when>
    <thetext>Do we ultimately want to make it PageSelection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398772</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-05 09:25:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do we ultimately want to make it PageSelection?

No. Selection must be maintained per frame and that&apos;s what the Web expects. As far as I can tell most of states in FrameSelection must persist independent of selection in other frames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398782</commentid>
    <comment_count>5</comment_count>
      <attachid>92427</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-05 09:40:42 -0700</bug_when>
    <thetext>Created attachment 92427
Fixed gtk build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398832</commentid>
    <comment_count>6</comment_count>
      <attachid>92427</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-05 10:52:04 -0700</bug_when>
    <thetext>Comment on attachment 92427
Fixed gtk build

Assuming your just renaming things and you think you managed to get all 8 build systems right. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398849</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-05 11:14:51 -0700</bug_when>
    <thetext>Committed r85864: &lt;http://trac.webkit.org/changeset/85864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398855</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-05 11:20:26 -0700</bug_when>
    <thetext>Thanks for the review, Eric.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92383</attachid>
            <date>2011-05-05 00:43:33 -0700</date>
            <delta_ts>2011-05-05 09:40:36 -0700</delta_ts>
            <desc>Renamed SelectionController to FrameSelection</desc>
            <filename>bug-60234-20110505004332.patch</filename>
            <type>text/plain</type>
            <size>358861</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1ODQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ1IEBACisyMDExLTA1LTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1lU2Vs
ZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDIzNAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAg
ICogYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5oOgorICAgICAgICAqIGNzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpjbG9uZUNoaWxkTm9kZXMpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5j
cHA6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVsZXRlVG9NYXJrKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlQmFja3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1v
dmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRl
TW92ZURvd24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVEb3duQW5kTW9kaWZ5U2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlRm9yd2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpleGVjdXRlTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVN
b3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92
ZVBhZ2VEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlUGFnZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVQYWdlVXApOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpleGVj
dXRlTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1
dGVNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVN
b3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpOgorICAgICAgICAo
V2ViQ29yZTo6ZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlQW5k
TW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZkRv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZkRvY3VtZW50QW5k
TW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZlNl
bnRlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZlNlbnRlbmNlQW5k
TW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZkxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVRvRW5kT2ZQYXJhZ3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlUGFyYWdyYXBoQmFja3dh
cmRBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVQYXJh
Z3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1
dGVNb3ZlVXApOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVVcEFuZE1vZGlmeVNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVdvcmRCYWNrd2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVdvcmRGb3J3YXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVXb3JkTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpleGVj
dXRlTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4
ZWN1dGVNb3ZlV29yZFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlV29yZFJp
Z2h0QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9M
ZWZ0RW5kT2ZMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9MZWZ0RW5kT2ZM
aW5lQW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9S
aWdodEVuZE9mTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVRvUmlnaHRFbmRP
ZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb3ZlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnRleHRXaWxsQmVSZXBsYWNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0SXNEaXJlY3Rpb25hbCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlTW9kaWZpZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnN0YXJ0Rm9yUGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmVuZEZvclBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjp4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpzZXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0RW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OmNhcmV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjphYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6Y2FyZXRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpzaG91bGRSZXBhaW50Q2FyZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OmludmFsaWRhdGVDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnBhaW50Q2FyZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRlYnVn
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBh
cmVudElmRnVsbHlTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rl
ZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0luUGFzc3dvcmRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y2FyZXRSZW5kZXJzSW5z
aWRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0
aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwYWdl
QWN0aXZhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpzZXRDYXJldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OmNhcmV0QmxpbmtUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpwYWludERyYWdDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OmJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6Y3VycmVudEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNob3VsZENoYW5nZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNob3dUcmVlRm9yVGhpcyk6CisgICAgICAgIChzaG93VHJlZSk6CisgICAgICAgICogZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp0
eXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y2xlYXJUeXBp
bmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0VHlwaW5nU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxp
dHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAg
ICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGlu
Zy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlv
bkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25D
b21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxs
Q29ycmVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rpb25DaHJvbWl1bS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNo
cm9taXVtLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVt
L1NlbGVjdGlvbkNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZWRp
dGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKiBlZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKToKKyAgICAgICAg
KiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbS4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hh
bmdlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOiBS
ZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvcXQvRWRpdG9yUXQuY3BwOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAqIHBhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpE
T01TZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFk
ZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKToKKyAg
ICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdD
b250cm9sbGVyOjpkcmFnSXNNb3ZlKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmg6
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0
U2VsZWN0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Tm9uRGlyZWN0aW9uYWxT
ZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRD
b250ZXh0TWVudUV2ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjbGVhclNlbGVjdGlvbklmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgICogcGFnZS9GcmFt
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlbGVjdGlvbik6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZHJhZ0NhcmV0Q29udHJvbGxlcik6
CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KiBwYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHA6CisgICAgICAgICogcGFnZS93aW4vRXZl
bnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
YWludENhcmV0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpkZXN0cm95KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHN2Zy9T
VkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3Ry
aW5nKToKKwogMjAxMS0wNS0wNSAgWW91bmcgSGFuIExlZSAgPGpveWJyb0Bjb21wYW55MTAwLm5l
dD4KIAogICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDYgKzY1Miw3IEBAIFNFVChXZWJDb3JlX1NP
VVJDRVMKICAgICBlZGl0aW5nL0VkaXRvci5jcHAKICAgICBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisgICAgZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKICAgICBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKICAgICBlZGl0
aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZC5jcHAKQEAgLTY3MSw3ICs2NzIsNiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKICAgICBl
ZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcAogICAgIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCi0gICAgZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9T
bWFydFJlcGxhY2UuY3BwCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTMyMyw3ICsxMzIzLDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZpbmRPcHRp
b25zLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCBcCi0JU291cmNl
L1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0Zy
YW1lU2VsZWN0aW9uR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBcCiAJU291cmNl
L1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwIFwKQEAgLTEzNjYsOCArMTM2OCw2
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2UuY3BwIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDE1IEBAIF9fWk43V2ViQ29yZTE0RG9j
dW1lbnRMb2FkZXJDMUVSS05TXzE1UmUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJDMkVS
S05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRlRGF0YUUKIF9fWk43V2ViQ29y
ZTE0RG9jdW1lbnRMb2FkZXJEMkV2CiBfX1pON1dlYkNvcmUxNERvY3VtZW50V3JpdGVyMTFzZXRF
bmNvZGluZ0VSS04zV1RGNlN0cmluZ0ViCitfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTBz
ZXRGb2N1c2VkRWIKK19fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMnNldFNlbGVjdGlvbkVS
S05TXzE2VmlzaWJsZVNlbGVjdGlvbkVqTlMwXzE5Q3Vyc29yQWxpZ25PblNjcm9sbEVOU18xNVRl
eHRHcmFudWxhcml0eUVOU18yMERpcmVjdGlvbmFsaXR5UG9saWN5RQorX19aTjdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFYgor
X19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE2c2V0U2VsZWN0ZWRSYW5nZUVQTlNfNVJhbmdl
RU5TXzlFQWZmaW5pdHlFYgorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjIwc2V0U2VsZWN0
aW9uRnJvbU5vbmVFdgorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjZtb2RpZnlFTlMwXzEx
RUFsdGVyYXRpb25FTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlF
YgorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjVjbGVhckV2CitfX1pON1dlYkNvcmUxNEZy
YW1lU2VsZWN0aW9uOXNlbGVjdEFsbEV2CitfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uQzFF
UE5TXzVGcmFtZUViCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTJyZWxlYXNlUHJveHlF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgpAQCAtNTIwLDE1
ICs1MjksNiBAQCBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UyMmRlZmF1CiBfX1pO
N1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UyNHNfZGVmYXVsdFRpbWVvdXRJbnRlcnZhbEUK
IF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTI1c2V0RGVmYXVsdFRpbWVvdXRJbnRl
cnZhbEVkCiBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2U2c2V0VVJMRVJLTlNfNEtV
UkxFCi1fX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMHNldEZvY3VzZWRFYgotX19a
TjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTJzZXRTZWxlY3Rpb25FUktOU18xNlZpc2li
bGVTZWxlY3Rpb25Fak5TMF8xOUN1cnNvckFsaWduT25TY3JvbGxFTlNfMTVUZXh0R3JhbnVsYXJp
dHlFTlNfMjBEaXJlY3Rpb25hbGl0eVBvbGljeUUKLV9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29u
dHJvbGxlcjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFYgotX19aTjdX
ZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViCi1fX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIyMHNldFNl
bGVjdGlvbkZyb21Ob25lRXYKLV9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjVjbGVh
ckV2Ci1fX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI2bW9kaWZ5RU5TMF8xMUVBbHRl
cmF0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWIKLV9f
Wk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjlzZWxlY3RBbGxFdgotX19aTjdXZWJDb3Jl
MTlTZWxlY3Rpb25Db250cm9sbGVyQzFFUE5TXzVGcmFtZUViCiBfX1pON1dlYkNvcmUxOVRleHRS
ZXNvdXJjZURlY29kZXI1Zmx1c2hFdgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVy
NmRlY29kZUVQS2NtCiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJDMUVSS04zV1RG
NlN0cmluZ0VSS05TXzEyVGV4dEVuY29kaW5nRWIKQEAgLTExMTcsNiArMTExNywxMiBAQCBfX1pO
SzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE5b3JpZ2luYWxSCiBfX1pOSzdXZWJDb3JlMTREb2N1
bWVudExvYWRlcjIxaXNMb2FkaW5nTWFpblJlc291cmNlRXYKIF9fWk5LN1dlYkNvcmUxNERvY3Vt
ZW50TG9hZGVyMjh1cmxGb3JIaXN0b3J5UmVmbGVjdHNGYWlsdXJlRXYKIF9fWk5LN1dlYkNvcmUx
NERvY3VtZW50TG9hZGVyM3VybEV2CitfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjExY3Vy
cmVudEZvcm1FdgorX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xNWNvcHlUeXBpbmdTdHls
ZUV2CitfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJblBhc3N3b3JkRmllbGRFdgor
X19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNlZEFuZEFjdGl2ZUV2CitfX1pO
SzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xl
c0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRUVFCitfX1pOSzdXZWJDb3JlMTRGcmFt
ZVNlbGVjdGlvbjZib3VuZHNFYgogX19aTks3V2ViQ29yZTE0UmVuZGVyTGlzdEl0ZW0xMG1hcmtl
clRleHRFdgogX19aTks3V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMGNvbm5lY3Rpb25FdgogX19a
Tks3V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIxMWZyYW1lTG9hZGVyRXYKQEAgLTExNTcsMTIgKzEx
NjMsNiBAQCBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTVodHRwCiBfX1pOSzdX
ZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJj
ZVJlcXVlc3RCYXNlNmlzTnVsbEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNl
N2lzRW1wdHlFdgotX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjExY3VycmVudEZv
cm1FdgotX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE1Y29weVR5cGluZ1N0eWxl
RXYKLV9fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxN2lzSW5QYXNzd29yZEZpZWxk
RXYKLV9fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxOGlzRm9jdXNlZEFuZEFjdGl2
ZUV2Ci1fX1pOSzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMzFnZXRDbGlwcGVkVmlzaWJs
ZVRleHRSZWN0YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUUKLV9fWk5L
N1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI2Ym91bmRzRWIKIF9fWk5LN1dlYkNvcmUyMEhU
TUxUYWJsZUNlbGxFbGVtZW50OWNlbGxBYm92ZUV2CiBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJl
c3BvbnNlQmFzZTE0aHR0cFN0YXR1c0NvZGVFdgogX19aTks3V2ViQ29yZTIwUmVzb3VyY2VSZXNw
b25zZUJhc2UxNGh0dHBTdGF0dXNUZXh0RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC01NzMsMTAgKzU3MywxMCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9yRGVsZXRlQWN0
aW9uLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9ySW5zZXJ0QWN0aW9uLmgnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvRmluZE9wdGlvbnMuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmgnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCcsCi0gICAgICAgICAgICAn
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU21h
cnRSZXBsYWNlLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvVGV4dEFmZmluaXR5LmgnLApAQCAtMjYxNSw2ICsyNjE1LDcgQEAK
ICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdl
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdl
ZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmgnLApAQCAtMjY1MCw3ICsyNjUxLDYgQEAKICAg
ICAgICAgICAgICdlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCcsCiAgICAg
ICAgICAgICAnZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oJywKICAgICAgICAg
ICAgICdlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCcsCi0gICAgICAgICAgICAn
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9T
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TZXRTZWxlY3Rpb25D
b21tYW5kLmNwcCcsCkBAIC0yNjgzLDEyICsyNjgzLDEyIEBACiAgICAgICAgICAgICAnZWRpdGlu
Zy9hbmRyb2lkL0VkaXRvckFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL2JyZXcv
RWRpdG9yQnJldy5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hy
b21pdW0uY3BwJywKLSAgICAgICAgICAgICdlZGl0aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ2VkaXRpbmcvZ3RrL1NlbGVjdGlvbkNv
bnRyb2xsZXJHdGsuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL2Nocm9taXVtL0ZyYW1lU2Vs
ZWN0aW9uQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL2d0ay9GcmFtZVNlbGVj
dGlvbkd0ay5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3Bw
JywKICAgICAgICAgICAgICdlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCcsCiAgICAgICAgICAgICAn
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tJywKLSAgICAgICAgICAgICdlZGl0aW5nL21hYy9TZWxl
Y3Rpb25Db250cm9sbGVyTWFjLm1tJywKKyAgICAgICAgICAgICdlZGl0aW5nL21hYy9GcmFtZVNl
bGVjdGlvbk1hYy5tbScsCiAgICAgICAgICAgICAnZWRpdGluZy9tYXJrdXAuY3BwJywKICAgICAg
ICAgICAgICdlZGl0aW5nL3F0L0VkaXRvclF0LmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9x
dC9TbWFydFJlcGxhY2VRdC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDg1ODM0
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTU3Miw2
ICs1NzIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL0VkaXRvci5jcHAgXAogICAgIGVk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcCBcCisgICAgZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgXAogICAgIGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwIFwKICAgICBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAgXAogICAgIGVk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIFwKQEAgLTU5Myw3ICs1OTQsNiBAQCBTT1VS
Q0VTICs9IFwKICAgICBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgXAogICAg
IGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKLSAgICBlZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKICAgICBlZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5jcHAgXApAQCAtMTU0Myw2ICsxNTQzLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
ZWRpdGluZy9FZGl0b3IuaCBcCiAgICAgZWRpdGluZy9GaW5kT3B0aW9ucy5oIFwKICAgICBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oIFwKKyAgICBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgg
XAogICAgIGVkaXRpbmcvaHRtbGVkaXRpbmcuaCBcCiAgICAgZWRpdGluZy9IVE1MSW50ZXJjaGFu
Z2UuaCBcCiAgICAgZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5oIFwKQEAgLTE1NjMsNyAr
MTU2NCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbkNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggXAotICAgIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5oIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmggXAogICAgIGVkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
ODg1OCw3ICs0ODg1OCw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGVkaXRpbmdcaHRtbGVkaXRpbmcuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xGcmFtZVNlbGVjdGlvbi5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ4OTEwLDExICs0ODkxMCwxMSBAQAog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xodG1sZWRpdGluZy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZWRpdGluZ1xGcmFtZVNlbGVjdGlvbi5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEhUTUxJbnRlcmNoYW5nZS5jcHAiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxlZGl0aW5nXGh0bWxlZGl0aW5nLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVD
b25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDg5NjYsMTEgKzQ4OTY2
LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEhUTUxJbnRlcmNoYW5nZS5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xodG1sZWRpdGluZy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluZGVudE91dGRlbnRDb21tYW5k
LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSFRNTEludGVyY2hhbmdlLmNwcCIK
IAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpA
QCAtNDkwMjIsMTEgKzQ5MDIyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluZGVudE91dGRl
bnRDb21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEhUTUxJbnRlcmNoYW5n
ZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxl
ZGl0aW5nXEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xJbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5MDc4LDExICs0OTA3OCwx
MSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluZGVudE91dGRlbnRDb21tYW5kLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXElu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTEzNCwxMSArNDkxMzQsMTEgQEAKIAkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgiCiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0TGlz
dENvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xJbnNlcnRMaW5lQnJl
YWtDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtNDkxOTAsMTEgKzQ5MTkwLDExIEBACiAJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXEluc2VydExpc3RDb21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXElu
c2VydExpbmVCcmVha0NvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xJbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydExpc3RDb21tYW5kLmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDky
NDYsMTEgKzQ5MjQ2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydE5vZGVCZWZvcmVD
b21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydExpc3RDb21tYW5k
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVk
aXRpbmdcSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXEluc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDkzMDIsMTEg
KzQ5MzAyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0Tm9kZUJlZm9y
ZUNvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZWRpdGluZ1xJbnNlcnRUZXh0Q29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxlZGl0aW5nXEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIgogCQkJCT4KIAkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTM1OCwx
MSArNDkzNTgsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0VGV4dENvbW1hbmQuaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxlZGl0aW5nXEpvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGVkaXRpbmdcSW5zZXJ0VGV4dENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTQxNCwxMSArNDk0MTQsMTEgQEAK
IAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSm9pblRleHROb2Rlc0NvbW1hbmQuaCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0VGV4dENvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xtYXJrdXAuY3BwIgorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xKb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5
NDcwLDExICs0OTQ3MCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xtYXJrdXAuaCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSm9pblRleHROb2Rlc0NvbW1hbmQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNYXJrdXBB
Y2N1bXVsYXRvci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXG1hcmt1cC5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
QEAgLTQ5NTI2LDExICs0OTUyNiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNYXJrdXBBY2N1
bXVsYXRvci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xtYXJrdXAuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXE1hcmt1cEFjY3VtdWxhdG9yLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDk1ODIsMTEgKzQ5NTgyLDExIEBACiAJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxlZGl0aW5nXE1hcmt1cEFjY3VtdWxhdG9yLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
IAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTYzOCwxMSArNDk2MzgsMTEgQEAKIAkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgiCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTW92ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTY5NCwxMSArNDk2OTQsMTEgQEAKIAkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGVkaXRpbmdcTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTW92ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVi
dWd8V2luMzIiCkBAIC00OTc1MCwxMSArNDk3NTAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5n
XE1vdmVTZWxlY3Rpb25Db21tYW5kLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTQ5ODA2LDcgKzQ5ODA2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlbW92ZU5vZGVDb21t
YW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5ODU4LDExICs0OTg2Miw3
IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlbW92ZU5vZGVDb21tYW5kLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRp
dGluZ1xSZW1vdmVOb2RlQ29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5OTE0LDExICs0OTkxNCwxMSBAQAogCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xSZW1vdmVOb2RlQ29tbWFuZC5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTk3MCwxMSArNDk5
NzAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQu
aCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTAw
MjYsMTEgKzUwMDI2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcU2VsZWN0aW9uQ29udHJvbGxlci5jcHAiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxlZGl0aW5nXFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTAwODIsNyArNTAw
ODIsNyBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTZWxlY3Rpb25Db250cm9sbGVyLmgiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYyLDcgKzExNjIsNyBAQAogCQk0OUZGQkY0MDExQzkzRUUzMDA2QTcxMTggLyogV2Vi
R0xMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tICovOyB9OwogCQk0QTBE
QTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERBMkZDMTI5QjI0MTkw
MEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovOyB9OwogCQk0QTBEQTJGRjEy
OUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTBEQTJGRDEyOUIyNDE5MDBBQjYxRTEg
LyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlv
bkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1h
Yy5tbSAqLzsgfTsKKwkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9u
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE4
Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovOyB9OwogCQk0
QUNCQzBCRTEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAv
KiBDbGFzc0xpc3QuY3BwICovOyB9OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xh
c3NMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QUNCQzBCRDEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CiAJCTRBQ0JDMEMz
MTI3MTNDQ0EwMDk0RjlCMiAvKiBET01TZXR0YWJsZVRva2VuTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBDMDEyNzEzQ0NBMDA5NEY5
QjIgLyogRE9NU2V0dGFibGVUb2tlbkxpc3QuY3BwICovOyB9OwpAQCAtMjgxNSw4ICsyODE1LDgg
QEAKIAkJOTMzMDlFMDcwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW5Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzMwOURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlFMDkwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMzA5REJBMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5RTBBMDk5RTY0OTIwMDU2RTU4MSAvKiBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMzMDlEQkIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
OTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQkUwOTlFNjQ5
MTAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OwotCQk5MzMwOUUwRTA5
OUU2NDkyMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQkYwOTlFNjQ5MTAwNTZFNTgxIC8q
IFNlbGVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk5MzMwOUUwRDA5OUU2NDkyMDA1NkU1ODEgLyogRnJhbWVTZWxlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMz
MDlEQkUwOTlFNjQ5MTAwNTZFNTgxIC8qIEZyYW1lU2VsZWN0aW9uLmNwcCAqLzsgfTsKKwkJOTMz
MDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIEZyYW1lU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCRjA5OUU2NDkxMDA1NkU1ODEg
LyogRnJhbWVTZWxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MzMwOUUwRjA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0
ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMzMDlEQzAwOTlFNjQ5MTAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNw
cCAqLzsgfTsKIAkJOTMzMDlFMTAwOTlFNjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzMwOURDMTA5OUU2NDkxMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCAqLzsg
fTsKIAkJOTMzMDlFMTEwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQzIw
OTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwICovOyB9OwpAQCAtNzY1
OCw3ICs3NjU4LDcgQEAKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTExheWVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEg
LyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTRBMERBMkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRBOEM5NkVBMEJFNjkwMzIwMDRF
RUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHBhdGggPSBtYWMv
U2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEZyYW1lU2VsZWN0aW9uTWFjLm1tOyBw
YXRoID0gbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEMwMTI3MTNDQ0EwMDk0RjlCMiAvKiBET01TZXR0YWJs
ZVRva2VuTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01T
ZXR0YWJsZVRva2VuTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzEw
LDggKzkzMTAsOCBAQAogCQk5MzMwOURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQkEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMz
MDlEQkIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5MzMwOURCRjA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBGcmFt
ZVNlbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFt
ZVNlbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzA5REJGMDk5
RTY0OTEwMDU2RTU4MSAvKiBGcmFtZVNlbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGcmFtZVNlbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzMwOURDMDA5OUU2NDkxMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOURDMTA5OUU2NDkx
MDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQzIwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENv
bW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BsaXRFbGVt
ZW50Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ2OSw2ICsx
NTQ2OSw4IEBACiAJCQkJMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmgg
Ki8sCiAJCQkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5j
cHAgKi8sCiAJCQkJRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5oICovLAorCQkJCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBGcmFtZVNlbGVjdGlvbi5j
cHAgKi8sCisJCQkJOTMzMDlEQkYwOTlFNjQ5MTAwNTZFNTgxIC8qIEZyYW1lU2VsZWN0aW9uLmgg
Ki8sCiAJCQkJOTMzMDlEOTgwOTlFNjQ5MTAwNTZFNTgxIC8qIGh0bWxlZGl0aW5nLmNwcCAqLywK
IAkJCQk5MzMwOUQ5OTA5OUU2NDkxMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCAqLywKIAkJCQk5
MzMwOUQ5NjA5OUU2NDkxMDA1NkU1ODEgLyogSFRNTEludGVyY2hhbmdlLmNwcCAqLywKQEAgLTE1
NTExLDggKzE1NTEzLDYgQEAKIAkJCQlBODlDQ0M1MTBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCAqLywKIAkJCQk5MzMwOURCQTA5OUU2NDkxMDA1NkU1ODEg
LyogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5REJCMDk5RTY0OTEw
MDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oICovLAotCQkJCTkzMzA5REJFMDk5
RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQk5MzMwOURC
RjA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMzA5
REMwMDk5RTY0OTEwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgKi8sCiAJ
CQkJOTMzMDlEQzEwOTlFNjQ5MTAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgg
Ki8sCiAJCQkJQjhEQkRCNDcxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQu
Y3BwICovLApAQCAtMTg2NzEsNyArMTg2NzEsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1t
ICovLAotCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVy
TWFjLm1tICovLAorCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlv
bk1hYy5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTIwOTIzLDYgKzIwOTIzLDcgQEAKIAkJCQk5M0I3N0EzODBBREQ3OTI1MDBFQTRC
ODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4NDM2ODYwQUUw
MUI3NDAwRTUzNzUzIC8qIEZyYW1lTG9hZFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTYy
OEQyMTRFMTIxMzFFRjQwMDU1RENGQyAvKiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5MzMwOUUwRTA5OUU2NDkyMDA1NkU1ODEgLyogRnJhbWVTZWxlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QTIxNDg1MDk3QTNGNTMwMEI5MDUwQSAvKiBGcmFtZVRy
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1Q0JGRUZBMDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFt
ZVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUIwMTIzOTI4Q0EwMEIxNzM4MCAvKiBG
VFBEaXJlY3RvcnlEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjE1OSw3ICsyMjE2MCw2
IEBACiAJCQkJMzcxRjRGRkMwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVk
U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODRBRUJFNTBGQjUwNUZBMDAzODQ4M0UgLyog
U2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZF
NTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgx
MEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzVFNDk3NjEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJp
YnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM3MzksNiArMjM3MzksOCBAQAogCQkJ
CTkzMkUxNjA5MEFGNTc4MzQwMDI1RjQwOCAvKiBGcmFtZUxvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlEMDAwRUJBMjExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hp
bmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVCRjAyNDUwOTc0ODE5MDAwQzQzMTk2IC8qIEZy
YW1lTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8q
IEZyYW1lU2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRBOEM5NkVCMEJFNjkwMzIw
MDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1QTIx
NDg0MDk3QTNGNTMwMEI5MDUwQSAvKiBGcmFtZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjVDQkZFRjkwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5NzIwNUFBRjEyMzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNDk1NSw4ICsyNDk1Nyw2IEBACiAJCQkJMzcxRjRGRkQwRDI1
RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQzNEQTJFMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDg0QUVCRTQwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlv
bkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVF
RkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzdG
QTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzVFNDk3NzEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXRO
b2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2
aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKQEAgLTQ3LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCkBAIC03MSw3ICs3Miw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCkBAIC0yNDM5LDkgKzI0MzksOSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5t
b2RpZnkgYmVjYXVzZSBpdCByZXR1cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBh
biBlbXB0eSBsaW5lLiAgVGhlIHJlc3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAg
Ly8gd2lsbCBiZSBhIGNhcmV0IGF0IHZpc2libGVQb3MuCi0gICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzZWxlY3Rpb247CisgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlv
bi5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlUG9zKSk7Ci0gICAgc2VsZWN0
aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rp
b25SaWdodCwgTGluZUJvdW5kYXJ5KTsKKyAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5KTsKICAg
ICAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW1wb3J0ICJDb2xvck1hYy5o
IgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW1w
b3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNp
bXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgiCkBAIC01Niw3ICs1Nyw2IEBACiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJS
ZW5kZXJXaWRnZXQuaCIKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKLSNpbXBvcnQgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJUZXh0
Q2hlY2tlckNsaWVudC5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0V4Y2VwdGlvbkhhbmRsZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5oCShyZXZpc2lv
biA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRXhjZXB0aW9uSGFuZGxl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKICAgICAKLSAgICBjbGFzcyBT
ZWxlY3Rpb25Db250cm9sbGVyOworICAgIGNsYXNzIEZyYW1lU2VsZWN0aW9uOwogICAgIGNsYXNz
IFJhbmdlOwogCiAgICAgdm9pZCByYWlzZURPTUV4Y2VwdGlvbihFeGNlcHRpb25Db2RlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDg1ODM0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiRm9udEZhbWlseVZhbHVlLmgiCiAjaW5j
bHVkZSAiRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC04Myw3ICs4NCw2IEBACiAjaW5jbHVk
ZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRv
d0RhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lk
IENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250CiAgICAgLy8gZGlzYWJsZSB0aGUg
ZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2VyaWFsaXplZCBpbnRvIHRo
ZSBtYXJrdXAKICAgICBib29sIGlzRWRpdG9yRW5hYmxlZCA9IGZhbHNlOwogICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0
KCkpIHsKLSAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rp
b24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKICAgICAgICAgRWxlbWVudCog
cm9vdCA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogMDsK
ICAgICAgICAgaXNFZGl0b3JFbmFibGVkID0gcm9vdCAmJiBpc0Rlc2NlbmRhbnRPZihyb290KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhh
c2hDaGFuZ2VFdmVudC5oIgpAQCAtMTMxLDcgKzEzMiw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UnVu
bmVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3RhdGljSGFzaFNl
dE5vZGVMaXN0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg1
ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTERp
dkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgotI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgPEVkaXRvci5jcHA+CiAjaW5jbHVkZSA8RWRpdG9yQ29tbWFuZC5j
cHA+CiAjaW5jbHVkZSA8Rm9ybWF0QmxvY2tDb21tYW5kLmNwcD4KKyNpbmNsdWRlIDxGcmFtZVNl
bGVjdGlvbi5jcHA+CiAjaW5jbHVkZSA8SFRNTEludGVyY2hhbmdlLmNwcD4KICNpbmNsdWRlIDxJ
bmRlbnRPdXRkZW50Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8SW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHA+CkBAIC01OSw3ICs2MCw2IEBACiAjaW5jbHVkZSA8UmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFJlcGxhY2VOb2RlV2l0aFNwYW5Db21t
YW5kLmNwcD4KICNpbmNsdWRlIDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA+Ci0jaW5jbHVk
ZSA8U2VsZWN0aW9uQ29udHJvbGxlci5jcHA+CiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZS5jcHA+CiAjaW5jbHVkZSA8U21hcnRS
ZXBsYWNlQ0YuY3BwPgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1
ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlz
aW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25zdAog
ewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChtX2ZyYW1lLT5kb2N1bWVu
dCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2Vs
ZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVj
dGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24tPmlzUmFu
Z2UoKSAmJiAhc2VsZWN0aW9uLT5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogCkBAIC0yNDgsNyAr
MjQ4LDcgQEAgYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmNh
bkRlbGV0ZSgpIGNvbnN0CiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG1f
ZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24tPmlzUmFuZ2UoKSAmJiBz
ZWxlY3Rpb24tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtMjAzMiw3ICsyMDMyLDcg
QEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgogICAgICAgICBmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCktPnNlbGVjdGlvbigpLT5lbmQoKSk7Ci0gICAg
ICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAg
ICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICB9
CiAKICAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQpAQCAtMjI5NiwxMSArMjI5
NiwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc3BlbGxpbmdQYXJhZ3JhcGguc3Vi
cmFuZ2UoMCwgc2VsZWN0aW9uT2Zmc2V0KTsKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwog
ICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0g
ICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOworICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZh
aWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJl
eW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPm1vdmVUbyhtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOwotICAgICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAg
fQogICAgIH0KICNlbHNlCkBAIC0yNzE0LDExICsyNzE0LDExIEBAIHZvaWQgRWRpdG9yOjpjaGFu
Z2VTZWxlY3Rpb25BZnRlckNvbW1hbmQKICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3Mjkz
MTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSBjb250YWluIFJhbmdlcyBmb3Ig
c2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKICAgICBib29sIHNlbGVjdGlvbkRp
ZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3U2VsZWN0aW9uID09IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRp
b24gfHwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKSB7Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlv
bnMgb3B0aW9ucyA9IDA7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRp
b25zIG9wdGlvbnMgPSAwOwogICAgICAgICBpZiAoY2xvc2VUeXBpbmcpCi0gICAgICAgICAgICBv
cHRpb25zIHw9IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsb3NlVHlwaW5nOworICAgICAgICAgICAg
b3B0aW9ucyB8PSBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmc7CiAgICAgICAgIGlmIChjbGVh
clR5cGluZ1N0eWxlKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBTZWxlY3Rpb25Db250cm9sbGVy
OjpDbGVhclR5cGluZ1N0eWxlOworICAgICAgICAgICAgb3B0aW9ucyB8PSBGcmFtZVNlbGVjdGlv
bjo6Q2xlYXJUeXBpbmdTdHlsZTsKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAgIH0KIApAQCAtMjcyNiw3ICsyNzI2
LDcgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZAogICAgIC8vIEZv
ciBleGFtcGxlIHdoZW4geW91IHByZXNzIHJldHVybiBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2Fy
ZXQgaXMgbWFya2VkIGJ5IF4pOgogICAgIC8vIDxkaXYgY29udGVudEVkaXRhYmxlPSJ0cnVlIj48
ZGl2Pl5IZWxsbzwvZGl2PjwvZGl2PgogICAgIC8vIFdlYkNvcmUgaW5zZXJ0cyA8ZGl2Pjxicj48
L2Rpdj4gKmJlZm9yZSogdGhlIGN1cnJlbnQgYmxvY2ssIHdoaWNoIGNvcnJlY3RseSBtb3ZlcyB0
aGUgcGFyYWdyYXBoIGRvd24gYnV0IHdoaWNoIGRvZXNuJ3QKLSAgICAvLyBjaGFuZ2UgdGhlIGNh
cmV0J3MgRE9NIHBvc2l0aW9uIChbImhlbGxvIiwgMF0pLiAgSW4gdGhlc2Ugc2l0dWF0aW9ucyB0
aGUgYWJvdmUgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uIGNhbGwKKyAgICAvLyBj
aGFuZ2UgdGhlIGNhcmV0J3MgRE9NIHBvc2l0aW9uIChbImhlbGxvIiwgMF0pLiBJbiB0aGVzZSBz
aXR1YXRpb25zIHRoZSBhYm92ZSBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uIGNhbGwKICAg
ICAvLyBkb2VzIG5vdCBjYWxsIEVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigpLCB3aGljaCwgb24gdGhlIE1hYywgc2VuZHMgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRp
b25zIGFuZAogICAgIC8vIHN0YXJ0cyBhIG5ldyBraWxsIHJpbmcgc2VxdWVuY2UsIGJ1dCB3ZSB3
YW50IHRvIGRvIHRoZXNlIHRoaW5ncyAobWF0Y2hlcyBBcHBLaXQpLgogICAgIGlmIChzZWxlY3Rp
b25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbikKQEAgLTMxMzQsMTEgKzMxMzQsMTEgQEAgdm9pZCBF
ZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaAogICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7
CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zKQordm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6
U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
PnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgYm9vbCBjbG9zZVR5
cGluZyA9IG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZzsKKyAgICBi
b29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsK
ICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKICAgICBib29sIGlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpIHsKQEAgLTMxNTMsNyArMzE1Myw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKGMKICAgICAgICAgfQogCiAgICAgICAgIC8vIERvbid0IGNoZWNr
IHNwZWxsaW5nIGFuZCBncmFtbWFyIGlmIHRoZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uIGlzIHRyaWdn
ZXJlZCBieSBzcGVsbGluZyBjb3JyZWN0aW9uIGl0c2VsZi4KLSAgICAgICAgYm9vbCBzaG91bGRD
aGVja1NwZWxsaW5nQW5kR3JhbW1hciA9ICEob3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tTcGVs
bGluZ0FuZEdyYW1tYXIgPSAhKG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0
aW9uVHJpZ2dlcmVkKTsKIAogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGlu
ZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9u
LApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKICNpbmNsdWRlICJFZGl0b3JEZWxldGVBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0b3JJbnNl
cnRBY3Rpb24uaCIKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlRl
eHRDaGVja2luZy5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJX
cml0aW5nRGlyZWN0aW9uLmgiCkBAIC0zNTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAgICAgSW50
UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwogCi0gICAgdm9pZCByZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgdm9pZCByZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpOwogICAgIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxT
ZWxlY3RpbmcpIGNvbnN0OwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3Niw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGYKIHsKICAgICBSZWZQ
dHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS0+ZWRpdG9yKCktPm1hcmsoKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVj
dGlvbi0+c2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS0+
ZWRpdG9yKCktPnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUp
OwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwogICAgICAgICBpZiAoIXNlbGVjdGVkKQpAQCAt
NjA2LDQ3ICs2MDYsNDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVj
dAogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uQmFja3dhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlv
bihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92
ZURvd24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVs
YXJpdHksIHRydWUpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIExpbmVHcmFudWxh
cml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVsYXJp
dHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVsYXJpdHksIHRy
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUZvcndh
cmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxl
cjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5
LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0
cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVGb3J3
YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5
KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQs
IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1v
ZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0
aWMgYm9vbCBleGVjdXRlTW92ZUxlZnQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25M
ZWZ0LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
TGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBleGVj
dXRlTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9u
TGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTY1NSw3ICs2NTUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBhZ2VEb3duKEZyYW1lKiBm
CiAgICAgaW50IGRpc3RhbmNlID0gdmVydGljYWxTY3JvbGxEaXN0YW5jZShmcmFtZSk7CiAgICAg
aWYgKCFkaXN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBmcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwg
ZGlzdGFuY2UsIHRydWUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsaWduQ3Vyc29yT25TY3JvbGxB
bHdheXMpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIGRpc3RhbmNlLCB0cnVlLCBGcmFtZVNlbGVjdGlvbjo6QWxp
Z25DdXJzb3JPblNjcm9sbEFsd2F5cyk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUGFn
ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02NjMsNyArNjYzLDcgQEAgc3RhdGljIGJvb2wg
ZXhlY3V0ZU1vdmVQYWdlRG93bkFuZE1vZGlmeQogICAgIGludCBkaXN0YW5jZSA9IHZlcnRpY2Fs
U2Nyb2xsRGlzdGFuY2UoZnJhbWUpOwogICAgIGlmICghZGlzdGFuY2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9u
Q29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgZGlzdGFuY2UsIHRydWUsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsaWduQ3Vyc29yT25TY3JvbGxBbHdheXMpOworICAgIHJldHVybiBmcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgZGlz
dGFuY2UsIHRydWUsIEZyYW1lU2VsZWN0aW9uOjpBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKTsK
IH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYWdlVXAoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02NzEsNyArNjcxLDcgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYWdlVXAoRnJhbWUqIGZyYQogICAgIGludCBkaXN0YW5j
ZSA9IHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoZnJhbWUpOwogICAgIGlmICghZGlzdGFuY2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
ZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIC1kaXN0YW5jZSwgdHJ1ZSwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6QWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cyk7CisgICAgcmV0
dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9u
TW92ZSwgLWRpc3RhbmNlLCB0cnVlLCBGcmFtZVNlbGVjdGlvbjo6QWxpZ25DdXJzb3JPblNjcm9s
bEFsd2F5cyk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUGFnZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQpAQCAtNjc5LDIwOCArNjc5LDIwOCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBh
Z2VVcEFuZE1vZGlmeVNlCiAgICAgaW50IGRpc3RhbmNlID0gdmVydGljYWxTY3JvbGxEaXN0YW5j
ZShmcmFtZSk7CiAgICAgaWYgKCFkaXN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uRXh0ZW5kLCAtZGlzdGFuY2UsIHRydWUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFs
aWduQ3Vyc29yT25TY3JvbGxBbHdheXMpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgLWRpc3RhbmNlLCB0cnVl
LCBGcmFtZVNlbGVjdGlvbjo6QWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cyk7CiB9CiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlUmlnaHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25S
aWdodCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIHJldHVybiBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlv
blJpZ2h0LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0
aW9uUmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9u
UmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCB0cnVlKTsKKyAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUs
IERpcmVjdGlvbkJhY2t3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRB
bmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIERv
Y3VtZW50Qm91bmRhcnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgRG9jdW1l
bnRCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3
YXJkLCBMaW5lQm91bmRhcnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5
KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVC
b3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVu
ZCwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CisgICAgZnJhbWUtPnNl
bGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVj
dGlvbkJhY2t3YXJkLCBMaW5lQm91bmRhcnksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBQYXJhZ3JhcGhCb3VuZGFyeSwgdHJ1ZSk7CisgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3Zl
LCBEaXJlY3Rpb25CYWNrd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGhBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnko
U2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQs
IFBhcmFncmFwaEJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBh
cmFncmFwaEJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2UoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVj
dGlvbkJhY2t3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJh
Y2t3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
c3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlTZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFNlbnRlbmNlQm91bmRh
cnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgU2VudGVuY2VCb3VuZGFyeSwg
dHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9F
bmRPZkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBj
b25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBEb2N1bWVudEJv
dW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIERvY3VtZW50Qm91bmRhcnks
IHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRv
RW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rp
b25Gb3J3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9y
d2FyZCwgRG9jdW1lbnRCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0
YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZlNlbnRlbmNlKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIFNlbnRlbmNlQm91bmRhcnksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbihG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
IHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVl
KTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgU2VudGVuY2VCb3VuZGFyeSwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZkxpbmUo
RnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYp
CiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lQm91bmRhcnksIHRydWUpOwogICAgIHJldHVybiB0
cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIExpbmVCb3VuZGFyeSwg
dHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZlBhcmFn
cmFwaChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnks
IHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZQ
YXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9y
d2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBQYXJhZ3JhcGhCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCB0
cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCB0
cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYXJh
Z3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlv
bkZvcndhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9u
Rm9yd2FyZCwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVVwKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIGZyYW1l
LT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29s
IGV4ZWN1dGVNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0
aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJh
Y2t3YXJkLCBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRCYWNrd2FyZChGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uQmFja3dhcmQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNr
d2FyZCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3Rh
dGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJh
dGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25F
eHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRGb3J3YXJkKEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewot
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOworICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92
ZSwgRGlyZWN0aW9uRm9yd2FyZCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNl
bGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJp
dHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHksIHRy
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRM
ZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHksIHRydWUp
OworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkTGVmdEFuZE1vZGlmeVNl
bGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHks
IHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRSaWdodChG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
IHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uUmlnaHQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25SaWdodCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uUmlnaHQsIFdvcmRHcmFudWxhcml0eSwg
dHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvblJpZ2h0LCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvTGVmdEVuZE9m
TGluZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgTGluZUJvdW5kYXJ5LCB0cnVlKTsK
KyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9MZWZ0RW5kT2ZMaW5lQW5kTW9kaWZ5
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwg
dHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9SaWdodEVuZE9mTGlu
ZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uUmlnaHQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb1JpZ2h0RW5kT2ZMaW5lQW5kTW9kaWZ5
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvblJpZ2h0LCBMaW5lQm91bmRhcnks
IHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5LCB0cnVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDg1ODM0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOjg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgor
I2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1
ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5o
IgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0
LmgiCisjaW5jbHVkZSAiU2VjdXJlVGV4dElucHV0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUg
RURJVF9ERUJVRyAwCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworY29uc3QgaW50IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0g
SU5UX01JTjsKKworU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihGcmFt
ZSogZnJhbWUsIGJvb2wgaXNEcmFnQ2FyZXRDb250cm9sbGVyKQorICAgIDogbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKQorICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxh
cml0eSkKKyAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZTZWxlY3Rpb25Db250cm9sbGVy
OjpjYXJldEJsaW5rVGltZXJGaXJlZCkKKyAgICAsIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUodHJ1
ZSkKKyAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQorICAgICwgbV9pc0RyYWdDYXJl
dENvbnRyb2xsZXIoaXNEcmFnQ2FyZXRDb250cm9sbGVyKQorICAgICwgbV9pc0NhcmV0Qmxpbmtp
bmdTdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2Uo
KSAmJiBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCkgPT0g
ZnJhbWUpCisgICAgLCBtX2NhcmV0VmlzaWJsZShpc0RyYWdDYXJldENvbnRyb2xsZXIpCisgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKK3sKKyAgICBzZXRJc0RpcmVjdGlvbmFsKGZhbHNlKTsKK30K
Kwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKK3sK
KyAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlw
aW5nU3R5bGU7CisgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCisgICAgICAgIG9wdGlvbnMgfD0gVXNl
clRyaWdnZXJlZDsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MuZGVlcEVx
dWl2YWxlbnQoKSwgcG9zLmRlZXBFcXVpdmFsZW50KCksIHBvcy5hZmZpbml0eSgpKSwgb3B0aW9u
cywgYWxpZ24pOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBW
aXNpYmxlUG9zaXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50LCBib29s
IHVzZXJUcmlnZ2VyZWQpCit7CisgICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xv
c2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOworICAgIGlmICh1c2VyVHJpZ2dlcmVkKQorICAg
ICAgICBvcHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oYmFzZS5kZWVwRXF1aXZhbGVudCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwg
YmFzZS5hZmZpbml0eSgpKSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3Nl
VHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAodXNlclRyaWdnZXJlZCkKKyAgICAg
ICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHBvcywgYWZmaW5pdHkpLCBvcHRpb25zKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjptb3ZlVG8oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3Nl
VHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAodXNlclRyaWdnZXJlZCkKKyAgICAg
ICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gciA/IFZpc2libGVTZWxlY3Rpb24oci0+c3RhcnRQb3NpdGlvbigpLCByLT5lbmRQb3Np
dGlvbigpLCBhZmZpbml0eSkgOiBWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKCksIFBvc2l0aW9u
KCksIGFmZmluaXR5KTsKKyAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKK30K
Kwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJmJhc2Us
IGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1c2VyVHJp
Z2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3NlVHlwaW5n
IHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAodXNlclRyaWdnZXJlZCkKKyAgICAgICAgb3B0
aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KGJhc2UsIGV4dGVudCwgYWZmaW5pdHkpLCBvcHRpb25zKTsKK30KKwordm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcywgU2V0U2Vs
ZWN0aW9uT3B0aW9ucyBvcHRpb25zLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVjdGlvbmFsaXR5
UG9saWN5KQoreworICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKKworICAgIGJvb2wg
Y2xvc2VUeXBpbmcgPSBvcHRpb25zICYgQ2xvc2VUeXBpbmc7CisgICAgYm9vbCBzaG91bGRDbGVh
clR5cGluZ1N0eWxlID0gb3B0aW9ucyAmIENsZWFyVHlwaW5nU3R5bGU7CisgICAgYm9vbCB1c2Vy
VHJpZ2dlcmVkID0gb3B0aW9ucyAmIFVzZXJUcmlnZ2VyZWQ7CisKKyAgICBzZXRJc0RpcmVjdGlv
bmFsKGRpcmVjdGlvbmFsaXR5UG9saWN5ID09IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbik7CisK
KyAgICBpZiAobV9pc0RyYWdDYXJldENvbnRyb2xsZXIpIHsKKyAgICAgICAgaW52YWxpZGF0ZUNh
cmV0UmVjdCgpOworICAgICAgICBtX3NlbGVjdGlvbiA9IHM7CisgICAgICAgIG1fY2FyZXRSZWN0
TmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7CisgICAg
ICAgIHVwZGF0ZUNhcmV0UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
bV9mcmFtZSkgeworICAgICAgICBtX3NlbGVjdGlvbiA9IHM7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
NjQ+OiBJbmZpbml0ZSByZWN1cnNpb24gYXQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0
aW9uCisgICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGlu
dG8gYW4gaW5maW5pdGUgbG9vcAorICAgIGlmIChzLmJhc2UoKS5hbmNob3JOb2RlKCkpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcy5iYXNlKCkuYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpOworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1l
bnQtPmZyYW1lKCkgIT0gbV9mcmFtZSAmJiBkb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgp
KSB7CisgICAgICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVj
dGlvbihzLCBvcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChjbG9zZVR5cGluZykKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcobV9mcmFtZS0+ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpKTsKKworICAgIGlmIChzaG91
bGRDbGVhclR5cGluZ1N0eWxlKQorICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7CisKKyAgICBp
ZiAobV9zZWxlY3Rpb24gPT0gcykgeworICAgICAgICAvLyBFdmVuIGlmIHNlbGVjdGlvbiB3YXMg
bm90IGNoYW5nZWQsIHNlbGVjdGlvbiBvZmZzZXRzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC4KKyAg
ICAgICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh1c2VyVHJpZ2dlcmVkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9u
ID0gbV9zZWxlY3Rpb247CisKKyAgICBtX3NlbGVjdGlvbiA9IHM7CisgICAgCisgICAgbV9jYXJl
dFJlY3ROZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgCisgICAgaWYgKCFzLmlzTm9uZSgpKQorICAg
ICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CisgICAgCisgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOworCisgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRp
Y2FsIGFycm93IG5hdmlnYXRpb24uCisgICAgLy8gSXQgd2lsbCBiZSByZXN0b3JlZCBieSB0aGUg
dmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlmIG5lY2Vzc2FyeS4KKyAgICBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uOworICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7Cisg
ICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh1c2VyVHJpZ2dlcmVkKTsKKyAgICBt
X2ZyYW1lLT5lZGl0b3IoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24s
IG9wdGlvbnMpOworICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CisgICAgICAgIFNjcm9sbEFsaWdu
bWVudCBhbGlnbm1lbnQ7CisKKyAgICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlv
cigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKKyAgICAgICAg
ICAgIGFsaWdubWVudCA9IChhbGlnbiA9PSBBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKSA/IFNj
cm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
Q2VudGVySWZOZWVkZWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsaWdubWVudCA9IChh
bGlnbiA9PSBBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKSA/IFNjcm9sbEFsaWdubWVudDo6YWxp
Z25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CisKKyAg
ICAgICAgcmV2ZWFsU2VsZWN0aW9uKGFsaWdubWVudCwgdHJ1ZSk7CisgICAgfQorCisgICAgbm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpOworICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmVucXVldWVEb2N1bWVudEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNl
bGVjdGlvbmNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworc3RhdGljIGJvb2wgcmVt
b3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKK3sKKyAgICBpZiAoIXBvc2l0aW9uLmFuY2hvck5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHBvc2l0aW9uLmFuY2hvck5vZGUoKSA9PSBub2RlKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpOworICAgIHJldHVybiBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5hbmNo
b3JOb2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vZGVX
aWxsQmVSZW1vdmVkKE5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGVyZSBjYW4ndCBiZSBhIHNlbGVjdGlvbiBpbnNpZGUgYSBmcmFn
bWVudCwgc28gaWYgYSBmcmFnbWVudCdzIG5vZGUgaXMgYmVpbmcgcmVtb3ZlZCwKKyAgICAvLyB0
aGUgc2VsZWN0aW9uIGluIHRoZSBkb2N1bWVudCB0aGF0IGNyZWF0ZWQgdGhlIGZyYWdtZW50IG5l
ZWRzIG5vIGFkanVzdG1lbnQuCisgICAgaWYgKG5vZGUgJiYgaGlnaGVzdEFuY2VzdG9yKG5vZGUp
LT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24obm9kZSwgcmVtb3ZpbmdOb2Rl
UmVtb3Zlc1Bvc2l0aW9uKG5vZGUsIG1fc2VsZWN0aW9uLmJhc2UoKSksIHJlbW92aW5nTm9kZVJl
bW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5leHRlbnQoKSksCisgICAgICAgIHJlbW92
aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5zdGFydCgpKSwgcmVtb3Zp
bmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKG5vZGUsIG1fc2VsZWN0aW9uLmVuZCgpKSk7Cit9CisKK3Zv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlKiBu
b2RlLCBib29sIGJhc2VSZW1vdmVkLCBib29sIGV4dGVudFJlbW92ZWQsIGJvb2wgc3RhcnRSZW1v
dmVkLCBib29sIGVuZFJlbW92ZWQpCit7CisgICAgYm9vbCBjbGVhclJlbmRlclRyZWVTZWxlY3Rp
b24gPSBmYWxzZTsKKyAgICBib29sIGNsZWFyRE9NVHJlZVNlbGVjdGlvbiA9IGZhbHNlOworCisg
ICAgaWYgKHN0YXJ0UmVtb3ZlZCB8fCBlbmRSZW1vdmVkKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
aGVuIGVuZHBvaW50cyBhcmUgcmVtb3ZlZCwgd2Ugc2hvdWxkIGp1c3QgYWx0ZXIgdGhlIHNlbGVj
dGlvbiwgaW5zdGVhZCBvZiBibG93aW5nIGl0IGF3YXkuCisgICAgICAgIGNsZWFyUmVuZGVyVHJl
ZVNlbGVjdGlvbiA9IHRydWU7CisgICAgICAgIGNsZWFyRE9NVHJlZVNlbGVjdGlvbiA9IHRydWU7
CisgICAgfSBlbHNlIGlmIChiYXNlUmVtb3ZlZCB8fCBleHRlbnRSZW1vdmVkKSB7CisgICAgICAg
IC8vIFRoZSBiYXNlIGFuZC9vciBleHRlbnQgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQsIGJ1dCB0
aGUgc3RhcnQgYW5kIGVuZCBhcmVuJ3QuCisgICAgICAgIC8vIENoYW5nZSB0aGUgYmFzZSBhbmQg
ZXh0ZW50IHRvIHRoZSBzdGFydCBhbmQgZW5kLCBidXQgZG9uJ3QgcmUtdmFsaWRhdGUgdGhlCisg
ICAgICAgIC8vIHNlbGVjdGlvbiwgc2luY2UgZG9pbmcgc28gY291bGQgbW92ZSB0aGUgc3RhcnQg
YW5kIGVuZCBpbnRvIHRoZSBub2RlCisgICAgICAgIC8vIHRoYXQgaXMgYWJvdXQgdG8gYmUgcmVt
b3ZlZC4KKyAgICAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkpCisgICAgICAgICAg
ICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBt
X3NlbGVjdGlvbi5lbmQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc2VsZWN0aW9u
LnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFy
dCgpKTsKKyAgICB9IGVsc2UgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5m
aXJzdFJhbmdlKCkpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJh
bmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5v
ZGUsIGVjKTsKKyAgICAgICAgaWYgKCFlYyAmJiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9E
RV9CRUZPUkVfQU5EX0FGVEVSIHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
KSkgeworICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5v
ZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0IAorICAgICAgICAg
ICAgLy8gb2NjdXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMg
dGhhdCBjaGFuZ2UgYXMgYSByZXN1bHQgb2YgCisgICAgICAgICAgICAvLyB0aGUgcmVtb3ZhbCB3
b3VsZG4ndCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBkbyBz
byBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFyUmVuZGVy
VHJlZVNlbGVjdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2xlYXJS
ZW5kZXJUcmVlU2VsZWN0aW9uKSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSBtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAg
ZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSB0b1JlbmRlclZpZXcoZG9jdW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAg
dmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9CisKKyAgICBpZiAoY2xlYXJET01UcmVlU2Vs
ZWN0aW9uKQorICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpLCAwKTsKK30K
KworZW51bSBFbmRQb2ludFR5cGUgeyBFbmRQb2ludElzU3RhcnQsIEVuZFBvaW50SXNFbmQgfTsK
Kworc3RhdGljIGJvb2wgc2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRlckFkb3B0aW5nVGV4dFJlcGxh
Y2VtZW50KFBvc2l0aW9uJiBwb3NpdGlvbiwgRW5kUG9pbnRUeXBlIHR5cGUsIENoYXJhY3RlckRh
dGEqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpCit7CisgICAgaWYgKCFwb3NpdGlvbi5hbmNob3JOb2RlKCkgfHwgcG9zaXRpb24u
YW5jaG9yTm9kZSgpICE9IG5vZGUgfHwgcG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEFTU0VSVChwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSAwKTsKKyAgICB1bnNp
Z25lZCBwb3NpdGlvbk9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgaWYgKHBvc2l0aW9uT2Zmc2V0ID4gb2Zmc2V0ICYm
IHBvc2l0aW9uT2Zmc2V0IDwgb2Zmc2V0ICsgb2xkTGVuZ3RoKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIEFkanVzdCB0aGUgb2Zmc2V0IGlmIHRoZSBwb3NpdGlvbiBpcyBhZnRlciBv
ciBhdCB0aGUgZW5kIG9mIHRoZSBkZWxldGVkIGNvbnRlbnRzIChwb3NpdGlvbk9mZnNldCA+PSBv
ZmZzZXQgKyBvbGRMZW5ndGgpCisgICAgLy8gdG8gYXZvaWQgaGF2aW5nIGEgc3RhbGUgb2Zmc2V0
IGV4Y2VwdCB3aGVuIHRoZSBwb3NpdGlvbiBpcyB0aGUgZW5kIG9mIHNlbGVjdGlvbiBhbmQgbm90
aGluZyBpcyBkZWxldGVkLCBpbiB3aGljaCBjYXNlLAorICAgIC8vIGFkanVzdGluZyBvZmZzZXQg
cmVzdWx0cyBpbiBpbmNvcnJlY3RseSBleHRlbmRpbmcgdGhlIHNlbGVjdGlvbiB1bnRpbCB0aGUg
ZW5kIG9mIG5ld2x5IGluc2VydGVkIGNvbnRlbnRzLgorICAgIGlmICgocG9zaXRpb25PZmZzZXQg
PiBvZmZzZXQgKyBvbGRMZW5ndGgpIHx8IChwb3NpdGlvbk9mZnNldCA9PSBvZmZzZXQgKyBvbGRM
ZW5ndGggJiYgKHR5cGUgPT0gRW5kUG9pbnRJc1N0YXJ0IHx8IG9sZExlbmd0aCkpKQorICAgICAg
ICBwb3NpdGlvbi5tb3ZlVG9PZmZzZXQocG9zaXRpb25PZmZzZXQgLSBvbGRMZW5ndGggKyBuZXdM
ZW5ndGgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OnRleHRXaWxsQmVSZXBsYWNlZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRo
ZSBmcmFnbWVudCBjaGVjayBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gU2VlIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzMwMDYyLgorICAgIGlmIChpc05vbmUoKSB8fCAh
bm9kZSB8fCBoaWdoZXN0QW5jZXN0b3Iobm9kZSktPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1F
TlRfRlJBR01FTlRfTk9ERSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gYmFzZSA9
IG1fc2VsZWN0aW9uLmJhc2UoKTsKKyAgICBQb3NpdGlvbiBleHRlbnQgPSBtX3NlbGVjdGlvbi5l
eHRlbnQoKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAg
UG9zaXRpb24gZW5kID0gbV9zZWxlY3Rpb24uZW5kKCk7CisgICAgYm9vbCBzaG91bGRSZW1vdmVC
YXNlID0gc2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRlckFkb3B0aW5nVGV4dFJlcGxhY2VtZW50KGJh
c2UsIG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBFbmRQb2ludElzU3RhcnQgOiBFbmRQb2lu
dElzRW5kLCBub2RlLCBvZmZzZXQsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKKyAgICBib29sIHNo
b3VsZFJlbW92ZUV4dGVudCA9IHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRS
ZXBsYWNlbWVudChleHRlbnQsIG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBFbmRQb2ludElz
RW5kIDogRW5kUG9pbnRJc1N0YXJ0LCBub2RlLCBvZmZzZXQsIG9sZExlbmd0aCwgbmV3TGVuZ3Ro
KTsKKyAgICBib29sIHNob3VsZFJlbW92ZVN0YXJ0ID0gc2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRl
ckFkb3B0aW5nVGV4dFJlcGxhY2VtZW50KHN0YXJ0LCBFbmRQb2ludElzU3RhcnQsIG5vZGUsIG9m
ZnNldCwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOworICAgIGJvb2wgc2hvdWxkUmVtb3ZlRW5kID0g
c2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRlckFkb3B0aW5nVGV4dFJlcGxhY2VtZW50KGVuZCwgRW5k
UG9pbnRJc0VuZCwgbm9kZSwgb2Zmc2V0LCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7CisKKyAgICBp
ZiAoKGJhc2UgIT0gbV9zZWxlY3Rpb24uYmFzZSgpIHx8IGV4dGVudCAhPSBtX3NlbGVjdGlvbi5l
eHRlbnQoKSB8fCBzdGFydCAhPSBtX3NlbGVjdGlvbi5zdGFydCgpIHx8IGVuZCAhPSBtX3NlbGVj
dGlvbi5lbmQoKSkKKyAgICAgICAgJiYgIXNob3VsZFJlbW92ZVN0YXJ0ICYmICFzaG91bGRSZW1v
dmVFbmQpIHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CisgICAgICAg
IGlmICghc2hvdWxkUmVtb3ZlQmFzZSAmJiAhc2hvdWxkUmVtb3ZlRXh0ZW50KQorICAgICAgICAg
ICAgbmV3U2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKGJhc2UsIGV4dGVudCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQor
ICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24uc2V0
V2l0aG91dFZhbGlkYXRpb24oZW5kLCBzdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgICAgIHNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24sIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzcG9uZFRvTm9k
ZU1vZGlmaWNhdGlvbihub2RlLCBzaG91bGRSZW1vdmVCYXNlLCBzaG91bGRSZW1vdmVFeHRlbnQs
IHNob3VsZFJlbW92ZVN0YXJ0LCBzaG91bGRSZW1vdmVFbmQpOworfQorCit2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnNldElzRGlyZWN0aW9uYWwoYm9vbCBpc0RpcmVjdGlvbmFsKQoreworICAg
IG1faXNEaXJlY3Rpb25hbCA9ICFtX2ZyYW1lIHx8IG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlv
cigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpIHx8IGlzRGlyZWN0aW9u
YWw7Cit9CisKK1RleHREaXJlY3Rpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OndpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQoreworICAgIGlmIChhbHRlciAhPSBBbHRlcmF0aW9uRXh0ZW5kKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCk7
CisgICAgUG9zaXRpb24gZW5kID0gbV9zZWxlY3Rpb24uZW5kKCk7CisKKyAgICBib29sIGJhc2VJ
c1N0YXJ0ID0gdHJ1ZTsKKworICAgIGlmIChtX2lzRGlyZWN0aW9uYWwpIHsKKyAgICAgICAgLy8g
TWFrZSBiYXNlIGFuZCBleHRlbnQgbWF0Y2ggc3RhcnQgYW5kIGVuZCBzbyB3ZSBleHRlbmQgdGhl
IHVzZXItdmlzaWJsZSBzZWxlY3Rpb24uCisgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJzIGZv
ciBjYXNlcyB3aGVyZSBiYXNlIGFuZCBleHRlbmQgcG9pbnQgdG8gZGlmZmVyZW50IHBvc2l0aW9u
cyB0aGFuCisgICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgKGUuZy4gYWZ0ZXIgYSBkb3VibGUtY2xp
Y2sgdG8gc2VsZWN0IGEgd29yZCkuCisgICAgICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJz
dCgpKQorICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBiYXNlSXNTdGFydCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IExUUikKKyAgICAgICAgICAgICAg
ICBiYXNlSXNTdGFydCA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YmFzZUlzU3RhcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERp
cmVjdGlvbkZvcndhcmQ6CisgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaXJlY3Rpb25MZWZ0OgorICAgICAgICAgICAgaWYg
KGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBMVFIpCisgICAgICAgICAgICAgICAgYmFz
ZUlzU3RhcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNl
SXNTdGFydCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaXJlY3Rp
b25CYWNrd2FyZDoKKyAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYmFzZUlzU3RhcnQpIHsKKyAgICAg
ICAgbV9zZWxlY3Rpb24uc2V0QmFzZShzdGFydCk7CisgICAgICAgIG1fc2VsZWN0aW9uLnNldEV4
dGVudChlbmQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fc2VsZWN0aW9uLnNldEJhc2UoZW5k
KTsKKyAgICAgICAgbV9zZWxlY3Rpb24uc2V0RXh0ZW50KHN0YXJ0KTsKKyAgICB9Cit9CisKK1Zp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJv
b2wgaXNHZXRTdGFydCkgY29uc3QKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1l
ID8gbV9mcmFtZS0+c2V0dGluZ3MoKSA6IDA7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdz
LT5lZGl0aW5nQmVoYXZpb3JUeXBlKCkgPT0gRWRpdGluZ01hY0JlaGF2aW9yKQorICAgICAgICBy
ZXR1cm4gaXNHZXRTdGFydCA/IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogbV9zZWxlY3Rp
b24udmlzaWJsZUVuZCgpOworICAgIC8vIExpbnV4IGFuZCBXaW5kb3dzIGFsd2F5cyBleHRlbmQg
c2VsZWN0aW9ucyBmcm9tIHRoZSBleHRlbnQgZW5kcG9pbnQuCisgICAgLy8gRklYTUU6IFZpc2li
bGVTZWxlY3Rpb24gc2hvdWxkIGJlIGZpeGVkIHRvIGVuc3VyZSBhcyBhbiBpbnZhcmlhbnQgdGhh
dAorICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUgc2FtZSBub2RlcyBhcyBz
dGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKKyAgICAvLyB0byB3aGljaCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBjaGFuZ2VkCisgICAgLy8g
dG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCisgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
QmFzZUZpcnN0KCkgPyBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnN0
YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBwb3NpdGlvbkZvclBsYXRmb3Jt
KHRydWUpOworfQorCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZW5kRm9y
UGxhdGZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBwb3NpdGlvbkZvclBsYXRmb3JtKGZhbHNl
KTsKK30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVu
ZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBWaXNpYmxlUG9z
aXRpb24gcG9zKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
KworICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQgYW5k
IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgaXM6CisgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nRm9yd2Fy
ZCBhbHdheXMgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseS4KKyAgICAvLyBtb2RpZnlFeHRlbmRp
bmdSaWdodCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgZXhjZXB0
IGZvciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCisgICAgLy8gaXQgZXh0ZW5kcyBmb3J3
YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIExUUiBkaXJlY3Rpb24sCisg
ICAgLy8gYnV0IGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgUlRMIGRpcmVjdGlvbi4KKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAg
Y2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSA9PSBMVFIpCisgICAgICAgICAgICBwb3MgPSBwb3MubmV4dChDYW5ub3RDcm9z
c0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IHBvcy5w
cmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV29yZEdyYW51bGFyaXR5OgorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jaygpID09IExUUikKKyAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24ocG9zKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9z
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgIGlmIChk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQorICAgICAgICAgICAgcG9zID0gbW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51
bGFyaXR5OgorICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5j
ZUJvdW5kYXJ5OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVu
dEJvdW5kYXJ5OgorICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmU/
CisgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsZWN0aW9uLmV4
dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7CisgICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gcG9zLm5l
eHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbmV4dFdvcmRQb3NpdGlvbihwb3MpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHBv
cyA9IG5leHRTZW50ZW5jZVBvc2l0aW9uKHBvcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TGluZUdyYW51bGFyaXR5OgorICAgICAgICBwb3MgPSBuZXh0TGluZVBvc2l0aW9uKHBvcywgeFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgorICAgICAgICBwb3MgPSBuZXh0UGFyYWdyYXBo
UG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhURU5UKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgcG9zID0g
ZW5kT2ZTZW50ZW5jZShlbmRGb3JQbGF0Zm9ybSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBMaW5lQm91bmRhcnk6CisgICAgICAgIHBvcyA9IGxvZ2ljYWxFbmRPZkxpbmUoZW5kRm9yUGxh
dGZvcm0oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6Cisg
ICAgICAgIHBvcyA9IGVuZE9mUGFyYWdyYXBoKGVuZEZvclBsYXRmb3JtKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CisgICAgICAgIHBvcyA9IGVuZEZvclBs
YXRmb3JtKCk7CisgICAgICAgIGlmIChpc0VkaXRhYmxlUG9zaXRpb24ocG9zLmRlZXBFcXVpdmFs
ZW50KCkpKQorICAgICAgICAgICAgcG9zID0gZW5kT2ZFZGl0YWJsZUNvbnRlbnQocG9zKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlv
biBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKKyAgICBzd2l0Y2ggKGdy
YW51bGFyaXR5KSB7CisgICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgaWYg
KGlzUmFuZ2UoKSkgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KSA9PSBMVFIpCisgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwg
bV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9z
ID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZp
bml0eSgpKS5yaWdodCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXb3JkR3JhbnVs
YXJpdHk6CisgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51
bGFyaXR5OgorICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5j
ZUJvdW5kYXJ5OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVu
dEJvdW5kYXJ5OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmUu
CisgICAgICAgIHBvcyA9IG1vZGlmeU1vdmluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExpbmVCb3VuZGFyeToKKyAgICAgICAgcG9zID0gcmlnaHRCb3Vu
ZGFyeU9mTGluZShzdGFydEZvclBsYXRmb3JtKCksIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OgorICAgICAgICBwb3MgPSByaWdodFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxl
Y3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25D
b250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIC8vIEZJWE1FOiBTdGF5IGluIGVk
aXRhYmxlIGNvbnRlbnQgZm9yIHRoZSBsZXNzIGNvbW1vbiBncmFudWxhcml0aWVzLgorICAgIHN3
aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgorICAg
ICAgICBpZiAoaXNSYW5nZSgpKQorICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1f
c2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKS5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9
IG5leHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2VudGVu
Y2VHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbmV4dFNlbnRlbmNlUG9zaXRpb24oVmlzaWJs
ZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUdyYW51bGFyaXR5OiB7CisgICAgICAgIC8v
IGRvd24tYXJyb3dpbmcgZnJvbSBhIHJhbmdlIHNlbGVjdGlvbiB0aGF0IGVuZHMgYXQgdGhlIHN0
YXJ0IG9mIGEgbGluZSBuZWVkcworICAgICAgICAvLyB0byBsZWF2ZSB0aGUgc2VsZWN0aW9uIGF0
IHRoYXQgbGluZSBzdGFydCAobm8gbmVlZCB0byBjYWxsIG5leHRMaW5lUG9zaXRpb24hKQorICAg
ICAgICBwb3MgPSBlbmRGb3JQbGF0Zm9ybSgpOworICAgICAgICBpZiAoIWlzUmFuZ2UoKSB8fCAh
aXNTdGFydE9mTGluZShwb3MpKQorICAgICAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihw
b3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihTVEFSVCkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0g
bmV4dFBhcmFncmFwaFBvc2l0aW9uKGVuZEZvclBsYXRmb3JtKCksIHhQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbihTVEFSVCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbnRlbmNl
Qm91bmRhcnk6CisgICAgICAgIHBvcyA9IGVuZE9mU2VudGVuY2UoZW5kRm9yUGxhdGZvcm0oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUJvdW5kYXJ5OgorICAgICAgICBwb3MgPSBs
b2dpY2FsRW5kT2ZMaW5lKGVuZEZvclBsYXRmb3JtKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBhcmFncmFwaEJvdW5kYXJ5OgorICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChlbmRG
b3JQbGF0Zm9ybSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5
OgorICAgICAgICBwb3MgPSBlbmRGb3JQbGF0Zm9ybSgpOworICAgICAgICBpZiAoaXNFZGl0YWJs
ZVBvc2l0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpKSkKKyAgICAgICAgICAgIHBvcyA9IGVuZE9m
RWRpdGFibGVDb250ZW50KHBvcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IGVu
ZE9mRG9jdW1lbnQocG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRWaXN1YWxX
b3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcG9zOwor
fQorCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5n
TGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHBvcyhtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisKKyAg
ICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1vZGlmeUV4dGVuZGluZ0xlZnQgYW5kIG1vZGlm
eUV4dGVuZGluZ0JhY2t3YXJkIGlzOgorICAgIC8vIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGFs
d2F5cyBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseS4KKyAgICAvLyBtb2RpZnlFeHRlbmRpbmdM
ZWZ0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQgZXhjZXB0IGZv
ciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCisgICAgLy8gaXQgZXh0ZW5kcyBiYWNrd2Fy
ZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBMVFIgZGlyZWN0aW9uLAorICAg
IC8vIGJ1dCBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxv
Y2sgaXMgUlRMIGRpcmVjdGlvbi4KKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgY2Fz
ZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBMVFIpCisgICAgICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoQ2Fubm90Q3Jv
c3NFZGl0aW5nQm91bmRhcnkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3MgPSBwb3Mu
bmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV29yZEdyYW51bGFyaXR5OgorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
aygpID09IExUUikKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvcyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24ocG9zKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQorICAgICAgICAgICAgcG9zID0gbW9kaWZ5
RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVsYXJpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51bGFy
aXR5OgorICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5jZUJv
dW5kYXJ5OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVudEJv
dW5kYXJ5OgorICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KKyAgICAgICAKK1Zp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdCYWNrd2Fy
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBv
cyhtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisKKyAgICAv
LyBFeHRlbmRpbmcgYSBzZWxlY3Rpb24gYmFja3dhcmQgYnkgd29yZCBvciBjaGFyYWN0ZXIgZnJv
bSBqdXN0IGFmdGVyIGEgdGFibGUgc2VsZWN0cworICAgIC8vIHRoZSB0YWJsZS4gIFRoaXMgIm1h
a2VzIHNlbnNlIiBmcm9tIHRoZSB1c2VyIHBlcnNwZWN0aXZlLCBlc3AuIHdoZW4gZGVsZXRpbmcu
CisgICAgLy8gSXQgd2FzIGRvbmUgaGVyZSBpbnN0ZWFkIG9mIGluIFZpc2libGVQb3NpdGlvbiBi
ZWNhdXNlIHdlIHdhbnQgVlBzIHRvIGl0ZXJhdGUKKyAgICAvLyBvdmVyIGV2ZXJ5dGhpbmcuCisg
ICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6
CisgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgorICAgICAgICBwb3Mg
PSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNl
bnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzU2VudGVuY2VQb3NpdGlv
bihwb3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVHcmFudWxhcml0eToKKyAgICAg
ICAgcG9zID0gcHJldmlvdXNMaW5lUG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oRVhURU5UKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFyYWdyYXBoR3Jh
bnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24ocG9zLCB4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhURU5UKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgcG9zID0gc3RhcnRPZlNlbnRlbmNl
KHN0YXJ0Rm9yUGxhdGZvcm0oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUJvdW5k
YXJ5OgorICAgICAgICBwb3MgPSBsb2dpY2FsU3RhcnRPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKKyAgICAgICAg
cG9zID0gc3RhcnRPZlBhcmFncmFwaChzdGFydEZvclBsYXRmb3JtKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CisgICAgICAgIHBvcyA9IHN0YXJ0Rm9yUGxh
dGZvcm0oKTsKKyAgICAgICAgaWYgKGlzRWRpdGFibGVQb3NpdGlvbihwb3MuZGVlcEVxdWl2YWxl
bnQoKSkpCisgICAgICAgICAgICBwb3MgPSBzdGFydE9mRWRpdGFibGVDb250ZW50KHBvcyk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVudChwb3MpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIHN3aXRjaCAoZ3JhbnVs
YXJpdHkpIHsKKyAgICBjYXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgorICAgICAgICBpZiAoaXNS
YW5nZSgpKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBM
VFIpCisgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0
YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxl
Y3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSku
bGVmdCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6Cisg
ICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51bGFyaXR5Ogor
ICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5jZUJvdW5kYXJ5
OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5
OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmUuCisgICAgICAg
IHBvcyA9IG1vZGlmeU1vdmluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgIHBvcyA9IGxlZnRCb3VuZGFyeU9mTGlu
ZShzdGFydEZvclBsYXRmb3JtKCksIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAg
ICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRl
bnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHBvczsKK30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBj
YXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgorICAgICAgICBpZiAoaXNSYW5nZSgpKQorICAgICAg
ICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0
aW9uLmFmZmluaXR5KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3MgPSBWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnBy
ZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5p
dHkoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6Cisg
ICAgICAgIHBvcyA9IHByZXZpb3VzU2VudGVuY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9z
ZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMaW5lR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzTGlu
ZVBvc2l0aW9uKHN0YXJ0Rm9yUGxhdGZvcm0oKSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKFNUQVJUKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJp
dHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24oc3RhcnRGb3JQbGF0
Zm9ybSgpLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oU1RBUlQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTZW50ZW5jZUJvdW5kYXJ5OgorICAgICAgICBwb3MgPSBzdGFydE9m
U2VudGVuY2Uoc3RhcnRGb3JQbGF0Zm9ybSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBM
aW5lQm91bmRhcnk6CisgICAgICAgIHBvcyA9IGxvZ2ljYWxTdGFydE9mTGluZShzdGFydEZvclBs
YXRmb3JtKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5Ogor
ICAgICAgICBwb3MgPSBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0Rm9yUGxhdGZvcm0oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRG9jdW1lbnRCb3VuZGFyeToKKyAgICAgICAgcG9zID0gc3Rh
cnRGb3JQbGF0Zm9ybSgpOworICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9uKHBvcy5kZWVw
RXF1aXZhbGVudCgpKSkKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQo
cG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KHBv
cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KKworc3RhdGljIGJv
b2wgaXNCb3VuZGFyeShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgcmV0dXJu
IGdyYW51bGFyaXR5ID09IExpbmVCb3VuZGFyeSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhC
b3VuZGFyeSB8fCBncmFudWxhcml0eSA9PSBEb2N1bWVudEJvdW5kYXJ5OworfSAgICAKKworYm9v
bCBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQoreworICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CisgICAgICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyOworICAgICAgICB0cmlhbFNl
bGVjdGlvbkNvbnRyb2xsZXIuc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKTsKKyAgICAgICAgdHJp
YWxTZWxlY3Rpb25Db250cm9sbGVyLnNldElzRGlyZWN0aW9uYWwobV9pc0RpcmVjdGlvbmFsKTsK
KyAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLm1vZGlmeShhbHRlciwgZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgZmFsc2UpOworCisgICAgICAgIGJvb2wgY2hhbmdlID0gc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZWxlY3Rpb24oKSk7CisgICAg
ICAgIGlmICghY2hhbmdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHdpbGxCZU1vZGlmaWVkKGFsdGVyLCBkaXJlY3Rpb24pOworCisgICAgYm9vbCB3YXNSYW5nZSA9
IG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsKKyAgICBQb3NpdGlvbiBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24gPSBtX3NlbGVjdGlvbi5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsK
KyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6CisgICAg
ICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0g
bW9kaWZ5TW92aW5nUmlnaHQoZ3JhbnVsYXJpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwb3NpdGlvbiA9IG1vZGlmeUV4dGVuZGluZ1JpZ2h0KGdyYW51bGFyaXR5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBEaXJlY3Rpb25Gb3J3YXJkOgorICAgICAgICBpZiAoYWx0ZXIgPT0g
QWx0ZXJhdGlvbkV4dGVuZCkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5n
Rm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvc2l0aW9u
ID0gbW9kaWZ5TW92aW5nRm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgaWYgKGFsdGVyID09IEFsdGVyYXRpb25Nb3Zl
KQorICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdMZWZ0KGdyYW51bGFyaXR5KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdMZWZ0
KGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXJlY3Rpb25CYWNrd2Fy
ZDoKKyAgICAgICAgaWYgKGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpCisgICAgICAgICAgICBw
b3NpdGlvbiA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdCYWNrd2FyZChncmFudWxh
cml0eSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChwb3NpdGlvbi5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKG1fZnJhbWUpKQorICAgICAgICBpZiAoIXdhc1JhbmdlICYmIGFsdGVyID09IEFsdGVy
YXRpb25Nb3ZlICYmIHBvc2l0aW9uID09IG9yaWdpbmFsU3RhcnRQb3NpdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNvbWUgb2YgdGhlIGFib3ZlIG9wZXJhdGlvbnMg
c2V0IGFuIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbi4KKyAgICAvLyBTZXR0aW5nIGEg
c2VsZWN0aW9uIHdpbGwgY2xlYXIgaXQsIHNvIHNhdmUgaXQgdG8gcG9zc2libHkgcmVzdG9yZSBs
YXRlci4KKyAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkg
YmVjYXVzZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCisgICAgLy8gdGhlIHJlcXVlc3RlZCBw
b3NpdGlvbiB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uIHNldC4KKyAgICBpbnQgeCA9IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihTVEFS
VCk7CisKKyAgICBzd2l0Y2ggKGFsdGVyKSB7CisgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKKyAg
ICAgICAgbW92ZVRvKHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgorICAgICAgICAvLyBTdGFuZGFyZCBNYWMgYmVoYXZp
b3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFyeSBpcyBncm93IHRoZSBzZWxlY3Rpb24gcmF0
aGVyIHRoYW4gbGVhdmluZyB0aGUKKyAgICAgICAgLy8gYmFzZSBpbiBwbGFjZSBhbmQgbW92aW5n
IHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4KKyAgICAgICAgaWYgKCFtX2ZyYW1lIHx8
ICFtX2ZyYW1lLT5lZGl0b3IoKS0+YmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9u
V2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlz
Qm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1
c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9u
IHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uID09IERpcmVjdGlvbkZvcndhcmQgfHwgKHRleHREaXJlY3Rpb24gPT0g
TFRSICYmIGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25SaWdodCkgfHwgKHRleHREaXJlY3Rpb24gPT0g
UlRMICYmIGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25MZWZ0KSkKKyAgICAgICAgICAgICAgICBzZXRF
bmQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHNldFN0YXJ0KHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGdyYW51bGFyaXR5ID09IExpbmVHcmFu
dWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFudWxhcml0eSkKKyAgICAgICAg
bV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSB4OworCisgICAgaWYgKHVzZXJUcmln
Z2VyZWQpCisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKwor
CisgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKworICAgIHNldElzRGlyZWN0aW9uYWwo
YWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
RklYTUU6IE1heWJlIGJhc2VsaW5lIHdvdWxkIGJlIGJldHRlcj8KK3N0YXRpYyBib29sIGFic29s
dXRlQ2FyZXRZKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgaW50ICZ5KQoreworICAgIEludFJl
Y3QgcmVjdCA9IGMuYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAgIGlmIChyZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLyAyOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgaW50IHZlcnRpY2FsRGlzdGFuY2UsIGJvb2wgdXNl
clRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKK3sKKyAgICBpZiAoIXZlcnRp
Y2FsRGlzdGFuY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh1c2VyVHJpZ2dl
cmVkKSB7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgdHJpYWxTZWxlY3Rpb25Db250cm9s
bGVyOworICAgICAgICB0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIuc2V0U2VsZWN0aW9uKG1fc2Vs
ZWN0aW9uKTsKKyAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNldElzRGlyZWN0aW9u
YWwobV9pc0RpcmVjdGlvbmFsKTsKKyAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLm1v
ZGlmeShhbHRlciwgdmVydGljYWxEaXN0YW5jZSwgZmFsc2UpOworCisgICAgICAgIGJvb2wgY2hh
bmdlID0gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZWxl
Y3Rpb24oKSk7CisgICAgICAgIGlmICghY2hhbmdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgdXAgPSB2ZXJ0aWNhbERpc3RhbmNlIDwgMDsKKyAgICBpZiAo
dXApCisgICAgICAgIHZlcnRpY2FsRGlzdGFuY2UgPSAtdmVydGljYWxEaXN0YW5jZTsKKworICAg
IHdpbGxCZU1vZGlmaWVkKGFsdGVyLCB1cCA/IERpcmVjdGlvbkJhY2t3YXJkIDogRGlyZWN0aW9u
Rm9yd2FyZCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIGludCB4UG9zID0gMDsK
KyAgICBzd2l0Y2ggKGFsdGVyKSB7CisgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKKyAgICAgICAg
cG9zID0gVmlzaWJsZVBvc2l0aW9uKHVwID8gbV9zZWxlY3Rpb24uc3RhcnQoKSA6IG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgeFBvcyA9IHhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih1cCA/IFNUQVJUIDogRU5EKTsKKyAgICAgICAgbV9z
ZWxlY3Rpb24uc2V0QWZmaW5pdHkodXAgPyBVUFNUUkVBTSA6IERPV05TVFJFQU0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFsdGVyYXRpb25FeHRlbmQ6CisgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7
CisgICAgICAgIHhQb3MgPSB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhURU5UKTsK
KyAgICAgICAgbV9zZWxlY3Rpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGludCBzdGFydFk7CisgICAgaWYgKCFhYnNvbHV0ZUNhcmV0WShw
b3MsIHN0YXJ0WSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodXApCisgICAgICAg
IHN0YXJ0WSA9IC1zdGFydFk7CisgICAgaW50IGxhc3RZID0gc3RhcnRZOworCisgICAgVmlzaWJs
ZVBvc2l0aW9uIHJlc3VsdDsKKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dDsKKyAgICBmb3IgKFZp
c2libGVQb3NpdGlvbiBwID0gcG9zOyA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSAodXAg
PyBwcmV2aW91c0xpbmVQb3NpdGlvbiA6IG5leHRMaW5lUG9zaXRpb24pKHAsIHhQb3MpOworICAg
ICAgICBpZiAobmV4dC5pc051bGwoKSB8fCBuZXh0ID09IHApCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaW50IG5leHRZOworICAgICAgICBpZiAoIWFic29sdXRlQ2FyZXRZKG5leHQsIG5l
eHRZKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodXApCisgICAgICAgICAgICBu
ZXh0WSA9IC1uZXh0WTsKKyAgICAgICAgaWYgKG5leHRZIC0gc3RhcnRZID4gdmVydGljYWxEaXN0
YW5jZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobmV4dFkgPj0gbGFzdFkpIHsK
KyAgICAgICAgICAgIGxhc3RZID0gbmV4dFk7CisgICAgICAgICAgICByZXN1bHQgPSBuZXh0Owor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChhbHRlcikgeworICAgIGNhc2UgQWx0ZXJhdGlvbk1v
dmU6CisgICAgICAgIG1vdmVUbyhyZXN1bHQsIHVzZXJUcmlnZ2VyZWQsIGFsaWduKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgorICAgICAgICBzZXRFeHRlbnQo
cmVzdWx0LCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KHVzZXJUcmlnZ2VyZWQpCisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxh
cml0eTsKKworICAgIHNldElzRGlyZWN0aW9uYWwoYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5cGUpCit7CisgICAgaW50
IHggPSAwOworCisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm4geDsKKworICAgIFBv
c2l0aW9uIHBvczsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFNUQVJUOgorICAgICAg
ICBwb3MgPSBtX3NlbGVjdGlvbi5zdGFydCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVO
RDoKKyAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uZW5kKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQkFTRToKKyAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uYmFzZSgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVYVEVOVDoKKyAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uZXh0ZW50
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IHBvcy5hbmNo
b3JOb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIHg7CisgICAgICAgIAorICAgIGlmIChtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbiA9PSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikgeworICAgICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKHBvcywgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7
CisgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBjcmVhdGlvbiBjYW4gZmFpbCBoZXJlIGlmIGEg
bm9kZSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYmVjb21lcyB2aXNpYmlsaXR5OmhpZGRlbgor
ICAgICAgICAvLyBhZnRlciB0aGUgc2VsZWN0aW9uIGlzIGNyZWF0ZWQgYW5kIGJlZm9yZSB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAgICAgeCA9IHZpc2libGVQb3NpdGlvbi5pc05vdE51
bGwoKSA/IHZpc2libGVQb3NpdGlvbi54T2Zmc2V0Rm9yVmVydGljYWxOYXZpZ2F0aW9uKCkgOiAw
OworICAgICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IHg7CisgICAgfSBl
bHNlCisgICAgICAgIHggPSBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKKyAgICAg
ICAgCisgICAgcmV0dXJuIHg7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIo
KQoreworICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKyAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dl
cmVkKQoreworICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQorICAgICAgICBzZXRC
YXNlKHBvcywgdXNlclRyaWdnZXJlZCk7CisgICAgZWxzZQorICAgICAgICBzZXRFeHRlbnQocG9z
LCB1c2VyVHJpZ2dlcmVkKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFbmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBp
ZiAobV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSkKKyAgICAgICAgc2V0RXh0ZW50KHBvcywgdXNl
clRyaWdnZXJlZCk7CisgICAgZWxzZQorICAgICAgICBzZXRCYXNlKHBvcywgdXNlclRyaWdnZXJl
ZCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9w
dGlvbnMgb3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAo
dXNlclRyaWdnZXJlZCkKKyAgICAgICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIHNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpLCBtX3NlbGVj
dGlvbi5leHRlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKK30KKwordm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJv
b2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7CisgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCisg
ICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihtX3NlbGVjdGlvbi5iYXNlKCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3Mu
YWZmaW5pdHkoKSksIG9wdGlvbnMpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
dEJhc2UoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJU
cmlnZ2VyZWQpCit7CisgICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBp
bmcgfCBDbGVhclR5cGluZ1N0eWxlOworICAgIGlmICh1c2VyVHJpZ2dlcmVkKQorICAgICAgICBv
cHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24ocG9zLCBtX3NlbGVjdGlvbi5leHRlbnQoKSwgYWZmaW5pdHkpLCBvcHRpb25zKTsKK30KKwor
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCit7CisgICAgU2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOworICAg
IGlmICh1c2VyVHJpZ2dlcmVkKQorICAgICAgICBvcHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7Cisg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3Ms
IGFmZmluaXR5KSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0
Q2FyZXRSZWN0TmVlZHNVcGRhdGUoYm9vbCBmbGFnKQoreworICAgIG1fY2FyZXRSZWN0TmVlZHNV
cGRhdGUgPSBmbGFnOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUNhcmV0
UmVjdCgpCit7CisgICAgaWYgKGlzTm9uZSgpIHx8ICFtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hv
ck5vZGUoKS0+aW5Eb2N1bWVudCgpIHx8ICFtX3NlbGVjdGlvbi5lbmQoKS5hbmNob3JOb2RlKCkt
PmluRG9jdW1lbnQoKSkgeworICAgICAgICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgp
LT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgCisgICAgbV9jYXJldFJl
Y3QgPSBJbnRSZWN0KCk7CisgICAgICAgIAorICAgIGlmIChpc0NhcmV0KCkpIHsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZp
bml0eSgpKTsKKyAgICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgeworICAgICAgICAgICAgQVNT
RVJUKHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaXJzdCBjb21wdXRlIGEgcmVjdCBsb2NhbCB0
byB0aGUgcmVuZGVyZXIgYXQgdGhlIHNlbGVjdGlvbiBzdGFydAorICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlcjsKKyAgICAgICAgICAgIEludFJlY3QgbG9jYWxSZWN0ID0gcG9zLmxv
Y2FsQ2FyZXRSZWN0KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgLy8gR2V0IHRoZSByZW5kZXJl
ciB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAod2hpY2gK
KyAgICAgICAgICAgIC8vIGlzIGVpdGhlciB0aGUgcmVuZGVyZXIgd2UganVzdCBmb3VuZCwgb3Ig
b25lIG9mIGl0cyBjb250YWluZXJzKQorICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjYXJldFBh
aW50ZXIgPSBjYXJldFJlbmRlcmVyKCk7CisKKyAgICAgICAgICAgIC8vIENvbXB1dGUgYW4gb2Zm
c2V0IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZCB0aGUgY2FyZXRQYWludGVyCisgICAgICAgICAg
ICBib29sIHVucm9vdGVkID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAocmVuZGVyZXIgIT0g
Y2FyZXRQYWludGVyKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXJP
YmplY3QgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb250
YWluZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5yb290ZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbG9jYWxSZWN0Lm1vdmUocmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmVy
T2JqZWN0LCBsb2NhbFJlY3QubG9jYXRpb24oKSkpOworICAgICAgICAgICAgICAgIHJlbmRlcmVy
ID0gY29udGFpbmVyT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIXVucm9vdGVkKQorICAgICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gbG9jYWxS
ZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IGZh
bHNlOworfQorCitSZW5kZXJPYmplY3QqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVy
ZXIoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gaWYgY2FyZXROb2RlIGlzIGEgYmxvY2sg
YW5kIGNhcmV0IGlzIGluc2lkZSBpdCB0aGVuIGNhcmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRo
YXQgYmxvY2sKKyAgICBib29sIHBhaW50ZWRCeUJsb2NrID0gcmVuZGVyZXItPmlzQmxvY2tGbG93
KCkgJiYgY2FyZXRSZW5kZXJzSW5zaWRlTm9kZShub2RlKTsKKyAgICByZXR1cm4gcGFpbnRlZEJ5
QmxvY2sgPyByZW5kZXJlciA6IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKK30KKworSW50
UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpsb2NhbENhcmV0UmVjdCgpCit7CisgICAgaWYgKG1f
Y2FyZXRSZWN0TmVlZHNVcGRhdGUpCisgICAgICAgIHVwZGF0ZUNhcmV0UmVjdCgpOworICAgIAor
ICAgIHJldHVybiBtX2NhcmV0UmVjdDsKK30KKworSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVy
OjphYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAor
eworICAgIFJlbmRlck9iamVjdCogY2FyZXRQYWludGVyID0gY2FyZXRSZW5kZXJlcigpOworICAg
IGlmICghY2FyZXRQYWludGVyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIAorICAg
IEludFJlY3QgbG9jYWxSZWN0KHJlY3QpOworICAgIGlmIChjYXJldFBhaW50ZXItPmlzQm94KCkp
CisgICAgICAgIHRvUmVuZGVyQm94KGNhcmV0UGFpbnRlciktPmZsaXBGb3JXcml0aW5nTW9kZShs
b2NhbFJlY3QpOworICAgIHJldHVybiBjYXJldFBhaW50ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cit9CisKK0ludFJl
Y3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6YWJzb2x1dGVDYXJldEJvdW5kcygpCit7CisgICAgcmVj
b21wdXRlQ2FyZXRSZWN0KCk7CisgICAgcmV0dXJuIG1fYWJzQ2FyZXRCb3VuZHM7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IHJlcGFpbnRSZWN0Rm9yQ2FyZXQoSW50UmVjdCBjYXJldCkKK3sKKyAgICBp
ZiAoY2FyZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBkaXJ0eSByZWN0IGludGVyc2VjdHMgdGhlIGJsb2NrIHRoYXQgcGFpbnRz
IHRoZSBjYXJldCBldmVuIGluIHRoZSBjYXNlIHdoZXJlCisgICAgLy8gdGhlIGNhcmV0IGl0c2Vs
ZiBpcyBqdXN0IG91dHNpZGUgdGhlIGJsb2NrLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTA4Nj4uCisgICAgY2FyZXQuaW5mbGF0ZVgoMSk7CisgICAgcmV0
dXJuIGNhcmV0OworfQorCitJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVwYWlu
dFJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdChy
ZXBhaW50UmVjdEZvckNhcmV0KGxvY2FsQ2FyZXRSZWN0Rm9yUGFpbnRpbmcoKSkpOworfQorCiti
b29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0UmVjdCgpCit7CisgICAgaWYg
KCFtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgRnJhbWVW
aWV3KiB2ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGlmICghdikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9jYXJldFJlY3Q7Cisg
ICAgSW50UmVjdCBuZXdSZWN0ID0gbG9jYWxDYXJldFJlY3QoKTsKKyAgICBpZiAob2xkUmVjdCA9
PSBuZXdSZWN0ICYmICFtX2Fic0NhcmV0Qm91bmRzRGlydHkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEludFJlY3Qgb2xkQWJzQ2FyZXRCb3VuZHMgPSBtX2Fic0NhcmV0Qm91bmRzOwor
ICAgIC8vIEZJWE1FOiBSZW5hbWUgbV9jYXJldFJlY3QgdG8gbV9sb2NhbENhcmV0UmVjdC4KKyAg
ICBtX2Fic0NhcmV0Qm91bmRzID0gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QobV9jYXJldFJl
Y3QpOworICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IGZhbHNlOworICAgIAorICAgIGlmIChv
bGRBYnNDYXJldEJvdW5kcyA9PSBtX2Fic0NhcmV0Qm91bmRzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgIEludFJlY3Qgb2xkQWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHMg
PSBtX2Fic29sdXRlQ2FyZXRSZXBhaW50Qm91bmRzOworICAgIC8vIFdlIGJlbGlldmUgdGhhdCB3
ZSBuZWVkIHRvIGluZmxhdGUgdGhlIGxvY2FsIHJlY3QgYmVmb3JlIHRyYW5zZm9ybWluZyBpdCB0
byBvYnRhaW4gdGhlIHJlcGFpbnQgYm91bmRzLgorICAgIG1fYWJzb2x1dGVDYXJldFJlcGFpbnRC
b3VuZHMgPSBjYXJldFJlcGFpbnRSZWN0KCk7CisKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkgICAg
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobV9mcmFtZS0+ZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgY2FyZXQgcmVwYWlu
dGluZyBjb250YWluZXItYXdhcmUuCisgICAgICAgIHZpZXctPnJlcGFpbnRSZWN0YW5nbGVJblZp
ZXdBbmRDb21wb3NpdGVkTGF5ZXJzKG9sZEFic29sdXRlQ2FyZXRSZXBhaW50Qm91bmRzLCBmYWxz
ZSk7CisgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldykpCisgICAgICAgICAgICB2
aWV3LT5yZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhtX2Fic29sdXRl
Q2FyZXRSZXBhaW50Qm91bmRzLCBmYWxzZSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVwYWludENhcmV0KGNv
bnN0IFJlbmRlclZpZXcqIHZpZXcpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZpZXcpOworICAgIEZy
YW1lKiBmcmFtZSA9IHZpZXctPmZyYW1lVmlldygpID8gdmlldy0+ZnJhbWVWaWV3KCktPmZyYW1l
KCkgOiAwOyAvLyBUaGUgZnJhbWUgd2hlcmUgdGhlIHNlbGVjdGlvbiBzdGFydGVkLgorICAgIGJv
b2wgY2FyZXRCcm93c2luZyA9IGZyYW1lICYmIGZyYW1lLT5zZXR0aW5ncygpICYmIGZyYW1lLT5z
ZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIHJldHVybiAoY2FyZXRCcm93
c2luZyB8fCBpc0NvbnRlbnRFZGl0YWJsZSgpKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjppbnZhbGlkYXRlQ2FyZXRSZWN0KCkKK3sKKyAgICBpZiAoIWlzQ2FyZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hv
ck5vZGUoKS0+ZG9jdW1lbnQoKTsKKworICAgIC8vIHJlY29tcHV0ZUNhcmV0UmVjdCB3aWxsIGFs
d2F5cyByZXR1cm4gZmFsc2UgZm9yIHRoZSBkcmFnIGNhcmV0LAorICAgIC8vIGJlY2F1c2UgaXRz
IG1fZnJhbWUgaXMgYWx3YXlzIDAuCisgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkID0gcmVjb21w
dXRlQ2FyZXRSZWN0KCk7CisKKyAgICAvLyBFRElUIEZJWE1FOiBUaGlzIGlzIGFuIHVuZm9ydHVu
YXRlIGhhY2suCisgICAgLy8gQmFzaWNhbGx5LCB3ZSBjYW4ndCB0cnVzdCB0aGlzIGxheW91dCBw
b3NpdGlvbiBzaW5jZSB3ZSAKKyAgICAvLyBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgY2hlY2sg
dG8gc2VlIGlmIHdlIGFyZSBpbiB1bnJlbmRlcmVkIAorICAgIC8vIGNvbnRlbnQgd2lsbCB3b3Jr
IGF0IHRoaXMgcG9pbnQuIFdlIG1heSBoYXZlIHRvIHdhaXQgZm9yCisgICAgLy8gYSBsYXlvdXQg
YW5kIHJlLXJlbmRlciBvZiB0aGUgZG9jdW1lbnQgdG8gaGFwcGVuLiBTbywgcmVzZXR0aW5nIHRo
aXMKKyAgICAvLyBmbGFnIHdpbGwgY2F1c2UgYW5vdGhlciBjYXJldCBsYXlvdXQgdG8gaGFwcGVu
IHRoZSBmaXJzdCB0aW1lCisgICAgLy8gdGhhdCB3ZSB0cnkgdG8gcGFpbnQgdGhlIGNhcmV0IGFm
dGVyIHRoaXMgY2FsbC4gVGhhdCBvbmUgd2lsbCB3b3JrIHNpbmNlCisgICAgLy8gaXQgaGFwcGVu
cyBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGFjY291bnRlZCBmb3IgYW55IGVkaXRpbmcKKyAgICAv
LyBjaGFuZ2VzIHdoaWNoIG1heSBoYXZlIGJlZW4gZG9uZS4KKyAgICAvLyBBbmQsIHdlIG5lZWQg
dG8gbGVhdmUgdGhpcyBsYXlvdXQgaGVyZSBzbyB0aGUgY2FyZXQgbW92ZXMgcmlnaHQgCisgICAg
Ly8gYXdheSBhZnRlciBjbGlja2luZy4KKyAgICBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gdHJ1
ZTsKKworICAgIGlmICghY2FyZXRSZWN0Q2hhbmdlZCkgeworICAgICAgICBSZW5kZXJWaWV3KiB2
aWV3ID0gdG9SZW5kZXJWaWV3KGQtPnJlbmRlcmVyKCkpOworICAgICAgICBpZiAodmlldyAmJiBz
aG91bGRSZXBhaW50Q2FyZXQodmlldykpCisgICAgICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFu
Z2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhjYXJldFJlcGFpbnRSZWN0KCksIGZhbHNlKTsK
KyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKK3sKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKKyAgICBpZiAoIW1fY2FyZXRWaXNpYmxlKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2NhcmV0UGFpbnQpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SW50UmVjdCBkcmF3aW5nUmVjdCA9IGxvY2FsQ2FyZXRSZWN0Rm9yUGFpbnRpbmcoKTsKKyAgICBp
ZiAoY2FyZXRSZW5kZXJlcigpICYmIGNhcmV0UmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAg
dG9SZW5kZXJCb3goY2FyZXRSZW5kZXJlcigpKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGRyYXdpbmdS
ZWN0KTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgSW50UmVjdCBjYXJldCA9
IGludGVyc2VjdGlvbihkcmF3aW5nUmVjdCwgY2xpcFJlY3QpOworICAgIGlmIChjYXJldC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9yIGNhcmV0Q29sb3IgPSBDb2xvcjo6
YmxhY2s7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQjsK
KyAgICBFbGVtZW50KiBlbGVtZW50ID0gcm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGlmIChl
bGVtZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgY2FyZXRDb2xvciA9IGVs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKKyAgICAgICAgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmNvbG9yU3BhY2UoKTsKKyAgICB9CisKKyAgICBjb250ZXh0LT5maWxsUmVjdChjYXJl
dCwgY2FyZXRDb2xvciwgY29sb3JTcGFjZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0odHgpOworICAgIFVOVVNFRF9QQVJBTSh0eSk7CisgICAg
VU5VU0VEX1BBUkFNKGNsaXBSZWN0KTsKKyNlbmRpZgorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVkKSBjb25z
dAoreworICAgIGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihyLT5ub2RlKCkpOworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBl
bGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9IGVsc2Ug
aWYgKHItPmlzVGV4dCgpKSB7CisgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRv
UmVuZGVyVGV4dChyKTsKKyAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXItPnRleHRMZW5ndGgoKSB8
fCAhdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKSkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIlcyN0ZXh0IChlbXB0eSlcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXggPSAzNjsKKyAgICAgICAgU3RyaW5nIHRleHQgPSB0ZXh0UmVuZGVyZXIt
PnRleHQoKTsKKyAgICAgICAgaW50IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgICAg
ICBpZiAoc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAgICAg
ICAgaWYgKHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSkK
KyAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHItPm5vZGUoKSA9PSBt
X3NlbGVjdGlvbi5lbmQoKS5jb250YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gbV9zZWxlY3Rpb24uZW5kKCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOworCisg
ICAgICAgICAgICBpbnQgcG9zOworICAgICAgICAgICAgSW5saW5lVGV4dEJveCogYm94ID0gdGV4
dFJlbmRlcmVyLT5maW5kTmV4dElubGluZVRleHRCb3gob2Zmc2V0LCBwb3MpOworICAgICAgICAg
ICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKGJveC0+c3RhcnQoKSwgYm94LT5sZW4oKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBzaG93OworICAgICAgICAgICAgaW50IG1pZCA9
IG1heCAvIDI7CisgICAgICAgICAgICBpbnQgY2FyZXQgPSAwOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyB0ZXh0IGlzIHNob3J0ZXIgdGhhbiBtYXgKKyAgICAgICAgICAgIGlmICh0ZXh0
TGVuZ3RoIDwgbWF4KSB7CisgICAgICAgICAgICAgICAgc2hvdyA9IHRleHQ7CisgICAgICAgICAg
ICAgICAgY2FyZXQgPSBwb3M7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyAtIG1pZCA8IDAp
IHsKKyAgICAgICAgICAgICAgICAvLyB0b28gZmV3IGNoYXJhY3RlcnMgdG8gbGVmdAorICAgICAg
ICAgICAgICAgIHNob3cgPSB0ZXh0LmxlZnQobWF4IC0gMykgKyAiLi4uIjsKKyAgICAgICAgICAg
ICAgICBjYXJldCA9IHBvczsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIC0gbWlkID49IDAg
JiYgcG9zICsgbWlkIDw9IHRleHRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBlbm91Z2gg
Y2hhcmFjdGVycyBvbiBlYWNoIHNpZGUKKyAgICAgICAgICAgICAgICBzaG93ID0gIi4uLiIgKyB0
ZXh0LnN1YnN0cmluZyhwb3MgLSBtaWQgKyAzLCBtYXggLSA2KSArICIuLi4iOworICAgICAgICAg
ICAgICAgIGNhcmV0ID0gbWlkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyB0b28gZmV3IGNoYXJhY3RlcnMgb24gcmlnaHQKKyAgICAgICAgICAgICAgICBzaG93ID0g
Ii4uLiIgKyB0ZXh0LnJpZ2h0KG1heCAtIDMpOworICAgICAgICAgICAgICAgIGNhcmV0ID0gcG9z
IC0gKHRleHRMZW5ndGggLSBzaG93Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2hvdy5yZXBsYWNlKCdcbicsICcgJyk7CisgICAgICAgICAgICBz
aG93LnJlcGxhY2UoJ1xyJywgJyAnKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+
ICN0ZXh0IDogXCIlc1wiIGF0IG9mZnNldCAlZFxuIiwgc2hvdy51dGY4KCkuZGF0YSgpLCBwb3Mp
OworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgICAgICIpOworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXJldDsgaSsrKQorICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiICIpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJeXG4iKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoaW50KXRleHQubGVuZ3RoKCkgPiBtYXgp
CisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQubGVmdChtYXggLSAzKSArICIuLi4iOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmxlZnQobWF4KTsKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICN0ZXh0IDogXCIlc1wiXG4iLCB0ZXh0LnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIAorICAgIC8vIFRyZWF0IGEgY29s
bGFwc2VkIHNlbGVjdGlvbiBsaWtlIG5vIHNlbGVjdGlvbi4KKyAgICBpZiAoIWlzUmFuZ2UoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZG9jdW1lbnQtPnJlbmRlcmVyKCkpIAor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwor
ICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVz
dWx0KTsKKyAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgaWYg
KCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKGlubmVyTm9kZS0+cmVu
ZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSk7CisgICAgaWYg
KHZpc2libGVQb3MuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgaWYgKG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLmlzTnVsbCgpIHx8IG1fc2VsZWN0aW9u
LnZpc2libGVFbmQoKS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICBQb3NpdGlvbiBzdGFydChtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZh
bGVudCgpKTsKKyAgICBQb3NpdGlvbiBlbmQobV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpLmRlZXBF
cXVpdmFsZW50KCkpOworICAgIFBvc2l0aW9uIHAodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgp
KTsKKworICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKHN0YXJ0LCBwKSA8PSAwICYmIGNvbXBh
cmVQb3NpdGlvbnMocCwgZW5kKSA8PSAwOworfQorCisvLyBXb3JrYXJvdW5kIGZvciB0aGUgZmFj
dCB0aGF0IGl0J3MgaGFyZCB0byBkZWxldGUgYSBmcmFtZS4KKy8vIENhbGwgdGhpcyBhZnRlciBk
b2luZyB1c2VyLXRyaWdnZXJlZCBzZWxlY3Rpb25zIHRvIG1ha2UgaXQgZWFzeSB0byBkZWxldGUg
dGhlIGZyYW1lIHlvdSBlbnRpcmVseSBzZWxlY3RlZC4KKy8vIENhbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBhcyBwYXJ0IG9mIGV2ZXJ5IHNldFNlbGVjdGlvbiBjYWxsIGJlY2F1c2UgaW4gc29tZSBj
b250ZXh0cyBpdCBtaWdodCBub3QgYmUgZ29vZAorLy8gZm9yIHRoZSBmb2N1cyB0byBtb3ZlIHRv
IGFub3RoZXIgZnJhbWUuIFNvIGluc3RlYWQgd2UgY2FsbCBpdCBmcm9tIHBsYWNlcyB3aGVyZSB3
ZSBhcmUgc2VsZWN0aW5nIHdpdGggdGhlCisvLyBtb3VzZSBvciB0aGUga2V5Ym9hcmQgYWZ0ZXIg
c2V0dGluZyB0aGUgc2VsZWN0aW9uLgordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RG
cmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCit7CisgICAgLy8gRmluZCB0aGUg
cGFyZW50IGZyYW1lOyBpZiB0aGVyZSBpcyBub25lLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBk
by4KKyAgICBGcmFtZSogcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBp
ZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIHRoZSBlbnRpcmUgZnJhbWUgY29udGVudHM7IGlmIG5v
dCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgorICAgIGlmICghaXNSYW5nZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFpc1N0YXJ0T2ZEb2N1bWVudChzZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRW5kT2ZEb2N1bWVudChz
ZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQg
dG8gdGhlIDxpZnJhbWU+IG9yIDxmcmFtZT4gKG9yIGV2ZW4gPG9iamVjdD4pIGVsZW1lbnQgaW4g
dGhlIHBhcmVudCBmcmFtZS4KKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2ZyYW1lLT5v
d25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIENvbnRhaW5lck5vZGUqIG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFy
ZW50Tm9kZSgpOworICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50KQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIC8vIFRoaXMgbWV0aG9kJ3MgcHVycG9zZSBpcyBpdCB0byBtYWtlIGl0
IGVhc2llciB0byBzZWxlY3QgaWZyYW1lcyAoaW4gb3JkZXIgdG8gZGVsZXRlIHRoZW0pLiAgRG9u
J3QgZG8gYW55dGhpbmcgaWYgdGhlIGlmcmFtZSBpc24ndCBkZWxldGFibGUuCisgICAgaWYgKCFv
d25lckVsZW1lbnRQYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBDcmVhdGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUg
ZWxlbWVudC4KKyAgICB1bnNpZ25lZCBvd25lckVsZW1lbnROb2RlSW5kZXggPSBvd25lckVsZW1l
bnQtPm5vZGVJbmRleCgpOworICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25lckVsZW1lbnQo
VmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50
Tm9kZUluZGV4LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkpOworICAgIFZp
c2libGVQb3NpdGlvbiBhZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
b3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKKwor
ICAgIC8vIEZvY3VzIG9uIHRoZSBwYXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJl
Zm9yZSB0aGlzIGVsZW1lbnQgdG8gYWZ0ZXIuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24oYmVmb3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCk7CisgICAgaWYgKHBh
cmVudC0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKSB7
CisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUocGFyZW50
KTsKKyAgICAgICAgcGFyZW50LT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
bik7CisgICAgfQorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFsbCgpCit7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAKKyAg
ICBpZiAoZG9jdW1lbnQtPmZvY3VzZWROb2RlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWROb2RlKCkt
PmNhblNlbGVjdEFsbCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpLT5zZWxl
Y3RBbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBOb2RlKiByb290ID0g
MDsKKyAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcm9vdCA9IGhpZ2hlc3RF
ZGl0YWJsZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHJv
b3QgPSBzaGFkb3dUcmVlUm9vdE5vZGUoKTsKKyAgICAgICAgaWYgKCFyb290KQorICAgICAgICAg
ICAgcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICB9CisgICAgaWYgKCFy
b290KQorICAgICAgICByZXR1cm47CisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKHJvb3QpKTsKKyAg
ICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgIHNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZG
dWxseVNlbGVjdGVkKCk7CisgICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh0cnVl
KTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdl
KiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKQoreworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5vZGUqIGVuZENv
bnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoZWMpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChzdGFydENvbnRhaW5lcik7CisgICAgQVNT
RVJUKGVuZENvbnRhaW5lcik7CisgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyLT5kb2N1bWVudCgp
ID09IGVuZENvbnRhaW5lci0+ZG9jdW1lbnQoKSk7CisgICAgCisgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICAvLyBO
b24tY29sbGFwc2VkIHJhbmdlcyBhcmUgbm90IGFsbG93ZWQgdG8gc3RhcnQgYXQgdGhlIGVuZCBv
ZiBhIGxpbmUgdGhhdCBpcyB3cmFwcGVkLAorICAgIC8vIHRoZXkgc3RhcnQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbmV4dCBsaW5lIGluc3RlYWQKKyAgICBib29sIGNvbGxhcHNlZCA9IHJhbmdl
LT5jb2xsYXBzZWQoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGludCBzdGFydE9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldChlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcmFuZ2Ut
PmVuZE9mZnNldChlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgLy8gRklYTUU6IENhbiB3ZSBwcm92aWRlIGV4dGVudEFmZmluaXR5PworICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zm
c2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgY29sbGFwc2VkID8gYWZm
aW5pdHkgOiBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChQb3Np
dGlvbihlbmRDb250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBTZXRTZWxlY3Rpb25PcHRpb25z
IG9wdGlvbnMgPSBDbGVhclR5cGluZ1N0eWxlOworICAgIGlmIChjbG9zZVR5cGluZykKKyAgICAg
ICAgb3B0aW9ucyB8PSBDbG9zZVR5cGluZzsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpLCBvcHRpb25zKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjppc0luUGFzc3dvcmRGaWVsZCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHN0YXJ0KCkuaXNOdWxsKCkgfHwgc3RhcnQoKS5hbmNob3JUeXBl
KCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcgorICAgICAgICAgICB8fCBz
dGFydCgpLmNvbnRhaW5lck5vZGUoKSB8fCAhc3RhcnQoKS5hbmNob3JOb2RlKCktPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydCgpLmNvbnRhaW5lck5v
ZGUoKTsKKyAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c3RhcnROb2RlID0gc3RhcnROb2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIXN0
YXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzdGFydE5vZGUtPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzdGFydE5vZGUpLT5pc1Bhc3N3b3Jk
RmllbGQoKTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlbmRlcnNJbnNp
ZGVOb2RlKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFpc1RhYmxlRWxlbWVudChub2RlKSAmJiAhZWRpdGluZ0ln
bm9yZXNDb250ZW50KG5vZGUpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvY3Vz
ZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCit7CisgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0g
aXNGb2N1c2VkQW5kQWN0aXZlKCk7CisKKyAgICAvLyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCisgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAorICAgIC8v
IHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgorICAg
IGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCkt
PnJlbmRlcmVyKCkpKQorICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29t
cG9zaXRlZExheWVycyhlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcygpKSk7CisKKyAgICAvLyBDYXJl
dCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCisgICAgaWYgKGFjdGl2ZUFuZEZvY3VzZWQp
CisgICAgICAgIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisgICAgc2V0Q2FyZXRWaXNpYmxlKGFj
dGl2ZUFuZEZvY3VzZWQpOworCisgICAgLy8gVXBkYXRlIGZvciBjYXBzIGxvY2sgc3RhdGUKKyAg
ICBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7
CisKKyAgICAvLyBCZWNhdXNlIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoKSBh
bmQKKyAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlz
IGFjdGl2ZSwgd2UgaGF2ZSB0bworICAgIC8vIHVwZGF0ZSBzdHlsZSBhbmQgdGhlbWUgc3RhdGUg
dGhhdCBkZXBlbmRlZCBvbiB0aG9zZS4KKyAgICBpZiAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPmRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCktPmhh
c0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+dGhlbWUoKS0+c3RhdGVD
aGFuZ2VkKHJlbmRlcmVyLCBGb2N1c1N0YXRlKTsKKyAgICB9CisKKyAgICAvLyBTZWN1cmUga2V5
Ym9hcmQgZW50cnkgaXMgc2V0IGJ5IHRoZSBhY3RpdmUgZnJhbWUuCisgICAgaWYgKG1fZnJhbWUt
PmRvY3VtZW50KCktPnVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKCkpCisgICAgICAg
IHNldFVzZVNlY3VyZUtleWJvYXJkRW50cnkoYWN0aXZlQW5kRm9jdXNlZCk7Cit9CisKK3ZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6cGFnZUFjdGl2YXRpb25DaGFuZ2VkKCkKK3sKKyAgICBmb2N1
c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
Ojp1cGRhdGVTZWN1cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKQoreworICAgIGlmIChtX2ZyYW1l
LT5kb2N1bWVudCgpICYmIGlzRm9jdXNlZEFuZEFjdGl2ZSgpKQorICAgICAgICBzZXRVc2VTZWN1
cmVLZXlib2FyZEVudHJ5KG1fZnJhbWUtPmRvY3VtZW50KCktPnVzZVNlY3VyZUtleWJvYXJkRW50
cnlXaGVuQWN0aXZlKCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFVzZVNl
Y3VyZUtleWJvYXJkRW50cnkoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAg
ICAgZW5hYmxlU2VjdXJlVGV4dElucHV0KCk7CisgICAgZWxzZQorICAgICAgICBkaXNhYmxlU2Vj
dXJlVGV4dElucHV0KCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Rm9jdXNl
ZChib29sIGZsYWcpCit7CisgICAgaWYgKG1fZm9jdXNlZCA9PSBmbGFnKQorICAgICAgICByZXR1
cm47CisgICAgbV9mb2N1c2VkID0gZmxhZzsKKworICAgIGZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hh
bmdlZCgpOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzRm9jdXNlZEFuZEFjdGl2
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYg
bV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKK30KKwordm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVBcHBlYXJhbmNlKCkKK3sKKyAgICBBU1NFUlQo
IW1faXNEcmFnQ2FyZXRDb250cm9sbGVyKTsKKworI2lmIEVOQUJMRShURVhUX0NBUkVUKQorICAg
IGJvb2wgY2FyZXRSZWN0Q2hhbmdlZCA9IHJlY29tcHV0ZUNhcmV0UmVjdCgpOworCisgICAgYm9v
bCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5n
cygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgc2hvdWxkQmxpbmsgPSBtX2Nh
cmV0VmlzaWJsZQorICAgICAgICAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkg
fHwgY2FyZXRCcm93c2luZyk7CisKKyAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhl
IGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQorICAgIC8vIGJsYWNrIGNhcmV0
IGluIHRoZSBuZXcgbG9jYXRpb24uCisgICAgaWYgKGNhcmV0UmVjdENoYW5nZWQgfHwgIXNob3Vs
ZEJsaW5rKQorICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CisKKyAgICAvLyBTdGFy
dCBibGlua2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYg
d2UncmUKKyAgICAvLyBhbHJlYWR5IGJsaW5raW5nIGluIHRoZSByaWdodCBsb2NhdGlvbi4KKyAg
ICBpZiAoc2hvdWxkQmxpbmsgJiYgIW1fY2FyZXRCbGlua1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgaWYgKGRvdWJsZSBibGlua0ludGVydmFsID0gbV9mcmFtZS0+cGFnZSgpLT50aGVtZSgp
LT5jYXJldEJsaW5rSW50ZXJ2YWwoKSkKKyAgICAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0
YXJ0UmVwZWF0aW5nKGJsaW5rSW50ZXJ2YWwpOworCisgICAgICAgIGlmICghbV9jYXJldFBhaW50
KSB7CisgICAgICAgICAgICBtX2NhcmV0UGFpbnQgPSB0cnVlOworICAgICAgICAgICAgaW52YWxp
ZGF0ZUNhcmV0UmVjdCgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBXZSBu
ZWVkIHRvIHVwZGF0ZSBzdHlsZSBpbiBjYXNlIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIHNlbGVj
dGlvbiBpcyBtYWRlIGRpc3BsYXk6bm9uZS4KKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CisKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMtPnNlbGVjdGlvbigpOworCisgICAgaWYg
KCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CisgICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhlIHJpZ2h0bW9zdCBjYW5k
aWRhdGUgZm9yIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBhbmQgdGhlIGxlZnRtb3N0IGNh
bmRpZGF0ZSBmb3IgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgorICAgIC8vIEV4YW1wbGU6IGZv
byA8YT5iYXI8L2E+LiAgSW1hZ2luZSB0aGF0IGEgbGluZSB3cmFwIG9jY3VycyBhZnRlciAnZm9v
JywgYW5kIHRoYXQgJ2JhcicgaXMgc2VsZWN0ZWQuICAgSWYgd2UgcGFzcyBbZm9vLCAzXQorICAg
IC8vIGFzIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0aW9uIHBhaW50aW5n
IGNvZGUgd2lsbCB0aGluayB0aGF0IGNvbnRlbnQgb24gdGhlIGxpbmUgY29udGFpbmluZyAnZm9v
JyBpcyBzZWxlY3RlZAorICAgIC8vIGFuZCB3aWxsIGZpbGwgdGhlIGdhcCBiZWZvcmUgJ2Jhcicu
CisgICAgUG9zaXRpb24gc3RhcnRQb3MgPSBzZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBQb3NpdGlv
biBjYW5kaWRhdGUgPSBzdGFydFBvcy5kb3duc3RyZWFtKCk7CisgICAgaWYgKGNhbmRpZGF0ZS5p
c0NhbmRpZGF0ZSgpKQorICAgICAgICBzdGFydFBvcyA9IGNhbmRpZGF0ZTsKKyAgICBQb3NpdGlv
biBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kKCk7CisgICAgY2FuZGlkYXRlID0gZW5kUG9zLnVwc3Ry
ZWFtKCk7CisgICAgaWYgKGNhbmRpZGF0ZS5pc0NhbmRpZGF0ZSgpKQorICAgICAgICBlbmRQb3Mg
PSBjYW5kaWRhdGU7CisKKyAgICAvLyBXZSBjYW4gZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUg
c2VsZWN0aW9uIGVuZHBvaW50cyBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIHdoZW4g
YSBzZWxlY3Rpb24gaXMgZGVsZXRlZAorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlm
eSB0aGUgU2VsZWN0aW9uQ29udHJvbGxlciBvZiB0ZXh0IHJlbW92YWwuCisgICAgaWYgKHN0YXJ0
UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgeworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
OworICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRl
cmVyLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSZW5kZXJlciwgZW5k
UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIH0KK30KKwordm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGFnKQoreworICAgIGlmIChtX2Nh
cmV0VmlzaWJsZSA9PSBmbGFnKQorICAgICAgICByZXR1cm47CisgICAgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOworICAgIG1fY2FyZXRWaXNpYmxlID0gZmxhZzsKKyAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJDYXJldFJlY3RJZk5l
ZWRlZCgpCit7CisjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCisgICAgaWYgKCFtX2NhcmV0UGFpbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NhcmV0UGFpbnQgPSBmYWxzZTsKKyAgICBpbnZhbGlk
YXRlQ2FyZXRSZWN0KCk7CisjZW5kaWYKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpj
YXJldEJsaW5rVGltZXJGaXJlZChUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiopCit7CisjaWYg
RU5BQkxFKFRFWFRfQ0FSRVQpCisgICAgQVNTRVJUKG1fY2FyZXRWaXNpYmxlKTsKKyAgICBBU1NF
UlQoaXNDYXJldCgpKTsKKyAgICBib29sIGNhcmV0UGFpbnQgPSBtX2NhcmV0UGFpbnQ7CisgICAg
aWYgKGlzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZCgpICYmIGNhcmV0UGFpbnQpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NhcmV0UGFpbnQgPSAhY2FyZXRQYWludDsKKyAgICBpbnZhbGlkYXRlQ2Fy
ZXRSZWN0KCk7CisjZW5kaWYKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlS
ZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisKKyAgICBpZiAoIXJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzVGV4dENvbnRyb2wo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcikt
PnNlbGVjdGlvbkNoYW5nZWQodXNlclRyaWdnZXJlZCk7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlv
biB0aGF0IHRlbGxzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0
IGhhcyBhbiBlbnRpcmUKKy8vIEZyYW1lIGFuZCBGcmFtZVZpZXcsIGEgPGZyYW1lPiwgPGlmcmFt
ZT4sIG9yIDxvYmplY3Q+Lgorc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9kZSog
bikKK3sKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdpZGdldCogd2lk
Z2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICByZXR1cm4gd2lk
Z2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoaXNOb25lKCkgfHwgIWlz
Rm9jdXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdF
bmFibGVkKCk7CisgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgaWYgKE5vZGUqIGFu
Y2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQoYmFzZSgpKSkgeworICAgICAgICAgICAgbV9m
cmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUoYW5jaG9yLCBt
X2ZyYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChOb2RlKiB0YXJnZXQgPSByb290RWRpdGFibGVFbGVtZW50KCkpIHsKKyAgICAgICAgLy8gV2Fs
ayB1cCB0aGUgRE9NIHRyZWUgdG8gc2VhcmNoIGZvciBhIG5vZGUgdG8gZm9jdXMuIAorICAgICAg
ICB3aGlsZSAodGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNldCBm
b2N1cyBvbiBhIHN1YmZyYW1lIHdoZW4gc2VsZWN0aW5nIGluIGEgcGFyZW50IGZyYW1lLAorICAg
ICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUn
cyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCisgICAgICAgICAgICAvLyB3b3Jr
IGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGlt
ZS4KKyAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkg
JiYgIWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0YXJnZXQsIG1fZnJhbWUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRh
cmdldCA9IHRhcmdldC0+cGFyZW50T3JIb3N0Tm9kZSgpOyAKKyAgICAgICAgfQorICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZSgwKTsKKyAgICB9CisKKyAgICBpZiAo
Y2FyZXRCcm93c2luZykKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+c2V0Rm9jdXNlZE5vZGUoMCwgbV9mcmFtZSk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6cGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlciA9IG1fZnJhbWUt
PnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOworICAgIEFTU0VSVChkcmFnQ2FyZXRDb250
cm9sbGVyLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpOworICAgIGlmIChkcmFnQ2FyZXRDb250cm9s
bGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSA9PSBtX2ZyYW1lKQorICAgICAgICBkcmFnQ2FyZXRDb250cm9sbGVyLT5wYWludENhcmV0KHAs
IHR4LCB0eSwgY2xpcFJlY3QpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocCk7CisgICAgVU5V
U0VEX1BBUkFNKHR4KTsKKyAgICBVTlVTRURfUEFSQU0odHkpOworICAgIFVOVVNFRF9QQVJBTShj
bGlwUmVjdCk7CisjZW5kaWYKK30KKworUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gU2VsZWN0aW9uQ29udHJvbGxlcjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fdHlwaW5nU3R5bGUgfHwgIW1fdHlwaW5nU3R5bGUtPnN0eWxlKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBtX3R5cGluZ1N0eWxlLT5zdHlsZSgpLT5jb3B5KCk7Cit9
CisKK2Jvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFt
ZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7Cit9CisKK0Zsb2F0UmVjdCBTZWxlY3Rpb25Db250cm9sbGVy
Ojpib3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJW
aWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3KiB2
aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghcm9vdCB8fCAhdmlldykKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJvb3QtPnNl
bGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CisgICAgcmV0dXJuIGNsaXBUb1Zp
c2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZpc2libGVD
b250ZW50UmVjdCgpKSA6IHNlbGVjdGlvblJlY3Q7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdGFuZ2xlcykgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm47CisKKyAgICBG
bG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHRvTm9ybWFs
aXplZFJhbmdlKCktPnRleHRRdWFkcyhxdWFkcywgdHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogV2Ug
YXJlIGFwcGVuZGluZyBlbXB0eSByZWN0YW5nbGVzIHRvIHRoZSBsaXN0IGZvciB0aG9zZSB0aGF0
IGZhbGwgb3V0c2lkZSB2aXNpYmxlQ29udGVudFJlY3QuCisgICAgLy8gSXQgbWlnaHQgYmUgYmV0
dGVyIHRvIG9taXQgdGhvc2UgcmVjdGFuZ2xlcyBlbnRpcmVseS4KKyAgICBzaXplX3Qgc2l6ZSA9
IHF1YWRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50ZXJzZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCksIHZpc2libGVDb250ZW50UmVjdCkpOworfQorCisvLyBTY2FucyBsb2dpY2Fs
bHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgorc3Rh
dGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0oTm9kZSogc3RhcnQpCit7CisgICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlm
IChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoZnJhbWVUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgeworICAgICAgICAg
ICAgTm9kZSogY2hpbGREb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNl
Kj4obm9kZSktPmNvbnRlbnREb2N1bWVudCgpOworICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxl
bWVudCogZnJhbWVSZXN1bHQgPSBzY2FuRm9yRm9ybShjaGlsZERvY3VtZW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZnJhbWVSZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKKy8vIFdlIGxvb2sgZm9yIGVpdGhlciB0aGUgZm9ybSBjb250YWluaW5nIHRoZSBj
dXJyZW50IGZvY3VzLCBvciBmb3Igb25lIGltbWVkaWF0ZWx5IGFmdGVyIGl0CitIVE1MRm9ybUVs
ZW1lbnQqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmN1cnJlbnRGb3JtKCkgY29uc3QKK3sKKyAgICAv
LyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5v
ZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCisgICAgTm9kZSogc3RhcnQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgIGlmICghc3RhcnQpCisgICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOworCisgICAgLy8gVHJ5IHdhbGtp
bmcgdXAgdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50LgorICAgIE5vZGUqIG5v
ZGU7CisgICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlm
IChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKTsKKyAgICB9CisKKyAgICAvLyBUcnkgd2Fsa2lu
ZyBmb3J3YXJkIGluIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4KKyAgICBy
ZXR1cm4gc2NhbkZvckZvcm0oc3RhcnQpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgYm9vbCBy
ZXZlYWxFeHRlbnQpCit7CisgICAgSW50UmVjdCByZWN0OworCisgICAgc3dpdGNoIChzZWxlY3Rp
b25UeXBlKCkpIHsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgorICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoK
KyAgICAgICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKKyAgICAgICAgcmVjdCA9
IHJldmVhbEV4dGVudCA/IFZpc2libGVQb3NpdGlvbihleHRlbnQoKSkuYWJzb2x1dGVDYXJldEJv
dW5kcygpIDogZW5jbG9zaW5nSW50UmVjdChib3VuZHMoZmFsc2UpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgUG9zaXRpb24gc3RhcnQgPSB0aGlzLT5zdGFydCgpOworICAgIEFTU0VS
VChzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgb25seSBoYW5kbGVzIHNjcm9sbGluZyB0aGUgc3RhcnRDb250YWluZXIn
cyBsYXllciwgYnV0CisgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gcmVjdCBjb3VsZCBpbnRlcnNl
Y3QgbW9yZSB0aGFuIGp1c3QgdGhhdC4KKyAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80
Nzk5ODk5Pi4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIGxh
eWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGZhbHNlLCBhbGlnbm1lbnQsIGFsaWdubWVu
dCk7CisgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQorewor
ICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlz
IGVkaXRhYmxlIChlaXRoZXIgdGhlCisgICAgLy8gZW50aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUg
b3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVudCkuCisKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2Rl
KiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIHdoaWxlIChub2RlICYm
ICFub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQorICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpOworICAgIGlmIChub2RlKQorICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0p
KTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAoreworICAgIHJldHVy
biBtX2ZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBu
ZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9ybWF0Rm9yRGVidWdnZXIo
Y2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgbV9zZWxlY3Rpb24u
Zm9ybWF0Rm9yRGVidWdnZXIoYnVmZmVyLCBsZW5ndGgpOworfQorCit2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0Cit7CisgICAgbV9zZWxlY3Rpb24uc2hv
d1RyZWVGb3JUaGlzKCk7Cit9CisKKyNlbmRpZgorCit9CisKKyNpZm5kZWYgTkRFQlVHCisKK3Zv
aWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciYgc2VsKQorewor
ICAgIHNlbC5zaG93VHJlZUZvclRoaXMoKTsKK30KKwordm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyKiBzZWwpCit7CisgICAgaWYgKHNlbCkKKyAgICAgICAg
c2VsLT5zaG93VHJlZUZvclRoaXMoKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NyArMjQsNyBAQAogICovCiAgIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogCiAjaW5jbHVk
ZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIK
QEAgLTcwLDExICs3MCwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBjb25zdCBp
bnQgTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBJTlRfTUlOOwogCi1TZWxlY3Rp
b25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSwgYm9vbCBpc0Ry
YWdDYXJldENvbnRyb2xsZXIpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUq
IGZyYW1lLCBib29sIGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKICAgICA6IG1fZnJhbWUoZnJhbWUp
CiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbikKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpCi0gICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmU2VsZWN0aW9uQ29udHJvbGxlcjo6
Y2FyZXRCbGlua1RpbWVyRmlyZWQpCisgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmRnJh
bWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKQogICAgICwgbV9jYXJldFJlY3ROZWVk
c1VwZGF0ZSh0cnVlKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAgLCBt
X2lzRHJhZ0NhcmV0Q29udHJvbGxlcihpc0RyYWdDYXJldENvbnRyb2xsZXIpCkBAIC04Niw3ICs4
Niw3IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIKICAgICBzZXRJ
c0RpcmVjdGlvbmFsKGZhbHNlKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3Zl
VG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCwgQ3Vyc29y
QWxpZ25PblNjcm9sbCBhbGlnbikKK3ZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBW
aXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Ny
b2xsIGFsaWduKQogewogICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3NlVHlw
aW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKICAgICBpZiAodXNlclRyaWdnZXJlZCkKQEAgLTk0LDcg
Kzk0LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgVgogICAgIHNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuZGVl
cEVxdWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCBvcHRpb25zLCBhbGlnbik7CiB9CiAKLXZv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYmFz
ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZleHRlbnQsIGJvb2wgdXNlclRyaWdnZXJlZCkKK3Zv
aWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJhc2UsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAg
U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0
eWxlOwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFYKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihiYXNlLmRlZXBFcXVpdmFsZW50KCksIGV4dGVudC5kZWVwRXF1aXZhbGVudCgp
LCBiYXNlLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRp
b24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAg
U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0
eWxlOwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFAKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBSYW5n
ZSAqciwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgU2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxl
OwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFIKICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9u
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3Qg
UG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0
eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0
IFBvc2l0aW9uICZiYXNlLCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlv
bnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7CiAgICAgaWYgKHVzZXJUcmlnZ2Vy
ZWQpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8o
Y29uc3QgUAogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhc2UsIGV4dGVudCwg
YWZmaW5pdHkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcywgU2V0U2VsZWN0aW9uT3B0aW9ucyBv
cHRpb25zLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVjdGlvbmFsaXR5UG9saWN5KQordm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIFNl
dFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucywgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBkaXJlY3Rpb25h
bGl0eVBvbGljeSkKIHsKICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKQEAgLTE1
MCw3ICsxNTAsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0NjQ+OiBJbmZpbml0ZSByZWN1cnNpb24gYXQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U2VsZWN0aW9uCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3Rpb24KICAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdl
IGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKHMuYmFzZSgpLmFuY2hvck5v
ZGUoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzLmJhc2UoKS5hbmNob3JOb2Rl
KCktPmRvY3VtZW50KCk7CkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIGJvb2wgcmVtb3ZpbmdO
b2RlUmVtb3Zlc1Bvc2l0aW9uKAogICAgIHJldHVybiBlbGVtZW50LT5jb250YWlucyhwb3NpdGlv
bi5hbmNob3JOb2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUo
KS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUgKm5vZGUpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpub2Rl
V2lsbEJlUmVtb3ZlZChOb2RlICpub2RlKQogewogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9k
ZVdpbGxCZVJlbW8KICAgICAgICAgcmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKG5vZGUsIG1f
c2VsZWN0aW9uLnN0YXJ0KCkpLCByZW1vdmluZ05vZGVSZW1vdmVzUG9zaXRpb24obm9kZSwgbV9z
ZWxlY3Rpb24uZW5kKCkpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZXNwb25k
VG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUqIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvb2wgZXh0
ZW50UmVtb3ZlZCwgYm9vbCBzdGFydFJlbW92ZWQsIGJvb2wgZW5kUmVtb3ZlZCkKK3ZvaWQgRnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSogbm9kZSwgYm9vbCBi
YXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRSZW1vdmVkLCBib29sIHN0YXJ0UmVtb3ZlZCwgYm9vbCBl
bmRSZW1vdmVkKQogewogICAgIGJvb2wgY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uID0gZmFsc2U7
CiAgICAgYm9vbCBjbGVhckRPTVRyZWVTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTI5NSw3ICsyOTUs
NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZW1vdmVQb3NpdGlvbkFmdGVyQWRvCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnRleHRXaWxsQmVSZXBsYWNl
ZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG9sZExlbmd0
aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6dGV4dFdpbGxCZVJl
cGxhY2VkKENoYXJhY3RlckRhdGEqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgb2xk
TGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhlIGZyYWdtZW50IGNoZWNr
IGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMzAwNjIuCiAgICAgaWYgKGlzTm9uZSgpIHx8ICFub2RlIHx8IGhpZ2hlc3RB
bmNlc3Rvcihub2RlKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RF
KQpAQCAtMzI5LDE3ICszMjksMTcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp0ZXh0V2ls
bEJlUmVwbAogICAgIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24obm9kZSwgc2hvdWxkUmVtb3Zl
QmFzZSwgc2hvdWxkUmVtb3ZlRXh0ZW50LCBzaG91bGRSZW1vdmVTdGFydCwgc2hvdWxkUmVtb3Zl
RW5kKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRJc0RpcmVjdGlvbmFsKGJv
b2wgaXNEaXJlY3Rpb25hbCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNldElzRGlyZWN0aW9uYWwo
Ym9vbCBpc0RpcmVjdGlvbmFsKQogewogICAgIG1faXNEaXJlY3Rpb25hbCA9ICFtX2ZyYW1lIHx8
IG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNE
aXJlY3Rpb25hbCgpIHx8IGlzRGlyZWN0aW9uYWw7CiB9CiAKLVRleHREaXJlY3Rpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpCitUZXh0RGlyZWN0aW9u
IEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkKIHsKICAgICByZXR1
cm4gV2ViQ29yZTo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhtX3NlbGVjdGlvbi5leHRlbnQo
KSk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVy
YXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAoYWx0ZXIgIT0gQWx0ZXJhdGlvbkV4dGVuZCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6d2lsbEJlTW9kaWZpZWQKICAgICB9CiB9CiAKLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25D
b250cm9sbGVyOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3QKK1Zp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6cG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlz
R2V0U3RhcnQpIGNvbnN0CiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZSA/IG1f
ZnJhbWUtPnNldHRpbmdzKCkgOiAwOwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZWRp
dGluZ0JlaGF2aW9yVHlwZSgpID09IEVkaXRpbmdNYWNCZWhhdmlvcikKQEAgLTQwMSwxNyArNDAx
LDE3IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpwb3MKICAgICByZXR1
cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6
IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6c3RhcnRGb3JQbGF0Zm9ybSgpIGNvbnN0CitWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246OnN0YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdAogewogICAgIHJldHVybiBw
b3NpdGlvbkZvclBsYXRmb3JtKHRydWUpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9u
Q29udHJvbGxlcjo6ZW5kRm9yUGxhdGZvcm0oKSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIEZyYW1l
U2VsZWN0aW9uOjplbmRGb3JQbGF0Zm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBvc2l0aW9u
Rm9yUGxhdGZvcm0oZmFsc2UpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJv
bGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQor
VmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdodChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3Nl
bGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAKQEAgLTQ1NCw3ICs0
NTQsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgcmV0
dXJuIHBvczsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlm
eUV4dGVuZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdGb3J3YXJkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsZWN0aW9u
LmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICBzd2l0Y2ggKGdyYW51bGFy
aXR5KSB7CkBAIC00OTYsNyArNDk2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vZAogICAgIHJldHVybiBwb3M7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rp
b25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkpCitWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zOwog
ICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTUyOSw3ICs1MjksNyBAQCBWaXNpYmxlUG9z
aXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgcmV0dXJuIHBvczsKIH0KIAotVmlz
aWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ0ZvcndhcmQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zOwogICAgIC8vIEZJWE1FOiBTdGF5IGluIGVkaXRhYmxlIGNv
bnRlbnQgZm9yIHRoZSBsZXNzIGNvbW1vbiBncmFudWxhcml0aWVzLgpAQCAtNTc5LDcgKzU3OSw3
IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICByZXR1cm4g
cG9zOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0
ZW5kaW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWxlY3Rpb24uZXh0ZW50KCks
IG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogCkBAIC02MjEsNyArNjIxLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIHJldHVybiBwb3M7CiB9CiAgICAg
ICAgCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5n
QmFja3dhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIEZy
YW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQCBWaXNpYmxl
UG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgcmV0dXJuIHBvczsKIH0KIAot
VmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ0xlZnQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTcwMCw3
ICs3MDAsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAg
cmV0dXJuIHBvczsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK1Zpc2libGVQ
b3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nQmFja3dhcmQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KQogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3M7CiAgICAgc3dpdGNo
IChncmFudWxhcml0eSkgewpAQCAtNzQ5LDE1ICs3NDksMTUgQEAgc3RhdGljIGJvb2wgaXNCb3Vu
ZGFyeShUZXh0R3JhbnVsYXJpdHkgZwogICAgIHJldHVybiBncmFudWxhcml0eSA9PSBMaW5lQm91
bmRhcnkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoQm91bmRhcnkgfHwgZ3JhbnVsYXJpdHkg
PT0gRG9jdW1lbnRCb3VuZGFyeTsKIH0gICAgCiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgdXNlclRyaWdnZXJlZCkKK2Jvb2wgRnJh
bWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHVzZXJUcmlnZ2Vy
ZWQpCiB7CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgU2VsZWN0aW9uQ29udHJv
bGxlciB0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXI7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29u
dHJvbGxlci5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwotICAgICAgICB0cmlhbFNlbGVjdGlv
bkNvbnRyb2xsZXIuc2V0SXNEaXJlY3Rpb25hbChtX2lzRGlyZWN0aW9uYWwpOwotICAgICAgICB0
cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIubW9kaWZ5KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBmYWxzZSk7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb247
CisgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKTsK
KyAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKG1faXNEaXJlY3Rp
b25hbCk7CisgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyLCBkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBmYWxzZSk7CiAKLSAgICAgICAgYm9vbCBjaGFuZ2UgPSBzaG91bGRD
aGFuZ2VTZWxlY3Rpb24odHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNlbGVjdGlvbigpKTsKKyAg
ICAgICAgYm9vbCBjaGFuZ2UgPSBzaG91bGRDaGFuZ2VTZWxlY3Rpb24odHJpYWxGcmFtZVNlbGVj
dGlvbi5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlmICghY2hhbmdlKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTg1MCwxOCArODUwLDE4IEBAIHN0YXRpYyBib29sIGFic29s
dXRlQ2FyZXRZKGNvbnN0IFZpc2libGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTZWxl
Y3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERp
c3RhbmNlLCBib29sIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCiti
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNh
bERpc3RhbmNlLCBib29sIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24p
CiB7CiAgICAgaWYgKCF2ZXJ0aWNhbERpc3RhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAodXNlclRyaWdnZXJlZCkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHRy
aWFsU2VsZWN0aW9uQ29udHJvbGxlcjsKLSAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVy
LnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJv
bGxlci5zZXRJc0RpcmVjdGlvbmFsKG1faXNEaXJlY3Rpb25hbCk7Ci0gICAgICAgIHRyaWFsU2Vs
ZWN0aW9uQ29udHJvbGxlci5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFuY2UsIGZhbHNlKTsK
KyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbjsKKyAgICAgICAgdHJp
YWxGcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOworICAgICAgICB0cmlh
bEZyYW1lU2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwobV9pc0RpcmVjdGlvbmFsKTsKKyAgICAg
ICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFuY2UsIGZh
bHNlKTsKIAotICAgICAgICBib29sIGNoYW5nZSA9IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlh
bFNlbGVjdGlvbkNvbnRyb2xsZXIuc2VsZWN0aW9uKCkpOworICAgICAgICBib29sIGNoYW5nZSA9
IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbEZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpKTsK
ICAgICAgICAgaWYgKCFjaGFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtOTMzLDcgKzkzMyw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRl
cmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5cGUpCitpbnQgRnJhbWVT
ZWxlY3Rpb246OnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5
cGUpCiB7CiAgICAgaW50IHggPSAwOwogCkBAIC05NzIsMTMgKzk3MiwxMyBAQCBpbnQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6eFBvc0ZvclZlcnRpY2FsCiAgICAgcmV0dXJuIHg7CiB9CiAKLXZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2xlYXIo
KQogewogICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKICAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dl
cmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U3RhcnQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSkKICAgICAgICAgc2V0QmFzZShwb3MsIHVzZXJUcmlnZ2VyZWQpOwpAQCAtOTg2LDcg
Kzk4Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U3RhcnQoY29uc3QKICAgICAg
ICAgc2V0RXh0ZW50KHBvcywgdXNlclRyaWdnZXJlZCk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmln
Z2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRFbmQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSkKICAgICAgICAgc2V0RXh0ZW50KHBvcywgdXNlclRyaWdnZXJlZCk7CkBAIC05OTQs
NyArOTk0LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFbmQoY29uc3QgVgogICAg
ICAgICBzZXRCYXNlKHBvcywgdXNlclRyaWdnZXJlZCk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJp
Z2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnBvcywgYm9vbCB1c2VyVHJpZ2dlcmVkKQogewogICAgIFNldFNlbGVjdGlvbk9wdGlvbnMg
b3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKICAgICBpZiAodXNlclRy
aWdnZXJlZCkKQEAgLTEwMDIsNyArMTAwMiw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0QmFzZShjb25zdCAKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MuZGVl
cEVxdWl2YWxlbnQoKSwgbV9zZWxlY3Rpb24uZXh0ZW50KCksIHBvcy5hZmZpbml0eSgpKSwgb3B0
aW9ucyk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0
aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdn
ZXJlZCkKIHsKICAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8
IENsZWFyVHlwaW5nU3R5bGU7CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCkBAIC0xMDEwLDcgKzEw
MTAsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEV4dGVudChjb25zCiAgICAgc2V0
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MuZGVlcEVx
dWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0QmFzZShj
b25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJl
ZCkKIHsKICAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENs
ZWFyVHlwaW5nU3R5bGU7CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCkBAIC0xMDE4LDcgKzEwMTgs
NyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgCiAgICAgc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLCBtX3NlbGVjdGlvbi5leHRlbnQoKSwgYWZmaW5p
dHkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQo
Y29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2Vy
ZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgU2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOwogICAg
IGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTAyNiwxMiArMTAyNiwxMiBAQCB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnNldEV4dGVudChjb25zCiAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoYm9vbCBm
bGFnKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoYm9vbCBm
bGFnKQogewogICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUgPSBmbGFnOwogfQogCi12b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUNhcmV0UmVjdCgpCit2b2lkIEZyYW1lU2VsZWN0aW9u
Ojp1cGRhdGVDYXJldFJlY3QoKQogewogICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rpb24u
c3RhcnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCku
YW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRS
ZWN0KCk7CkBAIC0xMDc3LDcgKzEwNzcsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVw
ZGF0ZUNhcmV0UmVjCiAgICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IGZhbHNlOwogfQogCi1S
ZW5kZXJPYmplY3QqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVyZXIoKSBjb25zdAor
UmVuZGVyT2JqZWN0KiBGcmFtZVNlbGVjdGlvbjo6Y2FyZXRSZW5kZXJlcigpIGNvbnN0CiB7CiAg
ICAgTm9kZSogbm9kZSA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBSZW5kZXJPYmplY3QqIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OmNhcmV0CiAgICAgcmV0dXJuIHBhaW50ZWRCeUJsb2NrID8gcmVuZGVyZXIg
OiByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiB9CiAKLUludFJlY3QgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6bG9jYWxDYXJldFJlY3QoKQorSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6bG9jYWxD
YXJldFJlY3QoKQogewogICAgIGlmIChtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKQogICAgICAgICB1
cGRhdGVDYXJldFJlY3QoKTsKQEAgLTExMDAsNyArMTEwMCw3IEBAIEludFJlY3QgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bG9jYWxDYXJldFIKICAgICByZXR1cm4gbV9jYXJldFJlY3Q7CiB9CiAKLUlu
dFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6YWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRl
Qm91bmRzRm9yTG9jYWxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgUmVu
ZGVyT2JqZWN0KiBjYXJldFBhaW50ZXIgPSBjYXJldFJlbmRlcmVyKCk7CiAgICAgaWYgKCFjYXJl
dFBhaW50ZXIpCkBAIC0xMTEyLDcgKzExMTIsNyBAQCBJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmFic29sdXRlQm91CiAgICAgcmV0dXJuIGNhcmV0UGFpbnRlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAot
SW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjphYnNvbHV0ZUNhcmV0Qm91bmRzKCkKK0ludFJl
Y3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoKQogewogICAgIHJlY29tcHV0
ZUNhcmV0UmVjdCgpOwogICAgIHJldHVybiBtX2Fic0NhcmV0Qm91bmRzOwpAQCAtMTEyOCwxMiAr
MTEyOCwxMiBAQCBzdGF0aWMgSW50UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlCiAgICAg
cmV0dXJuIGNhcmV0OwogfQogCi1JbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVw
YWludFJlY3QoKSBjb25zdAorSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6Y2FyZXRSZXBhaW50UmVj
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KHJlcGFp
bnRSZWN0Rm9yQ2FyZXQobG9jYWxDYXJldFJlY3RGb3JQYWludGluZygpKSk7CiB9CiAKLWJvb2wg
U2VsZWN0aW9uQ29udHJvbGxlcjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKK2Jvb2wgRnJhbWVTZWxl
Y3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiB7CiAgICAgaWYgKCFtX2NhcmV0UmVjdE5lZWRz
VXBkYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTczLDcgKzExNzMsNyBAQCBib29s
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJl
bmRlclZpZXcqIHZpZXcpIGNvbnN0Citib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRSZXBhaW50
Q2FyZXQoY29uc3QgUmVuZGVyVmlldyogdmlldykgY29uc3QKIHsKICAgICBBU1NFUlQodmlldyk7
CiAgICAgRnJhbWUqIGZyYW1lID0gdmlldy0+ZnJhbWVWaWV3KCkgPyB2aWV3LT5mcmFtZVZpZXco
KS0+ZnJhbWUoKSA6IDA7IC8vIFRoZSBmcmFtZSB3aGVyZSB0aGUgc2VsZWN0aW9uIHN0YXJ0ZWQu
CkBAIC0xMTgxLDcgKzExODEsNyBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJl
cGFpbnRDCiAgICAgcmV0dXJuIChjYXJldEJyb3dzaW5nIHx8IGlzQ29udGVudEVkaXRhYmxlKCkp
OwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmludmFsaWRhdGVDYXJldFJlY3QoKQor
dm9pZCBGcmFtZVNlbGVjdGlvbjo6aW52YWxpZGF0ZUNhcmV0UmVjdCgpCiB7CiAgICAgaWYgKCFp
c0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6aW52YWxpZGF0ZUNhcmUKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0
eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAgaWYg
KCFtX2NhcmV0VmlzaWJsZSkKQEAgLTEyNDcsNyArMTI0Nyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6cGFpbnRDYXJldChHcmEKICNlbmRpZgogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVkKSBjb25z
dAordm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QgKnIsIGJv
b2wgc2VsZWN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgp
KSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KHIt
Pm5vZGUoKSk7CkBAIC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmRlYnVnUmVuZGVyZXIoCiAgICAgfQogfQogCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNv
bnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRh
aW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIApAQCAtMTM0OSw3ICsxMzQ5LDcgQEAgYm9vbCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpjb250YWlucyhjb25zdAogLy8gQ2FuJ3QgZG8gdGhpcyBpbXBsaWNp
dGx5IGFzIHBhcnQgb2YgZXZlcnkgc2V0U2VsZWN0aW9uIGNhbGwgYmVjYXVzZSBpbiBzb21lIGNv
bnRleHRzIGl0IG1pZ2h0IG5vdCBiZSBnb29kCiAvLyBmb3IgdGhlIGZvY3VzIHRvIG1vdmUgdG8g
YW5vdGhlciBmcmFtZS4gU28gaW5zdGVhZCB3ZSBjYWxsIGl0IGZyb20gcGxhY2VzIHdoZXJlIHdl
IGFyZSBzZWxlY3Rpbmcgd2l0aCB0aGUKIC8vIG1vdXNlIG9yIHRoZSBrZXlib2FyZCBhZnRlciBz
ZXR0aW5nIHRoZSBzZWxlY3Rpb24uCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEZy
YW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAgICAvLyBG
aW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2ZSBub3Ro
aW5nIHRvIGRvLgogICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgp
OwpAQCAtMTM5Miw3ICsxMzkyLDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RG
cmFtZUVsZQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwo
KQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKIHsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIApAQCAtMTQxOCw3ICsxNDE4LDcgQEAg
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwoKQogICAgIG5vdGlmeVJlbmRlcmVy
T2ZTZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CiB9CiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBj
bG9zZVR5cGluZykKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2Uq
IHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpCiB7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ2Miw3ICsxNDYyLDcgQEAgYm9v
bCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbgogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3QK
K2Jvb2wgRnJhbWVTZWxlY3Rpb246OmlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoc3RhcnQoKS5pc051bGwoKSB8fCBzdGFydCgpLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAgICAgIHx8IHN0YXJ0KCkuY29udGFp
bmVyTm9kZSgpIHx8ICFzdGFydCgpLmFuY2hvck5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkp
OwpAQCAtMTQ4MCwxNCArMTQ4MCwxNCBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5Q
YXNzd29yZEZpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzdGFy
dE5vZGUpLT5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVy
OjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIEZyYW1lU2Vs
ZWN0aW9uOjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFpc1RhYmxlRWxl
bWVudChub2RlKSAmJiAhZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpOwogfQogCi12b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCit2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwogCkBAIC0xNTIwLDE4ICsx
NTIwLDE4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNlZE9yQWN0aXYKICAgICAg
ICAgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShhY3RpdmVBbmRGb2N1c2VkKTsKIH0KIAotdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWdlQWN0aXZhdGlvbkNoYW5nZWQoKQordm9pZCBGcmFt
ZVNlbGVjdGlvbjo6cGFnZUFjdGl2YXRpb25DaGFuZ2VkKCkKIHsKICAgICBmb2N1c2VkT3JBY3Rp
dmVTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVT
ZWN1cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
U2VjdXJlS2V5Ym9hcmRFbnRyeUlmQWN0aXZlKCkKIHsKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1l
bnQoKSAmJiBpc0ZvY3VzZWRBbmRBY3RpdmUoKSkKICAgICAgICAgc2V0VXNlU2VjdXJlS2V5Ym9h
cmRFbnRyeShtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFj
dGl2ZSgpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRVc2VTZWN1cmVLZXli
b2FyZEVudHJ5KGJvb2wgZW5hYmxlKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0VXNlU2VjdXJl
S2V5Ym9hcmRFbnRyeShib29sIGVuYWJsZSkKIHsKICAgICBpZiAoZW5hYmxlKQogICAgICAgICBl
bmFibGVTZWN1cmVUZXh0SW5wdXQoKTsKQEAgLTE1MzksNyArMTUzOSw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0VXNlU2VjdXJlS2UKICAgICAgICAgZGlzYWJsZVNlY3VyZVRleHRJ
bnB1dCgpOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEZvY3VzZWQoYm9vbCBm
bGFnKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZChib29sIGZsYWcpCiB7CiAgICAg
aWYgKG1fZm9jdXNlZCA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC0xNTQ4LDEyICsxNTQ4
LDEyIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Rm9jdXNlZChib28KICAgICBmb2N1
c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVy
Ojppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdAorYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1
c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUt
PnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgp
OwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFwcGVhcmFuY2UoKQordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lz
RHJhZ0NhcmV0Q29udHJvbGxlcik7CiAKQEAgLTE2MTAsNyArMTYxMCw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6dXBkYXRlQXBwZWFyYW4KICAgICAgICAgZW5kUG9zID0gY2FuZGlkYXRl
OwogCiAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBl
bmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0aW9u
IGlzIGRlbGV0ZWQKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHlldCBub3RpZnkgdGhlIFNlbGVj
dGlvbkNvbnRyb2xsZXIgb2YgdGV4dCByZW1vdmFsLgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qg
eWV0IG5vdGlmeSB0aGUgRnJhbWVTZWxlY3Rpb24gb2YgdGV4dCByZW1vdmFsLgogICAgIGlmIChz
dGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVy
ZXIoKTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjp1cGRhdGVBcHBlYXJhbgogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGFnKQordm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZykKIHsKICAgICBpZiAobV9jYXJldFZpc2libGUg
PT0gZmxhZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAgdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRDYXJldFZpc2libAogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsK
IH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhckNhcmV0UmVjdElmTmVlZGVkKCkK
K3ZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKQogewogI2lmIEVO
QUJMRShURVhUX0NBUkVUKQogICAgIGlmICghbV9jYXJldFBhaW50KQpAQCAtMTYzNyw3ICsxNjM3
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhckNhcmV0UmVjdAogI2VuZGlmCiB9
CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8
U2VsZWN0aW9uQ29udHJvbGxlcj4qKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1Rp
bWVyRmlyZWQoVGltZXI8RnJhbWVTZWxlY3Rpb24+KikKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJF
VCkKICAgICBBU1NFUlQobV9jYXJldFZpc2libGUpOwpAQCAtMTY1MCw3ICsxNjUwLDcgQEAgdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldEJsaW5rVGltZQogI2VuZGlmCiB9CiAKLXZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29s
IHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlSZW5kZXJlck9mU2Vs
ZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKQEAgLTE2NzcsNyArMTY3Nyw3IEBAIHN0YXRp
YyBib29sIGlzRnJhbWVFbGVtZW50KGNvbnN0IE5vZGUqIG4KICAgICByZXR1cm4gd2lkZ2V0ICYm
IHdpZGdldC0+aXNGcmFtZVZpZXcoKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpz
ZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRO
b2RlSWZOZWVkZWQoKQogewogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3MDksMTAgKzE3MDksMTAgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRGb2N1c2VkTm9kZQogICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRGb2N1c2VkTm9kZSgwLCBtX2ZyYW1lKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50
IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgY29uc3QKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdAogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAg
IFNlbGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIgPSBtX2ZyYW1lLT5wYWdl
KCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogZHJhZ0NhcmV0
Q29udHJvbGxlciA9IG1fZnJhbWUtPnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwogICAg
IEFTU0VSVChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpOwogICAg
IGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICAgICBkcmFnQ2FyZXRDb250
cm9sbGVyLT5wYWludENhcmV0KHAsIHR4LCB0eSwgY2xpcFJlY3QpOwpAQCAtMTcyNCwxOSArMTcy
NCwxOSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0CiAjZW5kaWYK
IH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gU2VsZWN0aW9uQ29u
dHJvbGxlcjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IEZyYW1lU2VsZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUoKSBjb25zdAog
ewogICAgIGlmICghbV90eXBpbmdTdHlsZSB8fCAhbV90eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUtPnN0eWxlKCktPmNvcHko
KTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGREZWxldGVTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAorYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5z
aG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9
CiAKLUZsb2F0UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpib3VuZHMoYm9vbCBjbGlwVG9WaXNp
YmxlQ29udGVudCkgY29uc3QKK0Zsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6Ym91bmRzKGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogcm9vdCA9IG1f
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKTsKQEAgLTE3NDcsNyArMTc0Nyw3IEBAIEZsb2F0UmVjdCBTZWxlY3Rpb25Db250cm9s
bGVyOjpib3VuZHMoYm8KICAgICByZXR1cm4gY2xpcFRvVmlzaWJsZUNvbnRlbnQgPyBpbnRlcnNl
Y3Rpb24oc2VsZWN0aW9uUmVjdCwgdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkpIDogc2VsZWN0
aW9uUmVjdDsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpnZXRDbGlwcGVkVmlzaWJs
ZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzKSBjb25zdAordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcykgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiByb290ID0g
bV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CiAgICAgaWYgKCFyb290KQpAQCAtMTc4Myw3ICsx
NzgzLDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0oTm9kZQogfQogCiAv
LyBXZSBsb29rIGZvciBlaXRoZXIgdGhlIGZvcm0gY29udGFpbmluZyB0aGUgY3VycmVudCBmb2N1
cywgb3IgZm9yIG9uZSBpbW1lZGlhdGVseSBhZnRlciBpdAotSFRNTEZvcm1FbGVtZW50KiBTZWxl
Y3Rpb25Db250cm9sbGVyOjpjdXJyZW50Rm9ybSgpIGNvbnN0CitIVE1MRm9ybUVsZW1lbnQqIEZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSgpIGNvbnN0CiB7CiAgICAgLy8gU3RhcnQgbG9va2lu
ZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0
aGUgc2VsZWN0aW9uIGlzLgogICAgIE5vZGUqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
Zm9jdXNlZE5vZGUoKTsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIEhUTUxGb3JtRWxlbWVudCogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y3UKICAgICByZXR1cm4gc2NhbkZvckZvcm0oc3RhcnQpOwogfQog
Ci12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxB
bGlnbm1lbnQmIGFsaWdubWVudCwgYm9vbCByZXZlYWxFeHRlbnQpCit2b2lkIEZyYW1lU2VsZWN0
aW9uOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJv
b2wgcmV2ZWFsRXh0ZW50KQogewogICAgIEludFJlY3QgcmVjdDsKIApAQCAtMTgzMSw3ICsxODMx
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZXZlYWxTZWxlY3RpbwogICAgIH0KIH0K
IAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCit2b2lk
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiB7CiAgICAgLy8gUHV0IGEg
Y2FyZXQgaW5zaWRlIHRoZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVp
dGhlciB0aGUKICAgICAvLyBlbnRpcmUgV2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2Rl
IGlzIG9uIGZvciB0aGlzIGRvY3VtZW50KS4KQEAgLTE4NDgsMTkgKzE4NDgsMTkgQEAgdm9pZCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb25GcgogICAgICAgICBzZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05T
VFJFQU0pKTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAorYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkt
PnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxl
Y3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiAjaWZuZGVmIE5ERUJVRwogCi12b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAordm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIo
Y2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgbV9zZWxlY3Rpb24u
Zm9ybWF0Rm9yRGVidWdnZXIoYnVmZmVyLCBsZW5ndGgpOwogfQogCi12b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
aG93VHJlZUZvclRoaXMoKSBjb25zdAogewogICAgIG1fc2VsZWN0aW9uLnNob3dUcmVlRm9yVGhp
cygpOwogfQpAQCAtMTg3MSwxMiArMTg3MSwxMiBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNob3dUcmVlRm9yVGhpCiAKICNpZm5kZWYgTkRFQlVHCiAKLXZvaWQgc2hvd1RyZWUoY29uc3Qg
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciYgc2VsKQordm9pZCBzaG93VHJlZShjb25zdCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYgc2VsKQogewogICAgIHNlbC5zaG93VHJlZUZvclRoaXMo
KTsKIH0KIAotdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVy
KiBzZWwpCit2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uKiBzZWwp
CiB7CiAgICAgaWYgKHNlbCkKICAgICAgICAgc2VsLT5zaG93VHJlZUZvclRoaXMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHJldmlzaW9uIDg1ODM0KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDo4NTgzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2VsZWN0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIFNlbGVjdGlv
bkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
aGFyYWN0ZXJEYXRhOworY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CitjbGFzcyBG
cmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2Ns
YXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBTZXR0aW5nczsKK2Ns
YXNzIFZpc2libGVQb3NpdGlvbjsKKworZW51bSBEaXJlY3Rpb25hbGl0eVBvbGljeSB7IE1ha2VO
b25EaXJlY3Rpb25hbFNlbGVjdGlvbiwgTWFrZURpcmVjdGlvbmFsU2VsZWN0aW9uIH07CisKK2Ns
YXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlbGVj
dGlvbkNvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
bnVtIEVBbHRlcmF0aW9uIHsgQWx0ZXJhdGlvbk1vdmUsIEFsdGVyYXRpb25FeHRlbmQgfTsKKyAg
ICBlbnVtIEN1cnNvckFsaWduT25TY3JvbGwgeyBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5
cyB9OworICAgIGVudW0gU2V0U2VsZWN0aW9uT3B0aW9uIHsKKyAgICAgICAgQ2xvc2VUeXBpbmcg
PSAxIDw8IDAsCisgICAgICAgIENsZWFyVHlwaW5nU3R5bGUgPSAxIDw8IDEsCisgICAgICAgIFVz
ZXJUcmlnZ2VyZWQgPSAxIDw8IDIsCisgICAgICAgIFNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCA9
IDEgPDwgMywKKyAgICB9OworICAgIHR5cGVkZWYgdW5zaWduZWQgU2V0U2VsZWN0aW9uT3B0aW9u
czsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqID0gMCwgYm9vbCBpc0RyYWdDYXJl
dENvbnRyb2xsZXIgPSBmYWxzZSk7CisKKyAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOyB9Cisg
ICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
Q29udGVudEVkaXRhYmxlKCk7IH0KKyAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsgfQor
ICAgIE5vZGUqIHNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
LnNoYWRvd1RyZWVSb290Tm9kZSgpOyB9CisgICAgIAorICAgIHZvaWQgbW92ZVRvKGNvbnN0IFJh
bmdlKiwgRUFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7CisgICAgdm9pZCBt
b3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2Us
IEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQpOworICAg
IHZvaWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKKyAgICB2b2lkIG1vdmVUbyhjb25zdCBQ
b3NpdGlvbiYsIEVBZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworICAgIHZv
aWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKKworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFNldFNlbGVjdGlvbk9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGln
bkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51
bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSA9IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbik7
CisgICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVj
dGlvbmFsaXR5ID0gTWFrZURpcmVjdGlvbmFsU2VsZWN0aW9uKSB7IHNldFNlbGVjdGlvbihzZWxl
Y3Rpb24sIENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSwgQWxpZ25DdXJzb3JPblNjcm9s
bElmTmVlZGVkLCBncmFudWxhcml0eSwgZGlyZWN0aW9uYWxpdHkpOyB9CisgICAgYm9vbCBzZXRT
ZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICB2
b2lkIHNlbGVjdEFsbCgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICAvLyBDYWxsIHRo
aXMgYWZ0ZXIgZG9pbmcgdXNlci10cmlnZ2VyZWQgc2VsZWN0aW9ucyB0byBtYWtlIGl0IGVhc3kg
dG8gZGVsZXRlIHRoZSBmcmFtZSB5b3UgZW50aXJlbHkgc2VsZWN0ZWQuCisgICAgdm9pZCBzZWxl
Y3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOworCisgICAgYm9vbCBjb250
YWlucyhjb25zdCBJbnRQb2ludCYpOworCisgICAgVmlzaWJsZVNlbGVjdGlvbjo6U2VsZWN0aW9u
VHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uc2VsZWN0aW9u
VHlwZSgpOyB9CisKKyAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpOyB9CisKKyAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgU2Vs
ZWN0aW9uRGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZh
bHNlKTsKKyAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgaW50IHZlcnRpY2FsRGlzdGFuY2Us
IGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25D
dXJzb3JPblNjcm9sbElmTmVlZGVkKTsKKyAgICBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHko
KSBjb25zdCB7IHJldHVybiBtX2dyYW51bGFyaXR5OyB9CisKKyAgICB2b2lkIHNldFN0YXJ0KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmLCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7CisgICAg
dm9pZCBzZXRFbmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGJvb2wgdXNlclRyaWdnZXJlZCA9
IGZhbHNlKTsKKyAgICAKKyAgICB2b2lkIHNldEJhc2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Ym9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworICAgIHZvaWQgc2V0QmFzZShjb25zdCBQb3Np
dGlvbiYsIEVBZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworICAgIHZvaWQg
c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZh
bHNlKTsKKyAgICB2b2lkIHNldEV4dGVudChjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSwgYm9v
bCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworCisgICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmJhc2UoKTsgfQorICAgIFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmV4dGVudCgpOyB9CisgICAgUG9zaXRpb24gc3RhcnQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5zdGFydCgpOyB9CisgICAgUG9zaXRpb24gZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uZW5kKCk7IH0KKworICAgIC8vIFJldHVybiB0aGUg
cmVuZGVyZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0IChpbiB0
aGUgc2VsZWN0aW9uIHN0YXJ0IG5vZGUpCisgICAgUmVuZGVyT2JqZWN0KiBjYXJldFJlbmRlcmVy
KCkgY29uc3Q7CisKKyAgICAvLyBDYXJldCByZWN0IGxvY2FsIHRvIHRoZSBjYXJldCdzIHJlbmRl
cmVyCisgICAgSW50UmVjdCBsb2NhbENhcmV0UmVjdCgpOworICAgIEludFJlY3QgbG9jYWxDYXJl
dFJlY3RGb3JQYWludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fY2FyZXRSZWN0OyB9CisKKyAgICAv
LyBCb3VuZHMgb2YgKHBvc3NpYmx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29y
ZHMKKyAgICBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICB2b2lkIHNldENhcmV0
UmVjdE5lZWRzVXBkYXRlKGJvb2wgZmxhZyA9IHRydWUpOworCisgICAgdm9pZCBzZXRJc0RpcmVj
dGlvbmFsKGJvb2wpOworICAgIHZvaWQgd2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24sIFNlbGVj
dGlvbkRpcmVjdGlvbik7CisKKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uLmlzTm9uZSgpOyB9CisgICAgYm9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rpb24uaXNDYXJldCgpOyB9CisgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb24uaXNSYW5nZSgpOyB9CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCk7IH0KKyAgICBib29sIGlzSW5Q
YXNzd29yZEZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbi5pc0FsbChydWxlKTsgfQorICAgIAorICAgIFBhc3NSZWZQdHI8UmFuZ2U+
IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsgfQorCisgICAgdm9pZCBkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCosIGJv
b2wgc2VsZWN0ZWQpIGNvbnN0OworCisgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7
CisgICAgdm9pZCB0ZXh0V2lsbEJlUmVwbGFjZWQoQ2hhcmFjdGVyRGF0YSosIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgdm9p
ZCBzZXRDYXJldFZpc2libGUoYm9vbCA9IHRydWUpOworICAgIHZvaWQgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOworICAgIGJvb2wgcmVjb21wdXRlQ2FyZXRSZWN0KCk7IC8vIHJldHVybnMgdHJ1
ZSBpZiBjYXJldCByZWN0IG1vdmVkCisgICAgdm9pZCBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7Cisg
ICAgdm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCk7CisKKyAgICAvLyBVc2VkIHRvIHN1c3BlbmQgY2FyZXQgYmxp
bmtpbmcgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgdm9pZCBzZXRDYXJldEJsaW5raW5n
U3VzcGVuZGVkKGJvb2wgc3VzcGVuZGVkKSB7IG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkID0g
c3VzcGVuZGVkOyB9CisgICAgYm9vbCBpc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZDsgfQorCisgICAgLy8gRm9jdXMKKyAg
ICB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CisgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJl
dHVybiBtX2ZvY3VzZWQ7IH0KKyAgICBib29sIGlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0Owor
ICAgIHZvaWQgcGFnZUFjdGl2YXRpb25DaGFuZ2VkKCk7CisKKyAgICAvLyBQYWludGluZy4KKyAg
ICB2b2lkIHVwZGF0ZUFwcGVhcmFuY2UoKTsKKworICAgIHZvaWQgdXBkYXRlU2VjdXJlS2V5Ym9h
cmRFbnRyeUlmQWN0aXZlKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBmb3JtYXRGb3JE
ZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CisgICAgdm9pZCBz
aG93VHJlZUZvclRoaXMoKSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxk
RGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKKyAgICB2b2lk
IHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKKyAgICB2b2lkIG5vdGlmeVJlbmRlcmVyT2ZTZWxl
Y3Rpb25DaGFuZ2UoYm9vbCB1c2VyVHJpZ2dlcmVkKTsKKworICAgIHZvaWQgcGFpbnREcmFnQ2Fy
ZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KSBjb25zdDsKKworICAgIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUoKSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5VHlwaW5nU3R5bGUo
KSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxl
Pik7CisgICAgdm9pZCBjbGVhclR5cGluZ1N0eWxlKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRz
KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKworICAgIHZvaWQgZ2V0
Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYpIGNvbnN0Owor
CisgICAgSFRNTEZvcm1FbGVtZW50KiBjdXJyZW50Rm9ybSgpIGNvbnN0OworCisgICAgdm9pZCBy
ZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiA9IFNjcm9sbEFsaWdubWVudDo6
YWxpZ25DZW50ZXJJZk5lZWRlZCwgYm9vbCByZXZlYWxFeHRlbnQgPSBmYWxzZSk7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworCitwcml2YXRlOgorICAgIGVudW0gRVBvc2l0aW9u
VHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9OworCisgICAgdm9pZCByZXNwb25kVG9O
b2RlTW9kaWZpY2F0aW9uKE5vZGUqLCBib29sIGJhc2VSZW1vdmVkLCBib29sIGV4dGVudFJlbW92
ZWQsIGJvb2wgc3RhcnRSZW1vdmVkLCBib29sIGVuZFJlbW92ZWQpOworICAgIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBpc0dldFN0YXJ0KSBjb25zdDsKKyAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRGb3JQbGF0Zm9ybSgpIGNvbnN0OworICAgIFZpc2libGVQb3NpdGlvbiBlbmRG
b3JQbGF0Zm9ybSgpIGNvbnN0OworCisgICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeUV4dGVuZGlu
Z1JpZ2h0KFRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5
TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5
TW92aW5nRm9yd2FyZChUZXh0R3JhbnVsYXJpdHkpOworICAgIFZpc2libGVQb3NpdGlvbiBtb2Rp
ZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIG1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gbW9kaWZ5TW92aW5nQmFja3dhcmQoVGV4dEdyYW51bGFyaXR5KTsKKworICAgIHZvaWQgdXBk
YXRlQ2FyZXRSZWN0KCk7CisgICAgSW50UmVjdCBjYXJldFJlcGFpbnRSZWN0KCkgY29uc3Q7Cisg
ICAgYm9vbCBzaG91bGRSZXBhaW50Q2FyZXQoY29uc3QgUmVuZGVyVmlldyogdmlldykgY29uc3Q7
CisKKyAgICBpbnQgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUp
OworICAgIAorICAgIHZvaWQgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgp
OworCisgICAgdm9pZCBmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKKyAgICBib29sIGNh
cmV0UmVuZGVyc0luc2lkZU5vZGUoTm9kZSopIGNvbnN0OworICAgIAorICAgIEludFJlY3QgYWJz
b2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworCisgICAgdm9p
ZCBjYXJldEJsaW5rVGltZXJGaXJlZChUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiopOworCisg
ICAgdm9pZCBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wpOworCisgICAgRnJhbWUqIG1f
ZnJhbWU7CisKKyAgICBpbnQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CisKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uOworICAgIFRleHRHcmFudWxhcml0eSBtX2dy
YW51bGFyaXR5OworCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKKwor
ICAgIFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fY2FyZXRCbGlua1RpbWVyOworCisgICAg
SW50UmVjdCBtX2NhcmV0UmVjdDsgLy8gY2FyZXQgcmVjdCBpbiBjb29yZHMgbG9jYWwgdG8gdGhl
IHJlbmRlcmVyIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQKKyAgICBJbnRSZWN0
IG1fYWJzQ2FyZXRCb3VuZHM7IC8vIGFic29sdXRlIGJvdW5kaW5nIHJlY3QgZm9yIHRoZSBjYXJl
dAorICAgIEludFJlY3QgbV9hYnNvbHV0ZUNhcmV0UmVwYWludEJvdW5kczsKKyAgICAKKyAgICBi
b29sIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGU7IC8vIHRydWUgaWYgbV9jYXJldFJlY3QgYW5kIG1f
YWJzQ2FyZXRCb3VuZHMgbmVlZCB0byBiZSBjYWxjdWxhdGVkCisgICAgYm9vbCBtX2Fic0NhcmV0
Qm91bmRzRGlydHk7CisgICAgYm9vbCBtX2lzRGlyZWN0aW9uYWw7CisgICAgYm9vbCBtX2lzRHJh
Z0NhcmV0Q29udHJvbGxlcjsKKyAgICBib29sIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkOwor
ICAgIGJvb2wgbV9mb2N1c2VkOworICAgIGJvb2wgbV9jYXJldFZpc2libGU7CisgICAgYm9vbCBt
X2NhcmV0UGFpbnQ7Cit9OworCitpbmxpbmUgRWRpdGluZ1N0eWxlKiBTZWxlY3Rpb25Db250cm9s
bGVyOjp0eXBpbmdTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUuZ2V0
KCk7Cit9CisKK2lubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyVHlwaW5nU3R5
bGUoKQoreworICAgIG1fdHlwaW5nU3R5bGUuY2xlYXIoKTsKK30KKworaW5saW5lIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0VHlwaW5nU3R5bGUoUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+
IHN0eWxlKQoreworICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKK30KKworI2lmICEoUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkKK2lubGluZSB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25D
aGFuZ2UoKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmbmRl
ZiBOREVCVUcKKy8vIE91dHNpZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlIGZvciBlYXNlIG9mIGlu
dm9jYXRpb24gZnJvbSBnZGIuCit2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlv
bkNvbnRyb2xsZXImKTsKK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uQ29u
dHJvbGxlciopOworI2VuZGlmCisKKyNlbmRpZiAvLyBTZWxlY3Rpb25Db250cm9sbGVyX2gKKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYg
U2VsZWN0aW9uQ29udHJvbGxlcl9oCi0jZGVmaW5lIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAorI2lm
bmRlZiBGcmFtZVNlbGVjdGlvbl9oCisjZGVmaW5lIEZyYW1lU2VsZWN0aW9uX2gKIAogI2luY2x1
ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTQ4LDggKzQ4LDkg
QEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCiBlbnVtIERpcmVjdGlvbmFsaXR5UG9saWN5IHsg
TWFrZU5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uLCBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rpb24gfTsK
IAotY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2VsZWN0aW9uQ29udHJvbGxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgRnJh
bWVTZWxlY3Rpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyYW1lU2VsZWN0aW9uKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEVBbHRlcmF0
aW9uIHsgQWx0ZXJhdGlvbk1vdmUsIEFsdGVyYXRpb25FeHRlbmQgfTsKICAgICBlbnVtIEN1cnNv
ckFsaWduT25TY3JvbGwgeyBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsCkBAIC02Miw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQgU2V0U2VsZWN0aW9u
T3B0aW9uczsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqID0gMCwgYm9vbCBpc0Ry
YWdDYXJldENvbnRyb2xsZXIgPSBmYWxzZSk7CisgICAgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0g
MCwgYm9vbCBpc0RyYWdDYXJldENvbnRyb2xsZXIgPSBmYWxzZSk7CiAKICAgICBFbGVtZW50KiBy
b290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24ucm9vdEVkaXRh
YmxlRWxlbWVudCgpOyB9CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KQEAgLTIxNSw3ICsyMTYsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3Qo
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBjYXJldEJsaW5rVGltZXJGaXJlZChU
aW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiopOworICAgIHZvaWQgY2FyZXRCbGlua1RpbWVyRmly
ZWQoVGltZXI8RnJhbWVTZWxlY3Rpb24+Kik7CiAKICAgICB2b2lkIHNldFVzZVNlY3VyZUtleWJv
YXJkRW50cnkoYm9vbCk7CiAKQEAgLTIyOCw3ICsyMjksNyBAQCBwcml2YXRlOgogCiAgICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKIAotICAgIFRpbWVyPFNlbGVjdGlvbkNv
bnRyb2xsZXI+IG1fY2FyZXRCbGlua1RpbWVyOworICAgIFRpbWVyPEZyYW1lU2VsZWN0aW9uPiBt
X2NhcmV0QmxpbmtUaW1lcjsKIAogICAgIEludFJlY3QgbV9jYXJldFJlY3Q7IC8vIGNhcmV0IHJl
Y3QgaW4gY29vcmRzIGxvY2FsIHRvIHRoZSByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgcGFpbnRp
bmcgdGhlIGNhcmV0CiAgICAgSW50UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBhYnNvbHV0ZSBi
b3VuZGluZyByZWN0IGZvciB0aGUgY2FyZXQKQEAgLTI0NCwyMyArMjQ1LDIzIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2NhcmV0UGFpbnQ7CiB9OwogCi1pbmxpbmUgRWRpdGluZ1N0eWxlKiBTZWxl
Y3Rpb25Db250cm9sbGVyOjp0eXBpbmdTdHlsZSgpIGNvbnN0CitpbmxpbmUgRWRpdGluZ1N0eWxl
KiBGcmFtZVNlbGVjdGlvbjo6dHlwaW5nU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3R5
cGluZ1N0eWxlLmdldCgpOwogfQogCi1pbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpj
bGVhclR5cGluZ1N0eWxlKCkKK2lubGluZSB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhclR5cGlu
Z1N0eWxlKCkKIHsKICAgICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7CiB9CiAKLWlubGluZSB2b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzdHlsZSkKK2lubGluZSB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRUeXBpbmdTdHlsZShQ
YXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUpCiB7CiAgICAgbV90eXBpbmdTdHlsZSA9IHN0
eWxlOwogfQogCiAjaWYgIShQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oQ0hST01JVU0pKQotaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNj
ZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCitpbmxpbmUgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCiB7CiB9CiAjZW5kaWYK
QEAgLTI2OSw5ICsyNzAsOSBAQCBpbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3Rp
ZnlBCiAKICNpZm5kZWYgTkRFQlVHCiAvLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBm
b3IgZWFzZSBvZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgotdm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyJik7Ci12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb24mKTsKK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b24qKTsKICNlbmRpZgogCi0jZW5kaWYgLy8gU2VsZWN0aW9uQ29udHJvbGxlcl9oCisjZW5kaWYg
Ly8gRnJhbWVTZWxlY3Rpb25faAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVt
b3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNp
bmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIg
KzM5LDEyIEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U21hcnRSZXBsYWNlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ODUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0gIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEu
aCIKLSNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNp
bmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJh
c2UuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgotI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5oIgotI2luY2x1ZGUgIlNlY3VyZVRleHRJbnB1dC5oIgotI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5o
IgotI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVm
aW5lIEVESVRfREVCVUcgMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7Ci0KLWNvbnN0IGludCBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
biA9IElOVF9NSU47Ci0KLVNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIo
RnJhbWUqIGZyYW1lLCBib29sIGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKLSAgICA6IG1fZnJhbWUo
ZnJhbWUpCi0gICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JW
ZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKLSAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpCi0gICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmU2VsZWN0aW9uQ29udHJv
bGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCi0gICAgLCBtX2NhcmV0UmVjdE5lZWRzVXBkYXRl
KHRydWUpCi0gICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKLSAgICAsIG1faXNEcmFn
Q2FyZXRDb250cm9sbGVyKGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKLSAgICAsIG1faXNDYXJldEJs
aW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5w
YWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgp
ID09IGZyYW1lKQotICAgICwgbV9jYXJldFZpc2libGUoaXNEcmFnQ2FyZXRDb250cm9sbGVyKQot
ICAgICwgbV9jYXJldFBhaW50KHRydWUpCi17Ci0gICAgc2V0SXNEaXJlY3Rpb25hbChmYWxzZSk7
Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24p
Ci17Ci0gICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVh
clR5cGluZ1N0eWxlOwotICAgIGlmICh1c2VyVHJpZ2dlcmVkKQotICAgICAgICBvcHRpb25zIHw9
IFVzZXJUcmlnZ2VyZWQ7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLmRl
ZXBFcXVpdmFsZW50KCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuYWZmaW5pdHkoKSksIG9w
dGlvbnMsIGFsaWduKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZiYXNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmV4dGVudCwg
Ym9vbCB1c2VyVHJpZ2dlcmVkKQotewotICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9
IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkK
LSAgICAgICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOwotICAgIHNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSwgZXh0ZW50LmRlZXBFcXVpdmFsZW50
KCksIGJhc2UuYWZmaW5pdHkoKSksIG9wdGlvbnMpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0g
ICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0g
ICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IHIgPyBWaXNpYmxlU2VsZWN0aW9uKHItPnN0YXJ0UG9zaXRpb24oKSwgci0+ZW5k
UG9zaXRpb24oKSwgYWZmaW5pdHkpIDogVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbigpLCBQb3Np
dGlvbigpLCBhZmZpbml0eSk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7
Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZi
YXNlLCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgdXNl
clRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5
cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0gICAgICAg
IG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihiYXNlLCBleHRlbnQsIGFmZmluaXR5KSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIFNl
dFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucywgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBkaXJlY3Rpb25h
bGl0eVBvbGljeSkKLXsKLSAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7Ci0KLSAgICBi
b29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIENsb3NlVHlwaW5nOwotICAgIGJvb2wgc2hvdWxk
Q2xlYXJUeXBpbmdTdHlsZSA9IG9wdGlvbnMgJiBDbGVhclR5cGluZ1N0eWxlOwotICAgIGJvb2wg
dXNlclRyaWdnZXJlZCA9IG9wdGlvbnMgJiBVc2VyVHJpZ2dlcmVkOwotCi0gICAgc2V0SXNEaXJl
Y3Rpb25hbChkaXJlY3Rpb25hbGl0eVBvbGljeSA9PSBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rpb24p
OwotCi0gICAgaWYgKG1faXNEcmFnQ2FyZXRDb250cm9sbGVyKSB7Ci0gICAgICAgIGludmFsaWRh
dGVDYXJldFJlY3QoKTsKLSAgICAgICAgbV9zZWxlY3Rpb24gPSBzOwotICAgICAgICBtX2NhcmV0
UmVjdE5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdCgpOwot
ICAgICAgICB1cGRhdGVDYXJldFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIW1fZnJhbWUpIHsKLSAgICAgICAgbV9zZWxlY3Rpb24gPSBzOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNl
bGVjdGlvbgotICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdl
dCBpbnRvIGFuIGluZmluaXRlIGxvb3AKLSAgICBpZiAocy5iYXNlKCkuYW5jaG9yTm9kZSgpKSB7
Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHMuYmFzZSgpLmFuY2hvck5vZGUoKS0+ZG9j
dW1lbnQoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRv
Y3VtZW50LT5mcmFtZSgpICE9IG1fZnJhbWUgJiYgZG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1l
bnQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRT
ZWxlY3Rpb24ocywgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoY2xvc2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3Nl
VHlwaW5nKG1fZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKSk7Ci0KLSAgICBpZiAo
c2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKLSAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwotCi0g
ICAgaWYgKG1fc2VsZWN0aW9uID09IHMpIHsKLSAgICAgICAgLy8gRXZlbiBpZiBzZWxlY3Rpb24g
d2FzIG5vdCBjaGFuZ2VkLCBzZWxlY3Rpb24gb2Zmc2V0cyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQu
Ci0gICAgICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVj
dGlvbiA9IG1fc2VsZWN0aW9uOwotCi0gICAgbV9zZWxlY3Rpb24gPSBzOwotICAgIAotICAgIG1f
Y2FyZXRSZWN0TmVlZHNVcGRhdGUgPSB0cnVlOwotICAgIAotICAgIGlmICghcy5pc05vbmUoKSkK
LSAgICAgICAgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOwotICAgIAotICAgIHVwZGF0ZUFwcGVh
cmFuY2UoKTsKLQotICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2
ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgotICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkg
dGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCi0gICAgbV94
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbjsKLSAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgp
OwotICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7Ci0g
ICAgbV9mcmFtZS0+ZWRpdG9yKCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0
aW9uLCBvcHRpb25zKTsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkgewotICAgICAgICBTY3JvbGxB
bGlnbm1lbnQgYWxpZ25tZW50OwotCi0gICAgICAgIGlmIChtX2ZyYW1lLT5lZGl0b3IoKS0+YmVo
YXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCi0gICAg
ICAgICAgICBhbGlnbm1lbnQgPSAoYWxpZ24gPT0gQWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cykg
PyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnbkNlbnRlcklmTmVlZGVkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbGlnbm1lbnQg
PSAoYWxpZ24gPT0gQWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cykgPyBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkOwot
Ci0gICAgICAgIHJldmVhbFNlbGVjdGlvbihhbGlnbm1lbnQsIHRydWUpOwotICAgIH0KLQotICAg
IG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKTsKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5lbnF1ZXVlRG9jdW1lbnRFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXN0YXRpYyBib29s
IHJlbW92aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pCi17Ci0gICAgaWYgKCFwb3NpdGlvbi5hbmNob3JOb2RlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChwb3NpdGlvbi5hbmNob3JOb2RlKCkgPT0gbm9kZSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+Y29udGFpbnMocG9zaXRpb24u
YW5jaG9yTm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5hbmNob3JOb2RlKCkt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpu
b2RlV2lsbEJlUmVtb3ZlZChOb2RlICpub2RlKQotewotICAgIGlmIChpc05vbmUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gVGhlcmUgY2FuJ3QgYmUgYSBzZWxlY3Rpb24gaW5zaWRlIGEg
ZnJhZ21lbnQsIHNvIGlmIGEgZnJhZ21lbnQncyBub2RlIGlzIGJlaW5nIHJlbW92ZWQsCi0gICAg
Ly8gdGhlIHNlbGVjdGlvbiBpbiB0aGUgZG9jdW1lbnQgdGhhdCBjcmVhdGVkIHRoZSBmcmFnbWVu
dCBuZWVkcyBubyBhZGp1c3RtZW50LgotICAgIGlmIChub2RlICYmIGhpZ2hlc3RBbmNlc3Rvcihu
b2RlKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKG5vZGUsIHJlbW92aW5n
Tm9kZVJlbW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5iYXNlKCkpLCByZW1vdmluZ05v
ZGVSZW1vdmVzUG9zaXRpb24obm9kZSwgbV9zZWxlY3Rpb24uZXh0ZW50KCkpLAotICAgICAgICBy
ZW1vdmluZ05vZGVSZW1vdmVzUG9zaXRpb24obm9kZSwgbV9zZWxlY3Rpb24uc3RhcnQoKSksIHJl
bW92aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5lbmQoKSkpOwotfQot
Ci12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9k
ZSogbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRSZW1vdmVkLCBib29sIHN0YXJ0
UmVtb3ZlZCwgYm9vbCBlbmRSZW1vdmVkKQotewotICAgIGJvb2wgY2xlYXJSZW5kZXJUcmVlU2Vs
ZWN0aW9uID0gZmFsc2U7Ci0gICAgYm9vbCBjbGVhckRPTVRyZWVTZWxlY3Rpb24gPSBmYWxzZTsK
LQotICAgIGlmIChzdGFydFJlbW92ZWQgfHwgZW5kUmVtb3ZlZCkgewotICAgICAgICAvLyBGSVhN
RTogV2hlbiBlbmRwb2ludHMgYXJlIHJlbW92ZWQsIHdlIHNob3VsZCBqdXN0IGFsdGVyIHRoZSBz
ZWxlY3Rpb24sIGluc3RlYWQgb2YgYmxvd2luZyBpdCBhd2F5LgotICAgICAgICBjbGVhclJlbmRl
clRyZWVTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICBjbGVhckRPTVRyZWVTZWxlY3Rpb24gPSB0
cnVlOwotICAgIH0gZWxzZSBpZiAoYmFzZVJlbW92ZWQgfHwgZXh0ZW50UmVtb3ZlZCkgewotICAg
ICAgICAvLyBUaGUgYmFzZSBhbmQvb3IgZXh0ZW50IGFyZSBhYm91dCB0byBiZSByZW1vdmVkLCBi
dXQgdGhlIHN0YXJ0IGFuZCBlbmQgYXJlbid0LgotICAgICAgICAvLyBDaGFuZ2UgdGhlIGJhc2Ug
YW5kIGV4dGVudCB0byB0aGUgc3RhcnQgYW5kIGVuZCwgYnV0IGRvbid0IHJlLXZhbGlkYXRlIHRo
ZQotICAgICAgICAvLyBzZWxlY3Rpb24sIHNpbmNlIGRvaW5nIHNvIGNvdWxkIG1vdmUgdGhlIHN0
YXJ0IGFuZCBlbmQgaW50byB0aGUgbm9kZQotICAgICAgICAvLyB0aGF0IGlzIGFib3V0IHRvIGJl
IHJlbW92ZWQuCi0gICAgICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQotICAgICAg
ICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24obV9zZWxlY3Rpb24uc3RhcnQo
KSwgbV9zZWxlY3Rpb24uZW5kKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NlbGVj
dGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24u
c3RhcnQoKSk7Ci0gICAgfSBlbHNlIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rp
b24uZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICBSYW5nZTo6Q29tcGFyZVJlc3VsdHMgY29tcGFyZVJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9k
ZShub2RlLCBlYyk7Ci0gICAgICAgIGlmICghZWMgJiYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6
Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lO
U0lERSkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3RoaW5nIGhlcmUsIHdoZW4gdGhp
cyBub2RlJ3MgcmVuZGVyZXIgd2FzIGRlc3Ryb3llZCwgdGhlIHJlY3QgdGhhdCBpdCAKLSAgICAg
ICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBn
YXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mIAotICAgICAgICAgICAgLy8gdGhlIHJlbW92
YWwgd291bGRuJ3QgYmUgaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3Qg
ZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlkYXRpb24uCi0gICAgICAgICAgICBjbGVhclJl
bmRlclRyZWVTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNs
ZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewotICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3Vt
ZW50ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCk7Ci0gICAg
ICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChSZW5kZXJW
aWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KGRvY3VtZW50LT5yZW5kZXJlcigpKSkKLSAgICAgICAg
ICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgfQotCi0gICAgaWYgKGNsZWFyRE9NVHJl
ZVNlbGVjdGlvbikKLSAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKSwgMCk7
Ci19Ci0KLWVudW0gRW5kUG9pbnRUeXBlIHsgRW5kUG9pbnRJc1N0YXJ0LCBFbmRQb2ludElzRW5k
IH07Ci0KLXN0YXRpYyBib29sIHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRS
ZXBsYWNlbWVudChQb3NpdGlvbiYgcG9zaXRpb24sIEVuZFBvaW50VHlwZSB0eXBlLCBDaGFyYWN0
ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWdu
ZWQgbmV3TGVuZ3RoKQotewotICAgIGlmICghcG9zaXRpb24uYW5jaG9yTm9kZSgpIHx8IHBvc2l0
aW9uLmFuY2hvck5vZGUoKSAhPSBub2RlIHx8IHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBBU1NFUlQocG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gMCk7Ci0gICAg
dW5zaWduZWQgcG9zaXRpb25PZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgIGlmIChwb3NpdGlvbk9mZnNldCA+IG9mZnNl
dCAmJiBwb3NpdGlvbk9mZnNldCA8IG9mZnNldCArIG9sZExlbmd0aCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9mZnNldCBpZiB0aGUgcG9zaXRpb24gaXMgYWZ0
ZXIgb3IgYXQgdGhlIGVuZCBvZiB0aGUgZGVsZXRlZCBjb250ZW50cyAocG9zaXRpb25PZmZzZXQg
Pj0gb2Zmc2V0ICsgb2xkTGVuZ3RoKQotICAgIC8vIHRvIGF2b2lkIGhhdmluZyBhIHN0YWxlIG9m
ZnNldCBleGNlcHQgd2hlbiB0aGUgcG9zaXRpb24gaXMgdGhlIGVuZCBvZiBzZWxlY3Rpb24gYW5k
IG5vdGhpbmcgaXMgZGVsZXRlZCwgaW4gd2hpY2ggY2FzZSwKLSAgICAvLyBhZGp1c3Rpbmcgb2Zm
c2V0IHJlc3VsdHMgaW4gaW5jb3JyZWN0bHkgZXh0ZW5kaW5nIHRoZSBzZWxlY3Rpb24gdW50aWwg
dGhlIGVuZCBvZiBuZXdseSBpbnNlcnRlZCBjb250ZW50cy4KLSAgICBpZiAoKHBvc2l0aW9uT2Zm
c2V0ID4gb2Zmc2V0ICsgb2xkTGVuZ3RoKSB8fCAocG9zaXRpb25PZmZzZXQgPT0gb2Zmc2V0ICsg
b2xkTGVuZ3RoICYmICh0eXBlID09IEVuZFBvaW50SXNTdGFydCB8fCBvbGRMZW5ndGgpKSkKLSAg
ICAgICAgcG9zaXRpb24ubW92ZVRvT2Zmc2V0KHBvc2l0aW9uT2Zmc2V0IC0gb2xkTGVuZ3RoICsg
bmV3TGVuZ3RoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjp0ZXh0V2lsbEJlUmVwbGFjZWQoQ2hhcmFjdGVyRGF0YSogbm9kZSwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAv
LyBUaGUgZnJhZ21lbnQgY2hlY2sgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIFNlZSBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zMDA2Mi4KLSAgICBpZiAoaXNOb25lKCkg
fHwgIW5vZGUgfHwgaGlnaGVzdEFuY2VzdG9yKG5vZGUpLT5ub2RlVHlwZSgpID09IE5vZGU6OkRP
Q1VNRU5UX0ZSQUdNRU5UX05PREUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIGJh
c2UgPSBtX3NlbGVjdGlvbi5iYXNlKCk7Ci0gICAgUG9zaXRpb24gZXh0ZW50ID0gbV9zZWxlY3Rp
b24uZXh0ZW50KCk7Ci0gICAgUG9zaXRpb24gc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwot
ICAgIFBvc2l0aW9uIGVuZCA9IG1fc2VsZWN0aW9uLmVuZCgpOwotICAgIGJvb2wgc2hvdWxkUmVt
b3ZlQmFzZSA9IHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRSZXBsYWNlbWVu
dChiYXNlLCBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gRW5kUG9pbnRJc1N0YXJ0IDogRW5k
UG9pbnRJc0VuZCwgbm9kZSwgb2Zmc2V0LCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7Ci0gICAgYm9v
bCBzaG91bGRSZW1vdmVFeHRlbnQgPSBzaG91bGRSZW1vdmVQb3NpdGlvbkFmdGVyQWRvcHRpbmdU
ZXh0UmVwbGFjZW1lbnQoZXh0ZW50LCBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gRW5kUG9p
bnRJc0VuZCA6IEVuZFBvaW50SXNTdGFydCwgbm9kZSwgb2Zmc2V0LCBvbGRMZW5ndGgsIG5ld0xl
bmd0aCk7Ci0gICAgYm9vbCBzaG91bGRSZW1vdmVTdGFydCA9IHNob3VsZFJlbW92ZVBvc2l0aW9u
QWZ0ZXJBZG9wdGluZ1RleHRSZXBsYWNlbWVudChzdGFydCwgRW5kUG9pbnRJc1N0YXJ0LCBub2Rl
LCBvZmZzZXQsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKLSAgICBib29sIHNob3VsZFJlbW92ZUVu
ZCA9IHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRSZXBsYWNlbWVudChlbmQs
IEVuZFBvaW50SXNFbmQsIG5vZGUsIG9mZnNldCwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOwotCi0g
ICAgaWYgKChiYXNlICE9IG1fc2VsZWN0aW9uLmJhc2UoKSB8fCBleHRlbnQgIT0gbV9zZWxlY3Rp
b24uZXh0ZW50KCkgfHwgc3RhcnQgIT0gbV9zZWxlY3Rpb24uc3RhcnQoKSB8fCBlbmQgIT0gbV9z
ZWxlY3Rpb24uZW5kKCkpCi0gICAgICAgICYmICFzaG91bGRSZW1vdmVTdGFydCAmJiAhc2hvdWxk
UmVtb3ZlRW5kKSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwotICAg
ICAgICBpZiAoIXNob3VsZFJlbW92ZUJhc2UgJiYgIXNob3VsZFJlbW92ZUV4dGVudCkKLSAgICAg
ICAgICAgIG5ld1NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihiYXNlLCBleHRlbnQpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb24uaXNCYXNlRmlyc3Qo
KSkKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24oc3Rh
cnQsIGVuZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9u
LnNldFdpdGhvdXRWYWxpZGF0aW9uKGVuZCwgc3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgICAgICBzZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3BvbmRU
b05vZGVNb2RpZmljYXRpb24obm9kZSwgc2hvdWxkUmVtb3ZlQmFzZSwgc2hvdWxkUmVtb3ZlRXh0
ZW50LCBzaG91bGRSZW1vdmVTdGFydCwgc2hvdWxkUmVtb3ZlRW5kKTsKLX0KLQotdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRJc0RpcmVjdGlvbmFsKGJvb2wgaXNEaXJlY3Rpb25hbCkKLXsK
LSAgICBtX2lzRGlyZWN0aW9uYWwgPSAhbV9mcmFtZSB8fCBtX2ZyYW1lLT5lZGl0b3IoKS0+YmVo
YXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKSB8fCBpc0RpcmVj
dGlvbmFsOwotfQotCi1UZXh0RGlyZWN0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmRpcmVjdGlv
bk9mRW5jbG9zaW5nQmxvY2soKQotewotICAgIHJldHVybiBXZWJDb3JlOjpkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKG1fc2VsZWN0aW9uLmV4dGVudCgpKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBpZiAoYWx0ZXIgIT0gQWx0ZXJhdGlvbkV4dGVuZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFy
dCgpOwotICAgIFBvc2l0aW9uIGVuZCA9IG1fc2VsZWN0aW9uLmVuZCgpOwotCi0gICAgYm9vbCBi
YXNlSXNTdGFydCA9IHRydWU7Ci0KLSAgICBpZiAobV9pc0RpcmVjdGlvbmFsKSB7Ci0gICAgICAg
IC8vIE1ha2UgYmFzZSBhbmQgZXh0ZW50IG1hdGNoIHN0YXJ0IGFuZCBlbmQgc28gd2UgZXh0ZW5k
IHRoZSB1c2VyLXZpc2libGUgc2VsZWN0aW9uLgotICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVy
cyBmb3IgY2FzZXMgd2hlcmUgYmFzZSBhbmQgZXh0ZW5kIHBvaW50IHRvIGRpZmZlcmVudCBwb3Np
dGlvbnMgdGhhbgotICAgICAgICAvLyBzdGFydCBhbmQgZW5kIChlLmcuIGFmdGVyIGEgZG91Ymxl
LWNsaWNrIHRvIHNlbGVjdCBhIHdvcmQpLgotICAgICAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSkKLSAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBz
d2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAgICBjYXNlIERpcmVjdGlvblJpZ2h0OgotICAgICAg
ICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBMVFIpCi0gICAgICAgICAg
ICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGJhc2VJc1N0YXJ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBEaXJlY3Rpb25Gb3J3YXJkOgotICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgICAg
IGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgICAg
IGJhc2VJc1N0YXJ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
YmFzZUlzU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGly
ZWN0aW9uQmFja3dhcmQ6Ci0gICAgICAgICAgICBiYXNlSXNTdGFydCA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGJhc2VJc1N0YXJ0KSB7Ci0g
ICAgICAgIG1fc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnQpOwotICAgICAgICBtX3NlbGVjdGlvbi5z
ZXRFeHRlbnQoZW5kKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3NlbGVjdGlvbi5zZXRCYXNl
KGVuZCk7Ci0gICAgICAgIG1fc2VsZWN0aW9uLnNldEV4dGVudChzdGFydCk7Ci0gICAgfQotfQot
Ci1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25Gb3JQbGF0Zm9y
bShib29sIGlzR2V0U3RhcnQpIGNvbnN0Ci17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZSA/IG1fZnJhbWUtPnNldHRpbmdzKCkgOiAwOwotICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0
aW5ncy0+ZWRpdGluZ0JlaGF2aW9yVHlwZSgpID09IEVkaXRpbmdNYWNCZWhhdmlvcikKLSAgICAg
ICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICAvLyBMaW51eCBhbmQgV2luZG93cyBhbHdheXMgZXh0
ZW5kIHNlbGVjdGlvbnMgZnJvbSB0aGUgZXh0ZW50IGVuZHBvaW50LgotICAgIC8vIEZJWE1FOiBW
aXNpYmxlU2VsZWN0aW9uIHNob3VsZCBiZSBmaXhlZCB0byBlbnN1cmUgYXMgYW4gaW52YXJpYW50
IHRoYXQKLSAgICAvLyBiYXNlL2V4dGVudCBhbHdheXMgcG9pbnQgdG8gdGhlIHNhbWUgbm9kZXMg
YXMgc3RhcnQvZW5kLCBidXQgd2hpY2ggcG9pbnRzCi0gICAgLy8gdG8gd2hpY2ggZGVwZW5kcyBv
biB0aGUgdmFsdWUgb2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhpcyBjYW4gYmUgY2hhbmdlZAotICAg
IC8vIHRvIGp1c3QgcmV0dXJuIG1fc2VsLmV4dGVudCgpLgotICAgIHJldHVybiBtX3NlbGVjdGlv
bi5pc0Jhc2VGaXJzdCgpID8gbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpIDogbV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVy
OjpzdGFydEZvclBsYXRmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb25Gb3JQbGF0
Zm9ybSh0cnVlKTsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmVu
ZEZvclBsYXRmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb25Gb3JQbGF0Zm9ybShm
YWxzZSk7Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlF
eHRlbmRpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHko
KSk7Ci0KLSAgICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1vZGlmeUV4dGVuZGluZ1JpZ2h0
IGFuZCBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkIGlzOgotICAgIC8vIG1vZGlmeUV4dGVuZGluZ0Zv
cndhcmQgYWx3YXlzIGV4dGVuZHMgZm9yd2FyZCBsb2dpY2FsbHkuCi0gICAgLy8gbW9kaWZ5RXh0
ZW5kaW5nUmlnaHQgYmVoYXZlcyB0aGUgc2FtZSBhcyBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkIGV4
Y2VwdCBmb3IgZXh0ZW5kaW5nIGNoYXJhY3RlciBvciB3b3JkLAotICAgIC8vIGl0IGV4dGVuZHMg
Zm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBMVFIgZGlyZWN0aW9u
LAotICAgIC8vIGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9z
aW5nIGJsb2NrIGlzIFJUTCBkaXJlY3Rpb24uCi0gICAgc3dpdGNoIChncmFudWxhcml0eSkgewot
ICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgcG9zID0gcG9zLm5leHQoQ2Fubm90
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBw
b3MucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSA9PSBMVFIpCi0gICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uKHBv
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KHBvcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBp
ZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IExUUikKLSAgICAgICAgICAgIHBvcyA9
IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVH
cmFudWxhcml0eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2Vu
dGVuY2VCb3VuZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9j
dW1lbnRCb3VuZGFyeToKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBhbGwgb2YgdGhlIGFi
b3ZlPwotICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlv
bi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgc3dpdGNoIChncmFudWxh
cml0eSkgewotICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IHBv
cy5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24ocG9z
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgotICAgICAg
ICBwb3MgPSBuZXh0U2VudGVuY2VQb3NpdGlvbihwb3MpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIExpbmVHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3Ms
IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFWFRFTlQpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0gbmV4dFBhcmFn
cmFwaFBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlbnRlbmNlQm91bmRhcnk6Ci0gICAgICAgIHBv
cyA9IGVuZE9mU2VudGVuY2UoZW5kRm9yUGxhdGZvcm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBsb2dpY2FsRW5kT2ZMaW5lKGVuZEZv
clBsYXRmb3JtKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5
OgotICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChlbmRGb3JQbGF0Zm9ybSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBlbmRG
b3JQbGF0Zm9ybSgpOwotICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9uKHBvcy5kZWVwRXF1
aXZhbGVudCgpKSkKLSAgICAgICAgICAgIHBvcyA9IGVuZE9mRWRpdGFibGVDb250ZW50KHBvcyk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyA9IGVuZE9mRG9jdW1lbnQocG9zKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9z
aXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KQotewotICAgIFZpc2libGVQb3NpdGlvbiBwb3M7Ci0gICAgc3dpdGNo
IChncmFudWxhcml0eSkgewotICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAg
IGlmIChpc1JhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0
KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSkucmlnaHQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV29yZEdy
YW51bGFyaXR5OgotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVH
cmFudWxhcml0eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2Vu
dGVuY2VCb3VuZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9j
dW1lbnRCb3VuZGFyeToKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhbGwgb2YgdGhlIGFi
b3ZlLgotICAgICAgICBwb3MgPSBtb2RpZnlNb3ZpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgIHBvcyA9IHJpZ2h0
Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKLSAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1f
c2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nRm9yd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICAvLyBGSVhNRTogU3RheSBp
biBlZGl0YWJsZSBjb250ZW50IGZvciB0aGUgbGVzcyBjb21tb24gZ3JhbnVsYXJpdGllcy4KLSAg
ICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0gICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToK
LSAgICAgICAgaWYgKGlzUmFuZ2UoKSkKLSAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlv
bihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkubmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgotICAgICAgICBw
b3MgPSBuZXh0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNl
bnRlbmNlR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IG5leHRTZW50ZW5jZVBvc2l0aW9uKFZp
c2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHko
KSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVHcmFudWxhcml0eTogewotICAgICAg
ICAvLyBkb3duLWFycm93aW5nIGZyb20gYSByYW5nZSBzZWxlY3Rpb24gdGhhdCBlbmRzIGF0IHRo
ZSBzdGFydCBvZiBhIGxpbmUgbmVlZHMKLSAgICAgICAgLy8gdG8gbGVhdmUgdGhlIHNlbGVjdGlv
biBhdCB0aGF0IGxpbmUgc3RhcnQgKG5vIG5lZWQgdG8gY2FsbCBuZXh0TGluZVBvc2l0aW9uISkK
LSAgICAgICAgcG9zID0gZW5kRm9yUGxhdGZvcm0oKTsKLSAgICAgICAgaWYgKCFpc1JhbmdlKCkg
fHwgIWlzU3RhcnRPZkxpbmUocG9zKSkKLSAgICAgICAgICAgIHBvcyA9IG5leHRMaW5lUG9zaXRp
b24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oU1RBUlQpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBv
cyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlvbihlbmRGb3JQbGF0Zm9ybSgpLCB4UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oU1RBUlQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTZW50
ZW5jZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBlbmRPZlNlbnRlbmNlKGVuZEZvclBsYXRmb3Jt
KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVCb3VuZGFyeToKLSAgICAgICAgcG9z
ID0gbG9naWNhbEVuZE9mTGluZShlbmRGb3JQbGF0Zm9ybSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKLSAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgo
ZW5kRm9yUGxhdGZvcm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9jdW1lbnRCb3Vu
ZGFyeToKLSAgICAgICAgcG9zID0gZW5kRm9yUGxhdGZvcm0oKTsKLSAgICAgICAgaWYgKGlzRWRp
dGFibGVQb3NpdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSkpCi0gICAgICAgICAgICBwb3MgPSBl
bmRPZkVkaXRhYmxlQ29udGVudChwb3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3Mg
PSBlbmRPZkRvY3VtZW50KHBvcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0Vmlz
dWFsV29yZEdyYW51bGFyaXR5OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHBv
czsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVu
ZGluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIFZpc2libGVQb3Np
dGlvbiBwb3MobV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwot
Ci0gICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtb2RpZnlFeHRlbmRpbmdMZWZ0IGFuZCBt
b2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBpczoKLSAgICAvLyBtb2RpZnlFeHRlbmRpbmdCYWNrd2Fy
ZCBhbHdheXMgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkuCi0gICAgLy8gbW9kaWZ5RXh0ZW5k
aW5nTGVmdCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGV4Y2Vw
dCBmb3IgZXh0ZW5kaW5nIGNoYXJhY3RlciBvciB3b3JkLAotICAgIC8vIGl0IGV4dGVuZHMgYmFj
a3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgTFRSIGRpcmVjdGlvbiwK
LSAgICAvLyBidXQgaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5n
IGJsb2NrIGlzIFJUTCBkaXJlY3Rpb24uCi0gICAgc3dpdGNoIChncmFudWxhcml0eSkgewotICAg
IGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xv
c2luZ0Jsb2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgcG9zID0gcG9zLnByZXZpb3VzKENhbm5v
dENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zID0g
cG9zLm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdvcmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBMVFIpCi0gICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihw
b3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uKHBv
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBpZiAo
ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IExUUikKLSAgICAgICAgICAgIHBvcyA9IG1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVHcmFu
dWxhcml0eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2VudGVu
Y2VCb3VuZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9jdW1l
bnRCb3VuZGFyeToKLSAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVs
YXJpdHkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBwb3M7Ci19Ci0gICAgICAg
Ci1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIFZpc2libGVQb3NpdGlv
biBwb3MobV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotCi0g
ICAgLy8gRXh0ZW5kaW5nIGEgc2VsZWN0aW9uIGJhY2t3YXJkIGJ5IHdvcmQgb3IgY2hhcmFjdGVy
IGZyb20ganVzdCBhZnRlciBhIHRhYmxlIHNlbGVjdHMKLSAgICAvLyB0aGUgdGFibGUuICBUaGlz
ICJtYWtlcyBzZW5zZSIgZnJvbSB0aGUgdXNlciBwZXJzcGVjdGl2ZSwgZXNwLiB3aGVuIGRlbGV0
aW5nLgotICAgIC8vIEl0IHdhcyBkb25lIGhlcmUgaW5zdGVhZCBvZiBpbiBWaXNpYmxlUG9zaXRp
b24gYmVjYXVzZSB3ZSB3YW50IFZQcyB0byBpdGVyYXRlCi0gICAgLy8gb3ZlciBldmVyeXRoaW5n
LgotICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIENoYXJhY3RlckdyYW51bGFy
aXR5OgotICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRh
cnkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKLSAgICAgICAg
cG9zID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTZW50ZW5jZUdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1NlbnRlbmNlUG9z
aXRpb24ocG9zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lR3JhbnVsYXJpdHk6Ci0g
ICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uKEVYVEVOVCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhcmFncmFw
aEdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKHBv
cywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNlbnRlbmNlQm91bmRhcnk6Ci0gICAgICAgIHBvcyA9IHN0YXJ0T2ZTZW50
ZW5jZShzdGFydEZvclBsYXRmb3JtKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVC
b3VuZGFyeToKLSAgICAgICAgcG9zID0gbG9naWNhbFN0YXJ0T2ZMaW5lKHN0YXJ0Rm9yUGxhdGZv
cm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6Ci0gICAg
ICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRGb3JQbGF0Zm9ybSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBzdGFydEZv
clBsYXRmb3JtKCk7Ci0gICAgICAgIGlmIChpc0VkaXRhYmxlUG9zaXRpb24ocG9zLmRlZXBFcXVp
dmFsZW50KCkpKQotICAgICAgICAgICAgcG9zID0gc3RhcnRPZkVkaXRhYmxlQ29udGVudChwb3Mp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICBzd2l0Y2ggKGdy
YW51bGFyaXR5KSB7Ci0gICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKLSAgICAgICAgaWYg
KGlzUmFuZ2UoKSkKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkg
PT0gTFRSKQotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1f
c2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBW
aXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpLmxlZnQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV29yZEdyYW51bGFyaXR5
OgotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVHcmFudWxhcml0
eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2VudGVuY2VCb3Vu
ZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9jdW1lbnRCb3Vu
ZGFyeToKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlLgotICAg
ICAgICBwb3MgPSBtb2RpZnlNb3ZpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBsZWZ0Qm91bmRhcnlP
ZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKLSAg
ICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24u
ZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiBwb3M7Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnlNb3ZpbmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0g
ICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGlzUmFuZ2UoKSkKLSAg
ICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgp
KS5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3Np
dGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5
OgotICAgICAgICBwb3MgPSBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTGluZUdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91
c0xpbmVQb3NpdGlvbihzdGFydEZvclBsYXRmb3JtKCksIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihTVEFSVCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51
bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKHN0YXJ0Rm9y
UGxhdGZvcm0oKSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKFNUQVJUKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKLSAgICAgICAgcG9zID0gc3Rh
cnRPZlNlbnRlbmNlKHN0YXJ0Rm9yUGxhdGZvcm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBsb2dpY2FsU3RhcnRPZkxpbmUoc3RhcnRG
b3JQbGF0Zm9ybSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFy
eToKLSAgICAgICAgcG9zID0gc3RhcnRPZlBhcmFncmFwaChzdGFydEZvclBsYXRmb3JtKCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6Ci0gICAgICAgIHBvcyA9
IHN0YXJ0Rm9yUGxhdGZvcm0oKTsKLSAgICAgICAgaWYgKGlzRWRpdGFibGVQb3NpdGlvbihwb3Mu
ZGVlcEVxdWl2YWxlbnQoKSkpCi0gICAgICAgICAgICBwb3MgPSBzdGFydE9mRWRpdGFibGVDb250
ZW50KHBvcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVu
dChwb3MpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBwb3M7Ci19Ci0KLXN0YXRp
YyBib29sIGlzQm91bmRhcnkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIHJl
dHVybiBncmFudWxhcml0eSA9PSBMaW5lQm91bmRhcnkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdy
YXBoQm91bmRhcnkgfHwgZ3JhbnVsYXJpdHkgPT0gRG9jdW1lbnRCb3VuZGFyeTsKLX0gICAgCi0K
LWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkgewotICAgICAgICBT
ZWxlY3Rpb25Db250cm9sbGVyIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlcjsKLSAgICAgICAgdHJp
YWxTZWxlY3Rpb25Db250cm9sbGVyLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7Ci0gICAgICAg
IHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZXRJc0RpcmVjdGlvbmFsKG1faXNEaXJlY3Rpb25h
bCk7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5tb2RpZnkoYWx0ZXIsIGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIGZhbHNlKTsKLQotICAgICAgICBib29sIGNoYW5nZSA9IHNob3Vs
ZENoYW5nZVNlbGVjdGlvbih0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBpZiAoIWNoYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICB3aWxsQmVNb2RpZmllZChhbHRlciwgZGlyZWN0aW9uKTsKLQotICAgIGJvb2wgd2FzUmFu
Z2UgPSBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7Ci0gICAgUG9zaXRpb24gb3JpZ2luYWxTdGFydFBv
c2l0aW9uID0gbV9zZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b247Ci0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIERpcmVjdGlvblJpZ2h0Ogot
ICAgICAgICBpZiAoYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUpCi0gICAgICAgICAgICBwb3NpdGlv
biA9IG1vZGlmeU1vdmluZ1JpZ2h0KGdyYW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdSaWdodChncmFudWxhcml0eSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRGlyZWN0aW9uRm9yd2FyZDoKLSAgICAgICAgaWYgKGFsdGVy
ID09IEFsdGVyYXRpb25FeHRlbmQpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3Np
dGlvbiA9IG1vZGlmeU1vdmluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIERpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9u
TW92ZSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5TW92aW5nTGVmdChncmFudWxhcml0
eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5n
TGVmdChncmFudWxhcml0eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRGlyZWN0aW9uQmFj
a3dhcmQ6Ci0gICAgICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKQotICAgICAgICAg
ICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5TW92aW5nQmFja3dhcmQoZ3Jh
bnVsYXJpdHkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAocG9zaXRpb24uaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChtX2ZyYW1lKSkKLSAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBB
bHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTb21lIG9mIHRoZSBhYm92ZSBvcGVyYXRp
b25zIHNldCBhbiB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24uCi0gICAgLy8gU2V0dGlu
ZyBhIHNlbGVjdGlvbiB3aWxsIGNsZWFyIGl0LCBzbyBzYXZlIGl0IHRvIHBvc3NpYmx5IHJlc3Rv
cmUgbGF0ZXIuCi0gICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRy
YXJ5IGJlY2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQotICAgIC8vIHRoZSByZXF1ZXN0
ZWQgcG9zaXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbiBzZXQuCi0gICAgaW50IHggPSB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
U1RBUlQpOwotCi0gICAgc3dpdGNoIChhbHRlcikgewotICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6
Ci0gICAgICAgIG1vdmVUbyhwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQWx0ZXJhdGlvbkV4dGVuZDoKLSAgICAgICAgLy8gU3RhbmRhcmQgTWFjIGJl
aGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRhcnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9u
IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCi0gICAgICAgIC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1v
dmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZpZXcuCi0gICAgICAgIGlmICghbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCktPmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVj
dGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8
ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKLSAgICAgICAgICAgIHNldEV4dGVudChwb3NpdGlv
biwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgVGV4dERpcmVj
dGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwotICAgICAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25Gb3J3YXJkIHx8ICh0ZXh0RGlyZWN0aW9u
ID09IExUUiAmJiBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uUmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9u
ID09IFJUTCAmJiBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uTGVmdCkpCi0gICAgICAgICAgICAgICAg
c2V0RW5kKHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzZXRTdGFydChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChncmFudWxhcml0eSA9PSBMaW5l
R3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoR3JhbnVsYXJpdHkpCi0gICAg
ICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0geDsKLQotICAgIGlmICh1c2Vy
VHJpZ2dlcmVkKQotICAgICAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7
Ci0KLQotICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7Ci0KLSAgICBzZXRJc0RpcmVjdGlv
bmFsKGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBiZXR0ZXI/Ci1zdGF0aWMgYm9vbCBh
YnNvbHV0ZUNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCAmeSkKLXsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBjLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKLSAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB5ID0gcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpIC8gMjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNlLCBib29s
IHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCi17Ci0gICAgaWYgKCF2
ZXJ0aWNhbERpc3RhbmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodXNlclRy
aWdnZXJlZCkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHRyaWFsU2VsZWN0aW9uQ29u
dHJvbGxlcjsKLSAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNldFNlbGVjdGlvbiht
X3NlbGVjdGlvbik7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZXRJc0RpcmVj
dGlvbmFsKG1faXNEaXJlY3Rpb25hbCk7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxl
ci5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFuY2UsIGZhbHNlKTsKLQotICAgICAgICBib29s
IGNoYW5nZSA9IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIu
c2VsZWN0aW9uKCkpOwotICAgICAgICBpZiAoIWNoYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHVwID0gdmVydGljYWxEaXN0YW5jZSA8IDA7Ci0gICAg
aWYgKHVwKQotICAgICAgICB2ZXJ0aWNhbERpc3RhbmNlID0gLXZlcnRpY2FsRGlzdGFuY2U7Ci0K
LSAgICB3aWxsQmVNb2RpZmllZChhbHRlciwgdXAgPyBEaXJlY3Rpb25CYWNrd2FyZCA6IERpcmVj
dGlvbkZvcndhcmQpOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICBpbnQgeFBvcyA9
IDA7Ci0gICAgc3dpdGNoIChhbHRlcikgewotICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6Ci0gICAg
ICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbih1cCA/IG1fc2VsZWN0aW9uLnN0YXJ0KCkgOiBtX3Nl
bGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIHhQb3MgPSB4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24odXAgPyBTVEFSVCA6IEVORCk7Ci0gICAgICAg
IG1fc2VsZWN0aW9uLnNldEFmZmluaXR5KHVwID8gVVBTVFJFQU0gOiBET1dOU1RSRUFNKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgotICAgICAgICBwb3MgPSBW
aXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpOwotICAgICAgICB4UG9zID0geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVO
VCk7Ci0gICAgICAgIG1fc2VsZWN0aW9uLnNldEFmZmluaXR5KERPV05TVFJFQU0pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpbnQgc3RhcnRZOwotICAgIGlmICghYWJzb2x1dGVDYXJl
dFkocG9zLCBzdGFydFkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHVwKQotICAg
ICAgICBzdGFydFkgPSAtc3RhcnRZOwotICAgIGludCBsYXN0WSA9IHN0YXJ0WTsKLQotICAgIFZp
c2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHQ7Ci0gICAgZm9y
IChWaXNpYmxlUG9zaXRpb24gcCA9IHBvczsgOyBwID0gbmV4dCkgewotICAgICAgICBuZXh0ID0g
KHVwID8gcHJldmlvdXNMaW5lUG9zaXRpb24gOiBuZXh0TGluZVBvc2l0aW9uKShwLCB4UG9zKTsK
LSAgICAgICAgaWYgKG5leHQuaXNOdWxsKCkgfHwgbmV4dCA9PSBwKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGludCBuZXh0WTsKLSAgICAgICAgaWYgKCFhYnNvbHV0ZUNhcmV0WShuZXh0
LCBuZXh0WSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKHVwKQotICAgICAgICAg
ICAgbmV4dFkgPSAtbmV4dFk7Ci0gICAgICAgIGlmIChuZXh0WSAtIHN0YXJ0WSA+IHZlcnRpY2Fs
RGlzdGFuY2UpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG5leHRZID49IGxhc3RZ
KSB7Ci0gICAgICAgICAgICBsYXN0WSA9IG5leHRZOwotICAgICAgICAgICAgcmVzdWx0ID0gbmV4
dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAoYWx0ZXIpIHsKLSAgICBjYXNlIEFsdGVyYXRp
b25Nb3ZlOgotICAgICAgICBtb3ZlVG8ocmVzdWx0LCB1c2VyVHJpZ2dlcmVkLCBhbGlnbik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWx0ZXJhdGlvbkV4dGVuZDoKLSAgICAgICAgc2V0RXh0
ZW50KHJlc3VsdCwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGlmICh1c2VyVHJpZ2dlcmVkKQotICAgICAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHk7Ci0KLSAgICBzZXRJc0RpcmVjdGlvbmFsKGFsdGVyID09IEFsdGVyYXRpb25FeHRl
bmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBTZWxlY3Rpb25Db250cm9sbGVyOjp4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSB0eXBlKQotewotICAg
IGludCB4ID0gMDsKLQotICAgIGlmIChpc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0KLSAg
ICBQb3NpdGlvbiBwb3M7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBTVEFSVDoKLSAg
ICAgICAgcG9zID0gbV9zZWxlY3Rpb24uc3RhcnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFTkQ6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9uLmVuZCgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEJBU0U6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9uLmJhc2UoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFWFRFTlQ6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9uLmV4
dGVudCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBwb3Mu
YW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiB4OwotICAgICAgICAKLSAgICBpZiAobV94UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24gPT0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpOwotICAgICAgICAvLyBWaXNpYmxlUG9zaXRpb24gY3JlYXRpb24gY2FuIGZhaWwgaGVyZSBp
ZiBhIG5vZGUgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGJlY29tZXMgdmlzaWJpbGl0eTpoaWRk
ZW4KLSAgICAgICAgLy8gYWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBjcmVhdGVkIGFuZCBiZWZvcmUg
dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCi0gICAgICAgIHggPSB2aXNpYmxlUG9zaXRpb24uaXNO
b3ROdWxsKCkgPyB2aXNpYmxlUG9zaXRpb24ueE9mZnNldEZvclZlcnRpY2FsTmF2aWdhdGlvbigp
IDogMDsKLSAgICAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSB4OwotICAg
IH0gZWxzZQotICAgICAgICB4ID0gbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247Ci0g
ICAgICAgIAotICAgIHJldHVybiB4OwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNs
ZWFyKCkKLXsKLSAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7Ci0gICAg
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKSk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U3RhcnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRy
aWdnZXJlZCkKLXsKLSAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSkKLSAgICAgICAg
c2V0QmFzZShwb3MsIHVzZXJUcmlnZ2VyZWQpOwotICAgIGVsc2UKLSAgICAgICAgc2V0RXh0ZW50
KHBvcywgdXNlclRyaWdnZXJlZCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0
RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0g
ICAgaWYgKG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkpCi0gICAgICAgIHNldEV4dGVudChwb3Ms
IHVzZXJUcmlnZ2VyZWQpOwotICAgIGVsc2UKLSAgICAgICAgc2V0QmFzZShwb3MsIHVzZXJUcmln
Z2VyZWQpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAg
aWYgKHVzZXJUcmlnZ2VyZWQpCi0gICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAg
ICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgbV9z
ZWxlY3Rpb24uZXh0ZW50KCksIHBvcy5hZmZpbml0eSgpKSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9z
LCBib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0gICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25z
ID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOwotICAgIGlmICh1c2VyVHJpZ2dlcmVk
KQotICAgICAgICBvcHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7Ci0gICAgc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwg
cG9zLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
OjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQotewotICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3Nl
VHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkKLSAgICAg
ICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOwotICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHBvcywgbV9zZWxlY3Rpb24uZXh0ZW50KCksIGFmZmluaXR5KSwgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uICZw
b3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQotewotICAgIFNldFNl
bGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsK
LSAgICBpZiAodXNlclRyaWdnZXJlZCkKLSAgICAgICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVk
OwotICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1fc2VsZWN0aW9uLmJhc2UoKSwg
cG9zLCBhZmZpbml0eSksIG9wdGlvbnMpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKGJvb2wgZmxhZykKLXsKLSAgICBtX2NhcmV0UmVjdE5l
ZWRzVXBkYXRlID0gZmxhZzsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVD
YXJldFJlY3QoKQotewotICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rpb24uc3RhcnQoKS5h
bmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCkuYW5jaG9yTm9k
ZSgpLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRSZWN0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotICAgIAotICAgIG1fY2Fy
ZXRSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICAKLSAgICBpZiAoaXNDYXJldCgpKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSk7Ci0gICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRmlyc3QgY29tcHV0ZSBhIHJlY3QgbG9j
YWwgdG8gdGhlIHJlbmRlcmVyIGF0IHRoZSBzZWxlY3Rpb24gc3RhcnQKLSAgICAgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXI7Ci0gICAgICAgICAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHBv
cy5sb2NhbENhcmV0UmVjdChyZW5kZXJlcik7Ci0KLSAgICAgICAgICAgIC8vIEdldCB0aGUgcmVu
ZGVyZXIgdGhhdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQgKHdo
aWNoCi0gICAgICAgICAgICAvLyBpcyBlaXRoZXIgdGhlIHJlbmRlcmVyIHdlIGp1c3QgZm91bmQs
IG9yIG9uZSBvZiBpdHMgY29udGFpbmVycykKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2Fy
ZXRQYWludGVyID0gY2FyZXRSZW5kZXJlcigpOwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGFu
IG9mZnNldCBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlIGNhcmV0UGFpbnRlcgotICAgICAg
ICAgICAgYm9vbCB1bnJvb3RlZCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHJlbmRlcmVy
ICE9IGNhcmV0UGFpbnRlcikgewotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY29udGFp
bmVyT2JqZWN0ID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgIGlmICgh
Y29udGFpbmVyT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVucm9vdGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGxvY2FsUmVjdC5tb3ZlKHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRh
aW5lck9iamVjdCwgbG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgICAgICAgICByZW5k
ZXJlciA9IGNvbnRhaW5lck9iamVjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCF1bnJvb3RlZCkKLSAgICAgICAgICAgICAgICBtX2NhcmV0UmVjdCA9IGxv
Y2FsUmVjdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUg
PSBmYWxzZTsKLX0KLQotUmVuZGVyT2JqZWN0KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJl
bmRlcmVyKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIGlmIGNhcmV0Tm9kZSBpcyBhIGJs
b2NrIGFuZCBjYXJldCBpcyBpbnNpZGUgaXQgdGhlbiBjYXJldCBzaG91bGQgYmUgcGFpbnRlZCBi
eSB0aGF0IGJsb2NrCi0gICAgYm9vbCBwYWludGVkQnlCbG9jayA9IHJlbmRlcmVyLT5pc0Jsb2Nr
RmxvdygpICYmIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUobm9kZSk7Ci0gICAgcmV0dXJuIHBhaW50
ZWRCeUJsb2NrID8gcmVuZGVyZXIgOiByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0K
LUludFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6bG9jYWxDYXJldFJlY3QoKQotewotICAgIGlm
IChtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKQotICAgICAgICB1cGRhdGVDYXJldFJlY3QoKTsKLSAg
ICAKLSAgICByZXR1cm4gbV9jYXJldFJlY3Q7Ci19Ci0KLUludFJlY3QgU2VsZWN0aW9uQ29udHJv
bGxlcjo6YWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKLXsKLSAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9IGNhcmV0UmVuZGVyZXIoKTsK
LSAgICBpZiAoIWNhcmV0UGFpbnRlcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAK
LSAgICBJbnRSZWN0IGxvY2FsUmVjdChyZWN0KTsKLSAgICBpZiAoY2FyZXRQYWludGVyLT5pc0Jv
eCgpKQotICAgICAgICB0b1JlbmRlckJveChjYXJldFBhaW50ZXIpLT5mbGlwRm9yV3JpdGluZ01v
ZGUobG9jYWxSZWN0KTsKLSAgICByZXR1cm4gY2FyZXRQYWludGVyLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotfQotCi1J
bnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmFic29sdXRlQ2FyZXRCb3VuZHMoKQotewotICAg
IHJlY29tcHV0ZUNhcmV0UmVjdCgpOwotICAgIHJldHVybiBtX2Fic0NhcmV0Qm91bmRzOwotfQot
Ci1zdGF0aWMgSW50UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlY3QgY2FyZXQpCi17Ci0g
ICAgaWYgKGNhcmV0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgZGlydHkgcmVjdCBpbnRlcnNlY3RzIHRoZSBibG9jayB0aGF0IHBh
aW50cyB0aGUgY2FyZXQgZXZlbiBpbiB0aGUgY2FzZSB3aGVyZQotICAgIC8vIHRoZSBjYXJldCBp
dHNlbGYgaXMganVzdCBvdXRzaWRlIHRoZSBibG9jay4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwODY+LgotICAgIGNhcmV0LmluZmxhdGVYKDEpOwotICAg
IHJldHVybiBjYXJldDsKLX0KLQotSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJl
cGFpbnRSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJl
Y3QocmVwYWludFJlY3RGb3JDYXJldChsb2NhbENhcmV0UmVjdEZvclBhaW50aW5nKCkpKTsKLX0K
LQotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1dGVDYXJldFJlY3QoKQotewotICAg
IGlmICghbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIEZy
YW1lVmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKLSAgICBpZiAoIXYpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEludFJlY3Qgb2xkUmVjdCA9IG1fY2FyZXRSZWN0
OwotICAgIEludFJlY3QgbmV3UmVjdCA9IGxvY2FsQ2FyZXRSZWN0KCk7Ci0gICAgaWYgKG9sZFJl
Y3QgPT0gbmV3UmVjdCAmJiAhbV9hYnNDYXJldEJvdW5kc0RpcnR5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBJbnRSZWN0IG9sZEFic0NhcmV0Qm91bmRzID0gbV9hYnNDYXJldEJvdW5k
czsKLSAgICAvLyBGSVhNRTogUmVuYW1lIG1fY2FyZXRSZWN0IHRvIG1fbG9jYWxDYXJldFJlY3Qu
Ci0gICAgbV9hYnNDYXJldEJvdW5kcyA9IGFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KG1fY2Fy
ZXRSZWN0KTsKLSAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSBmYWxzZTsKLSAgICAKLSAgICBp
ZiAob2xkQWJzQ2FyZXRCb3VuZHMgPT0gbV9hYnNDYXJldEJvdW5kcykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICBJbnRSZWN0IG9sZEFic29sdXRlQ2FyZXRSZXBhaW50Qm91
bmRzID0gbV9hYnNvbHV0ZUNhcmV0UmVwYWludEJvdW5kczsKLSAgICAvLyBXZSBiZWxpZXZlIHRo
YXQgd2UgbmVlZCB0byBpbmZsYXRlIHRoZSBsb2NhbCByZWN0IGJlZm9yZSB0cmFuc2Zvcm1pbmcg
aXQgdG8gb2J0YWluIHRoZSByZXBhaW50IGJvdW5kcy4KLSAgICBtX2Fic29sdXRlQ2FyZXRSZXBh
aW50Qm91bmRzID0gY2FyZXRSZXBhaW50UmVjdCgpOwotCi0jaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
ICAgIAotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRv
Y3VtZW50KCktPnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIGNhcmV0IHJl
cGFpbnRpbmcgY29udGFpbmVyLWF3YXJlLgotICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFuZ2xl
SW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhvbGRBYnNvbHV0ZUNhcmV0UmVwYWludEJvdW5kcywg
ZmFsc2UpOwotICAgICAgICBpZiAoc2hvdWxkUmVwYWludENhcmV0KHZpZXcpKQotICAgICAgICAg
ICAgdmlldy0+cmVwYWludFJlY3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMobV9hYnNv
bHV0ZUNhcmV0UmVwYWludEJvdW5kcywgZmFsc2UpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlcGFpbnRDYXJl
dChjb25zdCBSZW5kZXJWaWV3KiB2aWV3KSBjb25zdAotewotICAgIEFTU0VSVCh2aWV3KTsKLSAg
ICBGcmFtZSogZnJhbWUgPSB2aWV3LT5mcmFtZVZpZXcoKSA/IHZpZXctPmZyYW1lVmlldygpLT5m
cmFtZSgpIDogMDsgLy8gVGhlIGZyYW1lIHdoZXJlIHRoZSBzZWxlY3Rpb24gc3RhcnRlZC4KLSAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBmcmFtZSAmJiBmcmFtZS0+c2V0dGluZ3MoKSAmJiBmcmFt
ZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICByZXR1cm4gKGNhcmV0
QnJvd3NpbmcgfHwgaXNDb250ZW50RWRpdGFibGUoKSk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6aW52YWxpZGF0ZUNhcmV0UmVjdCgpCi17Ci0gICAgaWYgKCFpc0NhcmV0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCk7Ci0KLSAgICAvLyByZWNvbXB1dGVDYXJldFJlY3Qgd2ls
bCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciB0aGUgZHJhZyBjYXJldCwKLSAgICAvLyBiZWNhdXNl
IGl0cyBtX2ZyYW1lIGlzIGFsd2F5cyAwLgotICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZCA9IHJl
Y29tcHV0ZUNhcmV0UmVjdCgpOwotCi0gICAgLy8gRURJVCBGSVhNRTogVGhpcyBpcyBhbiB1bmZv
cnR1bmF0ZSBoYWNrLgotICAgIC8vIEJhc2ljYWxseSwgd2UgY2FuJ3QgdHJ1c3QgdGhpcyBsYXlv
dXQgcG9zaXRpb24gc2luY2Ugd2UgCi0gICAgLy8gY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNo
ZWNrIHRvIHNlZSBpZiB3ZSBhcmUgaW4gdW5yZW5kZXJlZCAKLSAgICAvLyBjb250ZW50IHdpbGwg
d29yayBhdCB0aGlzIHBvaW50LiBXZSBtYXkgaGF2ZSB0byB3YWl0IGZvcgotICAgIC8vIGEgbGF5
b3V0IGFuZCByZS1yZW5kZXIgb2YgdGhlIGRvY3VtZW50IHRvIGhhcHBlbi4gU28sIHJlc2V0dGlu
ZyB0aGlzCi0gICAgLy8gZmxhZyB3aWxsIGNhdXNlIGFub3RoZXIgY2FyZXQgbGF5b3V0IHRvIGhh
cHBlbiB0aGUgZmlyc3QgdGltZQotICAgIC8vIHRoYXQgd2UgdHJ5IHRvIHBhaW50IHRoZSBjYXJl
dCBhZnRlciB0aGlzIGNhbGwuIFRoYXQgb25lIHdpbGwgd29yayBzaW5jZQotICAgIC8vIGl0IGhh
cHBlbnMgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBhY2NvdW50ZWQgZm9yIGFueSBlZGl0aW5nCi0g
ICAgLy8gY2hhbmdlcyB3aGljaCBtYXkgaGF2ZSBiZWVuIGRvbmUuCi0gICAgLy8gQW5kLCB3ZSBu
ZWVkIHRvIGxlYXZlIHRoaXMgbGF5b3V0IGhlcmUgc28gdGhlIGNhcmV0IG1vdmVzIHJpZ2h0IAot
ICAgIC8vIGF3YXkgYWZ0ZXIgY2xpY2tpbmcuCi0gICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9
IHRydWU7Ci0KLSAgICBpZiAoIWNhcmV0UmVjdENoYW5nZWQpIHsKLSAgICAgICAgUmVuZGVyVmll
dyogdmlldyA9IHRvUmVuZGVyVmlldyhkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKHZpZXcg
JiYgc2hvdWxkUmVwYWludENhcmV0KHZpZXcpKQotICAgICAgICAgICAgdmlldy0+cmVwYWludFJl
Y3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoY2FyZXRSZXBhaW50UmVjdCgpLCBmYWxz
ZSk7Ci0gICAgfQotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCi17Ci0jaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKCFtX2NhcmV0VmlzaWJs
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9jYXJldFBhaW50KQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFtX3NlbGVjdGlvbi5pc0NhcmV0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSBsb2NhbENhcmV0UmVjdEZvclBhaW50aW5nKCk7Ci0g
ICAgaWYgKGNhcmV0UmVuZGVyZXIoKSAmJiBjYXJldFJlbmRlcmVyKCktPmlzQm94KCkpCi0gICAg
ICAgIHRvUmVuZGVyQm94KGNhcmV0UmVuZGVyZXIoKSktPmZsaXBGb3JXcml0aW5nTW9kZShkcmF3
aW5nUmVjdCk7Ci0gICAgZHJhd2luZ1JlY3QubW92ZSh0eCwgdHkpOwotICAgIEludFJlY3QgY2Fy
ZXQgPSBpbnRlcnNlY3Rpb24oZHJhd2luZ1JlY3QsIGNsaXBSZWN0KTsKLSAgICBpZiAoY2FyZXQu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjYXJldENvbG9yID0gQ29s
b3I6OmJsYWNrOwotICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VS
R0I7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBp
ZiAoZWxlbWVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGNhcmV0Q29sb3Ig
PSBlbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcik7Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBlbGVtZW50LT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5jb2xvclNwYWNlKCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+ZmlsbFJlY3Qo
Y2FyZXQsIGNhcmV0Q29sb3IsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR4KTsKLSAgICBVTlVTRURfUEFSQU0odHkpOwot
ICAgIFVOVVNFRF9QQVJBTShjbGlwUmVjdCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCAqciwgYm9vbCBzZWxlY3RlZCkg
Y29uc3QKLXsKLSAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4oci0+bm9kZSgpKTsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAg
IiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgfSBl
bHNlIGlmIChyLT5pc1RleHQoKSkgewotICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIg
PSB0b1JlbmRlclRleHQocik7Ci0gICAgICAgIGlmICghdGV4dFJlbmRlcmVyLT50ZXh0TGVuZ3Ro
KCkgfHwgIXRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiJXMjdGV4dCAoZW1wdHkpXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAg
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4ID0gMzY7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gdGV4dFJlbmRl
cmVyLT50ZXh0KCk7Ci0gICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAg
ICAgICAgaWYgKHNlbGVjdGVkKSB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3RhcnQoKS5jb250YWluZXJOb2Rl
KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyLT5ub2RlKCkg
PT0gbV9zZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpKQotICAgICAgICAgICAgICAgIG9m
ZnNldCA9IG1fc2VsZWN0aW9uLmVuZCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
LQotICAgICAgICAgICAgaW50IHBvczsKLSAgICAgICAgICAgIElubGluZVRleHRCb3gqIGJveCA9
IHRleHRSZW5kZXJlci0+ZmluZE5leHRJbmxpbmVUZXh0Qm94KG9mZnNldCwgcG9zKTsKLSAgICAg
ICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhib3gtPnN0YXJ0KCksIGJveC0+bGVuKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgc2hvdzsKLSAgICAgICAgICAgIGludCBt
aWQgPSBtYXggLyAyOwotICAgICAgICAgICAgaW50IGNhcmV0ID0gMDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gdGV4dCBpcyBzaG9ydGVyIHRoYW4gbWF4Ci0gICAgICAgICAgICBpZiAo
dGV4dExlbmd0aCA8IG1heCkgewotICAgICAgICAgICAgICAgIHNob3cgPSB0ZXh0OwotICAgICAg
ICAgICAgICAgIGNhcmV0ID0gcG9zOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgLSBtaWQg
PCAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gdG9vIGZldyBjaGFyYWN0ZXJzIHRvIGxlZnQKLSAg
ICAgICAgICAgICAgICBzaG93ID0gdGV4dC5sZWZ0KG1heCAtIDMpICsgIi4uLiI7Ci0gICAgICAg
ICAgICAgICAgY2FyZXQgPSBwb3M7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyAtIG1pZCA+
PSAwICYmIHBvcyArIG1pZCA8PSB0ZXh0TGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gZW5v
dWdoIGNoYXJhY3RlcnMgb24gZWFjaCBzaWRlCi0gICAgICAgICAgICAgICAgc2hvdyA9ICIuLi4i
ICsgdGV4dC5zdWJzdHJpbmcocG9zIC0gbWlkICsgMywgbWF4IC0gNikgKyAiLi4uIjsKLSAgICAg
ICAgICAgICAgICBjYXJldCA9IG1pZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gdG9vIGZldyBjaGFyYWN0ZXJzIG9uIHJpZ2h0Ci0gICAgICAgICAgICAgICAgc2hv
dyA9ICIuLi4iICsgdGV4dC5yaWdodChtYXggLSAzKTsKLSAgICAgICAgICAgICAgICBjYXJldCA9
IHBvcyAtICh0ZXh0TGVuZ3RoIC0gc2hvdy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNob3cucmVwbGFjZSgnXG4nLCAnICcpOwotICAgICAgICAg
ICAgc2hvdy5yZXBsYWNlKCdccicsICcgJyk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ij09PiAjdGV4dCA6IFwiJXNcIiBhdCBvZmZzZXQgJWRcbiIsIHNob3cudXRmOCgpLmRhdGEoKSwg
cG9zKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAiKTsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FyZXQ7IGkrKykKLSAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAiKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXlxuIik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKGludCl0ZXh0Lmxlbmd0aCgpID4g
bWF4KQotICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmxlZnQobWF4IC0gMykgKyAiLi4uIjsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5sZWZ0KG1heCk7
Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAjdGV4dCA6IFwiJXNcIlxuIiwgdGV4
dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjpjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICAvLyBUcmVhdCBh
IGNvbGxhcHNlZCBzZWxlY3Rpb24gbGlrZSBubyBzZWxlY3Rpb24uCi0gICAgaWYgKCFpc1Jhbmdl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRvY3VtZW50LT5yZW5kZXJlcigp
KSAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVl
c3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50
KTsKLSAgICBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3Qs
IHJlc3VsdCk7Ci0gICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAg
IGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhpbm5lck5vZGUt
PnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAg
IGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgIGlmIChtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5pc051bGwoKSB8fCBtX3NlbGVj
dGlvbi52aXNpYmxlRW5kKCkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgUG9zaXRpb24gc3RhcnQobV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuZGVlcEVx
dWl2YWxlbnQoKSk7Ci0gICAgUG9zaXRpb24gZW5kKG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKS5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICBQb3NpdGlvbiBwKHZpc2libGVQb3MuZGVlcEVxdWl2YWxl
bnQoKSk7Ci0KLSAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgcCkgPD0gMCAmJiBj
b21wYXJlUG9zaXRpb25zKHAsIGVuZCkgPD0gMDsKLX0KLQotLy8gV29ya2Fyb3VuZCBmb3IgdGhl
IGZhY3QgdGhhdCBpdCdzIGhhcmQgdG8gZGVsZXRlIGEgZnJhbWUuCi0vLyBDYWxsIHRoaXMgYWZ0
ZXIgZG9pbmcgdXNlci10cmlnZ2VyZWQgc2VsZWN0aW9ucyB0byBtYWtlIGl0IGVhc3kgdG8gZGVs
ZXRlIHRoZSBmcmFtZSB5b3UgZW50aXJlbHkgc2VsZWN0ZWQuCi0vLyBDYW4ndCBkbyB0aGlzIGlt
cGxpY2l0bHkgYXMgcGFydCBvZiBldmVyeSBzZXRTZWxlY3Rpb24gY2FsbCBiZWNhdXNlIGluIHNv
bWUgY29udGV4dHMgaXQgbWlnaHQgbm90IGJlIGdvb2QKLS8vIGZvciB0aGUgZm9jdXMgdG8gbW92
ZSB0byBhbm90aGVyIGZyYW1lLiBTbyBpbnN0ZWFkIHdlIGNhbGwgaXQgZnJvbSBwbGFjZXMgd2hl
cmUgd2UgYXJlIHNlbGVjdGluZyB3aXRoIHRoZQotLy8gbW91c2Ugb3IgdGhlIGtleWJvYXJkIGFm
dGVyIHNldHRpbmcgdGhlIHNlbGVjdGlvbi4KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2Vs
ZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQotewotICAgIC8vIEZpbmQg
dGhlIHBhcmVudCBmcmFtZTsgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcg
dG8gZG8uCi0gICAgRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0g
ICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFt
ZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hl
Y2sgaWYgdGhlIHNlbGVjdGlvbiBjb250YWlucyB0aGUgZW50aXJlIGZyYW1lIGNvbnRlbnRzOyBp
ZiBub3QsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICBpZiAoIWlzUmFuZ2UoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNTdGFydE9mRG9jdW1lbnQoc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0VuZE9mRG9jdW1l
bnQoc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
R2V0IHRvIHRoZSA8aWZyYW1lPiBvciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50
IGluIHRoZSBwYXJlbnQgZnJhbWUuCi0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFt
ZS0+b3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBDb250YWluZXJOb2RlKiBvd25lckVsZW1lbnRQYXJlbnQgPSBvd25lckVsZW1lbnQt
PnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIW93bmVyRWxlbWVudFBhcmVudCkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAvLyBUaGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFr
ZSBpdCBlYXNpZXIgdG8gc2VsZWN0IGlmcmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4g
IERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlm
ICghb3duZXJFbGVtZW50UGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gQ3JlYXRlIGNvbXB1dGUgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIg
dGhlIGVsZW1lbnQuCi0gICAgdW5zaWduZWQgb3duZXJFbGVtZW50Tm9kZUluZGV4ID0gb3duZXJF
bGVtZW50LT5ub2RlSW5kZXgoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlT3duZXJFbGVt
ZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxl
bWVudE5vZGVJbmRleCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4ICsgMSwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7
Ci0KLSAgICAvLyBGb2N1cyBvbiB0aGUgcGFyZW50IGZyYW1lLCBhbmQgdGhlbiBzZWxlY3QgZnJv
bSBiZWZvcmUgdGhpcyBlbGVtZW50IHRvIGFmdGVyLgotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOwotICAgIGlm
IChwYXJlbnQtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkgewotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKHBh
cmVudCk7Ci0gICAgICAgIHBhcmVudC0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pOwotICAgIH0KLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwo
KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAg
Ci0gICAgaWYgKGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkTm9k
ZSgpLT5jYW5TZWxlY3RBbGwoKSkgewotICAgICAgICBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKS0+
c2VsZWN0QWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogcm9v
dCA9IDA7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJvb3QgPSBoaWdo
ZXN0RWRpdGFibGVSb290KG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIGVsc2UgewotICAgICAg
ICByb290ID0gc2hhZG93VHJlZVJvb3ROb2RlKCk7Ci0gICAgICAgIGlmICghcm9vdCkKLSAgICAg
ICAgICAgIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgfQotICAgIGlm
ICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShyb290KSk7
Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBz
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKLSAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVu
dElmRnVsbHlTZWxlY3RlZCgpOwotICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2Uo
dHJ1ZSk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZShS
YW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZykKLXsKLSAg
ICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5l
cihlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOb2RlKiBl
bmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKTsKLSAgICBpZiAoZWMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoc3RhcnRDb250YWluZXIpOwotICAg
IEFTU0VSVChlbmRDb250YWluZXIpOwotICAgIEFTU0VSVChzdGFydENvbnRhaW5lci0+ZG9jdW1l
bnQoKSA9PSBlbmRDb250YWluZXItPmRvY3VtZW50KCkpOwotICAgIAotICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotCi0gICAg
Ly8gTm9uLWNvbGxhcHNlZCByYW5nZXMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0YXJ0IGF0IHRoZSBl
bmQgb2YgYSBsaW5lIHRoYXQgaXMgd3JhcHBlZCwKLSAgICAvLyB0aGV5IHN0YXJ0IGF0IHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSBpbnN0ZWFkCi0gICAgYm9vbCBjb2xsYXBzZWQgPSBy
YW5nZS0+Y29sbGFwc2VkKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoZWMpOwotICAg
IGlmIChlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGVuZE9mZnNldCA9IHJh
bmdlLT5lbmRPZmZzZXQoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KLSAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVyLCBzdGFy
dE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIGNvbGxhcHNlZCA/
IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQo
UG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgU2V0U2VsZWN0aW9uT3B0
aW9ucyBvcHRpb25zID0gQ2xlYXJUeXBpbmdTdHlsZTsKLSAgICBpZiAoY2xvc2VUeXBpbmcpCi0g
ICAgICAgIG9wdGlvbnMgfD0gQ2xvc2VUeXBpbmc7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6aXNJblBhc3N3b3JkRmllbGQo
KSBjb25zdAotewotICAgIEFTU0VSVChzdGFydCgpLmlzTnVsbCgpIHx8IHN0YXJ0KCkuYW5jaG9y
VHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IKLSAgICAgICAgICAg
fHwgc3RhcnQoKS5jb250YWluZXJOb2RlKCkgfHwgIXN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKSk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQoKS5jb250YWlu
ZXJOb2RlKCk7Ci0gICAgaWYgKCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYg
KCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RhcnROb2Rl
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc3RhcnROb2RlKS0+aXNQYXNz
d29yZEZpZWxkKCk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZW5kZXJz
SW5zaWRlTm9kZShOb2RlKiBub2RlKSBjb25zdAotewotICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAhaXNUYWJsZUVsZW1lbnQobm9kZSkgJiYgIWVkaXRp
bmdJZ25vcmVzQ29udGVudChub2RlKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQotewotICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNl
ZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotCi0gICAgLy8gQmVjYXVzZSBSZW5kZXJPYmplY3Q6
OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAotICAgIC8vIFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwKLSAg
ICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFpbnRlZC4K
LSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRvUmVuZGVyVmlldyhtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5yZW5kZXJlcigpKSkKLSAgICAgICAgdmlldy0+cmVwYWludFJlY3RhbmdsZUluVmlld0Fu
ZENvbXBvc2l0ZWRMYXllcnMoZW5jbG9zaW5nSW50UmVjdChib3VuZHMoKSkpOwotCi0gICAgLy8g
Q2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgotICAgIGlmIChhY3RpdmVBbmRGb2N1
c2VkKQotICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwotICAgIHNldENhcmV0VmlzaWJs
ZShhY3RpdmVBbmRGb2N1c2VkKTsKLQotICAgIC8vIFVwZGF0ZSBmb3IgY2FwcyBsb2NrIHN0YXRl
Ci0gICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdl
ZCgpOwotCi0gICAgLy8gQmVjYXVzZSBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9y
KCkgYW5kCi0gICAgLy8gUmVuZGVyVGhlbWU6OmlzRm9jdXNlZCgpIGNoZWNrIGlmIHRoZSBmcmFt
ZSBpcyBhY3RpdmUsIHdlIGhhdmUgdG8KLSAgICAvLyB1cGRhdGUgc3R5bGUgYW5kIHRoZW1lIHN0
YXRlIHRoYXQgZGVwZW5kZWQgb24gdGhvc2UuCi0gICAgaWYgKE5vZGUqIG5vZGUgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKSB7Ci0gICAgICAgIG5vZGUtPnNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpKQotICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXItPnRoZW1lKCktPnN0
YXRlQ2hhbmdlZChyZW5kZXJlciwgRm9jdXNTdGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gU2VjdXJl
IGtleWJvYXJkIGVudHJ5IGlzIHNldCBieSB0aGUgYWN0aXZlIGZyYW1lLgotICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSgpKQotICAg
ICAgICBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGFjdGl2ZUFuZEZvY3VzZWQpOwotfQotCi12
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhZ2VBY3RpdmF0aW9uQ2hhbmdlZCgpCi17Ci0gICAg
Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6dXBkYXRlU2VjdXJlS2V5Ym9hcmRFbnRyeUlmQWN0aXZlKCkKLXsKLSAgICBpZiAobV9m
cmFtZS0+ZG9jdW1lbnQoKSAmJiBpc0ZvY3VzZWRBbmRBY3RpdmUoKSkKLSAgICAgICAgc2V0VXNl
U2VjdXJlS2V5Ym9hcmRFbnRyeShtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2Fy
ZEVudHJ5V2hlbkFjdGl2ZSgpKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRV
c2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFibGUpCi0g
ICAgICAgIGVuYWJsZVNlY3VyZVRleHRJbnB1dCgpOwotICAgIGVsc2UKLSAgICAgICAgZGlzYWJs
ZVNlY3VyZVRleHRJbnB1dCgpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEZv
Y3VzZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2ZvY3VzZWQgPT0gZmxhZykKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fZm9jdXNlZCA9IGZsYWc7Ci0KLSAgICBmb2N1c2VkT3JBY3RpdmVTdGF0
ZUNoYW5nZWQoKTsKLX0KLQotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjppc0ZvY3VzZWRBbmRB
Y3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgp
ICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci19Ci0K
LXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6dXBkYXRlQXBwZWFyYW5jZSgpCi17Ci0gICAgQVNT
RVJUKCFtX2lzRHJhZ0NhcmV0Q29udHJvbGxlcik7Ci0KLSNpZiBFTkFCTEUoVEVYVF9DQVJFVCkK
LSAgICBib29sIGNhcmV0UmVjdENoYW5nZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKLQotICAg
IGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0
dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIHNob3VsZEJsaW5rID0g
bV9jYXJldFZpc2libGUKLSAgICAgICAgJiYgaXNDYXJldCgpICYmIChpc0NvbnRlbnRFZGl0YWJs
ZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwotCi0gICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9w
IHRoZSBibGluayB0aW1lciBzbyB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKLSAgICAvLyBibGFjayBj
YXJldCBpbiB0aGUgbmV3IGxvY2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkIHx8ICFz
aG91bGRCbGluaykKLSAgICAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwotCi0gICAgLy8g
U3RhcnQgYmxpbmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0LiBCZSBzdXJlIG5vdCB0byByZXN0YXJ0
IGlmIHdlJ3JlCi0gICAgLy8gYWxyZWFkeSBibGlua2luZyBpbiB0aGUgcmlnaHQgbG9jYXRpb24u
Ci0gICAgaWYgKHNob3VsZEJsaW5rICYmICFtX2NhcmV0QmxpbmtUaW1lci5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIGlmIChkb3VibGUgYmxpbmtJbnRlcnZhbCA9IG1fZnJhbWUtPnBhZ2UoKS0+dGhl
bWUoKS0+Y2FyZXRCbGlua0ludGVydmFsKCkpCi0gICAgICAgICAgICBtX2NhcmV0QmxpbmtUaW1l
ci5zdGFydFJlcGVhdGluZyhibGlua0ludGVydmFsKTsKLQotICAgICAgICBpZiAoIW1fY2FyZXRQ
YWludCkgewotICAgICAgICAgICAgbV9jYXJldFBhaW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlu
dmFsaWRhdGVDYXJldFJlY3QoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgLy8g
V2UgbmVlZCB0byB1cGRhdGUgc3R5bGUgaW4gY2FzZSB0aGUgbm9kZSBjb250YWluaW5nIHRoZSBz
ZWxlY3Rpb24gaXMgbWFkZSBkaXNwbGF5Om5vbmUuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0aGlzLT5zZWxlY3Rpb24oKTsKLQotICAg
IGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlv
bigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXNlIHRoZSByaWdodG1vc3Qg
Y2FuZGlkYXRlIGZvciB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgYW5kIHRoZSBsZWZ0bW9z
dCBjYW5kaWRhdGUgZm9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAvLyBFeGFtcGxl
OiBmb28gPGE+YmFyPC9hPi4gIEltYWdpbmUgdGhhdCBhIGxpbmUgd3JhcCBvY2N1cnMgYWZ0ZXIg
J2ZvbycsIGFuZCB0aGF0ICdiYXInIGlzIHNlbGVjdGVkLiAgIElmIHdlIHBhc3MgW2ZvbywgM10K
LSAgICAvLyBhcyB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgdGhlIHNlbGVjdGlvbiBwYWlu
dGluZyBjb2RlIHdpbGwgdGhpbmsgdGhhdCBjb250ZW50IG9uIHRoZSBsaW5lIGNvbnRhaW5pbmcg
J2ZvbycgaXMgc2VsZWN0ZWQKLSAgICAvLyBhbmQgd2lsbCBmaWxsIHRoZSBnYXAgYmVmb3JlICdi
YXInLgotICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgUG9z
aXRpb24gY2FuZGlkYXRlID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOwotICAgIGlmIChjYW5kaWRh
dGUuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgc3RhcnRQb3MgPSBjYW5kaWRhdGU7Ci0gICAgUG9z
aXRpb24gZW5kUG9zID0gc2VsZWN0aW9uLmVuZCgpOwotICAgIGNhbmRpZGF0ZSA9IGVuZFBvcy51
cHN0cmVhbSgpOwotICAgIGlmIChjYW5kaWRhdGUuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgZW5k
UG9zID0gY2FuZGlkYXRlOwotCi0gICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUg
dGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3
aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHlldCBu
b3RpZnkgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgb2YgdGV4dCByZW1vdmFsLgotICAgIGlmIChz
dGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRS
ZW5kZXJlciwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIs
IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZykKLXsKLSAgICBpZiAo
bV9jYXJldFZpc2libGUgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIGNsZWFyQ2FyZXRS
ZWN0SWZOZWVkZWQoKTsKLSAgICBtX2NhcmV0VmlzaWJsZSA9IGZsYWc7Ci0gICAgdXBkYXRlQXBw
ZWFyYW5jZSgpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyQ2FyZXRSZWN0
SWZOZWVkZWQoKQotewotI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGlmICghbV9jYXJldFBh
aW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jYXJldFBhaW50ID0gZmFsc2U7Ci0gICAgaW52
YWxpZGF0ZUNhcmV0UmVjdCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8U2VsZWN0aW9uQ29udHJvbGxlcj4qKQotewot
I2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIEFTU0VSVChtX2NhcmV0VmlzaWJsZSk7Ci0gICAg
QVNTRVJUKGlzQ2FyZXQoKSk7Ci0gICAgYm9vbCBjYXJldFBhaW50ID0gbV9jYXJldFBhaW50Owot
ICAgIGlmIChpc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoKSAmJiBjYXJldFBhaW50KQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9jYXJldFBhaW50ID0gIWNhcmV0UGFpbnQ7Ci0gICAgaW52YWxpZGF0
ZUNhcmV0UmVjdCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90
aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0gICAg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFy
b290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSByb290RWRpdGFibGVFbGVtZW50KCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1RleHRDb250
cm9sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVy
ZXIpLT5zZWxlY3Rpb25DaGFuZ2VkKHVzZXJUcmlnZ2VyZWQpOwotfQotCi0vLyBIZWxwZXIgZnVu
Y3Rpb24gdGhhdCB0ZWxscyB3aGV0aGVyIGEgcGFydGljdWxhciBub2RlIGlzIGFuIGVsZW1lbnQg
dGhhdCBoYXMgYW4gZW50aXJlCi0vLyBGcmFtZSBhbmQgRnJhbWVWaWV3LCBhIDxmcmFtZT4sIDxp
ZnJhbWU+LCBvciA8b2JqZWN0Pi4KLXN0YXRpYyBib29sIGlzRnJhbWVFbGVtZW50KGNvbnN0IE5v
ZGUqIG4pCi17Ci0gICAgaWYgKCFuKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG4tPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAh
cmVuZGVyZXItPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRnZXQq
IHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Ci0gICAgcmV0dXJu
IHdpZGdldCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpCi17Ci0gICAgaWYgKGlzTm9uZSgpIHx8
ICFpc0ZvY3VzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOwotICAgIGlmIChjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgIGlmIChOb2Rl
KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KGJhc2UoKSkpIHsKLSAgICAgICAgICAg
IG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKGFuY2hv
ciwgbV9mcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoTm9kZSogdGFyZ2V0ID0gcm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7Ci0gICAgICAgIC8v
IFdhbGsgdXAgdGhlIERPTSB0cmVlIHRvIHNlYXJjaCBmb3IgYSBub2RlIHRvIGZvY3VzLiAKLSAg
ICAgICAgd2hpbGUgKHRhcmdldCkgewotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBz
ZXQgZm9jdXMgb24gYSBzdWJmcmFtZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwK
LSAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUuIFRo
ZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwotICAgICAgICAgICAgLy8g
d29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0aGlz
IHRpbWUuCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC0+aXNNb3VzZUZvY3VzYWJs
ZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGFyZ2V0LCBtX2Zy
YW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9ySG9zdE5vZGUoKTsgCi0gICAgICAgIH0KLSAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUoMCk7Ci0gICAgfQotCi0gICAg
aWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWROb2RlKDAsIG1fZnJhbWUpOwotfQotCi12b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQg
dHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdAotewotI2lmIEVOQUJMRShURVhUX0NB
UkVUKQotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIgPSBtX2Zy
YW1lLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKLSAgICBBU1NFUlQoZHJhZ0NhcmV0
Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuaXNDYXJldCgpKTsKLSAgICBpZiAoZHJhZ0NhcmV0Q29u
dHJvbGxlci0+c2VsZWN0aW9uKCkuc3RhcnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkgPT0gbV9mcmFtZSkKLSAgICAgICAgZHJhZ0NhcmV0Q29udHJvbGxlci0+cGFpbnRDYXJl
dChwLCB0eCwgdHksIGNsaXBSZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHApOwotICAg
IFVOVVNFRF9QQVJBTSh0eCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5KTsKLSAgICBVTlVTRURfUEFS
QU0oY2xpcFJlY3QpOwotI2VuZGlmCi19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX3R5cGluZ1N0eWxlIHx8ICFtX3R5cGluZ1N0eWxlLT5zdHlsZSgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV90eXBpbmdTdHlsZS0+c3R5bGUoKS0+Y29weSgp
OwotfQotCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZERlbGV0ZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotfQotCi1GbG9hdFJlY3QgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgIEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXJvb3QgfHwgIXZpZXcpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290
LT5zZWxlY3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotICAgIHJldHVybiBjbGlw
VG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlvbihzZWxlY3Rpb25SZWN0LCB2aWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0OwotfQotCi12b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RhbmdsZXMpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRmxvYXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJs
ZUNvbnRlbnRSZWN0KCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICB0b05v
cm1hbGl6ZWRSYW5nZSgpLT50ZXh0UXVhZHMocXVhZHMsIHRydWUpOwotCi0gICAgLy8gRklYTUU6
IFdlIGFyZSBhcHBlbmRpbmcgZW1wdHkgcmVjdGFuZ2xlcyB0byB0aGUgbGlzdCBmb3IgdGhvc2Ug
dGhhdCBmYWxsIG91dHNpZGUgdmlzaWJsZUNvbnRlbnRSZWN0LgotICAgIC8vIEl0IG1pZ2h0IGJl
IGJldHRlciB0byBvbWl0IHRob3NlIHJlY3RhbmdsZXMgZW50aXJlbHkuCi0gICAgc2l6ZV90IHNp
emUgPSBxdWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKGludGVyc2VjdGlvbihxdWFkc1tpXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpLCB2aXNpYmxlQ29udGVudFJlY3QpKTsKLX0KLQotLy8gU2NhbnMgbG9n
aWNhbGx5IGZvcndhcmQgZnJvbSAic3RhcnQiLCBpbmNsdWRpbmcgYW55IGNoaWxkIGZyYW1lcy4K
LXN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKE5vZGUqIHN0YXJ0KQotewotICAg
IGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7Ci0gICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAg
ICAgICAgIE5vZGUqIGNoaWxkRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50
QmFzZSo+KG5vZGUpLT5jb250ZW50RG9jdW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChIVE1MRm9y
bUVsZW1lbnQqIGZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2N1bWVudCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lUmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfQotCi0vLyBXZSBsb29rIGZvciBlaXRoZXIgdGhlIGZvcm0gY29udGFpbmluZyB0
aGUgY3VycmVudCBmb2N1cywgb3IgZm9yIG9uZSBpbW1lZGlhdGVseSBhZnRlciBpdAotSFRNTEZv
cm1FbGVtZW50KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjdXJyZW50Rm9ybSgpIGNvbnN0Ci17Ci0g
ICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVy
KSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgotICAgIE5vZGUqIHN0YXJ0ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKLQotICAgIC8vIFRyeSB3
YWxraW5nIHVwIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4KLSAgICBOb2Rl
KiBub2RlOwotICAgIGZvciAobm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50
Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7Ci0gICAgfQotCi0gICAgLy8gVHJ5IHdh
bGtpbmcgZm9yd2FyZCBpbiB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQuCi0g
ICAgcmV0dXJuIHNjYW5Gb3JGb3JtKHN0YXJ0KTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJv
b2wgcmV2ZWFsRXh0ZW50KQotewotICAgIEludFJlY3QgcmVjdDsKLQotICAgIHN3aXRjaCAoc2Vs
ZWN0aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rp
b246Ci0gICAgICAgIHJlY3QgPSBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246Ci0gICAgICAgIHJl
Y3QgPSByZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KCkpLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKSA6IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIFBvc2l0aW9uIHN0YXJ0ID0gdGhpcy0+c3RhcnQoKTsKLSAgICBB
U1NFUlQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb2RlIG9ubHkgaGFuZGxlcyBzY3JvbGxpbmcgdGhlIHN0YXJ0Q29udGFp
bmVyJ3MgbGF5ZXIsIGJ1dAotICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIHJlY3QgY291bGQgaW50
ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRoYXQuCi0gICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNDc5OTg5OT4uCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7Ci0gICAgICAgICAg
ICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwgYWxpZ25tZW50LCBhbGln
bm1lbnQpOwotICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyb21Ob25lKCkK
LXsKLSAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGlyZSBmcmFt
ZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQotICAgIC8vIGVudGlyZSBXZWJWaWV3IGlzIGVkaXRh
YmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgotCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBib29sIGNhcmV0QnJvd3Np
bmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJv
d3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50LT5yZW5kZXJl
cklzRWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Tm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICB3aGlsZSAobm9k
ZSAmJiAhbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RS
RUFNKSk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24o
KSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwotfQotCi0j
aWZuZGVmIE5ERUJVRwotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIG1fc2VsZWN0
aW9uLmZvcm1hdEZvckRlYnVnZ2VyKGJ1ZmZlciwgbGVuZ3RoKTsKLX0KLQotdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzaG93VHJlZUZvclRoaXMoKSBjb25zdAotewotICAgIG1fc2VsZWN0aW9u
LnNob3dUcmVlRm9yVGhpcygpOwotfQotCi0jZW5kaWYKLQotfQotCi0jaWZuZGVmIE5ERUJVRwot
Ci12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXImIHNlbCkK
LXsKLSAgICBzZWwuc2hvd1RyZWVGb3JUaGlzKCk7Ci19Ci0KLXZvaWQgc2hvd1RyZWUoY29uc3Qg
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciogc2VsKQotewotICAgIGlmIChzZWwpCi0gICAg
ICAgIHNlbC0+c2hvd1RyZWVGb3JUaGlzKCk7Ci19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDg1ODM0KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAotI2RlZmluZSBTZWxl
Y3Rpb25Db250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9y
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ2hhcmFjdGVyRGF0YTsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7
Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJWaWV3OwotY2xhc3MgU2V0dGluZ3M7
Ci1jbGFzcyBWaXNpYmxlUG9zaXRpb247Ci0KLWVudW0gRGlyZWN0aW9uYWxpdHlQb2xpY3kgeyBN
YWtlTm9uRGlyZWN0aW9uYWxTZWxlY3Rpb24sIE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbiB9Owot
Ci1jbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
ZWxlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBFQWx0ZXJhdGlvbiB7IEFsdGVyYXRpb25Nb3ZlLCBBbHRlcmF0aW9uRXh0ZW5kIH07
Ci0gICAgZW51bSBDdXJzb3JBbGlnbk9uU2Nyb2xsIHsgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVl
ZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsaWduQ3Vyc29yT25TY3JvbGxB
bHdheXMgfTsKLSAgICBlbnVtIFNldFNlbGVjdGlvbk9wdGlvbiB7Ci0gICAgICAgIENsb3NlVHlw
aW5nID0gMSA8PCAwLAotICAgICAgICBDbGVhclR5cGluZ1N0eWxlID0gMSA8PCAxLAotICAgICAg
ICBVc2VyVHJpZ2dlcmVkID0gMSA8PCAyLAotICAgICAgICBTcGVsbENvcnJlY3Rpb25UcmlnZ2Vy
ZWQgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFNldFNlbGVjdGlvbk9w
dGlvbnM7Ci0KLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKEZyYW1lKiA9IDAsIGJvb2wgaXNEcmFn
Q2FyZXRDb250cm9sbGVyID0gZmFsc2UpOwotCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsg
fQotICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
bi5pc0NvbnRlbnRFZGl0YWJsZSgpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7
IH0KLSAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvbi5zaGFkb3dUcmVlUm9vdE5vZGUoKTsgfQotICAgICAKLSAgICB2b2lkIG1vdmVUbyhjb25z
dCBSYW5nZSosIEVBZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOwotICAgIHZv
aWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZh
bHNlLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkKTsK
LSAgICB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7Ci0gICAgdm9pZCBtb3ZlVG8oY29u
c3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAg
ICB2b2lkIG1vdmVUbyhjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5
LCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7Ci0KLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQotICAgIHZvaWQg
c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBTZXRTZWxlY3Rpb25PcHRpb25z
ID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0g
QWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eSwgRGlyZWN0aW9uYWxpdHlQb2xpY3kgPSBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rp
b24pOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBk
aXJlY3Rpb25hbGl0eSA9IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbikgeyBzZXRTZWxlY3Rpb24o
c2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWduQ3Vyc29yT25T
Y3JvbGxJZk5lZWRlZCwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbmFsaXR5KTsgfQotICAgIGJvb2wg
c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZyk7Ci0g
ICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgCi0gICAgLy8gQ2Fs
bCB0aGlzIGFmdGVyIGRvaW5nIHVzZXItdHJpZ2dlcmVkIHNlbGVjdGlvbnMgdG8gbWFrZSBpdCBl
YXN5IHRvIGRlbGV0ZSB0aGUgZnJhbWUgeW91IGVudGlyZWx5IHNlbGVjdGVkLgotICAgIHZvaWQg
c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLQotICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIFZpc2libGVTZWxlY3Rpb246OlNlbGVj
dGlvblR5cGUgc2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnNlbGVj
dGlvblR5cGUoKTsgfQotCi0gICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb24uYWZmaW5pdHkoKTsgfQotCi0gICAgYm9vbCBtb2RpZnkoRUFsdGVyYXRpb24s
IFNlbGVjdGlvbkRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQg
PSBmYWxzZSk7Ci0gICAgYm9vbCBtb2RpZnkoRUFsdGVyYXRpb24sIGludCB2ZXJ0aWNhbERpc3Rh
bmNlLCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFs
aWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCk7Ci0gICAgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9ncmFudWxhcml0eTsgfQotCi0gICAgdm9pZCBzZXRTdGFy
dChjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOwot
ICAgIHZvaWQgc2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmLCBib29sIHVzZXJUcmlnZ2Vy
ZWQgPSBmYWxzZSk7Ci0gICAgCi0gICAgdm9pZCBzZXRCYXNlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldEJhc2UoY29uc3Qg
UG9zaXRpb24mLCBFQWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAgICB2
b2lkIHNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29sIHVzZXJUcmlnZ2VyZWQg
PSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHks
IGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLQotICAgIFBvc2l0aW9uIGJhc2UoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi5iYXNlKCk7IH0KLSAgICBQb3NpdGlvbiBleHRlbnQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5leHRlbnQoKTsgfQotICAgIFBvc2l0aW9uIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uc3RhcnQoKTsgfQotICAgIFBvc2l0aW9uIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmVuZCgpOyB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIHJlbmRlcmVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAo
aW4gdGhlIHNlbGVjdGlvbiBzdGFydCBub2RlKQotICAgIFJlbmRlck9iamVjdCogY2FyZXRSZW5k
ZXJlcigpIGNvbnN0OwotCi0gICAgLy8gQ2FyZXQgcmVjdCBsb2NhbCB0byB0aGUgY2FyZXQncyBy
ZW5kZXJlcgotICAgIEludFJlY3QgbG9jYWxDYXJldFJlY3QoKTsKLSAgICBJbnRSZWN0IGxvY2Fs
Q2FyZXRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhcmV0UmVjdDsgfQotCi0g
ICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUg
Y29vcmRzCi0gICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgdm9pZCBzZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZShib29sIGZsYWcgPSB0cnVlKTsKLQotICAgIHZvaWQgc2V0SXNE
aXJlY3Rpb25hbChib29sKTsKLSAgICB2b2lkIHdpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uLCBT
ZWxlY3Rpb25EaXJlY3Rpb24pOwotCi0gICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdGlvbi5pc05vbmUoKTsgfQotICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKTsgfQotICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsgfQotICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpOyB9Ci0gICAgYm9vbCBp
c0luUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7IH0KLSAgICAKLSAgICBQYXNzUmVmUHRyPFJh
bmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7IH0KLQotICAgIHZvaWQgZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3Qq
LCBib29sIHNlbGVjdGVkKSBjb25zdDsKLQotICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9k
ZSopOwotICAgIHZvaWQgdGV4dFdpbGxCZVJlcGxhY2VkKENoYXJhY3RlckRhdGEqLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKLQotICAg
IHZvaWQgc2V0Q2FyZXRWaXNpYmxlKGJvb2wgPSB0cnVlKTsKLSAgICB2b2lkIGNsZWFyQ2FyZXRS
ZWN0SWZOZWVkZWQoKTsKLSAgICBib29sIHJlY29tcHV0ZUNhcmV0UmVjdCgpOyAvLyByZXR1cm5z
IHRydWUgaWYgY2FyZXQgcmVjdCBtb3ZlZAotICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVjdCgp
OwotICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwotCi0gICAgLy8gVXNlZCB0byBzdXNwZW5kIGNhcmV0
IGJsaW5raW5nIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgotICAgIHZvaWQgc2V0Q2FyZXRCbGlu
a2luZ1N1c3BlbmRlZChib29sIHN1c3BlbmRlZCkgeyBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRl
ZCA9IHN1c3BlbmRlZDsgfQotICAgIGJvb2wgaXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQ7IH0KLQotICAgIC8vIEZvY3Vz
Ci0gICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpOwotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9mb2N1c2VkOyB9Ci0gICAgYm9vbCBpc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25z
dDsKLSAgICB2b2lkIHBhZ2VBY3RpdmF0aW9uQ2hhbmdlZCgpOwotCi0gICAgLy8gUGFpbnRpbmcu
Ci0gICAgdm9pZCB1cGRhdGVBcHBlYXJhbmNlKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVNlY3VyZUtl
eWJvYXJkRW50cnlJZkFjdGl2ZSgpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZm9ybWF0
Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwotICAgIHZv
aWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICBib29sIHNo
b3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAg
dm9pZCBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBub3RpZnlSZW5kZXJlck9m
U2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCk7Ci0KLSAgICB2b2lkIHBhaW50RHJh
Z0NhcmV0KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkgY29uc3Q7Ci0KLSAgICBFZGl0aW5nU3R5bGUqIHR5cGluZ1N0eWxlKCkgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVR5cGluZ1N0
eWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4pOwotICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwotCi0gICAgRmxvYXRSZWN0IGJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7Ci0KLSAgICB2b2lk
IGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mKSBjb25z
dDsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25zdDsKLQotICAgIHZv
aWQgcmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduQ2VudGVySWZOZWVkZWQsIGJvb2wgcmV2ZWFsRXh0ZW50ID0gZmFsc2UpOwotICAg
IHZvaWQgc2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIEVQb3Np
dGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKLQotICAgIHZvaWQgcmVzcG9u
ZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlKiwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRS
ZW1vdmVkLCBib29sIHN0YXJ0UmVtb3ZlZCwgYm9vbCBlbmRSZW1vdmVkKTsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKLQotICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3Q7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdDsKLSAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kRm9yUGxhdGZvcm0oKSBjb25zdDsKLQotICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlFeHRl
bmRpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlF
eHRlbmRpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0eSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG1v
ZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG1v
ZGlmeU1vdmluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
bW9kaWZ5RXh0ZW5kaW5nTGVmdChUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2libGVQb3NpdGlv
biBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBtb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSk7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIG1vZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSk7Ci0KLSAgICB2b2lk
IHVwZGF0ZUNhcmV0UmVjdCgpOwotICAgIEludFJlY3QgY2FyZXRSZXBhaW50UmVjdCgpIGNvbnN0
OwotICAgIGJvb2wgc2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJlbmRlclZpZXcqIHZpZXcpIGNv
bnN0OwotCi0gICAgaW50IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25U
eXBlKTsKLSAgICAKLSAgICB2b2lkIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFu
Z2UoKTsKLQotICAgIHZvaWQgZm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCk7Ci0gICAgYm9v
bCBjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUqKSBjb25zdDsKLSAgICAKLSAgICBJbnRSZWN0
IGFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKLQotICAg
IHZvaWQgY2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8U2VsZWN0aW9uQ29udHJvbGxlcj4qKTsK
LQotICAgIHZvaWQgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShib29sKTsKLQotICAgIEZyYW1l
KiBtX2ZyYW1lOwotCi0gICAgaW50IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwot
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBtX3NlbGVjdGlvbjsKLSAgICBUZXh0R3JhbnVsYXJpdHkg
bV9ncmFudWxhcml0eTsKLQotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7
Ci0KLSAgICBUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiBtX2NhcmV0QmxpbmtUaW1lcjsKLQot
ICAgIEludFJlY3QgbV9jYXJldFJlY3Q7IC8vIGNhcmV0IHJlY3QgaW4gY29vcmRzIGxvY2FsIHRv
IHRoZSByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0Ci0gICAgSW50
UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBhYnNvbHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUg
Y2FyZXQKLSAgICBJbnRSZWN0IG1fYWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHM7Ci0gICAgCi0g
ICAgYm9vbCBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlOyAvLyB0cnVlIGlmIG1fY2FyZXRSZWN0IGFu
ZCBtX2Fic0NhcmV0Qm91bmRzIG5lZWQgdG8gYmUgY2FsY3VsYXRlZAotICAgIGJvb2wgbV9hYnND
YXJldEJvdW5kc0RpcnR5OwotICAgIGJvb2wgbV9pc0RpcmVjdGlvbmFsOwotICAgIGJvb2wgbV9p
c0RyYWdDYXJldENvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRl
ZDsKLSAgICBib29sIG1fZm9jdXNlZDsKLSAgICBib29sIG1fY2FyZXRWaXNpYmxlOwotICAgIGJv
b2wgbV9jYXJldFBhaW50OwotfTsKLQotaW5saW5lIEVkaXRpbmdTdHlsZSogU2VsZWN0aW9uQ29u
dHJvbGxlcjo6dHlwaW5nU3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGluZ1N0eWxl
LmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhclR5cGlu
Z1N0eWxlKCkKLXsKLSAgICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7Ci19Ci0KLWlubGluZSB2b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzdHlsZSkKLXsKLSAgICBtX3R5cGluZ1N0eWxlID0gc3R5bGU7Ci19Ci0KLSNpZiAhKFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkpCi1pbmxp
bmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0
aW9uQ2hhbmdlKCkKLXsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNp
Zm5kZWYgTkRFQlVHCi0vLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBmb3IgZWFzZSBv
ZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgotdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpTZWxl
Y3Rpb25Db250cm9sbGVyJik7Ci12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlv
bkNvbnRyb2xsZXIqKTsKLSNlbmRpZgotCi0jZW5kaWYgLy8gU2VsZWN0aW9uQ29udHJvbGxlcl9o
Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5k
LmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotU2V0U2VsZWN0aW9uQ29tbWFuZDo6U2V0U2VsZWN0aW9uQ29tbWFu
ZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKK1NldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNl
bGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBGcmFtZVNl
bGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogICAgIDogU2ltcGxlRWRpdENv
bW1hbmQoc2VsZWN0aW9uLmJhc2UoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCkpCiAgICAgLCBt
X29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fc2VsZWN0aW9uVG9TZXQoc2VsZWN0aW9uKQpAQCAt
MzksMjIgKzM5LDIyIEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQK
IAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBTZWxlY3Rpb25D
b250cm9sbGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uKCk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbkNvbnRyb2xsZXIpOworICAgIEZyYW1lU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAg
ICBBU1NFUlQoc2VsZWN0aW9uKTsKIAotICAgIGlmIChzZWxlY3Rpb25Db250cm9sbGVyLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgbV9zZWxlY3Rpb25Ub1NldC5p
c05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpIHsKLSAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxl
ci0+c2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CisgICAgaWYgKHNl
bGVjdGlvbi0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmIG1fc2Vs
ZWN0aW9uVG9TZXQuaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpKSB7CisgICAgICAgIHNlbGVj
dGlvbi0+c2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CiAgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0KTsKICAgICB9CiB9CiAKIHZvaWQg
U2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9s
bGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9u
KCk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbkNvbnRyb2xsZXIpOworICAgIEZyYW1lU2VsZWN0aW9u
KiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBBU1NF
UlQoc2VsZWN0aW9uKTsKIAotICAgIGlmIChzZWxlY3Rpb25Db250cm9sbGVyLT5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkgJiYgc3RhcnRpbmdTZWxlY3Rpb24oKS5p
c05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCi0gICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIt
PnNldFNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX29wdGlvbnMpOworICAgIGlmIChz
ZWxlY3Rpb24tPnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpKSAmJiBz
dGFydGluZ1NlbGVjdGlvbigpLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2UoKSkKKyAgICAgICAg
c2VsZWN0aW9uLT5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9vcHRpb25zKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXRTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIzICsyNywyMyBAQAogI2RlZmluZSBTZXRTZWxlY3Rpb25Db21tYW5kX2gKIAogI2luY2x1ZGUg
IkVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2V0
U2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0U2VsZWN0aW9uQ29tbWFuZD4gY3JlYXRlKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldFNlbGVjdGlvbkNv
bW1hbmQ+IGNyZWF0ZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIEZyYW1lU2Vs
ZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNldFNlbGVjdGlvbkNvbW1hbmQoc2VsZWN0aW9uLCBvcHRpb25zKSk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMpOwor
ICAgIFNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEZyYW1lU2Vs
ZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMgbV9vcHRpb25zOworICAgIEZyYW1lU2VsZWN0aW9uOjpT
ZXRTZWxlY3Rpb25PcHRpb25zIG1fb3B0aW9uczsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2Vs
ZWN0aW9uVG9TZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoCiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0
aW9uVG9CZUNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJp
Z2dlcmVkIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250
cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
U2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCwgRnJh
bWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCB8IEZyYW1lU2VsZWN0aW9uOjpD
bG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlKSk7CiAjaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNw
ZWxsaW5nQ29ycmVjdGlvblJlY29yZFVuZG9Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9j
b3JyZWN0ZWQsIG1fY29ycmVjdGlvbikpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KIHsKICAgICBjbGllbnQoKS0+cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2
ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihz
ZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VU
eXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSB8IEZyYW1lU2VsZWN0aW9u
OjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5k
KCkpOwogCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMiBAQAogI2lu
Y2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgogI2luY2x1ZGUgIkluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCoKICAgICBpbnNlcnRUZXh0KGRvY3VtZW50
LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3Np
dGlvbik7CiB9CiAKLS8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0byB0YWtlIHNlbGVjdGlv
bkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBTZWxlY3Rpb25Db250cm9s
bGVyJ3MgY3VycmVudCBzZWxlY3Rpb24uCisvLyBGSVhNRTogV2Ugc2hvdWxkbid0IG5lZWQgdG8g
dGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uIEl0IHNob3VsZCBiZSBpZGVudGljYWwgdG8gRnJh
bWVTZWxlY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlvbi4KIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBPcHRpb25zIG9wdGlvbnMsIFRl
eHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQogewogICAgIEFTU0VSVChkb2N1bWVu
dCk7CkBAIC00ODUsMTEgKzQ4NSwxMSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVBy
ZXNzZWQoVGV4CiAKICAgICAgICAgbV9zbWFydERlbGV0ZSA9IGZhbHNlOwogCi0gICAgICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxl
Y3Rpb247CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkp
OwotICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRp
b25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0eSk7CisgICAgICAgIHNlbGVj
dGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJh
Y2t3YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChraWxsUmluZyAmJiBzZWxlY3Rpb24u
aXNDYXJldCgpICYmIGdyYW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICAg
ICAgICAgc2VsZWN0aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0
ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgc2VsZWN0aW9uLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGly
ZWN0aW9uQmFja3dhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKIAogICAgICAgICBpZiAoZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYXJldCBpcyBh
dCB0aGUgc3RhcnQgb2YgdGhlIGVkaXRhYmxlIGFyZWEgaW4gYW4gZW1wdHkgbGlzdCBpdGVtLCBi
cmVhayBvdXQgb2YgdGhlIGxpc3QgaXRlbS4KQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4CiAgICAgICAgICAgICBpZiAoaXNMYXN0UG9z
aXRpb25CZWZvcmVUYWJsZSh2aXNpYmxlU3RhcnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgc2VsZWN0aW9uIGJhY2t3YXJkIGludG8gdGhlIGxh
c3QgY2VsbCwgdGhlbiBkZWxldGlvbiB3aWxsIGhhbmRsZSB0aGUgbW92ZS4KLSAgICAgICAgICAg
IHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwg
RGlyZWN0aW9uQmFja3dhcmQsIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5t
b2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJk
LCBncmFudWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBqdXN0IGFmdGVyIGEg
dGFibGUsIHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4KICAgICAg
ICAgfSBlbHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUodmlz
aWJsZVN0YXJ0KSkgewogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24ocG9zaXRpb25CZWZvcmVOb2RlKHRhYmxlKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KSwgRE9XTlNUUkVBTSkpOwpAQCAtNTgyLDExICs1ODIsMTEgQEAgdm9pZCBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJlZ2lu
bmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAvLyBEbyBub3RoaW5nIGluIHRoZSBjYXNlIHRo
YXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAgICAgICAgIC8vIHJvb3QgZWRpdGFi
bGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KLSAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciBzZWxlY3Rpb247CisgICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlv
bjsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7Ci0g
ICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4
dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgZ3JhbnVsYXJpdHkpOworICAgICAgICBzZWxlY3Rpb24u
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChraWxsUmluZyAmJiBzZWxlY3Rpb24uaXNDYXJl
dCgpICYmIGdyYW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICAgICAgICAg
c2VsZWN0aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25G
b3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICAgICAgUG9zaXRpb24gZG93bnN0
cmVhbUVuZCA9IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLmRvd25zdHJlYW0oKTsKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5k
KCk7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRl
S2V5UHJlcwogCiAgICAgICAgIC8vIGRlbGV0aW5nIHRvIGVuZCBvZiBwYXJhZ3JhcGggd2hlbiBh
dCBlbmQgb2YgcGFyYWdyYXBoIG5lZWRzIHRvIG1lcmdlIHRoZSBuZXh0IHBhcmFncmFwaCAoaWYg
YW55KQogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoQm91bmRhcnkgJiYgc2Vs
ZWN0aW9uLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc0VuZE9mUGFyYWdyYXBoKHNlbGVjdGlv
bi5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKQotICAgICAgICAgICAgc2VsZWN0aW9uLm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CiAKICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBzZWxlY3Rpb24u
c2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICghc3RhcnRpbmdTZWxlY3Rpb24oKS5pc1JhbmdlKCkg
fHwgc2VsZWN0aW9uVG9EZWxldGUuYmFzZSgpICE9IHN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQo
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rpb25D
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1
bS9GcmFtZVNlbGVjdGlvbkNocm9taXVtLmNwcAkocmV2aXNpb24gODU4MzQpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNocm9taXVtLmNw
cDo4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rp
b25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAgLy8gRklYTUU6
IFN1cHBvcnQgZWRpdGFibGUgdGV4dCBpbiBjaHJvbWl1bS4KKyAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBtX3NlbGVjdGlvbi5zdGFydCgpLmlzTm90TnVs
bCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7CisgICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAgIGRvY3VtZW50LT5heE9i
amVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5n
ZWQsIGZhbHNlKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rpb25DaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9GcmFtZVNlbGVj
dGlvbkNocm9taXVtLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2Nocm9taXVtL0ZyYW1lU2VsZWN0aW9uQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0zNyw3ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
Ojpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKK3ZvaWQgRnJhbWVTZWxl
Y3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKQogewogICAgIC8v
IEZJWE1FOiBTdXBwb3J0IGVkaXRhYmxlIHRleHQgaW4gY2hyb21pdW0uCiAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5p
c05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9TZWxlY3Rpb25Db250cm9sbGVyQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vU2VsZWN0
aW9uQ29udHJvbGxlckNocm9taXVtLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRyb2xsZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0
eUZvclNlbGVjdGlvbkNoYW5nZSgpCi17Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgZWRpdGFibGUg
dGV4dCBpbiBjaHJvbWl1bS4KLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSAmJiBtX3NlbGVjdGlvbi5zdGFydCgpLmlzTm90TnVsbCgpICYmIG1fc2VsZWN0aW9u
LmVuZCgpLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3RO
b3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvZ3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAJKHJldmlzaW9uIDg1ODM0KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcDo4
NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmgiCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiUmVmUHRyLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIHZvaWQgZW1pdFRleHRTZWxlY3Rpb25DaGFuZ2UoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiwgaW50IG9mZnNldCkK
K3sKKyAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gb2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYg
KCFheE9iamVjdCB8fCAhQVRLX0lTX1RFWFQoYXhPYmplY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJ0ZXh0LWNhcmV0LW1vdmVkIiwg
b2Zmc2V0KTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKGF4T2JqZWN0LCAidGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIpOworfQorCitz
dGF0aWMgdm9pZCBtYXliZUVtaXRUZXh0Rm9jdXNDaGFuZ2UoUGFzc1JlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBwcnBPYmplY3QpCit7CisgICAgLy8gVGhpcyBzdGF0aWMgdmFyaWFibGUgaXMg
bmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9sZCBvYmplY3QKKyAgICAvLyBhcyBwZXIgcHJl
dmlvdXMgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gcHJvcGVybHkKKyAgICAv
LyBkZWNpZGUgd2hldGhlciB0byBlbWl0IHNvbWUgc2lnbmFscyBvciBub3QuCisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4sIG9sZE9iamVjdCwgKCkp
OworCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IHBycE9iamVjdDsK
KworICAgIC8vIEVuc3VyZSB0aGUgb2xkT2JqZWN0IGJlbG9uZ3MgdG8gdGhlIHNhbWUgZG9jdW1l
bnQgdGhhdCB0aGUKKyAgICAvLyBjdXJyZW50IG9iamVjdCBzbyBmdXJ0aGVyIGNvbXBhcmlzb25z
IG1ha2Ugc2Vuc2UuIE90aGVyd2lzZSwKKyAgICAvLyBqdXN0IHJlc2V0IG9sZE9iamVjdCB0byAw
IHNvIGl0IHdvbid0IGJlIHRha2VuIGludG8gYWNjb3VudCBpbgorICAgIC8vIHRoZSBpbW1lZGlh
dGVseSBmb2xsb3dpbmcgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChvYmplY3QgJiYg
b2xkT2JqZWN0ICYmIG9sZE9iamVjdC0+ZG9jdW1lbnQoKSAhPSBvYmplY3QtPmRvY3VtZW50KCkp
CisgICAgICAgIG9sZE9iamVjdCA9IDA7CisKKyAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gb2Jq
ZWN0ID8gb2JqZWN0LT53cmFwcGVyKCkgOiAwOworICAgIEF0a09iamVjdCogb2xkQXhPYmplY3Qg
PSBvbGRPYmplY3QgPyBvbGRPYmplY3QtPndyYXBwZXIoKSA6IDA7CisKKyAgICBpZiAoYXhPYmpl
Y3QgIT0gb2xkQXhPYmplY3QpIHsKKyAgICAgICAgaWYgKG9sZEF4T2JqZWN0ICYmIEFUS19JU19U
RVhUKG9sZEF4T2JqZWN0KSkgeworICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9s
ZEF4T2JqZWN0LCAiZm9jdXMtZXZlbnQiLCBmYWxzZSk7CisgICAgICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUob2xkQXhPYmplY3QsICJzdGF0ZS1jaGFuZ2UiLCAiZm9jdXNlZCIsIGZhbHNl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXhPYmplY3QgJiYgQVRLX0lTX1RFWFQoYXhPYmpl
Y3QpKSB7CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJmb2N1
cy1ldmVudCIsIHRydWUpOworICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGF4T2Jq
ZWN0LCAic3RhdGUtY2hhbmdlIiwgImZvY3VzZWQiLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFVwZGF0ZSBwb2ludGVyIHRvIGxhc3QgZm9jdXNlZCBvYmplY3QuCisgICAgb2xk
T2JqZWN0ID0gb2JqZWN0OworfQorCisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5
QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAgaWYgKCFBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBS
ZXNldCBsYXN0Rm9jdXNlTm9kZSBhbmQgcmV0dXJuIGZvciBubyB2YWxpZCBzZWxlY3Rpb25zLgor
ICAgIGlmICghbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSB8fCAhbV9zZWxlY3Rpb24u
ZW5kKCkuaXNOb3ROdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlck9iamVjdCog
Zm9jdXNlZE5vZGUgPSBtX3NlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlPYmplY3QgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWROb2Rl
KTsKKworICAgIC8vIE5lZWQgdG8gY2hlY2sgdGhpcyBhcyBnZXRPckNyZWF0ZSBjb3VsZCByZXR1
cm4gMCwKKyAgICBpZiAoIWFjY2Vzc2liaWxpdHlPYmplY3QpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBvZmZzZXQ7CisgICAgLy8gQWx3YXlzIHJlcG9ydCB0aGUgZXZlbnRzIHcuci50LiB0
aGUgbm9uLWxpbmtlZCB1bmlnbm9yZWQgcGFyZW50LiAoaS5lLiBpZ25vcmVMaW5rcyA9PSB0cnVl
KS4KKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqZWN0ID0gb2JqZWN0QW5kT2Zm
c2V0VW5pZ25vcmVkKGFjY2Vzc2liaWxpdHlPYmplY3QsIG9mZnNldCwgdHJ1ZSk7CisgICAgaWYg
KCFvYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVtaXQgcmVsYXRlZHNpZ25hbHMu
CisgICAgZW1pdFRleHRTZWxlY3Rpb25DaGFuZ2Uob2JqZWN0LmdldCgpLCBtX3NlbGVjdGlvbiwg
b2Zmc2V0KTsKKyAgICBtYXliZUVtaXRUZXh0Rm9jdXNDaGFuZ2Uob2JqZWN0LnJlbGVhc2UoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvZ3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KICAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBtYXliZUVt
aXRUZXh0Rm9jdXNDaGFuZ2UoUGFzCiB9CiAKIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpu
b3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKK3ZvaWQgRnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKQogewogICAgIGlmICgh
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29u
dHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSAKLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIgotI2luY2x1ZGUgIkFYT2JqZWN0Q2Fj
aGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlJlZlB0ci5oIgotCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGVtaXRU
ZXh0U2VsZWN0aW9uQ2hhbmdlKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24sIGludCBvZmZzZXQpCi17Ci0gICAgQXRrT2JqZWN0KiBheE9iamVj
dCA9IG9iamVjdC0+d3JhcHBlcigpOwotICAgIGlmICghYXhPYmplY3QgfHwgIUFUS19JU19URVhU
KGF4T2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGF4T2JqZWN0LCAidGV4dC1jYXJldC1tb3ZlZCIsIG9mZnNldCk7Ci0gICAgaWYgKHNlbGVjdGlv
bi5pc1JhbmdlKCkpCi0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInRl
eHQtc2VsZWN0aW9uLWNoYW5nZWQiKTsKLX0KLQotc3RhdGljIHZvaWQgbWF5YmVFbWl0VGV4dEZv
Y3VzQ2hhbmdlKFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gcHJwT2JqZWN0KQotewot
ICAgIC8vIFRoaXMgc3RhdGljIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBrZWVwIHRyYWNrIG9mIHRo
ZSBvbGQgb2JqZWN0Ci0gICAgLy8gYXMgcGVyIHByZXZpb3VzIGNhbGxzIHRvIHRoaXMgZnVuY3Rp
b24sIGluIG9yZGVyIHRvIHByb3Blcmx5Ci0gICAgLy8gZGVjaWRlIHdoZXRoZXIgdG8gZW1pdCBz
b21lIHNpZ25hbHMgb3Igbm90LgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+LCBvbGRPYmplY3QsICgpKTsKLQotICAgIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBvYmplY3QgPSBwcnBPYmplY3Q7Ci0KLSAgICAvLyBFbnN1cmUgdGhlIG9sZE9i
amVjdCBiZWxvbmdzIHRvIHRoZSBzYW1lIGRvY3VtZW50IHRoYXQgdGhlCi0gICAgLy8gY3VycmVu
dCBvYmplY3Qgc28gZnVydGhlciBjb21wYXJpc29ucyBtYWtlIHNlbnNlLiBPdGhlcndpc2UsCi0g
ICAgLy8ganVzdCByZXNldCBvbGRPYmplY3QgdG8gMCBzbyBpdCB3b24ndCBiZSB0YWtlbiBpbnRv
IGFjY291bnQgaW4KLSAgICAvLyB0aGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGNhbGwgdG8gdGhp
cyBmdW5jdGlvbi4KLSAgICBpZiAob2JqZWN0ICYmIG9sZE9iamVjdCAmJiBvbGRPYmplY3QtPmRv
Y3VtZW50KCkgIT0gb2JqZWN0LT5kb2N1bWVudCgpKQotICAgICAgICBvbGRPYmplY3QgPSAwOwot
Ci0gICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigpIDog
MDsKLSAgICBBdGtPYmplY3QqIG9sZEF4T2JqZWN0ID0gb2xkT2JqZWN0ID8gb2xkT2JqZWN0LT53
cmFwcGVyKCkgOiAwOwotCi0gICAgaWYgKGF4T2JqZWN0ICE9IG9sZEF4T2JqZWN0KSB7Ci0gICAg
ICAgIGlmIChvbGRBeE9iamVjdCAmJiBBVEtfSVNfVEVYVChvbGRBeE9iamVjdCkpIHsKLSAgICAg
ICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShvbGRBeE9iamVjdCwgImZvY3VzLWV2ZW50Iiwg
ZmFsc2UpOwotICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9sZEF4T2JqZWN0LCAi
c3RhdGUtY2hhbmdlIiwgImZvY3VzZWQiLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGF4T2JqZWN0ICYmIEFUS19JU19URVhUKGF4T2JqZWN0KSkgewotICAgICAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGF4T2JqZWN0LCAiZm9jdXMtZXZlbnQiLCB0cnVlKTsKLSAgICAgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInN0YXRlLWNoYW5nZSIsICJmb2N1
c2VkIiwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgcG9pbnRlciB0
byBsYXN0IGZvY3VzZWQgb2JqZWN0LgotICAgIG9sZE9iamVjdCA9IG9iamVjdDsKLX0KLQotCi12
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25D
aGFuZ2UoKQotewotICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUmVzZXQgbGFzdEZvY3VzZU5vZGUgYW5kIHJl
dHVybiBmb3Igbm8gdmFsaWQgc2VsZWN0aW9ucy4KLSAgICBpZiAoIW1fc2VsZWN0aW9uLnN0YXJ0
KCkuaXNOb3ROdWxsKCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZW5kZXJPYmplY3QqIGZvY3VzZWROb2RlID0gbV9zZWxlY3Rpb24u
ZW5kKCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkTm9kZSk7Ci0KLSAgICAvLyBOZWVkIHRvIGNoZWNr
IHRoaXMgYXMgZ2V0T3JDcmVhdGUgY291bGQgcmV0dXJuIDAsCi0gICAgaWYgKCFhY2Nlc3NpYmls
aXR5T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAgIC8vIEFs
d2F5cyByZXBvcnQgdGhlIGV2ZW50cyB3LnIudC4gdGhlIG5vbi1saW5rZWQgdW5pZ25vcmVkIHBh
cmVudC4gKGkuZS4gaWdub3JlTGlua3MgPT0gdHJ1ZSkuCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IG9iamVjdCA9IG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChhY2Nlc3NpYmlsaXR5
T2JqZWN0LCBvZmZzZXQsIHRydWUpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBFbWl0IHJlbGF0ZWRzaWduYWxzLgotICAgIGVtaXRUZXh0U2VsZWN0aW9uQ2hh
bmdlKG9iamVjdC5nZXQoKSwgbV9zZWxlY3Rpb24sIG9mZnNldCk7Ci0gICAgbWF5YmVFbWl0VGV4
dEZvY3VzQ2hhbmdlKG9iamVjdC5yZWxlYXNlKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lv
biA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIE5TV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6
OmJhc2VXcml0aW5nRGkKIAogYm9vbCBFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25l
SW1hZ2VzKCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi0+aXNSYW5nZSgpICYmICFzZWxlY3Rp
b24tPmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCShyZXZpc2lvbiA4NTgzNCkJKGZyb20g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTo4NTgz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgor
I2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIlJlbmRlclZpZXcuaCIKKyNpbXBvcnQgIldlYkNv
cmVWaWV3RmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBDR1JlY3Qg
YWNjZXNzaWJpbGl0eUNvbnZlcnRTY3JlZW5SZWN0KENHUmVjdCBib3VuZHMpCit7CisgICAgTlNB
cnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBzY3JlZW5zXTsKKyAgICBpZiAoW3NjcmVlbnMgY291
bnRdKSB7CisgICAgICAgIENHRmxvYXQgc2NyZWVuSGVpZ2h0ID0gTlNIZWlnaHQoWyhOU1NjcmVl
biAqKVtzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKTsKKyAgICAgICAgYm91bmRzLm9y
aWdpbi55ID0gKHNjcmVlbkhlaWdodCAtIChib3VuZHMub3JpZ2luLnkgKyBib3VuZHMuc2l6ZS5o
ZWlnaHQpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYm91bmRzID0gQ0dSZWN0WmVybzsgICAgCisg
ICAgCisgICAgcmV0dXJuIGJvdW5kczsKK30KKyAgICAKKyAgICAKK3ZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2VsZWN0aW9uLnN0YXJ0KCku
aXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpCisgICAgICAgIGRv
Y3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVj
dGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKKworICAgIC8vIGlmIHpvb20gZmVhdHVyZSBpcyBlbmFi
bGVkLCBpbnNlcnRpb24gcG9pbnQgY2hhbmdlcyBzaG91bGQgdXBkYXRlIHRoZSB6b29tCisgICAg
aWYgKCFVQVpvb21FbmFibGVkKCkgfHwgIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGRvY3VtZW50LT5yZW5kZXJW
aWV3KCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGFic29sdXRlQ2Fy
ZXRCb3VuZHMoKTsKKyAgICBJbnRSZWN0IHZpZXdSZWN0ID0gcmVuZGVyVmlldy0+dmlld1JlY3Qo
KTsKKworICAgIHNlbGVjdGlvblJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oc2Vs
ZWN0aW9uUmVjdCk7CisgICAgdmlld1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4o
dmlld1JlY3QpOworICAgIENHUmVjdCBjZ0NhcmV0UmVjdCA9IENHUmVjdE1ha2Uoc2VsZWN0aW9u
UmVjdC54KCksIHNlbGVjdGlvblJlY3QueSgpLCBzZWxlY3Rpb25SZWN0LndpZHRoKCksIHNlbGVj
dGlvblJlY3QuaGVpZ2h0KCkpOworICAgIENHUmVjdCBjZ1ZpZXdSZWN0ID0gQ0dSZWN0TWFrZSh2
aWV3UmVjdC54KCksIHZpZXdSZWN0LnkoKSwgdmlld1JlY3Qud2lkdGgoKSwgdmlld1JlY3QuaGVp
Z2h0KCkpOworICAgIGNnQ2FyZXRSZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnZlcnRTY3JlZW5SZWN0
KGNnQ2FyZXRSZWN0KTsKKyAgICBjZ1ZpZXdSZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnZlcnRTY3Jl
ZW5SZWN0KGNnVmlld1JlY3QpOworCisgICAgVUFab29tQ2hhbmdlRm9jdXMoJmNnVmlld1JlY3Qs
ICZjZ0NhcmV0UmVjdCwga1VBWm9vbUZvY3VzVHlwZUluc2VydGlvblBvaW50KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJh
bWVTZWxlY3Rpb25NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRnJhbWVTZWxlY3Rpb25NYWMubW0JKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDcgQEAKICAqLwogIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTZWxlY3Rp
b25Db250cm9sbGVyLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogCiAjaW1wb3J0ICJB
WE9iamVjdENhY2hlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgpAQCAtNDYsNyArNDYsNyBAQCBzdGF0
aWMgQ0dSZWN0IGFjY2Vzc2liaWxpdHlDb252ZXJ0U2NyZWVuCiB9CiAgICAgCiAgICAgCi12b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFu
Z2UoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rp
b25Db250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
ODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLSAKLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2VsZWN0aW9uQ29udHJv
bGxlci5oIgotCi0jaW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgot
I2ltcG9ydCAiUmVuZGVyVmlldy5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIENHUmVjdCBhY2Nlc3NpYmlsaXR5Q29udmVy
dFNjcmVlblJlY3QoQ0dSZWN0IGJvdW5kcykKLXsKLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05T
U2NyZWVuIHNjcmVlbnNdOwotICAgIGlmIChbc2NyZWVucyBjb3VudF0pIHsKLSAgICAgICAgQ0dG
bG9hdCBzY3JlZW5IZWlnaHQgPSBOU0hlaWdodChbKE5TU2NyZWVuICopW3NjcmVlbnMgb2JqZWN0
QXRJbmRleDowXSBmcmFtZV0pOwotICAgICAgICBib3VuZHMub3JpZ2luLnkgPSAoc2NyZWVuSGVp
Z2h0IC0gKGJvdW5kcy5vcmlnaW4ueSArIGJvdW5kcy5zaXplLmhlaWdodCkpOwotICAgIH0gZWxz
ZQotICAgICAgICBib3VuZHMgPSBDR1JlY3RaZXJvOyAgICAKLSAgICAKLSAgICByZXR1cm4gYm91
bmRzOwotfQotICAgIAotICAgIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3Nl
bGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkKLSAgICAgICAgZG9jdW1lbnQtPmF4T2JqZWN0Q2Fj
aGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCwgZmFs
c2UpOwotCi0gICAgLy8gaWYgem9vbSBmZWF0dXJlIGlzIGVuYWJsZWQsIGluc2VydGlvbiBwb2lu
dCBjaGFuZ2VzIHNob3VsZCB1cGRhdGUgdGhlIHpvb20KLSAgICBpZiAoIVVBWm9vbUVuYWJsZWQo
KSB8fCAhbV9zZWxlY3Rpb24uaXNDYXJldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKLSAgICBpZiAoIXJl
bmRlclZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
ZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gYWJzb2x1dGVDYXJldEJvdW5kcygpOwotICAgIElu
dFJlY3Qgdmlld1JlY3QgPSByZW5kZXJWaWV3LT52aWV3UmVjdCgpOwotCi0gICAgc2VsZWN0aW9u
UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihzZWxlY3Rpb25SZWN0KTsKLSAgICB2
aWV3UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbih2aWV3UmVjdCk7Ci0gICAgQ0dS
ZWN0IGNnQ2FyZXRSZWN0ID0gQ0dSZWN0TWFrZShzZWxlY3Rpb25SZWN0LngoKSwgc2VsZWN0aW9u
UmVjdC55KCksIHNlbGVjdGlvblJlY3Qud2lkdGgoKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7
Ci0gICAgQ0dSZWN0IGNnVmlld1JlY3QgPSBDR1JlY3RNYWtlKHZpZXdSZWN0LngoKSwgdmlld1Jl
Y3QueSgpLCB2aWV3UmVjdC53aWR0aCgpLCB2aWV3UmVjdC5oZWlnaHQoKSk7Ci0gICAgY2dDYXJl
dFJlY3QgPSBhY2Nlc3NpYmlsaXR5Q29udmVydFNjcmVlblJlY3QoY2dDYXJldFJlY3QpOwotICAg
IGNnVmlld1JlY3QgPSBhY2Nlc3NpYmlsaXR5Q29udmVydFNjcmVlblJlY3QoY2dWaWV3UmVjdCk7
Ci0KLSAgICBVQVpvb21DaGFuZ2VGb2N1cygmY2dWaWV3UmVjdCwgJmNnQ2FyZXRSZWN0LCBrVUFa
b29tRm9jdXNUeXBlSW5zZXJ0aW9uUG9pbnQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTIgKzMwLDYgQEAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3ku
aCIKICNpbmNsdWRlICJDbGlwYm9hcmRRdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNDQsNyArNDUs
NiBAQAogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJS
YW5nZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNjAsNyArNjEsNiBAQAogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCIKQEAgLTgwMyw3ICs4
MDMsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBlZGl0aW5nIGNvbnRleHQg
bWVudQotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CiAgICAgICAgIGJvb2wgaW5QYXNzd29yZEZpZWxkID0gc2VsZWN0aW9uLT5pc0lu
UGFzc3dvcmRGaWVsZCgpOwogICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVkID0gZnJh
bWUtPmVkaXRvcigpLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG5vZGUpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAg
KzMyLDEwIEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiU2Vs
ZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAKQEAgLTE3OSw3ICsxNzksNyBAQCBTdHJpbmcgRE9NU2VsZWN0aW9u
Ojp0eXBlKCkgY29uc3QKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rp
b24oKTsKIAogICAgIC8vIFRoaXMgaXMgYSBXZWJLaXQgRE9NIGV4dGVuc2lvbiwgaW5jb21wYXRp
YmxlIHdpdGggYW4gSUUgZXh0ZW5zaW9uCiAgICAgLy8gSUUgaGFzIHRoaXMgc2FtZSBhdHRyaWJ1
dGUsIGJ1dCByZXR1cm5zICJub25lIiwgInRleHQiIGFuZCAiY29udHJvbCIKQEAgLTI5MywxMSAr
MjkzLDExIEBAIHZvaWQgRE9NU2VsZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiAKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVBbHRlcmF0aW9uIGFsdGVyOworICAgIEZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbiBhbHRl
cjsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWx0ZXJTdHJpbmcsICJleHRlbmQiKSkKLSAg
ICAgICAgYWx0ZXIgPSBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kOworICAg
ICAgICBhbHRlciA9IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kOwogICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGFsdGVyU3RyaW5nLCAibW92ZSIpKQotICAgICAgICBhbHRl
ciA9IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlOworICAgICAgICBhbHRlciA9
IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZTsKICAgICBlbHNlCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5n
ZSogcikKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNlbGVjdGlvbkNvbnRy
b2xsZXIqIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rp
b24tPmlzTm9uZSgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocikpOwpAQCAtNDM2LDEzICs0MzYsMTMgQEAgdm9pZCBET01TZWxlY3Rpb246OmRl
bGV0ZUZyb21Eb2N1bWVudCgpCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7
CiAKICAgICBpZiAoc2VsZWN0aW9uLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGlzQ29sbGFwc2VkKCkpCi0gICAgICAgIHNlbGVjdGlvbi0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CisgICAgICAgIHNlbGVjdGlvbi0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKQEAgLTQ2
MSw3ICs0NjEsNyBAQCBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKGNvbnN0IE5vCiAg
ICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxlY3Rpb25D
b250cm9sbGVyKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAKICAgICBpZiAoIW4g
fHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSBuLT5kb2N1bWVudCgpIHx8IHNlbGVjdGlvbi0+aXNO
b25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCkBAIC02MSw3ICs2Miw2IEBACiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKQEAg
LTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRyYWdJc01vdmUoU2Vs
ZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERy
YWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24sIERyYWdE
YXRhKiBkcmFnRGF0YSkKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9k
cmFnSW5pdGlhdG9yICYmIHNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhaXNDb3B5
S2V5RG93bihkcmFnRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5oCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBEcmFnRGF0YTsKICAgICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEZy
YW1lOworICAgIGNsYXNzIEZyYW1lU2VsZWN0aW9uOwogICAgIGNsYXNzIEltYWdlOwogICAgIGNs
YXNzIEludFJlY3Q7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNz
IFBsYXRmb3JtTW91c2VFdmVudDsKICAgICBjbGFzcyBSYW5nZTsKLSAgICBjbGFzcyBTZWxlY3Rp
b25Db250cm9sbGVyOwogICAgIAogICAgIGNsYXNzIERyYWdDb250cm9sbGVyIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRHJhZ0NvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTk5LDcgKzk5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IHRyeURIVE1MRHJhZyhEcmFnRGF0YSosIERyYWdPcGVyYXRpb24mKTsKICAgICAgICAgRHJhZ09w
ZXJhdGlvbiBkcmFnT3BlcmF0aW9uKERyYWdEYXRhKik7CiAgICAgICAgIHZvaWQgY2FuY2VsRHJh
ZygpOwotICAgICAgICBib29sIGRyYWdJc01vdmUoU2VsZWN0aW9uQ29udHJvbGxlciosIERyYWdE
YXRhKik7CisgICAgICAgIGJvb2wgZHJhZ0lzTW92ZShGcmFtZVNlbGVjdGlvbiosIERyYWdEYXRh
Kik7CiAgICAgICAgIGJvb2wgaXNDb3B5S2V5RG93bihEcmFnRGF0YSopOwogCiAgICAgICAgIHZv
aWQgbW91c2VNb3ZlZEludG9Eb2N1bWVudChEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgpAQCAtNjgsNyArNjksNiBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgpAQCAtMjU2LDE0ICsy
NTYsMTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKICNlbmRpZgogfQogCi1zdGF0aWMg
dm9pZCBzZXRTZWxlY3Rpb25JZk5lZWRlZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKK3N0YXRpYyB2b2lkIHNldFNl
bGVjdGlvbklmTmVlZGVkKEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKICAgICBBU1NFUlQoc2VsZWN0aW9uKTsKICAgICBp
ZiAoc2VsZWN0aW9uLT5zZWxlY3Rpb24oKSAhPSBuZXdTZWxlY3Rpb24gJiYgc2VsZWN0aW9uLT5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgc2VsZWN0aW9uLT5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0
aW9uYWxTZWxlY3Rpb25JZk5lZWRlZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24sIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQorc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRlZChG
cmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBBU1NFUlQoc2VsZWN0
aW9uKTsKICAgICBpZiAoc2VsZWN0aW9uLT5zZWxlY3Rpb24oKSAhPSBuZXdTZWxlY3Rpb24gJiYg
c2VsZWN0aW9uLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKQEAgLTIyMjMs
MTIgKzIyMjMsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgIEludFBvaW50IGxvY2F0aW9uOwogCiAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBkb2MtPmZv
Y3VzZWROb2RlKCk7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxl
ciA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9u
Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2Vs
ZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxl
Y3Rpb24tPnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNl
bGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3Rpb24gPSBzZWxlY3Rpb25Db250cm9sbGVyLT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
ICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JS
YW5nZShzZWxlY3Rpb24uZ2V0KCkpOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYm
IChzZWxlY3Rpb24tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24tPmlzUmFuZ2Uo
KSkpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi0+
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1l
LT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOwogCiAg
ICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVj
dC54KCk7CiAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0Lm1heFkoKSk7
CkBAIC0yNTQzLDE2ICsyNTQzLDE2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2Fy
ZFNlbGVjdGkKICAgICBib29sIGlzQ29tbWFuZGVkID0gZXZlbnQtPmdldE1vZGlmaWVyU3RhdGUo
Ik1ldGEiKTsKICAgICAKICAgICBpZiAoa2V5ID09ICJVcCIpIHsKLSAgICAgICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFs
dGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uQmFja3dhcmQsIChpc0NvbW1hbmRlZCkgPyBEb2N1bWVudEJvdW5kYXJ5IDogTGluZUdy
YW51bGFyaXR5LCB0cnVlKTsKKyAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgo
aXNTaGlmdGVkKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxl
Y3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgKGlzQ29tbWFuZGVkKSA/
IERvY3VtZW50Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwogICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsK
LSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50
Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOworICAgICAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25F
eHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQs
IChpc0NvbW1hbmRlZCkgPyBEb2N1bWVudEJvdW5kYXJ5IDogTGluZUdyYW51bGFyaXR5LCB0cnVl
KTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfSBlbHNlIGlmIChr
ZXkgPT0gIkxlZnQiKSB7Ci0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoKGlz
U2hpZnRlZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0
aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkxlZnQsIChpc0NvbW1hbmRl
ZCkgPyBMaW5lQm91bmRhcnkgOiAoaXNPcHRpb25lZCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFy
YWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoKGlzU2hpZnRlZCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgKGlzQ29tbWFuZGVk
KSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJh
Y3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlJpZ2h0IikgewotICAgICAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/
IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/
IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfSAgICAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBmb2N1c0RvY3VtZW50VmlldygpOwogCi0gICAgdm9pZCBjYXBzTG9j
a1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsgLy8gT25seSBjYWxsZWQgYnkgU2VsZWN0aW9uQ29udHJv
bGxlcgorICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7IC8vIE9ubHkgY2Fs
bGVkIGJ5IEZyYW1lU2VsZWN0aW9uCiAgICAgCiAgICAgdm9pZCBzZW5kUmVzaXplRXZlbnQoKTsg
Ly8gT25seSBjYWxsZWQgaW4gRnJhbWVWaWV3CiAgICAgdm9pZCBzZW5kU2Nyb2xsRXZlbnQoKTsg
Ly8gRGl0dG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCkBAIC01MSw3ICs1Miw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlv
bi5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lk
IGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAob2xkRm9jdXNlZEZyYW1lLT5k
b2N1bWVudCgpICE9IG5ld0ZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHMgPSBvbGRGb2N1c2VkRnJhbWUtPnNl
bGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uKiBzID0gb2xkRm9jdXNlZEZyYW1lLT5zZWxl
Y3Rpb24oKTsKICAgICBpZiAocy0+aXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBpbmxpbmUgRnJh
bWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtCiAgICAgLCBtX293bmVyRWxlbWVudChvd25l
ckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdCh0aGlzKQogICAgICwgbV9lZGl0b3IodGhpcykKLSAg
ICAsIG1fc2VsZWN0aW9uQ29udHJvbGxlcih0aGlzKQorICAgICwgbV9zZWxlY3Rpb24odGhpcykK
ICAgICAsIG1fZXZlbnRIYW5kbGVyKHRoaXMpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIo
dGhpcykKICAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzLCAmRnJhbWU6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBA
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25TY2hlZHVsZXIuaCIKLSNpbmNsdWRl
ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlVzZXJTY3JpcHRUeXBlcy5oIgogCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIGNvbnN0
OwogICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyKCkgY29uc3Q7CiAgICAgICAgIE5hdmlnYXRp
b25TY2hlZHVsZXIqIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciogc2VsZWN0aW9uKCkgY29uc3Q7CisgICAgICAgIEZyYW1lU2VsZWN0aW9u
KiBzZWxlY3Rpb24oKSBjb25zdDsKICAgICAgICAgRnJhbWVUcmVlKiB0cmVlKCkgY29uc3Q7CiAg
ICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbigpIGNvbnN0OwogICAgICAgICBT
Y3JpcHRDb250cm9sbGVyKiBzY3JpcHQoKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXIgbV9zY3JpcHQ7CiAKICAgICAgICAg
bXV0YWJsZSBFZGl0b3IgbV9lZGl0b3I7Ci0gICAgICAgIG11dGFibGUgU2VsZWN0aW9uQ29udHJv
bGxlciBtX3NlbGVjdGlvbkNvbnRyb2xsZXI7CisgICAgICAgIG11dGFibGUgRnJhbWVTZWxlY3Rp
b24gbV9zZWxlY3Rpb247CiAgICAgICAgIG11dGFibGUgRXZlbnRIYW5kbGVyIG1fZXZlbnRIYW5k
bGVyOwogICAgICAgICBtdXRhYmxlIEFuaW1hdGlvbkNvbnRyb2xsZXIgbV9hbmltYXRpb25Db250
cm9sbGVyOwogCkBAIC0zMDUsOSArMzA1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICByZXR1cm4gbV9kb2MuZ2V0KCk7CiAgICAgfQogCi0gICAgaW5saW5lIFNlbGVjdGlvbkNvbnRy
b2xsZXIqIEZyYW1lOjpzZWxlY3Rpb24oKSBjb25zdAorICAgIGlubGluZSBGcmFtZVNlbGVjdGlv
biogRnJhbWU6OnNlbGVjdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gJm1fc2Vs
ZWN0aW9uQ29udHJvbGxlcjsKKyAgICAgICAgcmV0dXJuICZtX3NlbGVjdGlvbjsKICAgICB9CiAK
ICAgICBpbmxpbmUgRWRpdG9yKiBGcmFtZTo6ZWRpdG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisj
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNjMsNyArNjQs
NiBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgIlNwZWVjaElucHV0LmgiCkBAIC0xMTUsNyArMTE1LDcgQEAgc3Rh
dGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAKIFBhZ2U6OlBhZ2UoY29uc3QgUGFnZUNs
aWVudHMmIHBhZ2VDbGllbnRzKQogICAgIDogbV9jaHJvbWUoYWRvcHRQdHIobmV3IENocm9tZSh0
aGlzLCBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQpKSkKLSAgICAsIG1fZHJhZ0NhcmV0Q29udHJv
bGxlcihhZG9wdFB0cihuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigwLCB0cnVlKSkpCisgICAgLCBt
X2RyYWdDYXJldENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEZyYW1lU2VsZWN0aW9uKDAsIHRydWUp
KSkKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgICwgbV9kcmFnQ29udHJvbGxlcihhZG9w
dFB0cihuZXcgRHJhZ0NvbnRyb2xsZXIodGhpcywgcGFnZUNsaWVudHMuZHJhZ0NsaWVudCkpKQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRWRpdG9yQ2xpZW50OwogICAgIGNsYXNzIEZvY3VzQ29u
dHJvbGxlcjsKICAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBGcmFtZVNlbGVjdGlvbjsKICAg
ICBjbGFzcyBHZW9sb2NhdGlvbkNsaWVudDsKICAgICBjbGFzcyBHZW9sb2NhdGlvbkNvbnRyb2xs
ZXI7CiAgICAgY2xhc3MgSGFsdGFibGVQbHVnaW47CkBAIC03Nyw3ICs3OCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZW5kZXJUaGVtZTsKICAgICBjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwogICAgIGNsYXNzIFNjcm9sbGFibGVBcmVhOwotICAgIGNsYXNzIFNlbGVjdGlvbkNv
bnRyb2xsZXI7CiAgICAgY2xhc3MgU2V0dGluZ3M7CiAgICAgY2xhc3MgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0Q7CiAgICAgY2xhc3MgU3BlZWNoSW5wdXQ7CkBAIC0xNjUsNyArMTY1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgZnJhbWVDb3VudCgpIGNvbnN0IHsgY2hlY2tG
cmFtZUNvdW50Q29uc2lzdGVuY3koKTsgcmV0dXJuIG1fZnJhbWVDb3VudDsgfQogCiAgICAgICAg
IENocm9tZSogY2hyb21lKCkgY29uc3QgeyByZXR1cm4gbV9jaHJvbWUuZ2V0KCk7IH0KLSAgICAg
ICAgU2VsZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhZ0NhcmV0Q29udHJvbGxlci5nZXQoKTsgfQorICAgICAgICBGcmFtZVNlbGVjdGlv
biogZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0NhcmV0Q29udHJv
bGxlci5nZXQoKTsgfQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgICAgIERyYWdDb250
cm9sbGVyKiBkcmFnQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0NvbnRyb2xsZXIu
Z2V0KCk7IH0KICNlbmRpZgpAQCAtMzE1LDcgKzMxNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKCkgY29uc3Q7CiAKICAgICAgICAg
T3duUHRyPENocm9tZT4gbV9jaHJvbWU7Ci0gICAgICAgIE93blB0cjxTZWxlY3Rpb25Db250cm9s
bGVyPiBtX2RyYWdDYXJldENvbnRyb2xsZXI7CisgICAgICAgIE93blB0cjxGcmFtZVNlbGVjdGlv
bj4gbV9kcmFnQ2FyZXRDb250cm9sbGVyOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICAgICAgUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBtX3NoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFn
Q29udHJvbGxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0RyYWdDb250cm9sbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NTgzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEcmFnQ29udHJvbGxl
ci5oIgogCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1
bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg1ODM0KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJh
Z0NvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2lu
L0RyYWdDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDgg
KzI3LDggQEAKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRHJhZ0Rh
dGEuaCIKLSNpbmNsdWRlICJ3aW5kb3dzLmgiIAotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIndpbmRvd3MuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcAkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMu
aCIKQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
LSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV0NEYXRhT2JqZWN0
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKQEAgLTM0LDcgKzM1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAg
LTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0
UnVuLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKQEAgLTE2OCw3ICsxNjgsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpkZXN0cm95KCkKICAgICAgICAgaWYgKGZpcnN0TGluZUJveCgpKSB7
CiAgICAgICAgICAgICAvLyBXZSBjYW4ndCB3YWl0IGZvciBSZW5kZXJCb3g6OmRlc3Ryb3kgdG8g
Y2xlYXIgdGhlIHNlbGVjdGlvbiwKICAgICAgICAgICAgIC8vIGJlY2F1c2UgYnkgdGhlbiB3ZSB3
aWxsIGhhdmUgbnVrZWQgdGhlIGxpbmUgYm94ZXMuCi0gICAgICAgICAgICAvLyBGSVhNRTogVGhl
IFNlbGVjdGlvbkNvbnRyb2xsZXIgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHdoZW4g
aXQKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgRnJhbWVTZWxlY3Rpb24gc2hvdWxkIGJlIHJl
c3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKICAgICAgICAgICAgIC8vIGlzIG5vdGlmaWVkIG9m
IERPTSBtdXRhdGlvbnMuCiAgICAgICAgICAgICBpZiAoaXNTZWxlY3Rpb25Cb3JkZXIoKSkKICAg
ICAgICAgICAgICAgICB2aWV3KCktPmNsZWFyU2VsZWN0aW9uKCk7CkBAIC0yNDE3LDE0ICsyNDE3
LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKIAogdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHksIENhcmV0VHlwZSB0eXBlKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlv
biA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQgPyBmcmFtZSgpLT5zZWxlY3Rpb24oKSA6IGZyYW1lKCkt
PnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSB0eXBlID09IEN1cnNvckNhcmV0ID8gZnJhbWUoKS0+c2VsZWN0aW9uKCkgOiBmcmFt
ZSgpLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKIAotICAgIC8vIFBhaW50IHRoZSBj
YXJldCBpZiB0aGUgU2VsZWN0aW9uQ29udHJvbGxlciBzYXlzIHNvIG9yIGlmIGNhcmV0IGJyb3dz
aW5nIGlzIGVuYWJsZWQKKyAgICAvLyBQYWludCB0aGUgY2FyZXQgaWYgdGhlIEZyYW1lU2VsZWN0
aW9uIHNheXMgc28gb3IgaWYgY2FyZXQgYnJvd3NpbmcgaXMgZW5hYmxlZAogICAgIGJvb2wgY2Fy
ZXRCcm93c2luZyA9IGZyYW1lKCktPnNldHRpbmdzKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKS0+
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9
IHNlbGVjdGlvbi0+Y2FyZXRSZW5kZXJlcigpOwogICAgIGlmIChjYXJldFBhaW50ZXIgPT0gdGhp
cyAmJiAoc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKSB7
CiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHBhaW50aW5nIG9mZnNldCBpbnRvIHRoZSBsb2NhbCBj
b29yZGluYXRlIHN5c3RlbSBvZiB0aGlzIHJlbmRlcmVyLAotICAgICAgICAvLyB0byBtYXRjaCB0
aGUgbG9jYWxDYXJldFJlY3QgY29tcHV0ZWQgYnkgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIKKyAg
ICAgICAgLy8gdG8gbWF0Y2ggdGhlIGxvY2FsQ2FyZXRSZWN0IGNvbXB1dGVkIGJ5IHRoZSBGcmFt
ZVNlbGVjdGlvbgogICAgICAgICBvZmZzZXRGb3JDb250ZW50cyh0eCwgdHkpOwogCiAgICAgICAg
IGlmICh0eXBlID09IEN1cnNvckNhcmV0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTM4
LDcgKzM5LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9u
IDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmRlc3Ryb3ko
KQogICAgICAgICBpZiAoZmlyc3RMaW5lQm94KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNhbid0
IHdhaXQgZm9yIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95IHRvIGNsZWFyIHRoZSBzZWxl
Y3Rpb24sCiAgICAgICAgICAgICAvLyBiZWNhdXNlIGJ5IHRoZW4gd2Ugd2lsbCBoYXZlIG51a2Vk
IHRoZSBsaW5lIGJveGVzLgotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBTZWxlY3Rpb25Db250
cm9sbGVyIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcyB3aGVuIGl0CisgICAgICAgICAg
ICAvLyBGSVhNRTogVGhlIEZyYW1lU2VsZWN0aW9uIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3Ig
dGhpcyB3aGVuIGl0CiAgICAgICAgICAgICAvLyBpcyBub3RpZmllZCBvZiBET00gbXV0YXRpb25z
LgogICAgICAgICAgICAgaWYgKGlzU2VsZWN0aW9uQm9yZGVyKCkpCiAgICAgICAgICAgICAgICAg
dmlldygpLT5jbGVhclNlbGVjdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIK
QEAgLTgwLDcgKzgxLDYgQEAKICNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5j
bHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkV2ZW50UXVl
dWUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01Myw3
ICs1NCw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWUuaCIKICNpbmNsdWRlICJTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExp
c3QuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3RDaGlsZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAg
UmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OnJlbQogICAgIAogICAgIC8vIElm
IG9sZENoaWxkIGlzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgdGhlbiBjbGVh
ciB0aGUgc2VsZWN0aW9uIHRvCiAgICAgLy8gYXZvaWQgcHJvYmxlbXMgb2YgaW52YWxpZCBwb2lu
dGVycy4KLSAgICAvLyBGSVhNRTogVGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2hvdWxkIGJlIHJl
c3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKKyAgICAvLyBGSVhNRTogVGhlIEZyYW1lU2VsZWN0
aW9uIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcyB3aGVuIGl0CiAgICAgLy8gaXMgbm90
aWZpZWQgb2YgRE9NIG11dGF0aW9ucy4KICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVz
dHJveWVkKCkgJiYgb2xkQ2hpbGQtPmlzU2VsZWN0aW9uQm9yZGVyKCkpCiAgICAgICAgIG93bmVy
LT52aWV3KCktPmNsZWFyU2VsZWN0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNp
bmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKQEAgLTM2LDcgKzM3LDYgQEAKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24g
ODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkV2
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00MCw3ICs0
MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxi
YXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0zNiw3ICszNyw2IEBACiAjaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJl
dmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpA
QCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKQEAgLTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJTVkdWaWV3
U3BlYy5oIgogI2luY2x1ZGUgIlNWR1pvb21FdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50
TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gODU4MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lv
bnMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1RleHRRdWVyeS5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNjIsOCArMTYyLDggQEAgdm9pZCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogICAgIEFTU0VSVChkb2N1bWVudCgpKTsKICAgICBB
U1NFUlQoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBj
b250cm9sbGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFj
b250cm9sbGVyKQorICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRmluZCBzZWxlY3Rpb24gc3RhcnQKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lk
IFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG5jaGFyczsgKytpKQogICAgICAgICBlbmQgPSBlbmQubmV4dCgpOwogCi0gICAg
Y29udHJvbGxlci0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCkpOwor
ICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCkp
OwogfQogCiB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDg1ODQwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wNS0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVjdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMzQKKworICAgICAgICAq
IHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNl
bGVjdFdvcmRBcm91bmRDYXJldCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y2xlYXJGb2N1c2VkTm9kZSk6CisKIDIwMTEtMDUtMDQgIE1PUklUQSBI
YWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCB1bml0IHRl
c3Qgc2tpcCAoc3RhcnRQb3N0QW5kV2FpdE9uQ29uZGl0aW9uKQpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCkBAIC0xMjMsNyArMTI0LDYgQEAKICNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJT
dWJzdGl0dXRlRGF0YS5oIgpAQCAtMTM0NSwxMSArMTM0NSwxMSBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6c2VsZWN0V29yZEFyb3VuZFBvc2l0CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjpzZWxlY3RXb3Jk
QXJvdW5kQ2FyZXQoKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBm
cmFtZSgpLT5zZWxlY3Rpb24oKTsKLSAgICBBU1NFUlQoIWNvbnRyb2xsZXItPmlzTm9uZSgpKTsK
LSAgICBpZiAoY29udHJvbGxlci0+aXNOb25lKCkgfHwgY29udHJvbGxlci0+aXNSYW5nZSgpKQor
ICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAg
ICBBU1NFUlQoIXNlbGVjdGlvbi0+aXNOb25lKCkpOworICAgIGlmIChzZWxlY3Rpb24tPmlzTm9u
ZSgpIHx8IHNlbGVjdGlvbi0+aXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
c2VsZWN0V29yZEFyb3VuZFBvc2l0aW9uKGZyYW1lKCksIGNvbnRyb2xsZXItPnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpKTsKKyAgICBzZWxlY3RXb3JkQXJvdW5kUG9zaXRpb24oZnJhbWUoKSwg
c2VsZWN0aW9uLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xp
ZW50UHJveHkuaCIKQEAgLTg4LDcgKzg5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlNwZWVjaElucHV0Q2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgpAQCAtMTQzNiwxNyArMTQzNiwxNyBAQCBXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBs
Ojp0ZXh0SW5wdXRUCiAgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQogICAg
ICAgICByZXR1cm4gdHlwZTsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgRnJhbWVT
ZWxlY3Rpb24qIHNlbGVjdGlvbiA9IGZvY3VzZWQtPnNlbGVjdGlvbigpOworICAgIGlmICghc2Vs
ZWN0aW9uKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBj
b250cm9sbGVyLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgY29uc3QgTm9kZSogbm9k
ZSA9IHNlbGVjdGlvbi0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIHR5cGU7CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIHRleHQg
aW5wdXQgdHlwZXMgd2hlbiBuZWNlc3NhcnksIGVnLiBOdW1iZXIsCiAgICAgLy8gRGF0ZSwgRW1h
aWwsIFVSTCwgZXRjLgotICAgIGlmIChjb250cm9sbGVyLT5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChzZWxlY3Rpb24tPmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHR5cGUgPSBX
ZWJUZXh0SW5wdXRUeXBlUGFzc3dvcmQ7CiAgICAgZWxzZSBpZiAobm9kZS0+c2hvdWxkVXNlSW5w
dXRNZXRob2QoKSkKICAgICAgICAgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVUZXh0OwpAQCAtMTQ2
MSwyMyArMTQ2MSwyMyBAQCBXZWJSZWN0IFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uQm91
CiAgICAgaWYgKCFmb2N1c2VkKQogICAgICAgICByZXR1cm4gcmVjdDsKIAotICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAo
IWNvbnRyb2xsZXIpCisgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IGZvY3VzZWQtPnNl
bGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uKQogICAgICAgICByZXR1cm4gcmVjdDsKIAog
ICAgIGNvbnN0IEZyYW1lVmlldyogdmlldyA9IGZvY3VzZWQtPnZpZXcoKTsKICAgICBpZiAoIXZp
ZXcpCiAgICAgICAgIHJldHVybiByZWN0OwogCi0gICAgY29uc3QgTm9kZSogbm9kZSA9IGNvbnRy
b2xsZXItPmJhc2UoKS5jb250YWluZXJOb2RlKCk7CisgICAgY29uc3QgTm9kZSogbm9kZSA9IHNl
bGVjdGlvbi0+YmFzZSgpLmNvbnRhaW5lck5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZWN0OwogCi0gICAgaWYgKGNvbnRyb2xsZXIt
PmlzQ2FyZXQoKSkKLSAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJv
bGxlci0+YWJzb2x1dGVDYXJldEJvdW5kcygpKTsKLSAgICBlbHNlIGlmIChjb250cm9sbGVyLT5p
c1JhbmdlKCkpIHsKLSAgICAgICAgbm9kZSA9IGNvbnRyb2xsZXItPmV4dGVudCgpLmNvbnRhaW5l
ck5vZGUoKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgaWYgKHNlbGVjdGlvbi0+aXNDYXJldCgpKQorICAgICAgICBy
ZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhzZWxlY3Rpb24tPmFic29sdXRlQ2FyZXRCb3Vu
ZHMoKSk7CisgICAgZWxzZSBpZiAoc2VsZWN0aW9uLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgbm9k
ZSA9IHNlbGVjdGlvbi0+ZXh0ZW50KCkuY29udGFpbmVyTm9kZSgpOworICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIXJhbmdlKQogICAgICAgICAgICAgcmV0
dXJuIHJlY3Q7CiAgICAgICAgIHJlY3QgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGZvY3VzZWQt
PmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSkpOwpAQCAtMTUyMiwxMSAr
MTUyMiwxMSBAQCBib29sIFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2UoCiAgICAg
aWYgKCFmb2N1c2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxlY3Rpb25Db250
cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFjb250
cm9sbGVyKQorICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmb2N1c2VkLT5zZWxlY3Rp
b24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xNzEyLDkgKzE3MTIsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjbGVhckZvY3VzZWROb2Rl
KCkKICAgICBpZiAob2xkRm9jdXNlZE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJl
YVRhZykKICAgICAgICAgfHwgKG9sZEZvY3VzZWROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW5wdXRUYWcpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
b2xkRm9jdXNlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgpKSkgewotICAgICAgICAvLyBDbGVh
ciB0aGUgc2VsZWN0aW9uLgotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIHNlbGVjdGlvbi0+Y2xlYXIoKTsKKyAgICAg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5jbGVhcigpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZwkocmV2aXNpb24gODU4NDApCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wNS0wNSAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVjdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMzQK
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToK
KwogMjAxMS0wNS0wNCAgQ3JpcyBOZWNrYXIgIDxjZG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDg1ODM0KQor
KysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ2LDI1ICszNDYsMjUgQEAgYm9vbCBFZGl0b3JDbGllbnRFZmw6
OmhhbmRsZUVkaXRpbmdLZXlibwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIHN3
aXRjaCAoa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CiAgICAgICAgIGNhc2Ug
VktfTEVGVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50
LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJhbWUtPnNl
bGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKICAgICAg
ICAgICAgICAgICAgICAgRGlyZWN0aW9uTGVmdCwKICAgICAgICAgICAgICAgICAgICAga2V5RXZl
bnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAog
ICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
RXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsCisgICAgICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLAogICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25SaWdodCwKICAgICAgICAgICAgICAg
ICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3Rlckdy
YW51bGFyaXR5LAogICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsCisg
ICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXko
KSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25Nb3ZlLAogICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25CYWNrd2FyZCwKICAg
ICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFy
aXR5IDogTGluZUdyYW51bGFyaXR5LAogICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgICAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRl
cmF0aW9uTW92ZSwKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2
ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCiAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlv
bkZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJh
Z3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwKICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwkocmV2aXNpb24gODU4NDApCisrKyBTb3Vy
Y2UvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDExLTA1LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25D
b250cm9sbGVyIHRvIEZyYW1lU2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDIzNAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6
OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorCiAyMDExLTA1LTA0ICBDcmlzIE5lY2thciAgPGNkbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50SGFpa3UuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcs
MjUgKzI2NywyNSBAQCB2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVktfTEVGVDoKLSAgICAgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uTW92ZSwKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtl
dmVudC0+c2hpZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aW9uTGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVy
R3JhbnVsYXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAgICAg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0
aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFs
dGVyYXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2
ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEaXJlY3Rpb25SaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVy
R3JhbnVsYXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9u
Q29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50
LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaXJlY3Rpb25CYWNrd2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5l
R3JhbnVsYXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rp
b25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbk1vdmUsCisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXZl
bnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERpcmVjdGlvbkZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGlu
ZUdyYW51bGFyaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTg0MCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA1
LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9sbGVy
IHRvIEZyYW1lU2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDIzNAorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxl
Y3Rpb246OmRpcmVjdGlvbjpncmFudWxhcml0eTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtX
ZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3Lm1tOgorCiAyMDExLTA1LTA0ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsMTIgKzY1
MSwxMiBAQCAtIChCT09MKV9uZWVkc0xheW91dAogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZy
YW1lLT52aWV3KCkgPyBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkg
OiBmYWxzZTsKIH0KIAotLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVj
dGlvbjooU2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rp
b246KFNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFRleHRHcmFudWxh
cml0eSlncmFudWxhcml0eQorLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbjooRnJhbWVTZWxlY3Rpb246OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9u
OihTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihUZXh0R3JhbnVsYXJp
dHkpZ3JhbnVsYXJpdHkKIHsKICAgICBpZiAoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9u
KCktPmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgU2VsZWN0aW9uQ29udHJv
bGxlciBzZWxlY3Rpb247CisgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVj
dGlvbi5zZXRTZWxlY3Rpb24oX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOwogICAgIHJldHVybiBraXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVy
bmFsLmgJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0aW9uLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUG9zaXRpb24uaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5n
cy5oPgogCiBAY2xhc3MgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjsKQEAgLTEzNiw3ICsxMzYsNyBA
QCBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJJbnRlcm5hbCkKIC0gKE5TUmVjdClfZmlyc3RSZWN0
Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRv
VmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZTsKIAotLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVy
aW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVy
YXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilk
aXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0
eTsKKy0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2Vi
Q29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6
VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5n
ZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VU
b0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlOwogLSAoTlNSYW5nZSlfY29udmVydERPTVJhbmdlVG9O
U1JhbmdlOihET01SYW5nZSAqKXJhbmdlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgpA
QCAtMTA3LDcgKzEwOCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaW1w
bGVGb250RGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ci5tbQkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3
IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQg
c3RlbQogICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3IF9mcmFtZV07CiAgICAg
ICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9
IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpTZWxlY3Rpb25Db250cm9s
bGVyOjpBbHRlcmF0aW9uRXh0ZW5kCisgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJh
bWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rpb25CYWNrd2FyZCBncmFu
dWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3do
b2xlV29yZCBjbG9uZVJhbmdlXTsKICAgICAgICAgW3ByZWZpeCBzZXRFbmQ6W3NlbGVjdGlvbiBz
dGFydENvbnRhaW5lcl0gb2Zmc2V0OltzZWxlY3Rpb24gc3RhcnRPZmZzZXRdXTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiAr
MTI1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvR0NDb250
cm9sbGVyLmg+CkBAIC0xNTQsNyArMTU1LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRWYWx1ZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9s
bGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Rl
eHRSZXNvdXJjZURlY29kZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGhyZWFkQ2hlY2suaD4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTg0MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDUtMDUgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFNlbGVjdGlvbkNvbnRyb2xsZXIgdG8gRnJhbWVT
ZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYwMjM0CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKwogMjAxMS0wNS0wNCAgQ3Jp
cyBOZWNrYXIgIDxjZG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDg1ODM0
KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUgIkZy
YW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaWYgVVNFKEpTQykKQEAgLTc0LDcgKzc1LDYgQEAKICNpbmNsdWRlICJTY3JpcHRW
YWx1ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0j
aW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRh
LmgiCiAjaW5jbHVkZSAiU1ZHU01JTEVsZW1lbnQuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdT
dG9yZS5oIgpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gODU4NDApCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAx
MS0wNS0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJv
bGxlciB0byBGcmFtZVNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAyMzQKKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorCiAyMDExLTA1
LTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdpbmRvd3Mg
YnVpbGQgZml4IGF0dGVtcHQgYWZ0ZXIgcjg1ODIzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAko
cmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lV2luLmg+CkBAIC0xMjcsNyArMTI4LDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFy
VGhlbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5n
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1N5c3RlbUluZm8uaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTg0
MCkKKysrIFNvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTEtMDUtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
IFNlbGVjdGlvbkNvbnRyb2xsZXIgdG8gRnJhbWVTZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjM0CisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudFdpbkNFOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDUtMDQgIENy
aXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpJbmRleDogU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1NiwyNSArMzU2LDI1IEBAIGJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6Omhh
bmRsZUVkaXRpbmdLZXkKICAgICBpZiAoY2FyZXRCcm93c2luZykgewogICAgICAgICBzd2l0Y2gg
KGtleUV2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewogICAgICAgICBjYXNlIFZLX0xF
RlQ6Ci0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hp
ZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rp
b25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCiAgICAgICAgICAg
ICAgICAgICAgIERpcmVjdGlvbkxlZnQsCiAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5j
dHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Y2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtl
eUV2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVu
ZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwK
ICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uUmlnaHQsCiAgICAgICAgICAgICAgICAgICAg
IGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxh
cml0eSwKICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+
bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJh
dGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAg
ICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uTW92ZSwKICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uQmFja3dhcmQsCiAgICAgICAg
ICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6
IExpbmVHcmFudWxhcml0eSwKICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBWS19ET1dOOgotICAgICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlv
bk1vdmUsCisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+
c2hpZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxl
Y3Rpb246OkFsdGVyYXRpb25Nb3ZlLAogICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25Gb3J3
YXJkLAogICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBo
R3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCiAgICAgICAgICAgICAgICAgICAgIHRydWUp
OwpJbmRleDogU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1ODQwKQorKysgU291cmNlL1dlYktpdC93
eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNS0wNSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBG
cmFtZVNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjAyMzQKKworICAgICAgICAqIFdlYkRPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgICog
V2ViRE9NU2VsZWN0aW9uLmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRX
eC5jcHA6CisgICAgICAgICogV2ViVmlldy5jcHA6CisKIDIwMTEtMDUtMDQgIENyaXMgTmVja2Fy
ICA8Y2RuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJ
bmRleDogU291cmNlL1dlYktpdC93eC9XZWJET01TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd3gvV2ViRE9NU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODU4MzQpCisr
KyBTb3VyY2UvV2ViS2l0L3d4L1dlYkRPTVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJET01TZWxlY3Rpb24uaCIKIAogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJXZWJET01FbGVtZW50LmgiCiAjaW5jbHVkZSAi
V2ViRE9NUmFuZ2UuaCIKIApJbmRleDogU291cmNlL1dlYktpdC93eC9XZWJET01TZWxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3d4L1dlYkRPTVNlbGVjdGlvbi5oCShyZXZp
c2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvd3gvV2ViRE9NU2VsZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgV2ViRE9NUmFuZ2U7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKK2NsYXNzIEZyYW1lU2Vs
ZWN0aW9uOwogCiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAgREVDTEFSRV9EWU5BTUlDX0NMQVNTKHd4
V2ViS2l0RE9NU2VsZWN0aQogCiBwdWJsaWM6CiAgICAgd3hXZWJLaXRTZWxlY3Rpb24oKSB7fQot
ICAgIHd4V2ViS2l0U2VsZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVj
dGlvbikKKyAgICB3eFdlYktpdFNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogc2Vs
ZWN0aW9uKQogICAgICAgICA6IG1fc2VsZWN0aW9uKHNlbGVjdGlvbikgCiAgICAgICAgIHsgfQog
ICAgICAgICAKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIFdlYkRPTVJhbmdlKiBHZXRB
c1JhbmdlKCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciog
bV9zZWxlY3Rpb247CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIG1fc2VsZWN0aW9uOwog
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYktpdC93eC9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhU
TUxGb3JtRWxlbWVudC5oIgpAQCAtNTMsNyArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKICNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5o
IgpJbmRleDogU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xp
ZW50V3guY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9FZGl0b3JDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKQEAgLTM4LDcgKzM5LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNs
dWRlICJXZWJGcmFtZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92427</attachid>
            <date>2011-05-05 09:40:42 -0700</date>
            <delta_ts>2011-05-05 10:52:04 -0700</delta_ts>
            <desc>Fixed gtk build</desc>
            <filename>bug-60234-20110505094041.patch</filename>
            <type>text/plain</type>
            <size>360211</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1ODQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ1IEBACisyMDExLTA1LTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1lU2Vs
ZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDIzNAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAg
ICogYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5oOgorICAgICAgICAqIGNzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpjbG9uZUNoaWxkTm9kZXMpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5j
cHA6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVsZXRlVG9NYXJrKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlQmFja3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1v
dmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRl
TW92ZURvd24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVEb3duQW5kTW9kaWZ5U2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlRm9yd2FyZCk6CisgICAgICAg
IChXZWJDb3JlOjpleGVjdXRlTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVN
b3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92
ZVBhZ2VEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlUGFnZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVQYWdlVXApOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpleGVj
dXRlTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1
dGVNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVN
b3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpOgorICAgICAgICAo
V2ViQ29yZTo6ZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlQW5k
TW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZkRv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZkRvY3VtZW50QW5k
TW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZlNl
bnRlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZlNlbnRlbmNlQW5k
TW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9FbmRPZkxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVRvRW5kT2ZQYXJhZ3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlUGFyYWdyYXBoQmFja3dh
cmRBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVQYXJh
Z3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1
dGVNb3ZlVXApOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVVcEFuZE1vZGlmeVNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVdvcmRCYWNrd2FyZCk6CisgICAg
ICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVdvcmRGb3J3YXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVXb3JkTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpleGVj
dXRlTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4
ZWN1dGVNb3ZlV29yZFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlV29yZFJp
Z2h0QW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9M
ZWZ0RW5kT2ZMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9MZWZ0RW5kT2ZM
aW5lQW5kTW9kaWZ5U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVG9S
aWdodEVuZE9mTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVRvUmlnaHRFbmRP
ZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb3ZlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnRleHRXaWxsQmVSZXBsYWNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0SXNEaXJlY3Rpb25hbCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d2lsbEJlTW9kaWZpZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnBvc2l0aW9uRm9yUGxhdGZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnN0YXJ0Rm9yUGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OmVuZEZvclBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjp4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpzZXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0RW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OmNhcmV0UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjphYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6Y2FyZXRSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpzaG91bGRSZXBhaW50Q2FyZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OmludmFsaWRhdGVDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnBhaW50Q2FyZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRlYnVn
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBh
cmVudElmRnVsbHlTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rl
ZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjppc0luUGFzc3dvcmRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y2FyZXRSZW5kZXJzSW5z
aWRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0
aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpwYWdl
QWN0aXZhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6aXNGb2N1c2VkQW5kQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpzZXRDYXJldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OmNhcmV0QmxpbmtUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpwYWludERyYWdDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6Y29weVR5cGluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OmJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6Y3VycmVudEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNob3VsZENoYW5nZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNob3dUcmVlRm9yVGhpcyk6CisgICAgICAgIChzaG93VHJlZSk6CisgICAgICAgICogZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp0
eXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y2xlYXJUeXBp
bmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0VHlwaW5nU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxp
dHlGb3JTZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAg
ICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGlu
Zy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldFNlbGVjdGlv
bkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTZWxlY3Rpb25D
b21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxs
Q29ycmVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rpb25DaHJvbWl1bS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNo
cm9taXVtLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVt
L1NlbGVjdGlvbkNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZWRp
dGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdl
KToKKyAgICAgICAgKiBlZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKToKKyAgICAgICAg
KiBlZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbS4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hh
bmdlKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOiBS
ZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcvcXQvRWRpdG9yUXQuY3BwOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAqIHBhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpE
T01TZWxlY3Rpb246Om1vZGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFk
ZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKToKKyAg
ICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdD
b250cm9sbGVyOjpkcmFnSXNNb3ZlKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmg6
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0
U2VsZWN0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Tm9uRGlyZWN0aW9uYWxT
ZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRD
b250ZXh0TWVudUV2ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjbGVhclNlbGVjdGlvbklmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgICogcGFnZS9GcmFt
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlbGVjdGlvbik6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZHJhZ0NhcmV0Q29udHJvbGxlcik6
CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KiBwYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHA6CisgICAgICAgICogcGFnZS93aW4vRXZl
bnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
YWludENhcmV0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpkZXN0cm95KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHN2Zy9T
VkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3Ry
aW5nKToKKwogMjAxMS0wNS0wNSAgWW91bmcgSGFuIExlZSAgPGpveWJyb0Bjb21wYW55MTAwLm5l
dD4KIAogICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDYgKzY1Miw3IEBAIFNFVChXZWJDb3JlX1NP
VVJDRVMKICAgICBlZGl0aW5nL0VkaXRvci5jcHAKICAgICBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisgICAgZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKICAgICBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKICAgICBlZGl0
aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZC5jcHAKQEAgLTY3MSw3ICs2NzIsNiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKICAgICBl
ZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcAogICAgIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCi0gICAgZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9T
bWFydFJlcGxhY2UuY3BwCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTMyMyw3ICsxMzIzLDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZpbmRPcHRp
b25zLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaCBcCi0JU291cmNl
L1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0Zy
YW1lU2VsZWN0aW9uR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBcCiAJU291cmNl
L1dlYkNvcmUvZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwIFwKQEAgLTEzNjYsOCArMTM2OCw2
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2UuY3BwIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDE1IEBAIF9fWk43V2ViQ29yZTE0RG9j
dW1lbnRMb2FkZXJDMUVSS05TXzE1UmUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJDMkVS
S05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRlRGF0YUUKIF9fWk43V2ViQ29y
ZTE0RG9jdW1lbnRMb2FkZXJEMkV2CiBfX1pON1dlYkNvcmUxNERvY3VtZW50V3JpdGVyMTFzZXRF
bmNvZGluZ0VSS04zV1RGNlN0cmluZ0ViCitfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTBz
ZXRGb2N1c2VkRWIKK19fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMnNldFNlbGVjdGlvbkVS
S05TXzE2VmlzaWJsZVNlbGVjdGlvbkVqTlMwXzE5Q3Vyc29yQWxpZ25PblNjcm9sbEVOU18xNVRl
eHRHcmFudWxhcml0eUVOU18yMERpcmVjdGlvbmFsaXR5UG9saWN5RQorX19aTjdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFYgor
X19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE2c2V0U2VsZWN0ZWRSYW5nZUVQTlNfNVJhbmdl
RU5TXzlFQWZmaW5pdHlFYgorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjIwc2V0U2VsZWN0
aW9uRnJvbU5vbmVFdgorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjZtb2RpZnlFTlMwXzEx
RUFsdGVyYXRpb25FTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlF
YgorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjVjbGVhckV2CitfX1pON1dlYkNvcmUxNEZy
YW1lU2VsZWN0aW9uOXNlbGVjdEFsbEV2CitfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uQzFF
UE5TXzVGcmFtZUViCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTJyZWxlYXNlUHJveHlF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgpAQCAtNTIwLDE1
ICs1MjksNiBAQCBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UyMmRlZmF1CiBfX1pO
N1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UyNHNfZGVmYXVsdFRpbWVvdXRJbnRlcnZhbEUK
IF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTI1c2V0RGVmYXVsdFRpbWVvdXRJbnRl
cnZhbEVkCiBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2U2c2V0VVJMRVJLTlNfNEtV
UkxFCi1fX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxMHNldEZvY3VzZWRFYgotX19a
TjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTJzZXRTZWxlY3Rpb25FUktOU18xNlZpc2li
bGVTZWxlY3Rpb25Fak5TMF8xOUN1cnNvckFsaWduT25TY3JvbGxFTlNfMTVUZXh0R3JhbnVsYXJp
dHlFTlNfMjBEaXJlY3Rpb25hbGl0eVBvbGljeUUKLV9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29u
dHJvbGxlcjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFYgotX19aTjdX
ZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViCi1fX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIyMHNldFNl
bGVjdGlvbkZyb21Ob25lRXYKLV9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjVjbGVh
ckV2Ci1fX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI2bW9kaWZ5RU5TMF8xMUVBbHRl
cmF0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWIKLV9f
Wk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjlzZWxlY3RBbGxFdgotX19aTjdXZWJDb3Jl
MTlTZWxlY3Rpb25Db250cm9sbGVyQzFFUE5TXzVGcmFtZUViCiBfX1pON1dlYkNvcmUxOVRleHRS
ZXNvdXJjZURlY29kZXI1Zmx1c2hFdgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVy
NmRlY29kZUVQS2NtCiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJDMUVSS04zV1RG
NlN0cmluZ0VSS05TXzEyVGV4dEVuY29kaW5nRWIKQEAgLTExMTcsNiArMTExNywxMiBAQCBfX1pO
SzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE5b3JpZ2luYWxSCiBfX1pOSzdXZWJDb3JlMTREb2N1
bWVudExvYWRlcjIxaXNMb2FkaW5nTWFpblJlc291cmNlRXYKIF9fWk5LN1dlYkNvcmUxNERvY3Vt
ZW50TG9hZGVyMjh1cmxGb3JIaXN0b3J5UmVmbGVjdHNGYWlsdXJlRXYKIF9fWk5LN1dlYkNvcmUx
NERvY3VtZW50TG9hZGVyM3VybEV2CitfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjExY3Vy
cmVudEZvcm1FdgorX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xNWNvcHlUeXBpbmdTdHls
ZUV2CitfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJblBhc3N3b3JkRmllbGRFdgor
X19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNlZEFuZEFjdGl2ZUV2CitfX1pO
SzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xl
c0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRUVFCitfX1pOSzdXZWJDb3JlMTRGcmFt
ZVNlbGVjdGlvbjZib3VuZHNFYgogX19aTks3V2ViQ29yZTE0UmVuZGVyTGlzdEl0ZW0xMG1hcmtl
clRleHRFdgogX19aTks3V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMGNvbm5lY3Rpb25FdgogX19a
Tks3V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIxMWZyYW1lTG9hZGVyRXYKQEAgLTExNTcsMTIgKzEx
NjMsNiBAQCBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTVodHRwCiBfX1pOSzdX
ZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJj
ZVJlcXVlc3RCYXNlNmlzTnVsbEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNl
N2lzRW1wdHlFdgotX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjExY3VycmVudEZv
cm1FdgotX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE1Y29weVR5cGluZ1N0eWxl
RXYKLV9fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxN2lzSW5QYXNzd29yZEZpZWxk
RXYKLV9fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxOGlzRm9jdXNlZEFuZEFjdGl2
ZUV2Ci1fX1pOSzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMzFnZXRDbGlwcGVkVmlzaWJs
ZVRleHRSZWN0YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUUKLV9fWk5L
N1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI2Ym91bmRzRWIKIF9fWk5LN1dlYkNvcmUyMEhU
TUxUYWJsZUNlbGxFbGVtZW50OWNlbGxBYm92ZUV2CiBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJl
c3BvbnNlQmFzZTE0aHR0cFN0YXR1c0NvZGVFdgogX19aTks3V2ViQ29yZTIwUmVzb3VyY2VSZXNw
b25zZUJhc2UxNGh0dHBTdGF0dXNUZXh0RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC01NzMsMTAgKzU3MywxMCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9yRGVsZXRlQWN0
aW9uLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9ySW5zZXJ0QWN0aW9uLmgnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvRmluZE9wdGlvbnMuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmgnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCcsCi0gICAgICAgICAgICAn
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU21h
cnRSZXBsYWNlLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAogICAg
ICAgICAgICAgJ2VkaXRpbmcvVGV4dEFmZmluaXR5LmgnLApAQCAtMjYxNSw2ICsyNjE1LDcgQEAK
ICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdl
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdl
ZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmgnLApAQCAtMjY1MCw3ICsyNjUxLDYgQEAKICAg
ICAgICAgICAgICdlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCcsCiAgICAg
ICAgICAgICAnZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oJywKICAgICAgICAg
ICAgICdlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCcsCi0gICAgICAgICAgICAn
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9T
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TZXRTZWxlY3Rpb25D
b21tYW5kLmNwcCcsCkBAIC0yNjgzLDEyICsyNjgzLDEyIEBACiAgICAgICAgICAgICAnZWRpdGlu
Zy9hbmRyb2lkL0VkaXRvckFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL2JyZXcv
RWRpdG9yQnJldy5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hy
b21pdW0uY3BwJywKLSAgICAgICAgICAgICdlZGl0aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ2VkaXRpbmcvZ3RrL1NlbGVjdGlvbkNv
bnRyb2xsZXJHdGsuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL2Nocm9taXVtL0ZyYW1lU2Vs
ZWN0aW9uQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL2d0ay9GcmFtZVNlbGVj
dGlvbkd0ay5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3UuY3Bw
JywKICAgICAgICAgICAgICdlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCcsCiAgICAgICAgICAgICAn
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tJywKLSAgICAgICAgICAgICdlZGl0aW5nL21hYy9TZWxl
Y3Rpb25Db250cm9sbGVyTWFjLm1tJywKKyAgICAgICAgICAgICdlZGl0aW5nL21hYy9GcmFtZVNl
bGVjdGlvbk1hYy5tbScsCiAgICAgICAgICAgICAnZWRpdGluZy9tYXJrdXAuY3BwJywKICAgICAg
ICAgICAgICdlZGl0aW5nL3F0L0VkaXRvclF0LmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9x
dC9TbWFydFJlcGxhY2VRdC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDg1ODM0
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTU3Miw2
ICs1NzIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL0VkaXRvci5jcHAgXAogICAgIGVk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcCBcCisgICAgZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgXAogICAgIGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwIFwKICAgICBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAgXAogICAgIGVk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIFwKQEAgLTU5Myw3ICs1OTQsNiBAQCBTT1VS
Q0VTICs9IFwKICAgICBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgXAogICAg
IGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKLSAgICBlZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKICAgICBlZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5jcHAgXApAQCAtMTU0Myw2ICsxNTQzLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
ZWRpdGluZy9FZGl0b3IuaCBcCiAgICAgZWRpdGluZy9GaW5kT3B0aW9ucy5oIFwKICAgICBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oIFwKKyAgICBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgg
XAogICAgIGVkaXRpbmcvaHRtbGVkaXRpbmcuaCBcCiAgICAgZWRpdGluZy9IVE1MSW50ZXJjaGFu
Z2UuaCBcCiAgICAgZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5oIFwKQEAgLTE1NjMsNyAr
MTU2NCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbkNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggXAotICAgIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5oIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmggXAogICAgIGVkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
ODg1OCw3ICs0ODg1OCw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGVkaXRpbmdcaHRtbGVkaXRpbmcuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xGcmFtZVNlbGVjdGlvbi5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ4OTEwLDExICs0ODkxMCwxMSBAQAog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xodG1sZWRpdGluZy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZWRpdGluZ1xGcmFtZVNlbGVjdGlvbi5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEhUTUxJbnRlcmNoYW5nZS5jcHAiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxlZGl0aW5nXGh0bWxlZGl0aW5nLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVD
b25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDg5NjYsMTEgKzQ4OTY2
LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEhUTUxJbnRlcmNoYW5nZS5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xodG1sZWRpdGluZy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluZGVudE91dGRlbnRDb21tYW5k
LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSFRNTEludGVyY2hhbmdlLmNwcCIK
IAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpA
QCAtNDkwMjIsMTEgKzQ5MDIyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluZGVudE91dGRl
bnRDb21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEhUTUxJbnRlcmNoYW5n
ZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxl
ZGl0aW5nXEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZWRpdGluZ1xJbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5MDc4LDExICs0OTA3OCwx
MSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluZGVudE91dGRlbnRDb21tYW5kLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXElu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTEzNCwxMSArNDkxMzQsMTEgQEAKIAkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgiCiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0TGlz
dENvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xJbnNlcnRMaW5lQnJl
YWtDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtNDkxOTAsMTEgKzQ5MTkwLDExIEBACiAJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXEluc2VydExpc3RDb21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXElu
c2VydExpbmVCcmVha0NvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xJbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydExpc3RDb21tYW5kLmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDky
NDYsMTEgKzQ5MjQ2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydE5vZGVCZWZvcmVD
b21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydExpc3RDb21tYW5k
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVk
aXRpbmdcSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXEluc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDkzMDIsMTEg
KzQ5MzAyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0Tm9kZUJlZm9y
ZUNvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZWRpdGluZ1xJbnNlcnRUZXh0Q29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxlZGl0aW5nXEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIgogCQkJCT4KIAkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTM1OCwx
MSArNDkzNTgsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0VGV4dENvbW1hbmQuaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxlZGl0aW5nXEpvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGVkaXRpbmdcSW5zZXJ0VGV4dENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTQxNCwxMSArNDk0MTQsMTEgQEAK
IAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSm9pblRleHROb2Rlc0NvbW1hbmQuaCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGVkaXRpbmdcSW5zZXJ0VGV4dENvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xtYXJrdXAuY3BwIgorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xKb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5
NDcwLDExICs0OTQ3MCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xtYXJrdXAuaCIKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcSm9pblRleHROb2Rlc0NvbW1hbmQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNYXJrdXBB
Y2N1bXVsYXRvci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXG1hcmt1cC5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
QEAgLTQ5NTI2LDExICs0OTUyNiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNYXJrdXBBY2N1
bXVsYXRvci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xtYXJrdXAuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXE1hcmt1cEFjY3VtdWxhdG9yLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNDk1ODIsMTEgKzQ5NTgyLDExIEBACiAJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxlZGl0aW5nXE1hcmt1cEFjY3VtdWxhdG9yLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
IAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTYzOCwxMSArNDk2MzgsMTEgQEAKIAkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgiCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxlZGl0aW5nXE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTW92ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xNb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTY5NCwxMSArNDk2OTQsMTEgQEAKIAkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGVkaXRpbmdcTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcTW92ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVi
dWd8V2luMzIiCkBAIC00OTc1MCwxMSArNDk3NTAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5n
XE1vdmVTZWxlY3Rpb25Db21tYW5kLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTQ5ODA2LDcgKzQ5ODA2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlbW92ZU5vZGVDb21t
YW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5ODU4LDExICs0OTg2Miw3
IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlbW92ZU5vZGVDb21tYW5kLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRp
dGluZ1xSZW1vdmVOb2RlQ29tbWFuZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTQ5OTE0LDExICs0OTkxNCwxMSBAQAogCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xSZW1vdmVOb2RlQ29tbWFuZC5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC00OTk3MCwxMSArNDk5
NzAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQu
aCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTAw
MjYsMTEgKzUwMDI2LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcU2VsZWN0aW9uQ29udHJvbGxlci5jcHAiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxlZGl0aW5nXFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtNTAwODIsNyArNTAw
ODIsNyBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTZWxlY3Rpb25Db250cm9sbGVyLmgiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYyLDcgKzExNjIsNyBAQAogCQk0OUZGQkY0MDExQzkzRUUzMDA2QTcxMTggLyogV2Vi
R0xMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tICovOyB9OwogCQk0QTBE
QTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERBMkZDMTI5QjI0MTkw
MEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovOyB9OwogCQk0QTBEQTJGRjEy
OUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTBEQTJGRDEyOUIyNDE5MDBBQjYxRTEg
LyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlv
bkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1h
Yy5tbSAqLzsgfTsKKwkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9u
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE4
Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovOyB9OwogCQk0
QUNCQzBCRTEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAv
KiBDbGFzc0xpc3QuY3BwICovOyB9OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xh
c3NMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QUNCQzBCRDEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CiAJCTRBQ0JDMEMz
MTI3MTNDQ0EwMDk0RjlCMiAvKiBET01TZXR0YWJsZVRva2VuTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBDMDEyNzEzQ0NBMDA5NEY5
QjIgLyogRE9NU2V0dGFibGVUb2tlbkxpc3QuY3BwICovOyB9OwpAQCAtMjgxNSw4ICsyODE1LDgg
QEAKIAkJOTMzMDlFMDcwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW5Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzMwOURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlFMDkwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMzA5REJBMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5RTBBMDk5RTY0OTIwMDU2RTU4MSAvKiBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMzMDlEQkIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
OTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQkUwOTlFNjQ5
MTAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OwotCQk5MzMwOUUwRTA5
OUU2NDkyMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQkYwOTlFNjQ5MTAwNTZFNTgxIC8q
IFNlbGVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk5MzMwOUUwRDA5OUU2NDkyMDA1NkU1ODEgLyogRnJhbWVTZWxlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMz
MDlEQkUwOTlFNjQ5MTAwNTZFNTgxIC8qIEZyYW1lU2VsZWN0aW9uLmNwcCAqLzsgfTsKKwkJOTMz
MDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIEZyYW1lU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCRjA5OUU2NDkxMDA1NkU1ODEg
LyogRnJhbWVTZWxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MzMwOUUwRjA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0
ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMzMDlEQzAwOTlFNjQ5MTAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNw
cCAqLzsgfTsKIAkJOTMzMDlFMTAwOTlFNjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzMwOURDMTA5OUU2NDkxMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCAqLzsg
fTsKIAkJOTMzMDlFMTEwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQzIw
OTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwICovOyB9OwpAQCAtNzY1
OCw3ICs3NjU4LDcgQEAKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTExheWVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEg
LyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTRBMERBMkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRBOEM5NkVBMEJFNjkwMzIwMDRF
RUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHBhdGggPSBtYWMv
U2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIEZyYW1lU2VsZWN0aW9uTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEZyYW1lU2VsZWN0aW9uTWFjLm1tOyBw
YXRoID0gbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEMwMTI3MTNDQ0EwMDk0RjlCMiAvKiBET01TZXR0YWJs
ZVRva2VuTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01T
ZXR0YWJsZVRva2VuTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzEw
LDggKzkzMTAsOCBAQAogCQk5MzMwOURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQkEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMz
MDlEQkIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5MzMwOURCRjA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBGcmFt
ZVNlbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFt
ZVNlbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzA5REJGMDk5
RTY0OTEwMDU2RTU4MSAvKiBGcmFtZVNlbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGcmFtZVNlbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzMwOURDMDA5OUU2NDkxMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOURDMTA5OUU2NDkx
MDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQzIwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENv
bW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BsaXRFbGVt
ZW50Q29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ2OSw2ICsx
NTQ2OSw4IEBACiAJCQkJMzcyQzAwRDgxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmgg
Ki8sCiAJCQkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5j
cHAgKi8sCiAJCQkJRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5oICovLAorCQkJCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBGcmFtZVNlbGVjdGlvbi5j
cHAgKi8sCisJCQkJOTMzMDlEQkYwOTlFNjQ5MTAwNTZFNTgxIC8qIEZyYW1lU2VsZWN0aW9uLmgg
Ki8sCiAJCQkJOTMzMDlEOTgwOTlFNjQ5MTAwNTZFNTgxIC8qIGh0bWxlZGl0aW5nLmNwcCAqLywK
IAkJCQk5MzMwOUQ5OTA5OUU2NDkxMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCAqLywKIAkJCQk5
MzMwOUQ5NjA5OUU2NDkxMDA1NkU1ODEgLyogSFRNTEludGVyY2hhbmdlLmNwcCAqLywKQEAgLTE1
NTExLDggKzE1NTEzLDYgQEAKIAkJCQlBODlDQ0M1MTBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCAqLywKIAkJCQk5MzMwOURCQTA5OUU2NDkxMDA1NkU1ODEg
LyogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5REJCMDk5RTY0OTEw
MDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oICovLAotCQkJCTkzMzA5REJFMDk5
RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQk5MzMwOURC
RjA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMzA5
REMwMDk5RTY0OTEwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgKi8sCiAJ
CQkJOTMzMDlEQzEwOTlFNjQ5MTAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgg
Ki8sCiAJCQkJQjhEQkRCNDcxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQu
Y3BwICovLApAQCAtMTg2NzEsNyArMTg2NzEsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1t
ICovLAotCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVy
TWFjLm1tICovLAorCQkJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlv
bk1hYy5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTIwOTIzLDYgKzIwOTIzLDcgQEAKIAkJCQk5M0I3N0EzODBBREQ3OTI1MDBFQTRC
ODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4NDM2ODYwQUUw
MUI3NDAwRTUzNzUzIC8qIEZyYW1lTG9hZFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTYy
OEQyMTRFMTIxMzFFRjQwMDU1RENGQyAvKiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5MzMwOUUwRTA5OUU2NDkyMDA1NkU1ODEgLyogRnJhbWVTZWxlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1QTIxNDg1MDk3QTNGNTMwMEI5MDUwQSAvKiBGcmFtZVRy
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1Q0JGRUZBMDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFt
ZVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUIwMTIzOTI4Q0EwMEIxNzM4MCAvKiBG
VFBEaXJlY3RvcnlEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjE1OSw3ICsyMjE2MCw2
IEBACiAJCQkJMzcxRjRGRkMwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVk
U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODRBRUJFNTBGQjUwNUZBMDAzODQ4M0UgLyog
U2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZF
NTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgx
MEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzVFNDk3NjEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJp
YnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM3MzksNiArMjM3MzksOCBAQAogCQkJ
CTkzMkUxNjA5MEFGNTc4MzQwMDI1RjQwOCAvKiBGcmFtZUxvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlEMDAwRUJBMjExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hp
bmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVCRjAyNDUwOTc0ODE5MDAwQzQzMTk2IC8qIEZy
YW1lTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8q
IEZyYW1lU2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRBOEM5NkVCMEJFNjkwMzIw
MDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1QTIx
NDg0MDk3QTNGNTMwMEI5MDUwQSAvKiBGcmFtZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjVDQkZFRjkwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5NzIwNUFBRjEyMzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNDk1NSw4ICsyNDk1Nyw2IEBACiAJCQkJMzcxRjRGRkQwRDI1
RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQzNEQTJFMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDg0QUVCRTQwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlv
bkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVF
RkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzdG
QTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzVFNDk3NzEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXRO
b2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2
aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKQEAgLTQ3LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCkBAIC03MSw3ICs3Miw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCkBAIC0yNDM5LDkgKzI0MzksOSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgLy8gTk9URTogaWdub3JlcyByZXN1bHRzIG9mIHNlbC5t
b2RpZnkgYmVjYXVzZSBpdCByZXR1cm5zIGZhbHNlIHdoZW4KICAgICAvLyBzdGFydGluZyBhdCBh
biBlbXB0eSBsaW5lLiAgVGhlIHJlc3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAg
Ly8gd2lsbCBiZSBhIGNhcmV0IGF0IHZpc2libGVQb3MuCi0gICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzZWxlY3Rpb247CisgICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlv
bi5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlUG9zKSk7Ci0gICAgc2VsZWN0
aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rp
b25SaWdodCwgTGluZUJvdW5kYXJ5KTsKKyAgICBzZWxlY3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5KTsKICAg
ICAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW1wb3J0ICJDb2xvck1hYy5o
IgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW1w
b3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2ltcG9ydCAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNp
bXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgiCkBAIC01Niw3ICs1Nyw2IEBACiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJS
ZW5kZXJXaWRnZXQuaCIKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKLSNpbXBvcnQgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJUZXh0
Q2hlY2tlckNsaWVudC5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0V4Y2VwdGlvbkhhbmRsZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9FeGNlcHRpb25IYW5kbGVycy5oCShyZXZpc2lv
biA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRXhjZXB0aW9uSGFuZGxl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKICAgICAKLSAgICBjbGFzcyBT
ZWxlY3Rpb25Db250cm9sbGVyOworICAgIGNsYXNzIEZyYW1lU2VsZWN0aW9uOwogICAgIGNsYXNz
IFJhbmdlOwogCiAgICAgdm9pZCByYWlzZURPTUV4Y2VwdGlvbihFeGNlcHRpb25Db2RlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDg1ODM0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiRm9udEZhbWlseVZhbHVlLmgiCiAjaW5j
bHVkZSAiRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC04Myw3ICs4NCw2IEBACiAjaW5jbHVk
ZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRv
d0RhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lk
IENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250CiAgICAgLy8gZGlzYWJsZSB0aGUg
ZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2VyaWFsaXplZCBpbnRvIHRo
ZSBtYXJrdXAKICAgICBib29sIGlzRWRpdG9yRW5hYmxlZCA9IGZhbHNlOwogICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0
KCkpIHsKLSAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rp
b24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKICAgICAgICAgRWxlbWVudCog
cm9vdCA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogMDsK
ICAgICAgICAgaXNFZGl0b3JFbmFibGVkID0gcm9vdCAmJiBpc0Rlc2NlbmRhbnRPZihyb290KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhh
c2hDaGFuZ2VFdmVudC5oIgpAQCAtMTMxLDcgKzEzMiw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UnVu
bmVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3RhdGljSGFzaFNl
dE5vZGVMaXN0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg1
ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTERp
dkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1ZS5oIgotI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgPEVkaXRvci5jcHA+CiAjaW5jbHVkZSA8RWRpdG9yQ29tbWFuZC5j
cHA+CiAjaW5jbHVkZSA8Rm9ybWF0QmxvY2tDb21tYW5kLmNwcD4KKyNpbmNsdWRlIDxGcmFtZVNl
bGVjdGlvbi5jcHA+CiAjaW5jbHVkZSA8SFRNTEludGVyY2hhbmdlLmNwcD4KICNpbmNsdWRlIDxJ
bmRlbnRPdXRkZW50Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8SW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5jcHA+CkBAIC01OSw3ICs2MCw2IEBACiAjaW5jbHVkZSA8UmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFJlcGxhY2VOb2RlV2l0aFNwYW5Db21t
YW5kLmNwcD4KICNpbmNsdWRlIDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA+Ci0jaW5jbHVk
ZSA8U2VsZWN0aW9uQ29udHJvbGxlci5jcHA+CiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZS5jcHA+CiAjaW5jbHVkZSA8U21hcnRS
ZXBsYWNlQ0YuY3BwPgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1
ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlz
aW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBFZGl0b3I6OmNhbkNvcHkoKSBjb25zdAog
ewogICAgIGlmIChpbWFnZUVsZW1lbnRGcm9tSW1hZ2VEb2N1bWVudChtX2ZyYW1lLT5kb2N1bWVu
dCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2Vs
ZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVj
dGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24tPmlzUmFu
Z2UoKSAmJiAhc2VsZWN0aW9uLT5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogCkBAIC0yNDgsNyAr
MjQ4LDcgQEAgYm9vbCBFZGl0b3I6OmNhblBhc3RlKCkgY29uc3QKIAogYm9vbCBFZGl0b3I6OmNh
bkRlbGV0ZSgpIGNvbnN0CiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG1f
ZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24tPmlzUmFuZ2UoKSAmJiBz
ZWxlY3Rpb24tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtMjAzMiw3ICsyMDMyLDcg
QEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgogICAgICAgICBmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCktPnNlbGVjdGlvbigpLT5lbmQoKSk7Ci0gICAg
ICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAg
ICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICB9
CiAKICAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQpAQCAtMjI5NiwxMSArMjI5
NiwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc3BlbGxpbmdQYXJhZ3JhcGguc3Vi
cmFuZ2UoMCwgc2VsZWN0aW9uT2Zmc2V0KTsKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwog
ICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCi0g
ICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOworICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGZh
aWxzIGZvciBhbnkgcmVhc29uLCB0aGUgZmFsbGJhY2sgaXMgdG8gZ28gb25lIHBvc2l0aW9uIGJl
eW9uZCB0aGUgbGFzdCByZXBsYWNlbWVudAogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPm1vdmVUbyhtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOwotICAgICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAg
fQogICAgIH0KICNlbHNlCkBAIC0yNzE0LDExICsyNzE0LDExIEBAIHZvaWQgRWRpdG9yOjpjaGFu
Z2VTZWxlY3Rpb25BZnRlckNvbW1hbmQKICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU3Mjkz
MTU+IFNvbWUgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZSBjb250YWluIFJhbmdlcyBmb3Ig
c2VsZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgdmFsaWQKICAgICBib29sIHNlbGVjdGlvbkRp
ZE5vdENoYW5nZURPTVBvc2l0aW9uID0gbmV3U2VsZWN0aW9uID09IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uRGlkTm90Q2hhbmdlRE9NUG9zaXRp
b24gfHwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKSB7Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlv
bnMgb3B0aW9ucyA9IDA7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRp
b25zIG9wdGlvbnMgPSAwOwogICAgICAgICBpZiAoY2xvc2VUeXBpbmcpCi0gICAgICAgICAgICBv
cHRpb25zIHw9IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsb3NlVHlwaW5nOworICAgICAgICAgICAg
b3B0aW9ucyB8PSBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmc7CiAgICAgICAgIGlmIChjbGVh
clR5cGluZ1N0eWxlKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBTZWxlY3Rpb25Db250cm9sbGVy
OjpDbGVhclR5cGluZ1N0eWxlOworICAgICAgICAgICAgb3B0aW9ucyB8PSBGcmFtZVNlbGVjdGlv
bjo6Q2xlYXJUeXBpbmdTdHlsZTsKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24sIG9wdGlvbnMpOwogICAgIH0KIApAQCAtMjcyNiw3ICsyNzI2
LDcgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZAogICAgIC8vIEZv
ciBleGFtcGxlIHdoZW4geW91IHByZXNzIHJldHVybiBpbiB0aGUgZm9sbG93aW5nICh0aGUgY2Fy
ZXQgaXMgbWFya2VkIGJ5IF4pOgogICAgIC8vIDxkaXYgY29udGVudEVkaXRhYmxlPSJ0cnVlIj48
ZGl2Pl5IZWxsbzwvZGl2PjwvZGl2PgogICAgIC8vIFdlYkNvcmUgaW5zZXJ0cyA8ZGl2Pjxicj48
L2Rpdj4gKmJlZm9yZSogdGhlIGN1cnJlbnQgYmxvY2ssIHdoaWNoIGNvcnJlY3RseSBtb3ZlcyB0
aGUgcGFyYWdyYXBoIGRvd24gYnV0IHdoaWNoIGRvZXNuJ3QKLSAgICAvLyBjaGFuZ2UgdGhlIGNh
cmV0J3MgRE9NIHBvc2l0aW9uIChbImhlbGxvIiwgMF0pLiAgSW4gdGhlc2Ugc2l0dWF0aW9ucyB0
aGUgYWJvdmUgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uIGNhbGwKKyAgICAvLyBj
aGFuZ2UgdGhlIGNhcmV0J3MgRE9NIHBvc2l0aW9uIChbImhlbGxvIiwgMF0pLiBJbiB0aGVzZSBz
aXR1YXRpb25zIHRoZSBhYm92ZSBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uIGNhbGwKICAg
ICAvLyBkb2VzIG5vdCBjYWxsIEVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bigpLCB3aGljaCwgb24gdGhlIE1hYywgc2VuZHMgc2VsZWN0aW9uIGNoYW5nZSBub3RpZmljYXRp
b25zIGFuZAogICAgIC8vIHN0YXJ0cyBhIG5ldyBraWxsIHJpbmcgc2VxdWVuY2UsIGJ1dCB3ZSB3
YW50IHRvIGRvIHRoZXNlIHRoaW5ncyAobWF0Y2hlcyBBcHBLaXQpLgogICAgIGlmIChzZWxlY3Rp
b25EaWROb3RDaGFuZ2VET01Qb3NpdGlvbikKQEAgLTMxMzQsMTEgKzMxMzQsMTEgQEAgdm9pZCBF
ZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaAogICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7
CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zKQordm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6
U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3It
PnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOwogCi0gICAgYm9vbCBjbG9zZVR5
cGluZyA9IG9wdGlvbnMgJiBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGluZzsKKyAgICBi
b29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsK
ICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKICAgICBib29sIGlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKICAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpIHsKQEAgLTMxNTMsNyArMzE1Myw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKGMKICAgICAgICAgfQogCiAgICAgICAgIC8vIERvbid0IGNoZWNr
IHNwZWxsaW5nIGFuZCBncmFtbWFyIGlmIHRoZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uIGlzIHRyaWdn
ZXJlZCBieSBzcGVsbGluZyBjb3JyZWN0aW9uIGl0c2VsZi4KLSAgICAgICAgYm9vbCBzaG91bGRD
aGVja1NwZWxsaW5nQW5kR3JhbW1hciA9ICEob3B0aW9ucyAmIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tTcGVs
bGluZ0FuZEdyYW1tYXIgPSAhKG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0
aW9uVHJpZ2dlcmVkKTsKIAogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGlu
ZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9u
LApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKICNpbmNsdWRlICJFZGl0b3JEZWxldGVBY3Rpb24uaCIKICNpbmNsdWRlICJFZGl0b3JJbnNl
cnRBY3Rpb24uaCIKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlRl
eHRDaGVja2luZy5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJX
cml0aW5nRGlyZWN0aW9uLmgiCkBAIC0zNTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAgICAgSW50
UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwogCi0gICAgdm9pZCByZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgdm9pZCByZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpOwogICAgIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxT
ZWxlY3RpbmcpIGNvbnN0OwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3Niw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGYKIHsKICAgICBSZWZQ
dHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS0+ZWRpdG9yKCktPm1hcmsoKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVj
dGlvbi0+c2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS0+
ZWRpdG9yKCktPnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUp
OwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwogICAgICAgICBpZiAoIXNlbGVjdGVkKQpAQCAt
NjA2LDQ3ICs2MDYsNDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1ha2VUZXh0V3JpdGluZ0RpcmVj
dAogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uQmFja3dhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlv
bihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92
ZURvd24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVs
YXJpdHksIHRydWUpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIExpbmVHcmFudWxh
cml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVsYXJp
dHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lR3JhbnVsYXJpdHksIHRy
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUZvcndh
cmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxl
cjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5
LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0
cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVGb3J3
YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5
KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQs
IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1v
ZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0
aWMgYm9vbCBleGVjdXRlTW92ZUxlZnQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25M
ZWZ0LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9u
TGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBleGVj
dXRlTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9u
TGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTY1NSw3ICs2NTUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBhZ2VEb3duKEZyYW1lKiBm
CiAgICAgaW50IGRpc3RhbmNlID0gdmVydGljYWxTY3JvbGxEaXN0YW5jZShmcmFtZSk7CiAgICAg
aWYgKCFkaXN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBmcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwg
ZGlzdGFuY2UsIHRydWUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsaWduQ3Vyc29yT25TY3JvbGxB
bHdheXMpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIGRpc3RhbmNlLCB0cnVlLCBGcmFtZVNlbGVjdGlvbjo6QWxp
Z25DdXJzb3JPblNjcm9sbEFsd2F5cyk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUGFn
ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02NjMsNyArNjYzLDcgQEAgc3RhdGljIGJvb2wg
ZXhlY3V0ZU1vdmVQYWdlRG93bkFuZE1vZGlmeQogICAgIGludCBkaXN0YW5jZSA9IHZlcnRpY2Fs
U2Nyb2xsRGlzdGFuY2UoZnJhbWUpOwogICAgIGlmICghZGlzdGFuY2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9u
Q29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgZGlzdGFuY2UsIHRydWUsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsaWduQ3Vyc29yT25TY3JvbGxBbHdheXMpOworICAgIHJldHVybiBmcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgZGlz
dGFuY2UsIHRydWUsIEZyYW1lU2VsZWN0aW9uOjpBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKTsK
IH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYWdlVXAoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02NzEsNyArNjcxLDcgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYWdlVXAoRnJhbWUqIGZyYQogICAgIGludCBkaXN0YW5j
ZSA9IHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoZnJhbWUpOwogICAgIGlmICghZGlzdGFuY2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
ZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIC1kaXN0YW5jZSwgdHJ1ZSwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6QWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cyk7CisgICAgcmV0
dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9u
TW92ZSwgLWRpc3RhbmNlLCB0cnVlLCBGcmFtZVNlbGVjdGlvbjo6QWxpZ25DdXJzb3JPblNjcm9s
bEFsd2F5cyk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUGFnZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQpAQCAtNjc5LDIwOCArNjc5LDIwOCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBh
Z2VVcEFuZE1vZGlmeVNlCiAgICAgaW50IGRpc3RhbmNlID0gdmVydGljYWxTY3JvbGxEaXN0YW5j
ZShmcmFtZSk7CiAgICAgaWYgKCFkaXN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uRXh0ZW5kLCAtZGlzdGFuY2UsIHRydWUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFs
aWduQ3Vyc29yT25TY3JvbGxBbHdheXMpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgLWRpc3RhbmNlLCB0cnVl
LCBGcmFtZVNlbGVjdGlvbjo6QWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cyk7CiB9CiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlUmlnaHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25S
aWdodCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIHJldHVybiBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlv
blJpZ2h0LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0
aW9uUmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9u
UmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCB0cnVlKTsKKyAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUs
IERpcmVjdGlvbkJhY2t3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRB
bmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIERv
Y3VtZW50Qm91bmRhcnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgRG9jdW1l
bnRCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3
YXJkLCBMaW5lQm91bmRhcnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5
KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVC
b3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVu
ZCwgRGlyZWN0aW9uQmFja3dhcmQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CisgICAgZnJhbWUtPnNl
bGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVj
dGlvbkJhY2t3YXJkLCBMaW5lQm91bmRhcnksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBQYXJhZ3JhcGhCb3VuZGFyeSwgdHJ1ZSk7CisgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3Zl
LCBEaXJlY3Rpb25CYWNrd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGhBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnko
U2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQs
IFBhcmFncmFwaEJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBh
cmFncmFwaEJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2UoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVj
dGlvbkJhY2t3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJh
Y2t3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
c3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlTZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFNlbnRlbmNlQm91bmRh
cnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgU2VudGVuY2VCb3VuZGFyeSwg
dHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9F
bmRPZkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBj
b25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBEb2N1bWVudEJv
dW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVj
dGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIERvY3VtZW50Qm91bmRhcnks
IHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRv
RW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rp
b25Gb3J3YXJkLCBEb2N1bWVudEJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9y
d2FyZCwgRG9jdW1lbnRCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0
YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZlNlbnRlbmNlKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25Gb3J3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIFNlbnRlbmNlQm91bmRhcnksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbihG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
IHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBTZW50ZW5jZUJvdW5kYXJ5LCB0cnVl
KTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgU2VudGVuY2VCb3VuZGFyeSwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZkxpbmUo
RnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYp
CiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBMaW5lQm91bmRhcnksIHRydWUpOwogICAgIHJldHVybiB0
cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIExpbmVCb3VuZGFyeSwg
dHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkZvcndhcmQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9FbmRPZlBhcmFn
cmFwaChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnks
IHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvRW5kT2ZQ
YXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9y
d2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBQYXJhZ3JhcGhCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCB0
cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCB0
cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYXJh
Z3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlv
bkZvcndhcmQsIFBhcmFncmFwaEdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9u
Rm9yd2FyZCwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVVwKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIGZyYW1l
LT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29s
IGV4ZWN1dGVNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0
aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJh
Y2t3YXJkLCBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRCYWNrd2FyZChGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uQmFja3dhcmQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNr
d2FyZCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3Rh
dGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJh
dGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25F
eHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRGb3J3YXJkKEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewot
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOworICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92
ZSwgRGlyZWN0aW9uRm9yd2FyZCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNl
bGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJp
dHksIHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHksIHRy
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRM
ZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHksIHRydWUp
OworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkTGVmdEFuZE1vZGlmeVNl
bGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHks
IHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25MZWZ0LCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVdvcmRSaWdodChG
cmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikK
IHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uUmlnaHQsIFdvcmRHcmFudWxhcml0eSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25SaWdodCwgV29yZEdyYW51bGFyaXR5LCB0cnVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uUmlnaHQsIFdvcmRHcmFudWxhcml0eSwg
dHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvblJpZ2h0LCBXb3JkR3JhbnVsYXJpdHksIHRydWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVRvTGVmdEVuZE9m
TGluZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgTGluZUJvdW5kYXJ5LCB0cnVlKTsK
KyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9MZWZ0RW5kT2ZMaW5lQW5kTW9kaWZ5
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwg
dHJ1ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkxlZnQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVG9SaWdodEVuZE9mTGlu
ZShGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uUmlnaHQsIExpbmVCb3VuZGFyeSwgdHJ1ZSk7Cisg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVUb1JpZ2h0RW5kT2ZMaW5lQW5kTW9kaWZ5
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvblJpZ2h0LCBMaW5lQm91bmRhcnks
IHRydWUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25SaWdodCwgTGluZUJvdW5kYXJ5LCB0cnVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDg1ODM0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOjg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgor
I2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgorI2luY2x1
ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5o
IgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0
LmgiCisjaW5jbHVkZSAiU2VjdXJlVGV4dElucHV0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUg
RURJVF9ERUJVRyAwCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworY29uc3QgaW50IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0g
SU5UX01JTjsKKworU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihGcmFt
ZSogZnJhbWUsIGJvb2wgaXNEcmFnQ2FyZXRDb250cm9sbGVyKQorICAgIDogbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKQorICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxh
cml0eSkKKyAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZTZWxlY3Rpb25Db250cm9sbGVy
OjpjYXJldEJsaW5rVGltZXJGaXJlZCkKKyAgICAsIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUodHJ1
ZSkKKyAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQorICAgICwgbV9pc0RyYWdDYXJl
dENvbnRyb2xsZXIoaXNEcmFnQ2FyZXRDb250cm9sbGVyKQorICAgICwgbV9pc0NhcmV0Qmxpbmtp
bmdTdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2ZvY3VzZWQoZnJhbWUgJiYgZnJhbWUtPnBhZ2Uo
KSAmJiBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCkgPT0g
ZnJhbWUpCisgICAgLCBtX2NhcmV0VmlzaWJsZShpc0RyYWdDYXJldENvbnRyb2xsZXIpCisgICAg
LCBtX2NhcmV0UGFpbnQodHJ1ZSkKK3sKKyAgICBzZXRJc0RpcmVjdGlvbmFsKGZhbHNlKTsKK30K
Kwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKK3sK
KyAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlw
aW5nU3R5bGU7CisgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCisgICAgICAgIG9wdGlvbnMgfD0gVXNl
clRyaWdnZXJlZDsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MuZGVlcEVx
dWl2YWxlbnQoKSwgcG9zLmRlZXBFcXVpdmFsZW50KCksIHBvcy5hZmZpbml0eSgpKSwgb3B0aW9u
cywgYWxpZ24pOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBW
aXNpYmxlUG9zaXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50LCBib29s
IHVzZXJUcmlnZ2VyZWQpCit7CisgICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xv
c2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOworICAgIGlmICh1c2VyVHJpZ2dlcmVkKQorICAg
ICAgICBvcHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oYmFzZS5kZWVwRXF1aXZhbGVudCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwg
YmFzZS5hZmZpbml0eSgpKSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3Nl
VHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAodXNlclRyaWdnZXJlZCkKKyAgICAg
ICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHBvcywgYWZmaW5pdHkpLCBvcHRpb25zKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjptb3ZlVG8oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3Nl
VHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAodXNlclRyaWdnZXJlZCkKKyAgICAg
ICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gciA/IFZpc2libGVTZWxlY3Rpb24oci0+c3RhcnRQb3NpdGlvbigpLCByLT5lbmRQb3Np
dGlvbigpLCBhZmZpbml0eSkgOiBWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKCksIFBvc2l0aW9u
KCksIGFmZmluaXR5KTsKKyAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKK30K
Kwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJmJhc2Us
IGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1c2VyVHJp
Z2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3NlVHlwaW5n
IHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAodXNlclRyaWdnZXJlZCkKKyAgICAgICAgb3B0
aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KGJhc2UsIGV4dGVudCwgYWZmaW5pdHkpLCBvcHRpb25zKTsKK30KKwordm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcywgU2V0U2Vs
ZWN0aW9uT3B0aW9ucyBvcHRpb25zLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVjdGlvbmFsaXR5
UG9saWN5KQoreworICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKKworICAgIGJvb2wg
Y2xvc2VUeXBpbmcgPSBvcHRpb25zICYgQ2xvc2VUeXBpbmc7CisgICAgYm9vbCBzaG91bGRDbGVh
clR5cGluZ1N0eWxlID0gb3B0aW9ucyAmIENsZWFyVHlwaW5nU3R5bGU7CisgICAgYm9vbCB1c2Vy
VHJpZ2dlcmVkID0gb3B0aW9ucyAmIFVzZXJUcmlnZ2VyZWQ7CisKKyAgICBzZXRJc0RpcmVjdGlv
bmFsKGRpcmVjdGlvbmFsaXR5UG9saWN5ID09IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbik7CisK
KyAgICBpZiAobV9pc0RyYWdDYXJldENvbnRyb2xsZXIpIHsKKyAgICAgICAgaW52YWxpZGF0ZUNh
cmV0UmVjdCgpOworICAgICAgICBtX3NlbGVjdGlvbiA9IHM7CisgICAgICAgIG1fY2FyZXRSZWN0
TmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7CisgICAg
ICAgIHVwZGF0ZUNhcmV0UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
bV9mcmFtZSkgeworICAgICAgICBtX3NlbGVjdGlvbiA9IHM7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
NjQ+OiBJbmZpbml0ZSByZWN1cnNpb24gYXQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0
aW9uCisgICAgLy8gaWYgZG9jdW1lbnQtPmZyYW1lKCkgPT0gbV9mcmFtZSB3ZSBjYW4gZ2V0IGlu
dG8gYW4gaW5maW5pdGUgbG9vcAorICAgIGlmIChzLmJhc2UoKS5hbmNob3JOb2RlKCkpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcy5iYXNlKCkuYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpOworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYgZG9jdW1l
bnQtPmZyYW1lKCkgIT0gbV9mcmFtZSAmJiBkb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1bWVudCgp
KSB7CisgICAgICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVj
dGlvbihzLCBvcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChjbG9zZVR5cGluZykKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcobV9mcmFtZS0+ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpKTsKKworICAgIGlmIChzaG91
bGRDbGVhclR5cGluZ1N0eWxlKQorICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7CisKKyAgICBp
ZiAobV9zZWxlY3Rpb24gPT0gcykgeworICAgICAgICAvLyBFdmVuIGlmIHNlbGVjdGlvbiB3YXMg
bm90IGNoYW5nZWQsIHNlbGVjdGlvbiBvZmZzZXRzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC4KKyAg
ICAgICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh1c2VyVHJpZ2dlcmVkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9u
ID0gbV9zZWxlY3Rpb247CisKKyAgICBtX3NlbGVjdGlvbiA9IHM7CisgICAgCisgICAgbV9jYXJl
dFJlY3ROZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgCisgICAgaWYgKCFzLmlzTm9uZSgpKQorICAg
ICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CisgICAgCisgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOworCisgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZlcnRp
Y2FsIGFycm93IG5hdmlnYXRpb24uCisgICAgLy8gSXQgd2lsbCBiZSByZXN0b3JlZCBieSB0aGUg
dmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbiBjb2RlIGlmIG5lY2Vzc2FyeS4KKyAgICBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uOworICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7Cisg
ICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh1c2VyVHJpZ2dlcmVkKTsKKyAgICBt
X2ZyYW1lLT5lZGl0b3IoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24s
IG9wdGlvbnMpOworICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CisgICAgICAgIFNjcm9sbEFsaWdu
bWVudCBhbGlnbm1lbnQ7CisKKyAgICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlv
cigpLnNob3VsZENlbnRlckFsaWduV2hlblNlbGVjdGlvbklzUmV2ZWFsZWQoKSkKKyAgICAgICAg
ICAgIGFsaWdubWVudCA9IChhbGlnbiA9PSBBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKSA/IFNj
cm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
Q2VudGVySWZOZWVkZWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsaWdubWVudCA9IChh
bGlnbiA9PSBBbGlnbkN1cnNvck9uU2Nyb2xsQWx3YXlzKSA/IFNjcm9sbEFsaWdubWVudDo6YWxp
Z25Ub3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CisKKyAg
ICAgICAgcmV2ZWFsU2VsZWN0aW9uKGFsaWdubWVudCwgdHJ1ZSk7CisgICAgfQorCisgICAgbm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpOworICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmVucXVldWVEb2N1bWVudEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNl
bGVjdGlvbmNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKworc3RhdGljIGJvb2wgcmVt
b3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKK3sKKyAgICBpZiAoIXBvc2l0aW9uLmFuY2hvck5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHBvc2l0aW9uLmFuY2hvck5vZGUoKSA9PSBub2RlKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpOworICAgIHJldHVybiBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5hbmNo
b3JOb2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vZGVX
aWxsQmVSZW1vdmVkKE5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGVyZSBjYW4ndCBiZSBhIHNlbGVjdGlvbiBpbnNpZGUgYSBmcmFn
bWVudCwgc28gaWYgYSBmcmFnbWVudCdzIG5vZGUgaXMgYmVpbmcgcmVtb3ZlZCwKKyAgICAvLyB0
aGUgc2VsZWN0aW9uIGluIHRoZSBkb2N1bWVudCB0aGF0IGNyZWF0ZWQgdGhlIGZyYWdtZW50IG5l
ZWRzIG5vIGFkanVzdG1lbnQuCisgICAgaWYgKG5vZGUgJiYgaGlnaGVzdEFuY2VzdG9yKG5vZGUp
LT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24obm9kZSwgcmVtb3ZpbmdOb2Rl
UmVtb3Zlc1Bvc2l0aW9uKG5vZGUsIG1fc2VsZWN0aW9uLmJhc2UoKSksIHJlbW92aW5nTm9kZVJl
bW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5leHRlbnQoKSksCisgICAgICAgIHJlbW92
aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5zdGFydCgpKSwgcmVtb3Zp
bmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKG5vZGUsIG1fc2VsZWN0aW9uLmVuZCgpKSk7Cit9CisKK3Zv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlKiBu
b2RlLCBib29sIGJhc2VSZW1vdmVkLCBib29sIGV4dGVudFJlbW92ZWQsIGJvb2wgc3RhcnRSZW1v
dmVkLCBib29sIGVuZFJlbW92ZWQpCit7CisgICAgYm9vbCBjbGVhclJlbmRlclRyZWVTZWxlY3Rp
b24gPSBmYWxzZTsKKyAgICBib29sIGNsZWFyRE9NVHJlZVNlbGVjdGlvbiA9IGZhbHNlOworCisg
ICAgaWYgKHN0YXJ0UmVtb3ZlZCB8fCBlbmRSZW1vdmVkKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
aGVuIGVuZHBvaW50cyBhcmUgcmVtb3ZlZCwgd2Ugc2hvdWxkIGp1c3QgYWx0ZXIgdGhlIHNlbGVj
dGlvbiwgaW5zdGVhZCBvZiBibG93aW5nIGl0IGF3YXkuCisgICAgICAgIGNsZWFyUmVuZGVyVHJl
ZVNlbGVjdGlvbiA9IHRydWU7CisgICAgICAgIGNsZWFyRE9NVHJlZVNlbGVjdGlvbiA9IHRydWU7
CisgICAgfSBlbHNlIGlmIChiYXNlUmVtb3ZlZCB8fCBleHRlbnRSZW1vdmVkKSB7CisgICAgICAg
IC8vIFRoZSBiYXNlIGFuZC9vciBleHRlbnQgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQsIGJ1dCB0
aGUgc3RhcnQgYW5kIGVuZCBhcmVuJ3QuCisgICAgICAgIC8vIENoYW5nZSB0aGUgYmFzZSBhbmQg
ZXh0ZW50IHRvIHRoZSBzdGFydCBhbmQgZW5kLCBidXQgZG9uJ3QgcmUtdmFsaWRhdGUgdGhlCisg
ICAgICAgIC8vIHNlbGVjdGlvbiwgc2luY2UgZG9pbmcgc28gY291bGQgbW92ZSB0aGUgc3RhcnQg
YW5kIGVuZCBpbnRvIHRoZSBub2RlCisgICAgICAgIC8vIHRoYXQgaXMgYWJvdXQgdG8gYmUgcmVt
b3ZlZC4KKyAgICAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkpCisgICAgICAgICAg
ICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBt
X3NlbGVjdGlvbi5lbmQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc2VsZWN0aW9u
LnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFy
dCgpKTsKKyAgICB9IGVsc2UgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5m
aXJzdFJhbmdlKCkpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJh
bmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5v
ZGUsIGVjKTsKKyAgICAgICAgaWYgKCFlYyAmJiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9E
RV9CRUZPUkVfQU5EX0FGVEVSIHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
KSkgeworICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5v
ZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0IAorICAgICAgICAg
ICAgLy8gb2NjdXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMg
dGhhdCBjaGFuZ2UgYXMgYSByZXN1bHQgb2YgCisgICAgICAgICAgICAvLyB0aGUgcmVtb3ZhbCB3
b3VsZG4ndCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBkbyBz
byBtdWNoIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNsZWFyUmVuZGVy
VHJlZVNlbGVjdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2xlYXJS
ZW5kZXJUcmVlU2VsZWN0aW9uKSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSBtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAg
ZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICAgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSB0b1JlbmRlclZpZXcoZG9jdW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAg
dmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICB9CisKKyAgICBpZiAoY2xlYXJET01UcmVlU2Vs
ZWN0aW9uKQorICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpLCAwKTsKK30K
KworZW51bSBFbmRQb2ludFR5cGUgeyBFbmRQb2ludElzU3RhcnQsIEVuZFBvaW50SXNFbmQgfTsK
Kworc3RhdGljIGJvb2wgc2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRlckFkb3B0aW5nVGV4dFJlcGxh
Y2VtZW50KFBvc2l0aW9uJiBwb3NpdGlvbiwgRW5kUG9pbnRUeXBlIHR5cGUsIENoYXJhY3RlckRh
dGEqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpCit7CisgICAgaWYgKCFwb3NpdGlvbi5hbmNob3JOb2RlKCkgfHwgcG9zaXRpb24u
YW5jaG9yTm9kZSgpICE9IG5vZGUgfHwgcG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEFTU0VSVChwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSAwKTsKKyAgICB1bnNp
Z25lZCBwb3NpdGlvbk9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgaWYgKHBvc2l0aW9uT2Zmc2V0ID4gb2Zmc2V0ICYm
IHBvc2l0aW9uT2Zmc2V0IDwgb2Zmc2V0ICsgb2xkTGVuZ3RoKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIEFkanVzdCB0aGUgb2Zmc2V0IGlmIHRoZSBwb3NpdGlvbiBpcyBhZnRlciBv
ciBhdCB0aGUgZW5kIG9mIHRoZSBkZWxldGVkIGNvbnRlbnRzIChwb3NpdGlvbk9mZnNldCA+PSBv
ZmZzZXQgKyBvbGRMZW5ndGgpCisgICAgLy8gdG8gYXZvaWQgaGF2aW5nIGEgc3RhbGUgb2Zmc2V0
IGV4Y2VwdCB3aGVuIHRoZSBwb3NpdGlvbiBpcyB0aGUgZW5kIG9mIHNlbGVjdGlvbiBhbmQgbm90
aGluZyBpcyBkZWxldGVkLCBpbiB3aGljaCBjYXNlLAorICAgIC8vIGFkanVzdGluZyBvZmZzZXQg
cmVzdWx0cyBpbiBpbmNvcnJlY3RseSBleHRlbmRpbmcgdGhlIHNlbGVjdGlvbiB1bnRpbCB0aGUg
ZW5kIG9mIG5ld2x5IGluc2VydGVkIGNvbnRlbnRzLgorICAgIGlmICgocG9zaXRpb25PZmZzZXQg
PiBvZmZzZXQgKyBvbGRMZW5ndGgpIHx8IChwb3NpdGlvbk9mZnNldCA9PSBvZmZzZXQgKyBvbGRM
ZW5ndGggJiYgKHR5cGUgPT0gRW5kUG9pbnRJc1N0YXJ0IHx8IG9sZExlbmd0aCkpKQorICAgICAg
ICBwb3NpdGlvbi5tb3ZlVG9PZmZzZXQocG9zaXRpb25PZmZzZXQgLSBvbGRMZW5ndGggKyBuZXdM
ZW5ndGgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OnRleHRXaWxsQmVSZXBsYWNlZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRo
ZSBmcmFnbWVudCBjaGVjayBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gU2VlIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzMwMDYyLgorICAgIGlmIChpc05vbmUoKSB8fCAh
bm9kZSB8fCBoaWdoZXN0QW5jZXN0b3Iobm9kZSktPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1F
TlRfRlJBR01FTlRfTk9ERSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gYmFzZSA9
IG1fc2VsZWN0aW9uLmJhc2UoKTsKKyAgICBQb3NpdGlvbiBleHRlbnQgPSBtX3NlbGVjdGlvbi5l
eHRlbnQoKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAg
UG9zaXRpb24gZW5kID0gbV9zZWxlY3Rpb24uZW5kKCk7CisgICAgYm9vbCBzaG91bGRSZW1vdmVC
YXNlID0gc2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRlckFkb3B0aW5nVGV4dFJlcGxhY2VtZW50KGJh
c2UsIG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBFbmRQb2ludElzU3RhcnQgOiBFbmRQb2lu
dElzRW5kLCBub2RlLCBvZmZzZXQsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKKyAgICBib29sIHNo
b3VsZFJlbW92ZUV4dGVudCA9IHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRS
ZXBsYWNlbWVudChleHRlbnQsIG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBFbmRQb2ludElz
RW5kIDogRW5kUG9pbnRJc1N0YXJ0LCBub2RlLCBvZmZzZXQsIG9sZExlbmd0aCwgbmV3TGVuZ3Ro
KTsKKyAgICBib29sIHNob3VsZFJlbW92ZVN0YXJ0ID0gc2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRl
ckFkb3B0aW5nVGV4dFJlcGxhY2VtZW50KHN0YXJ0LCBFbmRQb2ludElzU3RhcnQsIG5vZGUsIG9m
ZnNldCwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOworICAgIGJvb2wgc2hvdWxkUmVtb3ZlRW5kID0g
c2hvdWxkUmVtb3ZlUG9zaXRpb25BZnRlckFkb3B0aW5nVGV4dFJlcGxhY2VtZW50KGVuZCwgRW5k
UG9pbnRJc0VuZCwgbm9kZSwgb2Zmc2V0LCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7CisKKyAgICBp
ZiAoKGJhc2UgIT0gbV9zZWxlY3Rpb24uYmFzZSgpIHx8IGV4dGVudCAhPSBtX3NlbGVjdGlvbi5l
eHRlbnQoKSB8fCBzdGFydCAhPSBtX3NlbGVjdGlvbi5zdGFydCgpIHx8IGVuZCAhPSBtX3NlbGVj
dGlvbi5lbmQoKSkKKyAgICAgICAgJiYgIXNob3VsZFJlbW92ZVN0YXJ0ICYmICFzaG91bGRSZW1v
dmVFbmQpIHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CisgICAgICAg
IGlmICghc2hvdWxkUmVtb3ZlQmFzZSAmJiAhc2hvdWxkUmVtb3ZlRXh0ZW50KQorICAgICAgICAg
ICAgbmV3U2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKGJhc2UsIGV4dGVudCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQor
ICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24uc2V0
V2l0aG91dFZhbGlkYXRpb24oZW5kLCBzdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgICAgIHNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24sIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzcG9uZFRvTm9k
ZU1vZGlmaWNhdGlvbihub2RlLCBzaG91bGRSZW1vdmVCYXNlLCBzaG91bGRSZW1vdmVFeHRlbnQs
IHNob3VsZFJlbW92ZVN0YXJ0LCBzaG91bGRSZW1vdmVFbmQpOworfQorCit2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnNldElzRGlyZWN0aW9uYWwoYm9vbCBpc0RpcmVjdGlvbmFsKQoreworICAg
IG1faXNEaXJlY3Rpb25hbCA9ICFtX2ZyYW1lIHx8IG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlv
cigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNEaXJlY3Rpb25hbCgpIHx8IGlzRGlyZWN0aW9u
YWw7Cit9CisKK1RleHREaXJlY3Rpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OndpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQoreworICAgIGlmIChhbHRlciAhPSBBbHRlcmF0aW9uRXh0ZW5kKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBzdGFydCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCk7
CisgICAgUG9zaXRpb24gZW5kID0gbV9zZWxlY3Rpb24uZW5kKCk7CisKKyAgICBib29sIGJhc2VJ
c1N0YXJ0ID0gdHJ1ZTsKKworICAgIGlmIChtX2lzRGlyZWN0aW9uYWwpIHsKKyAgICAgICAgLy8g
TWFrZSBiYXNlIGFuZCBleHRlbnQgbWF0Y2ggc3RhcnQgYW5kIGVuZCBzbyB3ZSBleHRlbmQgdGhl
IHVzZXItdmlzaWJsZSBzZWxlY3Rpb24uCisgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJzIGZv
ciBjYXNlcyB3aGVyZSBiYXNlIGFuZCBleHRlbmQgcG9pbnQgdG8gZGlmZmVyZW50IHBvc2l0aW9u
cyB0aGFuCisgICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgKGUuZy4gYWZ0ZXIgYSBkb3VibGUtY2xp
Y2sgdG8gc2VsZWN0IGEgd29yZCkuCisgICAgICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJz
dCgpKQorICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBiYXNlSXNTdGFydCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IExUUikKKyAgICAgICAgICAgICAg
ICBiYXNlSXNTdGFydCA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YmFzZUlzU3RhcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERp
cmVjdGlvbkZvcndhcmQ6CisgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaXJlY3Rpb25MZWZ0OgorICAgICAgICAgICAgaWYg
KGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBMVFIpCisgICAgICAgICAgICAgICAgYmFz
ZUlzU3RhcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNl
SXNTdGFydCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaXJlY3Rp
b25CYWNrd2FyZDoKKyAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYmFzZUlzU3RhcnQpIHsKKyAgICAg
ICAgbV9zZWxlY3Rpb24uc2V0QmFzZShzdGFydCk7CisgICAgICAgIG1fc2VsZWN0aW9uLnNldEV4
dGVudChlbmQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fc2VsZWN0aW9uLnNldEJhc2UoZW5k
KTsKKyAgICAgICAgbV9zZWxlY3Rpb24uc2V0RXh0ZW50KHN0YXJ0KTsKKyAgICB9Cit9CisKK1Zp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJv
b2wgaXNHZXRTdGFydCkgY29uc3QKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1l
ID8gbV9mcmFtZS0+c2V0dGluZ3MoKSA6IDA7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdz
LT5lZGl0aW5nQmVoYXZpb3JUeXBlKCkgPT0gRWRpdGluZ01hY0JlaGF2aW9yKQorICAgICAgICBy
ZXR1cm4gaXNHZXRTdGFydCA/IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogbV9zZWxlY3Rp
b24udmlzaWJsZUVuZCgpOworICAgIC8vIExpbnV4IGFuZCBXaW5kb3dzIGFsd2F5cyBleHRlbmQg
c2VsZWN0aW9ucyBmcm9tIHRoZSBleHRlbnQgZW5kcG9pbnQuCisgICAgLy8gRklYTUU6IFZpc2li
bGVTZWxlY3Rpb24gc2hvdWxkIGJlIGZpeGVkIHRvIGVuc3VyZSBhcyBhbiBpbnZhcmlhbnQgdGhh
dAorICAgIC8vIGJhc2UvZXh0ZW50IGFsd2F5cyBwb2ludCB0byB0aGUgc2FtZSBub2RlcyBhcyBz
dGFydC9lbmQsIGJ1dCB3aGljaCBwb2ludHMKKyAgICAvLyB0byB3aGljaCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSBvZiBpc0Jhc2VGaXJzdC4gVGhlbiB0aGlzIGNhbiBiZSBjaGFuZ2VkCisgICAgLy8g
dG8ganVzdCByZXR1cm4gbV9zZWwuZXh0ZW50KCkuCisgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
QmFzZUZpcnN0KCkgPyBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBtX3NlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnN0
YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBwb3NpdGlvbkZvclBsYXRmb3Jt
KHRydWUpOworfQorCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZW5kRm9y
UGxhdGZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBwb3NpdGlvbkZvclBsYXRmb3JtKGZhbHNl
KTsKK30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVu
ZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBWaXNpYmxlUG9z
aXRpb24gcG9zKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsK
KworICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQgYW5k
IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgaXM6CisgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nRm9yd2Fy
ZCBhbHdheXMgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseS4KKyAgICAvLyBtb2RpZnlFeHRlbmRp
bmdSaWdodCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgZXhjZXB0
IGZvciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCisgICAgLy8gaXQgZXh0ZW5kcyBmb3J3
YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIExUUiBkaXJlY3Rpb24sCisg
ICAgLy8gYnV0IGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgUlRMIGRpcmVjdGlvbi4KKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAg
Y2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSA9PSBMVFIpCisgICAgICAgICAgICBwb3MgPSBwb3MubmV4dChDYW5ub3RDcm9z
c0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IHBvcy5w
cmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV29yZEdyYW51bGFyaXR5OgorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jaygpID09IExUUikKKyAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24ocG9zKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9z
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgIGlmIChk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQorICAgICAgICAgICAgcG9zID0gbW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51
bGFyaXR5OgorICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5j
ZUJvdW5kYXJ5OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVu
dEJvdW5kYXJ5OgorICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmU/
CisgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsZWN0aW9uLmV4
dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7CisgICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gcG9zLm5l
eHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbmV4dFdvcmRQb3NpdGlvbihwb3MpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHBv
cyA9IG5leHRTZW50ZW5jZVBvc2l0aW9uKHBvcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TGluZUdyYW51bGFyaXR5OgorICAgICAgICBwb3MgPSBuZXh0TGluZVBvc2l0aW9uKHBvcywgeFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgorICAgICAgICBwb3MgPSBuZXh0UGFyYWdyYXBo
UG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhURU5UKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgcG9zID0g
ZW5kT2ZTZW50ZW5jZShlbmRGb3JQbGF0Zm9ybSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBMaW5lQm91bmRhcnk6CisgICAgICAgIHBvcyA9IGxvZ2ljYWxFbmRPZkxpbmUoZW5kRm9yUGxh
dGZvcm0oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6Cisg
ICAgICAgIHBvcyA9IGVuZE9mUGFyYWdyYXBoKGVuZEZvclBsYXRmb3JtKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CisgICAgICAgIHBvcyA9IGVuZEZvclBs
YXRmb3JtKCk7CisgICAgICAgIGlmIChpc0VkaXRhYmxlUG9zaXRpb24ocG9zLmRlZXBFcXVpdmFs
ZW50KCkpKQorICAgICAgICAgICAgcG9zID0gZW5kT2ZFZGl0YWJsZUNvbnRlbnQocG9zKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlv
biBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKKyAgICBzd2l0Y2ggKGdy
YW51bGFyaXR5KSB7CisgICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgaWYg
KGlzUmFuZ2UoKSkgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KSA9PSBMVFIpCisgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwg
bV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9z
ID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZp
bml0eSgpKS5yaWdodCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXb3JkR3JhbnVs
YXJpdHk6CisgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51
bGFyaXR5OgorICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5j
ZUJvdW5kYXJ5OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVu
dEJvdW5kYXJ5OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmUu
CisgICAgICAgIHBvcyA9IG1vZGlmeU1vdmluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExpbmVCb3VuZGFyeToKKyAgICAgICAgcG9zID0gcmlnaHRCb3Vu
ZGFyeU9mTGluZShzdGFydEZvclBsYXRmb3JtKCksIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OgorICAgICAgICBwb3MgPSByaWdodFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxl
Y3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25D
b250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIC8vIEZJWE1FOiBTdGF5IGluIGVk
aXRhYmxlIGNvbnRlbnQgZm9yIHRoZSBsZXNzIGNvbW1vbiBncmFudWxhcml0aWVzLgorICAgIHN3
aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgorICAg
ICAgICBpZiAoaXNSYW5nZSgpKQorICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1f
c2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKS5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9
IG5leHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBt
X3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2VudGVu
Y2VHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbmV4dFNlbnRlbmNlUG9zaXRpb24oVmlzaWJs
ZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUdyYW51bGFyaXR5OiB7CisgICAgICAgIC8v
IGRvd24tYXJyb3dpbmcgZnJvbSBhIHJhbmdlIHNlbGVjdGlvbiB0aGF0IGVuZHMgYXQgdGhlIHN0
YXJ0IG9mIGEgbGluZSBuZWVkcworICAgICAgICAvLyB0byBsZWF2ZSB0aGUgc2VsZWN0aW9uIGF0
IHRoYXQgbGluZSBzdGFydCAobm8gbmVlZCB0byBjYWxsIG5leHRMaW5lUG9zaXRpb24hKQorICAg
ICAgICBwb3MgPSBlbmRGb3JQbGF0Zm9ybSgpOworICAgICAgICBpZiAoIWlzUmFuZ2UoKSB8fCAh
aXNTdGFydE9mTGluZShwb3MpKQorICAgICAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihw
b3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihTVEFSVCkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0g
bmV4dFBhcmFncmFwaFBvc2l0aW9uKGVuZEZvclBsYXRmb3JtKCksIHhQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbihTVEFSVCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbnRlbmNl
Qm91bmRhcnk6CisgICAgICAgIHBvcyA9IGVuZE9mU2VudGVuY2UoZW5kRm9yUGxhdGZvcm0oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUJvdW5kYXJ5OgorICAgICAgICBwb3MgPSBs
b2dpY2FsRW5kT2ZMaW5lKGVuZEZvclBsYXRmb3JtKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBhcmFncmFwaEJvdW5kYXJ5OgorICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChlbmRG
b3JQbGF0Zm9ybSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5
OgorICAgICAgICBwb3MgPSBlbmRGb3JQbGF0Zm9ybSgpOworICAgICAgICBpZiAoaXNFZGl0YWJs
ZVBvc2l0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpKSkKKyAgICAgICAgICAgIHBvcyA9IGVuZE9m
RWRpdGFibGVDb250ZW50KHBvcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IGVu
ZE9mRG9jdW1lbnQocG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRWaXN1YWxX
b3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcG9zOwor
fQorCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5n
TGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHBvcyhtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisKKyAg
ICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1vZGlmeUV4dGVuZGluZ0xlZnQgYW5kIG1vZGlm
eUV4dGVuZGluZ0JhY2t3YXJkIGlzOgorICAgIC8vIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGFs
d2F5cyBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseS4KKyAgICAvLyBtb2RpZnlFeHRlbmRpbmdM
ZWZ0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQgZXhjZXB0IGZv
ciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCisgICAgLy8gaXQgZXh0ZW5kcyBiYWNrd2Fy
ZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBMVFIgZGlyZWN0aW9uLAorICAg
IC8vIGJ1dCBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxv
Y2sgaXMgUlRMIGRpcmVjdGlvbi4KKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgY2Fz
ZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBMVFIpCisgICAgICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoQ2Fubm90Q3Jv
c3NFZGl0aW5nQm91bmRhcnkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3MgPSBwb3Mu
bmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV29yZEdyYW51bGFyaXR5OgorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
aygpID09IExUUikKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvcyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24ocG9zKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQorICAgICAgICAgICAgcG9zID0gbW9kaWZ5
RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVsYXJpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51bGFy
aXR5OgorICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5jZUJv
dW5kYXJ5OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVudEJv
dW5kYXJ5OgorICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KKyAgICAgICAKK1Zp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdCYWNrd2Fy
ZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBv
cyhtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisKKyAgICAv
LyBFeHRlbmRpbmcgYSBzZWxlY3Rpb24gYmFja3dhcmQgYnkgd29yZCBvciBjaGFyYWN0ZXIgZnJv
bSBqdXN0IGFmdGVyIGEgdGFibGUgc2VsZWN0cworICAgIC8vIHRoZSB0YWJsZS4gIFRoaXMgIm1h
a2VzIHNlbnNlIiBmcm9tIHRoZSB1c2VyIHBlcnNwZWN0aXZlLCBlc3AuIHdoZW4gZGVsZXRpbmcu
CisgICAgLy8gSXQgd2FzIGRvbmUgaGVyZSBpbnN0ZWFkIG9mIGluIFZpc2libGVQb3NpdGlvbiBi
ZWNhdXNlIHdlIHdhbnQgVlBzIHRvIGl0ZXJhdGUKKyAgICAvLyBvdmVyIGV2ZXJ5dGhpbmcuCisg
ICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6
CisgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgorICAgICAgICBwb3Mg
PSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNl
bnRlbmNlR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzU2VudGVuY2VQb3NpdGlv
bihwb3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVHcmFudWxhcml0eToKKyAgICAg
ICAgcG9zID0gcHJldmlvdXNMaW5lUG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oRVhURU5UKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFyYWdyYXBoR3Jh
bnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24ocG9zLCB4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhURU5UKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgcG9zID0gc3RhcnRPZlNlbnRlbmNl
KHN0YXJ0Rm9yUGxhdGZvcm0oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUJvdW5k
YXJ5OgorICAgICAgICBwb3MgPSBsb2dpY2FsU3RhcnRPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKKyAgICAgICAg
cG9zID0gc3RhcnRPZlBhcmFncmFwaChzdGFydEZvclBsYXRmb3JtKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CisgICAgICAgIHBvcyA9IHN0YXJ0Rm9yUGxh
dGZvcm0oKTsKKyAgICAgICAgaWYgKGlzRWRpdGFibGVQb3NpdGlvbihwb3MuZGVlcEVxdWl2YWxl
bnQoKSkpCisgICAgICAgICAgICBwb3MgPSBzdGFydE9mRWRpdGFibGVDb250ZW50KHBvcyk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVudChwb3MpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIHN3aXRjaCAoZ3JhbnVs
YXJpdHkpIHsKKyAgICBjYXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgorICAgICAgICBpZiAoaXNS
YW5nZSgpKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBM
VFIpCisgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0
YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxl
Y3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSku
bGVmdCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6Cisg
ICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgorICAgIGNhc2UgTGluZUdyYW51bGFyaXR5Ogor
ICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CisgICAgY2FzZSBTZW50ZW5jZUJvdW5kYXJ5
OgorICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CisgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5
OgorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmUuCisgICAgICAg
IHBvcyA9IG1vZGlmeU1vdmluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBMaW5lQm91bmRhcnk6CisgICAgICAgIHBvcyA9IGxlZnRCb3VuZGFyeU9mTGlu
ZShzdGFydEZvclBsYXRmb3JtKCksIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAg
ICBwb3MgPSBsZWZ0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRl
bnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHBvczsKK30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBj
YXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgorICAgICAgICBpZiAoaXNSYW5nZSgpKQorICAgICAg
ICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0
aW9uLmFmZmluaXR5KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3MgPSBWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLnBy
ZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5p
dHkoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6Cisg
ICAgICAgIHBvcyA9IHByZXZpb3VzU2VudGVuY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9z
ZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMaW5lR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzTGlu
ZVBvc2l0aW9uKHN0YXJ0Rm9yUGxhdGZvcm0oKSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKFNUQVJUKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJp
dHk6CisgICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24oc3RhcnRGb3JQbGF0
Zm9ybSgpLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oU1RBUlQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTZW50ZW5jZUJvdW5kYXJ5OgorICAgICAgICBwb3MgPSBzdGFydE9m
U2VudGVuY2Uoc3RhcnRGb3JQbGF0Zm9ybSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBM
aW5lQm91bmRhcnk6CisgICAgICAgIHBvcyA9IGxvZ2ljYWxTdGFydE9mTGluZShzdGFydEZvclBs
YXRmb3JtKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5Ogor
ICAgICAgICBwb3MgPSBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0Rm9yUGxhdGZvcm0oKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRG9jdW1lbnRCb3VuZGFyeToKKyAgICAgICAgcG9zID0gc3Rh
cnRGb3JQbGF0Zm9ybSgpOworICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9uKHBvcy5kZWVw
RXF1aXZhbGVudCgpKSkKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQo
cG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KHBv
cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KKworc3RhdGljIGJv
b2wgaXNCb3VuZGFyeShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgcmV0dXJu
IGdyYW51bGFyaXR5ID09IExpbmVCb3VuZGFyeSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhC
b3VuZGFyeSB8fCBncmFudWxhcml0eSA9PSBEb2N1bWVudEJvdW5kYXJ5OworfSAgICAKKworYm9v
bCBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQoreworICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CisgICAgICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyOworICAgICAgICB0cmlhbFNl
bGVjdGlvbkNvbnRyb2xsZXIuc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKTsKKyAgICAgICAgdHJp
YWxTZWxlY3Rpb25Db250cm9sbGVyLnNldElzRGlyZWN0aW9uYWwobV9pc0RpcmVjdGlvbmFsKTsK
KyAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLm1vZGlmeShhbHRlciwgZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgZmFsc2UpOworCisgICAgICAgIGJvb2wgY2hhbmdlID0gc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZWxlY3Rpb24oKSk7CisgICAg
ICAgIGlmICghY2hhbmdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHdpbGxCZU1vZGlmaWVkKGFsdGVyLCBkaXJlY3Rpb24pOworCisgICAgYm9vbCB3YXNSYW5nZSA9
IG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsKKyAgICBQb3NpdGlvbiBvcmlnaW5hbFN0YXJ0UG9zaXRp
b24gPSBtX3NlbGVjdGlvbi5zdGFydCgpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsK
KyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6CisgICAg
ICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0g
bW9kaWZ5TW92aW5nUmlnaHQoZ3JhbnVsYXJpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwb3NpdGlvbiA9IG1vZGlmeUV4dGVuZGluZ1JpZ2h0KGdyYW51bGFyaXR5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBEaXJlY3Rpb25Gb3J3YXJkOgorICAgICAgICBpZiAoYWx0ZXIgPT0g
QWx0ZXJhdGlvbkV4dGVuZCkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5n
Rm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvc2l0aW9u
ID0gbW9kaWZ5TW92aW5nRm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgaWYgKGFsdGVyID09IEFsdGVyYXRpb25Nb3Zl
KQorICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdMZWZ0KGdyYW51bGFyaXR5KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdMZWZ0
KGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXJlY3Rpb25CYWNrd2Fy
ZDoKKyAgICAgICAgaWYgKGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpCisgICAgICAgICAgICBw
b3NpdGlvbiA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdCYWNrd2FyZChncmFudWxh
cml0eSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChwb3NpdGlvbi5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKG1fZnJhbWUpKQorICAgICAgICBpZiAoIXdhc1JhbmdlICYmIGFsdGVyID09IEFsdGVy
YXRpb25Nb3ZlICYmIHBvc2l0aW9uID09IG9yaWdpbmFsU3RhcnRQb3NpdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNvbWUgb2YgdGhlIGFib3ZlIG9wZXJhdGlvbnMg
c2V0IGFuIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbi4KKyAgICAvLyBTZXR0aW5nIGEg
c2VsZWN0aW9uIHdpbGwgY2xlYXIgaXQsIHNvIHNhdmUgaXQgdG8gcG9zc2libHkgcmVzdG9yZSBs
YXRlci4KKyAgICAvLyBOb3RlOiB0aGUgU1RBUlQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJhcnkg
YmVjYXVzZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCisgICAgLy8gdGhlIHJlcXVlc3RlZCBw
b3NpdGlvbiB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uIHNldC4KKyAgICBpbnQgeCA9IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihTVEFS
VCk7CisKKyAgICBzd2l0Y2ggKGFsdGVyKSB7CisgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKKyAg
ICAgICAgbW92ZVRvKHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgorICAgICAgICAvLyBTdGFuZGFyZCBNYWMgYmVoYXZp
b3Igd2hlbiBleHRlbmRpbmcgdG8gYSBib3VuZGFyeSBpcyBncm93IHRoZSBzZWxlY3Rpb24gcmF0
aGVyIHRoYW4gbGVhdmluZyB0aGUKKyAgICAgICAgLy8gYmFzZSBpbiBwbGFjZSBhbmQgbW92aW5n
IHRoZSBleHRlbnQuIE1hdGNoZXMgTlNUZXh0Vmlldy4KKyAgICAgICAgaWYgKCFtX2ZyYW1lIHx8
ICFtX2ZyYW1lLT5lZGl0b3IoKS0+YmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9u
V2hlbkV4dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlz
Qm91bmRhcnkoZ3JhbnVsYXJpdHkpKQorICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1
c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9u
IHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uID09IERpcmVjdGlvbkZvcndhcmQgfHwgKHRleHREaXJlY3Rpb24gPT0g
TFRSICYmIGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25SaWdodCkgfHwgKHRleHREaXJlY3Rpb24gPT0g
UlRMICYmIGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25MZWZ0KSkKKyAgICAgICAgICAgICAgICBzZXRF
bmQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHNldFN0YXJ0KHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGdyYW51bGFyaXR5ID09IExpbmVHcmFu
dWxhcml0eSB8fCBncmFudWxhcml0eSA9PSBQYXJhZ3JhcGhHcmFudWxhcml0eSkKKyAgICAgICAg
bV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSB4OworCisgICAgaWYgKHVzZXJUcmln
Z2VyZWQpCisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKwor
CisgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKworICAgIHNldElzRGlyZWN0aW9uYWwo
YWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
RklYTUU6IE1heWJlIGJhc2VsaW5lIHdvdWxkIGJlIGJldHRlcj8KK3N0YXRpYyBib29sIGFic29s
dXRlQ2FyZXRZKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgaW50ICZ5KQoreworICAgIEludFJl
Y3QgcmVjdCA9IGMuYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAgIGlmIChyZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgLyAyOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgaW50IHZlcnRpY2FsRGlzdGFuY2UsIGJvb2wgdXNl
clRyaWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbikKK3sKKyAgICBpZiAoIXZlcnRp
Y2FsRGlzdGFuY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh1c2VyVHJpZ2dl
cmVkKSB7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgdHJpYWxTZWxlY3Rpb25Db250cm9s
bGVyOworICAgICAgICB0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIuc2V0U2VsZWN0aW9uKG1fc2Vs
ZWN0aW9uKTsKKyAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNldElzRGlyZWN0aW9u
YWwobV9pc0RpcmVjdGlvbmFsKTsKKyAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLm1v
ZGlmeShhbHRlciwgdmVydGljYWxEaXN0YW5jZSwgZmFsc2UpOworCisgICAgICAgIGJvb2wgY2hh
bmdlID0gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZWxl
Y3Rpb24oKSk7CisgICAgICAgIGlmICghY2hhbmdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgdXAgPSB2ZXJ0aWNhbERpc3RhbmNlIDwgMDsKKyAgICBpZiAo
dXApCisgICAgICAgIHZlcnRpY2FsRGlzdGFuY2UgPSAtdmVydGljYWxEaXN0YW5jZTsKKworICAg
IHdpbGxCZU1vZGlmaWVkKGFsdGVyLCB1cCA/IERpcmVjdGlvbkJhY2t3YXJkIDogRGlyZWN0aW9u
Rm9yd2FyZCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIGludCB4UG9zID0gMDsK
KyAgICBzd2l0Y2ggKGFsdGVyKSB7CisgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKKyAgICAgICAg
cG9zID0gVmlzaWJsZVBvc2l0aW9uKHVwID8gbV9zZWxlY3Rpb24uc3RhcnQoKSA6IG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICAgICAgeFBvcyA9IHhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih1cCA/IFNUQVJUIDogRU5EKTsKKyAgICAgICAgbV9z
ZWxlY3Rpb24uc2V0QWZmaW5pdHkodXAgPyBVUFNUUkVBTSA6IERPV05TVFJFQU0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFsdGVyYXRpb25FeHRlbmQ6CisgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7
CisgICAgICAgIHhQb3MgPSB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVhURU5UKTsK
KyAgICAgICAgbV9zZWxlY3Rpb24uc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGludCBzdGFydFk7CisgICAgaWYgKCFhYnNvbHV0ZUNhcmV0WShw
b3MsIHN0YXJ0WSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodXApCisgICAgICAg
IHN0YXJ0WSA9IC1zdGFydFk7CisgICAgaW50IGxhc3RZID0gc3RhcnRZOworCisgICAgVmlzaWJs
ZVBvc2l0aW9uIHJlc3VsdDsKKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dDsKKyAgICBmb3IgKFZp
c2libGVQb3NpdGlvbiBwID0gcG9zOyA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSAodXAg
PyBwcmV2aW91c0xpbmVQb3NpdGlvbiA6IG5leHRMaW5lUG9zaXRpb24pKHAsIHhQb3MpOworICAg
ICAgICBpZiAobmV4dC5pc051bGwoKSB8fCBuZXh0ID09IHApCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaW50IG5leHRZOworICAgICAgICBpZiAoIWFic29sdXRlQ2FyZXRZKG5leHQsIG5l
eHRZKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodXApCisgICAgICAgICAgICBu
ZXh0WSA9IC1uZXh0WTsKKyAgICAgICAgaWYgKG5leHRZIC0gc3RhcnRZID4gdmVydGljYWxEaXN0
YW5jZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobmV4dFkgPj0gbGFzdFkpIHsK
KyAgICAgICAgICAgIGxhc3RZID0gbmV4dFk7CisgICAgICAgICAgICByZXN1bHQgPSBuZXh0Owor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChhbHRlcikgeworICAgIGNhc2UgQWx0ZXJhdGlvbk1v
dmU6CisgICAgICAgIG1vdmVUbyhyZXN1bHQsIHVzZXJUcmlnZ2VyZWQsIGFsaWduKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgorICAgICAgICBzZXRFeHRlbnQo
cmVzdWx0LCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KHVzZXJUcmlnZ2VyZWQpCisgICAgICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxh
cml0eTsKKworICAgIHNldElzRGlyZWN0aW9uYWwoYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5cGUpCit7CisgICAgaW50
IHggPSAwOworCisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm4geDsKKworICAgIFBv
c2l0aW9uIHBvczsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFNUQVJUOgorICAgICAg
ICBwb3MgPSBtX3NlbGVjdGlvbi5zdGFydCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVO
RDoKKyAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uZW5kKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQkFTRToKKyAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uYmFzZSgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVYVEVOVDoKKyAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uZXh0ZW50
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IHBvcy5hbmNo
b3JOb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIHg7CisgICAgICAgIAorICAgIGlmIChtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbiA9PSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikgeworICAgICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKHBvcywgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7
CisgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBjcmVhdGlvbiBjYW4gZmFpbCBoZXJlIGlmIGEg
bm9kZSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYmVjb21lcyB2aXNpYmlsaXR5OmhpZGRlbgor
ICAgICAgICAvLyBhZnRlciB0aGUgc2VsZWN0aW9uIGlzIGNyZWF0ZWQgYW5kIGJlZm9yZSB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAgICAgeCA9IHZpc2libGVQb3NpdGlvbi5pc05vdE51
bGwoKSA/IHZpc2libGVQb3NpdGlvbi54T2Zmc2V0Rm9yVmVydGljYWxOYXZpZ2F0aW9uKCkgOiAw
OworICAgICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IHg7CisgICAgfSBl
bHNlCisgICAgICAgIHggPSBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKKyAgICAg
ICAgCisgICAgcmV0dXJuIHg7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIo
KQoreworICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKyAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dl
cmVkKQoreworICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQorICAgICAgICBzZXRC
YXNlKHBvcywgdXNlclRyaWdnZXJlZCk7CisgICAgZWxzZQorICAgICAgICBzZXRFeHRlbnQocG9z
LCB1c2VyVHJpZ2dlcmVkKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFbmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBp
ZiAobV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSkKKyAgICAgICAgc2V0RXh0ZW50KHBvcywgdXNl
clRyaWdnZXJlZCk7CisgICAgZWxzZQorICAgICAgICBzZXRCYXNlKHBvcywgdXNlclRyaWdnZXJl
ZCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dlcmVkKQoreworICAgIFNldFNlbGVjdGlvbk9w
dGlvbnMgb3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKKyAgICBpZiAo
dXNlclRyaWdnZXJlZCkKKyAgICAgICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOworICAgIHNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpLCBtX3NlbGVj
dGlvbi5leHRlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKK30KKwordm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJv
b2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7CisgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCisg
ICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihtX3NlbGVjdGlvbi5iYXNlKCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3Mu
YWZmaW5pdHkoKSksIG9wdGlvbnMpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
dEJhc2UoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJU
cmlnZ2VyZWQpCit7CisgICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBp
bmcgfCBDbGVhclR5cGluZ1N0eWxlOworICAgIGlmICh1c2VyVHJpZ2dlcmVkKQorICAgICAgICBv
cHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24ocG9zLCBtX3NlbGVjdGlvbi5leHRlbnQoKSwgYWZmaW5pdHkpLCBvcHRpb25zKTsKK30KKwor
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCit7CisgICAgU2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOworICAg
IGlmICh1c2VyVHJpZ2dlcmVkKQorICAgICAgICBvcHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7Cisg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3Ms
IGFmZmluaXR5KSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0
Q2FyZXRSZWN0TmVlZHNVcGRhdGUoYm9vbCBmbGFnKQoreworICAgIG1fY2FyZXRSZWN0TmVlZHNV
cGRhdGUgPSBmbGFnOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUNhcmV0
UmVjdCgpCit7CisgICAgaWYgKGlzTm9uZSgpIHx8ICFtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hv
ck5vZGUoKS0+aW5Eb2N1bWVudCgpIHx8ICFtX3NlbGVjdGlvbi5lbmQoKS5hbmNob3JOb2RlKCkt
PmluRG9jdW1lbnQoKSkgeworICAgICAgICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgp
LT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgCisgICAgbV9jYXJldFJl
Y3QgPSBJbnRSZWN0KCk7CisgICAgICAgIAorICAgIGlmIChpc0NhcmV0KCkpIHsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZp
bml0eSgpKTsKKyAgICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgeworICAgICAgICAgICAgQVNT
RVJUKHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaXJzdCBjb21wdXRlIGEgcmVjdCBsb2NhbCB0
byB0aGUgcmVuZGVyZXIgYXQgdGhlIHNlbGVjdGlvbiBzdGFydAorICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlcjsKKyAgICAgICAgICAgIEludFJlY3QgbG9jYWxSZWN0ID0gcG9zLmxv
Y2FsQ2FyZXRSZWN0KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgLy8gR2V0IHRoZSByZW5kZXJl
ciB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAod2hpY2gK
KyAgICAgICAgICAgIC8vIGlzIGVpdGhlciB0aGUgcmVuZGVyZXIgd2UganVzdCBmb3VuZCwgb3Ig
b25lIG9mIGl0cyBjb250YWluZXJzKQorICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjYXJldFBh
aW50ZXIgPSBjYXJldFJlbmRlcmVyKCk7CisKKyAgICAgICAgICAgIC8vIENvbXB1dGUgYW4gb2Zm
c2V0IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZCB0aGUgY2FyZXRQYWludGVyCisgICAgICAgICAg
ICBib29sIHVucm9vdGVkID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAocmVuZGVyZXIgIT0g
Y2FyZXRQYWludGVyKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXJP
YmplY3QgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb250
YWluZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5yb290ZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbG9jYWxSZWN0Lm1vdmUocmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmVy
T2JqZWN0LCBsb2NhbFJlY3QubG9jYXRpb24oKSkpOworICAgICAgICAgICAgICAgIHJlbmRlcmVy
ID0gY29udGFpbmVyT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIXVucm9vdGVkKQorICAgICAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gbG9jYWxS
ZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IGZh
bHNlOworfQorCitSZW5kZXJPYmplY3QqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVy
ZXIoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gaWYgY2FyZXROb2RlIGlzIGEgYmxvY2sg
YW5kIGNhcmV0IGlzIGluc2lkZSBpdCB0aGVuIGNhcmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRo
YXQgYmxvY2sKKyAgICBib29sIHBhaW50ZWRCeUJsb2NrID0gcmVuZGVyZXItPmlzQmxvY2tGbG93
KCkgJiYgY2FyZXRSZW5kZXJzSW5zaWRlTm9kZShub2RlKTsKKyAgICByZXR1cm4gcGFpbnRlZEJ5
QmxvY2sgPyByZW5kZXJlciA6IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKK30KKworSW50
UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpsb2NhbENhcmV0UmVjdCgpCit7CisgICAgaWYgKG1f
Y2FyZXRSZWN0TmVlZHNVcGRhdGUpCisgICAgICAgIHVwZGF0ZUNhcmV0UmVjdCgpOworICAgIAor
ICAgIHJldHVybiBtX2NhcmV0UmVjdDsKK30KKworSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVy
OjphYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAor
eworICAgIFJlbmRlck9iamVjdCogY2FyZXRQYWludGVyID0gY2FyZXRSZW5kZXJlcigpOworICAg
IGlmICghY2FyZXRQYWludGVyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIAorICAg
IEludFJlY3QgbG9jYWxSZWN0KHJlY3QpOworICAgIGlmIChjYXJldFBhaW50ZXItPmlzQm94KCkp
CisgICAgICAgIHRvUmVuZGVyQm94KGNhcmV0UGFpbnRlciktPmZsaXBGb3JXcml0aW5nTW9kZShs
b2NhbFJlY3QpOworICAgIHJldHVybiBjYXJldFBhaW50ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cit9CisKK0ludFJl
Y3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6YWJzb2x1dGVDYXJldEJvdW5kcygpCit7CisgICAgcmVj
b21wdXRlQ2FyZXRSZWN0KCk7CisgICAgcmV0dXJuIG1fYWJzQ2FyZXRCb3VuZHM7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IHJlcGFpbnRSZWN0Rm9yQ2FyZXQoSW50UmVjdCBjYXJldCkKK3sKKyAgICBp
ZiAoY2FyZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBkaXJ0eSByZWN0IGludGVyc2VjdHMgdGhlIGJsb2NrIHRoYXQgcGFpbnRz
IHRoZSBjYXJldCBldmVuIGluIHRoZSBjYXNlIHdoZXJlCisgICAgLy8gdGhlIGNhcmV0IGl0c2Vs
ZiBpcyBqdXN0IG91dHNpZGUgdGhlIGJsb2NrLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTA4Nj4uCisgICAgY2FyZXQuaW5mbGF0ZVgoMSk7CisgICAgcmV0
dXJuIGNhcmV0OworfQorCitJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVwYWlu
dFJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsUmVjdChy
ZXBhaW50UmVjdEZvckNhcmV0KGxvY2FsQ2FyZXRSZWN0Rm9yUGFpbnRpbmcoKSkpOworfQorCiti
b29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0UmVjdCgpCit7CisgICAgaWYg
KCFtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgRnJhbWVW
aWV3KiB2ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGlmICghdikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9jYXJldFJlY3Q7Cisg
ICAgSW50UmVjdCBuZXdSZWN0ID0gbG9jYWxDYXJldFJlY3QoKTsKKyAgICBpZiAob2xkUmVjdCA9
PSBuZXdSZWN0ICYmICFtX2Fic0NhcmV0Qm91bmRzRGlydHkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEludFJlY3Qgb2xkQWJzQ2FyZXRCb3VuZHMgPSBtX2Fic0NhcmV0Qm91bmRzOwor
ICAgIC8vIEZJWE1FOiBSZW5hbWUgbV9jYXJldFJlY3QgdG8gbV9sb2NhbENhcmV0UmVjdC4KKyAg
ICBtX2Fic0NhcmV0Qm91bmRzID0gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QobV9jYXJldFJl
Y3QpOworICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IGZhbHNlOworICAgIAorICAgIGlmIChv
bGRBYnNDYXJldEJvdW5kcyA9PSBtX2Fic0NhcmV0Qm91bmRzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgIEludFJlY3Qgb2xkQWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHMg
PSBtX2Fic29sdXRlQ2FyZXRSZXBhaW50Qm91bmRzOworICAgIC8vIFdlIGJlbGlldmUgdGhhdCB3
ZSBuZWVkIHRvIGluZmxhdGUgdGhlIGxvY2FsIHJlY3QgYmVmb3JlIHRyYW5zZm9ybWluZyBpdCB0
byBvYnRhaW4gdGhlIHJlcGFpbnQgYm91bmRzLgorICAgIG1fYWJzb2x1dGVDYXJldFJlcGFpbnRC
b3VuZHMgPSBjYXJldFJlcGFpbnRSZWN0KCk7CisKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkgICAg
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobV9mcmFtZS0+ZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgY2FyZXQgcmVwYWlu
dGluZyBjb250YWluZXItYXdhcmUuCisgICAgICAgIHZpZXctPnJlcGFpbnRSZWN0YW5nbGVJblZp
ZXdBbmRDb21wb3NpdGVkTGF5ZXJzKG9sZEFic29sdXRlQ2FyZXRSZXBhaW50Qm91bmRzLCBmYWxz
ZSk7CisgICAgICAgIGlmIChzaG91bGRSZXBhaW50Q2FyZXQodmlldykpCisgICAgICAgICAgICB2
aWV3LT5yZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhtX2Fic29sdXRl
Q2FyZXRSZXBhaW50Qm91bmRzLCBmYWxzZSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVwYWludENhcmV0KGNv
bnN0IFJlbmRlclZpZXcqIHZpZXcpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZpZXcpOworICAgIEZy
YW1lKiBmcmFtZSA9IHZpZXctPmZyYW1lVmlldygpID8gdmlldy0+ZnJhbWVWaWV3KCktPmZyYW1l
KCkgOiAwOyAvLyBUaGUgZnJhbWUgd2hlcmUgdGhlIHNlbGVjdGlvbiBzdGFydGVkLgorICAgIGJv
b2wgY2FyZXRCcm93c2luZyA9IGZyYW1lICYmIGZyYW1lLT5zZXR0aW5ncygpICYmIGZyYW1lLT5z
ZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIHJldHVybiAoY2FyZXRCcm93
c2luZyB8fCBpc0NvbnRlbnRFZGl0YWJsZSgpKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjppbnZhbGlkYXRlQ2FyZXRSZWN0KCkKK3sKKyAgICBpZiAoIWlzQ2FyZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hv
ck5vZGUoKS0+ZG9jdW1lbnQoKTsKKworICAgIC8vIHJlY29tcHV0ZUNhcmV0UmVjdCB3aWxsIGFs
d2F5cyByZXR1cm4gZmFsc2UgZm9yIHRoZSBkcmFnIGNhcmV0LAorICAgIC8vIGJlY2F1c2UgaXRz
IG1fZnJhbWUgaXMgYWx3YXlzIDAuCisgICAgYm9vbCBjYXJldFJlY3RDaGFuZ2VkID0gcmVjb21w
dXRlQ2FyZXRSZWN0KCk7CisKKyAgICAvLyBFRElUIEZJWE1FOiBUaGlzIGlzIGFuIHVuZm9ydHVu
YXRlIGhhY2suCisgICAgLy8gQmFzaWNhbGx5LCB3ZSBjYW4ndCB0cnVzdCB0aGlzIGxheW91dCBw
b3NpdGlvbiBzaW5jZSB3ZSAKKyAgICAvLyBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgY2hlY2sg
dG8gc2VlIGlmIHdlIGFyZSBpbiB1bnJlbmRlcmVkIAorICAgIC8vIGNvbnRlbnQgd2lsbCB3b3Jr
IGF0IHRoaXMgcG9pbnQuIFdlIG1heSBoYXZlIHRvIHdhaXQgZm9yCisgICAgLy8gYSBsYXlvdXQg
YW5kIHJlLXJlbmRlciBvZiB0aGUgZG9jdW1lbnQgdG8gaGFwcGVuLiBTbywgcmVzZXR0aW5nIHRo
aXMKKyAgICAvLyBmbGFnIHdpbGwgY2F1c2UgYW5vdGhlciBjYXJldCBsYXlvdXQgdG8gaGFwcGVu
IHRoZSBmaXJzdCB0aW1lCisgICAgLy8gdGhhdCB3ZSB0cnkgdG8gcGFpbnQgdGhlIGNhcmV0IGFm
dGVyIHRoaXMgY2FsbC4gVGhhdCBvbmUgd2lsbCB3b3JrIHNpbmNlCisgICAgLy8gaXQgaGFwcGVu
cyBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGFjY291bnRlZCBmb3IgYW55IGVkaXRpbmcKKyAgICAv
LyBjaGFuZ2VzIHdoaWNoIG1heSBoYXZlIGJlZW4gZG9uZS4KKyAgICAvLyBBbmQsIHdlIG5lZWQg
dG8gbGVhdmUgdGhpcyBsYXlvdXQgaGVyZSBzbyB0aGUgY2FyZXQgbW92ZXMgcmlnaHQgCisgICAg
Ly8gYXdheSBhZnRlciBjbGlja2luZy4KKyAgICBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gdHJ1
ZTsKKworICAgIGlmICghY2FyZXRSZWN0Q2hhbmdlZCkgeworICAgICAgICBSZW5kZXJWaWV3KiB2
aWV3ID0gdG9SZW5kZXJWaWV3KGQtPnJlbmRlcmVyKCkpOworICAgICAgICBpZiAodmlldyAmJiBz
aG91bGRSZXBhaW50Q2FyZXQodmlldykpCisgICAgICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFu
Z2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhjYXJldFJlcGFpbnRSZWN0KCksIGZhbHNlKTsK
KyAgICB9Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKK3sKKyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKKyAgICBpZiAoIW1fY2FyZXRWaXNpYmxlKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2NhcmV0UGFpbnQpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SW50UmVjdCBkcmF3aW5nUmVjdCA9IGxvY2FsQ2FyZXRSZWN0Rm9yUGFpbnRpbmcoKTsKKyAgICBp
ZiAoY2FyZXRSZW5kZXJlcigpICYmIGNhcmV0UmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAg
dG9SZW5kZXJCb3goY2FyZXRSZW5kZXJlcigpKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGRyYXdpbmdS
ZWN0KTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgSW50UmVjdCBjYXJldCA9
IGludGVyc2VjdGlvbihkcmF3aW5nUmVjdCwgY2xpcFJlY3QpOworICAgIGlmIChjYXJldC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9yIGNhcmV0Q29sb3IgPSBDb2xvcjo6
YmxhY2s7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQjsK
KyAgICBFbGVtZW50KiBlbGVtZW50ID0gcm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGlmIChl
bGVtZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgY2FyZXRDb2xvciA9IGVs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKKyAgICAgICAgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmNvbG9yU3BhY2UoKTsKKyAgICB9CisKKyAgICBjb250ZXh0LT5maWxsUmVjdChjYXJl
dCwgY2FyZXRDb2xvciwgY29sb3JTcGFjZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0odHgpOworICAgIFVOVVNFRF9QQVJBTSh0eSk7CisgICAg
VU5VU0VEX1BBUkFNKGNsaXBSZWN0KTsKKyNlbmRpZgorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVkKSBjb25z
dAoreworICAgIGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihyLT5ub2RlKCkpOworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBl
bGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9IGVsc2Ug
aWYgKHItPmlzVGV4dCgpKSB7CisgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRv
UmVuZGVyVGV4dChyKTsKKyAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXItPnRleHRMZW5ndGgoKSB8
fCAhdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKSkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIlcyN0ZXh0IChlbXB0eSlcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXggPSAzNjsKKyAgICAgICAgU3RyaW5nIHRleHQgPSB0ZXh0UmVuZGVyZXIt
PnRleHQoKTsKKyAgICAgICAgaW50IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgICAg
ICBpZiAoc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAgICAg
ICAgaWYgKHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSkK
KyAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHItPm5vZGUoKSA9PSBt
X3NlbGVjdGlvbi5lbmQoKS5jb250YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gbV9zZWxlY3Rpb24uZW5kKCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOworCisg
ICAgICAgICAgICBpbnQgcG9zOworICAgICAgICAgICAgSW5saW5lVGV4dEJveCogYm94ID0gdGV4
dFJlbmRlcmVyLT5maW5kTmV4dElubGluZVRleHRCb3gob2Zmc2V0LCBwb3MpOworICAgICAgICAg
ICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKGJveC0+c3RhcnQoKSwgYm94LT5sZW4oKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFN0cmluZyBzaG93OworICAgICAgICAgICAgaW50IG1pZCA9
IG1heCAvIDI7CisgICAgICAgICAgICBpbnQgY2FyZXQgPSAwOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyB0ZXh0IGlzIHNob3J0ZXIgdGhhbiBtYXgKKyAgICAgICAgICAgIGlmICh0ZXh0
TGVuZ3RoIDwgbWF4KSB7CisgICAgICAgICAgICAgICAgc2hvdyA9IHRleHQ7CisgICAgICAgICAg
ICAgICAgY2FyZXQgPSBwb3M7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyAtIG1pZCA8IDAp
IHsKKyAgICAgICAgICAgICAgICAvLyB0b28gZmV3IGNoYXJhY3RlcnMgdG8gbGVmdAorICAgICAg
ICAgICAgICAgIHNob3cgPSB0ZXh0LmxlZnQobWF4IC0gMykgKyAiLi4uIjsKKyAgICAgICAgICAg
ICAgICBjYXJldCA9IHBvczsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIC0gbWlkID49IDAg
JiYgcG9zICsgbWlkIDw9IHRleHRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBlbm91Z2gg
Y2hhcmFjdGVycyBvbiBlYWNoIHNpZGUKKyAgICAgICAgICAgICAgICBzaG93ID0gIi4uLiIgKyB0
ZXh0LnN1YnN0cmluZyhwb3MgLSBtaWQgKyAzLCBtYXggLSA2KSArICIuLi4iOworICAgICAgICAg
ICAgICAgIGNhcmV0ID0gbWlkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyB0b28gZmV3IGNoYXJhY3RlcnMgb24gcmlnaHQKKyAgICAgICAgICAgICAgICBzaG93ID0g
Ii4uLiIgKyB0ZXh0LnJpZ2h0KG1heCAtIDMpOworICAgICAgICAgICAgICAgIGNhcmV0ID0gcG9z
IC0gKHRleHRMZW5ndGggLSBzaG93Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2hvdy5yZXBsYWNlKCdcbicsICcgJyk7CisgICAgICAgICAgICBz
aG93LnJlcGxhY2UoJ1xyJywgJyAnKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+
ICN0ZXh0IDogXCIlc1wiIGF0IG9mZnNldCAlZFxuIiwgc2hvdy51dGY4KCkuZGF0YSgpLCBwb3Mp
OworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgICAgICIpOworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXJldDsgaSsrKQorICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiICIpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJeXG4iKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoaW50KXRleHQubGVuZ3RoKCkgPiBtYXgp
CisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQubGVmdChtYXggLSAzKSArICIuLi4iOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmxlZnQobWF4KTsKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICN0ZXh0IDogXCIlc1wiXG4iLCB0ZXh0LnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIAorICAgIC8vIFRyZWF0IGEgY29s
bGFwc2VkIHNlbGVjdGlvbiBsaWtlIG5vIHNlbGVjdGlvbi4KKyAgICBpZiAoIWlzUmFuZ2UoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZG9jdW1lbnQtPnJlbmRlcmVyKCkpIAor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwor
ICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVz
dWx0KTsKKyAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgaWYg
KCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKGlubmVyTm9kZS0+cmVu
ZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSk7CisgICAgaWYg
KHZpc2libGVQb3MuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgaWYgKG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLmlzTnVsbCgpIHx8IG1fc2VsZWN0aW9u
LnZpc2libGVFbmQoKS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICBQb3NpdGlvbiBzdGFydChtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZh
bGVudCgpKTsKKyAgICBQb3NpdGlvbiBlbmQobV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpLmRlZXBF
cXVpdmFsZW50KCkpOworICAgIFBvc2l0aW9uIHAodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgp
KTsKKworICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKHN0YXJ0LCBwKSA8PSAwICYmIGNvbXBh
cmVQb3NpdGlvbnMocCwgZW5kKSA8PSAwOworfQorCisvLyBXb3JrYXJvdW5kIGZvciB0aGUgZmFj
dCB0aGF0IGl0J3MgaGFyZCB0byBkZWxldGUgYSBmcmFtZS4KKy8vIENhbGwgdGhpcyBhZnRlciBk
b2luZyB1c2VyLXRyaWdnZXJlZCBzZWxlY3Rpb25zIHRvIG1ha2UgaXQgZWFzeSB0byBkZWxldGUg
dGhlIGZyYW1lIHlvdSBlbnRpcmVseSBzZWxlY3RlZC4KKy8vIENhbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBhcyBwYXJ0IG9mIGV2ZXJ5IHNldFNlbGVjdGlvbiBjYWxsIGJlY2F1c2UgaW4gc29tZSBj
b250ZXh0cyBpdCBtaWdodCBub3QgYmUgZ29vZAorLy8gZm9yIHRoZSBmb2N1cyB0byBtb3ZlIHRv
IGFub3RoZXIgZnJhbWUuIFNvIGluc3RlYWQgd2UgY2FsbCBpdCBmcm9tIHBsYWNlcyB3aGVyZSB3
ZSBhcmUgc2VsZWN0aW5nIHdpdGggdGhlCisvLyBtb3VzZSBvciB0aGUga2V5Ym9hcmQgYWZ0ZXIg
c2V0dGluZyB0aGUgc2VsZWN0aW9uLgordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RG
cmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCit7CisgICAgLy8gRmluZCB0aGUg
cGFyZW50IGZyYW1lOyBpZiB0aGVyZSBpcyBub25lLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBk
by4KKyAgICBGcmFtZSogcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBp
ZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIHRoZSBlbnRpcmUgZnJhbWUgY29udGVudHM7IGlmIG5v
dCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgorICAgIGlmICghaXNSYW5nZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFpc1N0YXJ0T2ZEb2N1bWVudChzZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRW5kT2ZEb2N1bWVudChz
ZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQg
dG8gdGhlIDxpZnJhbWU+IG9yIDxmcmFtZT4gKG9yIGV2ZW4gPG9iamVjdD4pIGVsZW1lbnQgaW4g
dGhlIHBhcmVudCBmcmFtZS4KKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX2ZyYW1lLT5v
d25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIENvbnRhaW5lck5vZGUqIG93bmVyRWxlbWVudFBhcmVudCA9IG93bmVyRWxlbWVudC0+cGFy
ZW50Tm9kZSgpOworICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50KQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIC8vIFRoaXMgbWV0aG9kJ3MgcHVycG9zZSBpcyBpdCB0byBtYWtlIGl0
IGVhc2llciB0byBzZWxlY3QgaWZyYW1lcyAoaW4gb3JkZXIgdG8gZGVsZXRlIHRoZW0pLiAgRG9u
J3QgZG8gYW55dGhpbmcgaWYgdGhlIGlmcmFtZSBpc24ndCBkZWxldGFibGUuCisgICAgaWYgKCFv
d25lckVsZW1lbnRQYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBDcmVhdGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUg
ZWxlbWVudC4KKyAgICB1bnNpZ25lZCBvd25lckVsZW1lbnROb2RlSW5kZXggPSBvd25lckVsZW1l
bnQtPm5vZGVJbmRleCgpOworICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25lckVsZW1lbnQo
VmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50
Tm9kZUluZGV4LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkpOworICAgIFZp
c2libGVQb3NpdGlvbiBhZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
b3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKKwor
ICAgIC8vIEZvY3VzIG9uIHRoZSBwYXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJl
Zm9yZSB0aGlzIGVsZW1lbnQgdG8gYWZ0ZXIuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24oYmVmb3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCk7CisgICAgaWYgKHBh
cmVudC0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKSB7
CisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUocGFyZW50
KTsKKyAgICAgICAgcGFyZW50LT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
bik7CisgICAgfQorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFsbCgpCit7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAKKyAg
ICBpZiAoZG9jdW1lbnQtPmZvY3VzZWROb2RlKCkgJiYgZG9jdW1lbnQtPmZvY3VzZWROb2RlKCkt
PmNhblNlbGVjdEFsbCgpKSB7CisgICAgICAgIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpLT5zZWxl
Y3RBbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBOb2RlKiByb290ID0g
MDsKKyAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcm9vdCA9IGhpZ2hlc3RF
ZGl0YWJsZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHJv
b3QgPSBzaGFkb3dUcmVlUm9vdE5vZGUoKTsKKyAgICAgICAgaWYgKCFyb290KQorICAgICAgICAg
ICAgcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICB9CisgICAgaWYgKCFy
b290KQorICAgICAgICByZXR1cm47CisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKHJvb3QpKTsKKyAg
ICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgIHNldFNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZG
dWxseVNlbGVjdGVkKCk7CisgICAgbm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZSh0cnVl
KTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdl
KiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKQoreworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5vZGUqIGVuZENv
bnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoZWMpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChzdGFydENvbnRhaW5lcik7CisgICAgQVNT
RVJUKGVuZENvbnRhaW5lcik7CisgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyLT5kb2N1bWVudCgp
ID09IGVuZENvbnRhaW5lci0+ZG9jdW1lbnQoKSk7CisgICAgCisgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICAvLyBO
b24tY29sbGFwc2VkIHJhbmdlcyBhcmUgbm90IGFsbG93ZWQgdG8gc3RhcnQgYXQgdGhlIGVuZCBv
ZiBhIGxpbmUgdGhhdCBpcyB3cmFwcGVkLAorICAgIC8vIHRoZXkgc3RhcnQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbmV4dCBsaW5lIGluc3RlYWQKKyAgICBib29sIGNvbGxhcHNlZCA9IHJhbmdl
LT5jb2xsYXBzZWQoZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGludCBzdGFydE9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldChlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcmFuZ2Ut
PmVuZE9mZnNldChlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgLy8gRklYTUU6IENhbiB3ZSBwcm92aWRlIGV4dGVudEFmZmluaXR5PworICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zm
c2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgY29sbGFwc2VkID8gYWZm
aW5pdHkgOiBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChQb3Np
dGlvbihlbmRDb250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBTZXRTZWxlY3Rpb25PcHRpb25z
IG9wdGlvbnMgPSBDbGVhclR5cGluZ1N0eWxlOworICAgIGlmIChjbG9zZVR5cGluZykKKyAgICAg
ICAgb3B0aW9ucyB8PSBDbG9zZVR5cGluZzsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpLCBvcHRpb25zKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjppc0luUGFzc3dvcmRGaWVsZCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHN0YXJ0KCkuaXNOdWxsKCkgfHwgc3RhcnQoKS5hbmNob3JUeXBl
KCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcgorICAgICAgICAgICB8fCBz
dGFydCgpLmNvbnRhaW5lck5vZGUoKSB8fCAhc3RhcnQoKS5hbmNob3JOb2RlKCktPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydCgpLmNvbnRhaW5lck5v
ZGUoKTsKKyAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c3RhcnROb2RlID0gc3RhcnROb2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIXN0
YXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzdGFydE5vZGUtPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzdGFydE5vZGUpLT5pc1Bhc3N3b3Jk
RmllbGQoKTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlbmRlcnNJbnNp
ZGVOb2RlKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFpc1RhYmxlRWxlbWVudChub2RlKSAmJiAhZWRpdGluZ0ln
bm9yZXNDb250ZW50KG5vZGUpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvY3Vz
ZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCit7CisgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0g
aXNGb2N1c2VkQW5kQWN0aXZlKCk7CisKKyAgICAvLyBCZWNhdXNlIFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgYW5kCisgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAorICAgIC8v
IHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgorICAg
IGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCkt
PnJlbmRlcmVyKCkpKQorICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29t
cG9zaXRlZExheWVycyhlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcygpKSk7CisKKyAgICAvLyBDYXJl
dCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCisgICAgaWYgKGFjdGl2ZUFuZEZvY3VzZWQp
CisgICAgICAgIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisgICAgc2V0Q2FyZXRWaXNpYmxlKGFj
dGl2ZUFuZEZvY3VzZWQpOworCisgICAgLy8gVXBkYXRlIGZvciBjYXBzIGxvY2sgc3RhdGUKKyAg
ICBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7
CisKKyAgICAvLyBCZWNhdXNlIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoKSBh
bmQKKyAgICAvLyBSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlz
IGFjdGl2ZSwgd2UgaGF2ZSB0bworICAgIC8vIHVwZGF0ZSBzdHlsZSBhbmQgdGhlbWUgc3RhdGUg
dGhhdCBkZXBlbmRlZCBvbiB0aG9zZS4KKyAgICBpZiAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPmRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkpIHsKKyAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnN0eWxlKCktPmhh
c0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+dGhlbWUoKS0+c3RhdGVD
aGFuZ2VkKHJlbmRlcmVyLCBGb2N1c1N0YXRlKTsKKyAgICB9CisKKyAgICAvLyBTZWN1cmUga2V5
Ym9hcmQgZW50cnkgaXMgc2V0IGJ5IHRoZSBhY3RpdmUgZnJhbWUuCisgICAgaWYgKG1fZnJhbWUt
PmRvY3VtZW50KCktPnVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKCkpCisgICAgICAg
IHNldFVzZVNlY3VyZUtleWJvYXJkRW50cnkoYWN0aXZlQW5kRm9jdXNlZCk7Cit9CisKK3ZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6cGFnZUFjdGl2YXRpb25DaGFuZ2VkKCkKK3sKKyAgICBmb2N1
c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
Ojp1cGRhdGVTZWN1cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKQoreworICAgIGlmIChtX2ZyYW1l
LT5kb2N1bWVudCgpICYmIGlzRm9jdXNlZEFuZEFjdGl2ZSgpKQorICAgICAgICBzZXRVc2VTZWN1
cmVLZXlib2FyZEVudHJ5KG1fZnJhbWUtPmRvY3VtZW50KCktPnVzZVNlY3VyZUtleWJvYXJkRW50
cnlXaGVuQWN0aXZlKCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFVzZVNl
Y3VyZUtleWJvYXJkRW50cnkoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAg
ICAgZW5hYmxlU2VjdXJlVGV4dElucHV0KCk7CisgICAgZWxzZQorICAgICAgICBkaXNhYmxlU2Vj
dXJlVGV4dElucHV0KCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Rm9jdXNl
ZChib29sIGZsYWcpCit7CisgICAgaWYgKG1fZm9jdXNlZCA9PSBmbGFnKQorICAgICAgICByZXR1
cm47CisgICAgbV9mb2N1c2VkID0gZmxhZzsKKworICAgIGZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hh
bmdlZCgpOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzRm9jdXNlZEFuZEFjdGl2
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9jdXNlZCAmJiBtX2ZyYW1lLT5wYWdlKCkgJiYg
bV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKK30KKwordm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVBcHBlYXJhbmNlKCkKK3sKKyAgICBBU1NFUlQo
IW1faXNEcmFnQ2FyZXRDb250cm9sbGVyKTsKKworI2lmIEVOQUJMRShURVhUX0NBUkVUKQorICAg
IGJvb2wgY2FyZXRSZWN0Q2hhbmdlZCA9IHJlY29tcHV0ZUNhcmV0UmVjdCgpOworCisgICAgYm9v
bCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5n
cygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIGJvb2wgc2hvdWxkQmxpbmsgPSBtX2Nh
cmV0VmlzaWJsZQorICAgICAgICAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkg
fHwgY2FyZXRCcm93c2luZyk7CisKKyAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhl
IGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQorICAgIC8vIGJsYWNrIGNhcmV0
IGluIHRoZSBuZXcgbG9jYXRpb24uCisgICAgaWYgKGNhcmV0UmVjdENoYW5nZWQgfHwgIXNob3Vs
ZEJsaW5rKQorICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CisKKyAgICAvLyBTdGFy
dCBibGlua2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQgaWYg
d2UncmUKKyAgICAvLyBhbHJlYWR5IGJsaW5raW5nIGluIHRoZSByaWdodCBsb2NhdGlvbi4KKyAg
ICBpZiAoc2hvdWxkQmxpbmsgJiYgIW1fY2FyZXRCbGlua1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgaWYgKGRvdWJsZSBibGlua0ludGVydmFsID0gbV9mcmFtZS0+cGFnZSgpLT50aGVtZSgp
LT5jYXJldEJsaW5rSW50ZXJ2YWwoKSkKKyAgICAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0
YXJ0UmVwZWF0aW5nKGJsaW5rSW50ZXJ2YWwpOworCisgICAgICAgIGlmICghbV9jYXJldFBhaW50
KSB7CisgICAgICAgICAgICBtX2NhcmV0UGFpbnQgPSB0cnVlOworICAgICAgICAgICAgaW52YWxp
ZGF0ZUNhcmV0UmVjdCgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBXZSBu
ZWVkIHRvIHVwZGF0ZSBzdHlsZSBpbiBjYXNlIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIHNlbGVj
dGlvbiBpcyBtYWRlIGRpc3BsYXk6bm9uZS4KKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CisKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMtPnNlbGVjdGlvbigpOworCisgICAgaWYg
KCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CisgICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhlIHJpZ2h0bW9zdCBjYW5k
aWRhdGUgZm9yIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBhbmQgdGhlIGxlZnRtb3N0IGNh
bmRpZGF0ZSBmb3IgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgorICAgIC8vIEV4YW1wbGU6IGZv
byA8YT5iYXI8L2E+LiAgSW1hZ2luZSB0aGF0IGEgbGluZSB3cmFwIG9jY3VycyBhZnRlciAnZm9v
JywgYW5kIHRoYXQgJ2JhcicgaXMgc2VsZWN0ZWQuICAgSWYgd2UgcGFzcyBbZm9vLCAzXQorICAg
IC8vIGFzIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCB0aGUgc2VsZWN0aW9uIHBhaW50aW5n
IGNvZGUgd2lsbCB0aGluayB0aGF0IGNvbnRlbnQgb24gdGhlIGxpbmUgY29udGFpbmluZyAnZm9v
JyBpcyBzZWxlY3RlZAorICAgIC8vIGFuZCB3aWxsIGZpbGwgdGhlIGdhcCBiZWZvcmUgJ2Jhcicu
CisgICAgUG9zaXRpb24gc3RhcnRQb3MgPSBzZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBQb3NpdGlv
biBjYW5kaWRhdGUgPSBzdGFydFBvcy5kb3duc3RyZWFtKCk7CisgICAgaWYgKGNhbmRpZGF0ZS5p
c0NhbmRpZGF0ZSgpKQorICAgICAgICBzdGFydFBvcyA9IGNhbmRpZGF0ZTsKKyAgICBQb3NpdGlv
biBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kKCk7CisgICAgY2FuZGlkYXRlID0gZW5kUG9zLnVwc3Ry
ZWFtKCk7CisgICAgaWYgKGNhbmRpZGF0ZS5pc0NhbmRpZGF0ZSgpKQorICAgICAgICBlbmRQb3Mg
PSBjYW5kaWRhdGU7CisKKyAgICAvLyBXZSBjYW4gZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUg
c2VsZWN0aW9uIGVuZHBvaW50cyBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIHdoZW4g
YSBzZWxlY3Rpb24gaXMgZGVsZXRlZAorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlm
eSB0aGUgU2VsZWN0aW9uQ29udHJvbGxlciBvZiB0ZXh0IHJlbW92YWwuCisgICAgaWYgKHN0YXJ0
UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgeworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
OworICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRl
cmVyLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSZW5kZXJlciwgZW5k
UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIH0KK30KKwordm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGFnKQoreworICAgIGlmIChtX2Nh
cmV0VmlzaWJsZSA9PSBmbGFnKQorICAgICAgICByZXR1cm47CisgICAgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOworICAgIG1fY2FyZXRWaXNpYmxlID0gZmxhZzsKKyAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJDYXJldFJlY3RJZk5l
ZWRlZCgpCit7CisjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCisgICAgaWYgKCFtX2NhcmV0UGFpbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NhcmV0UGFpbnQgPSBmYWxzZTsKKyAgICBpbnZhbGlk
YXRlQ2FyZXRSZWN0KCk7CisjZW5kaWYKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpj
YXJldEJsaW5rVGltZXJGaXJlZChUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiopCit7CisjaWYg
RU5BQkxFKFRFWFRfQ0FSRVQpCisgICAgQVNTRVJUKG1fY2FyZXRWaXNpYmxlKTsKKyAgICBBU1NF
UlQoaXNDYXJldCgpKTsKKyAgICBib29sIGNhcmV0UGFpbnQgPSBtX2NhcmV0UGFpbnQ7CisgICAg
aWYgKGlzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZCgpICYmIGNhcmV0UGFpbnQpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NhcmV0UGFpbnQgPSAhY2FyZXRQYWludDsKKyAgICBpbnZhbGlkYXRlQ2Fy
ZXRSZWN0KCk7CisjZW5kaWYKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlS
ZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCkKK3sKKyAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisKKyAgICBpZiAoIXJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzVGV4dENvbnRyb2wo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcikt
PnNlbGVjdGlvbkNoYW5nZWQodXNlclRyaWdnZXJlZCk7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlv
biB0aGF0IHRlbGxzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0
IGhhcyBhbiBlbnRpcmUKKy8vIEZyYW1lIGFuZCBGcmFtZVZpZXcsIGEgPGZyYW1lPiwgPGlmcmFt
ZT4sIG9yIDxvYmplY3Q+Lgorc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9kZSog
bikKK3sKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdpZGdldCogd2lk
Z2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICByZXR1cm4gd2lk
Z2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoaXNOb25lKCkgfHwgIWlz
Rm9jdXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdF
bmFibGVkKCk7CisgICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgaWYgKE5vZGUqIGFu
Y2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQoYmFzZSgpKSkgeworICAgICAgICAgICAgbV9m
cmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUoYW5jaG9yLCBt
X2ZyYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChOb2RlKiB0YXJnZXQgPSByb290RWRpdGFibGVFbGVtZW50KCkpIHsKKyAgICAgICAgLy8gV2Fs
ayB1cCB0aGUgRE9NIHRyZWUgdG8gc2VhcmNoIGZvciBhIG5vZGUgdG8gZm9jdXMuIAorICAgICAg
ICB3aGlsZSAodGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNldCBm
b2N1cyBvbiBhIHN1YmZyYW1lIHdoZW4gc2VsZWN0aW5nIGluIGEgcGFyZW50IGZyYW1lLAorICAg
ICAgICAgICAgLy8gc28gYWRkIHRoZSAhaXNGcmFtZUVsZW1lbnQgY2hlY2sgaGVyZS4gVGhlcmUn
cyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gbWFrZSB0aGlzCisgICAgICAgICAgICAvLyB3b3Jr
IGluIHRoZSBsb25nIHRlcm0sIGJ1dCB0aGlzIGlzIHRoZSBzYWZlc3QgZml4IGF0IHRoaXMgdGlt
ZS4KKyAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5pc01vdXNlRm9jdXNhYmxlKCkg
JiYgIWlzRnJhbWVFbGVtZW50KHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0YXJnZXQsIG1fZnJhbWUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRh
cmdldCA9IHRhcmdldC0+cGFyZW50T3JIb3N0Tm9kZSgpOyAKKyAgICAgICAgfQorICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZSgwKTsKKyAgICB9CisKKyAgICBpZiAo
Y2FyZXRCcm93c2luZykKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+c2V0Rm9jdXNlZE5vZGUoMCwgbV9mcmFtZSk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6cGFpbnREcmFnQ2FyZXQoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlciA9IG1fZnJhbWUt
PnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOworICAgIEFTU0VSVChkcmFnQ2FyZXRDb250
cm9sbGVyLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpOworICAgIGlmIChkcmFnQ2FyZXRDb250cm9s
bGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSA9PSBtX2ZyYW1lKQorICAgICAgICBkcmFnQ2FyZXRDb250cm9sbGVyLT5wYWludENhcmV0KHAs
IHR4LCB0eSwgY2xpcFJlY3QpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocCk7CisgICAgVU5V
U0VEX1BBUkFNKHR4KTsKKyAgICBVTlVTRURfUEFSQU0odHkpOworICAgIFVOVVNFRF9QQVJBTShj
bGlwUmVjdCk7CisjZW5kaWYKK30KKworUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gU2VsZWN0aW9uQ29udHJvbGxlcjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fdHlwaW5nU3R5bGUgfHwgIW1fdHlwaW5nU3R5bGUtPnN0eWxlKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBtX3R5cGluZ1N0eWxlLT5zdHlsZSgpLT5jb3B5KCk7Cit9
CisKK2Jvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFt
ZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7Cit9CisKK0Zsb2F0UmVjdCBTZWxlY3Rpb25Db250cm9sbGVy
Ojpib3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJW
aWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3KiB2
aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghcm9vdCB8fCAhdmlldykKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJvb3QtPnNl
bGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CisgICAgcmV0dXJuIGNsaXBUb1Zp
c2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZpc2libGVD
b250ZW50UmVjdCgpKSA6IHNlbGVjdGlvblJlY3Q7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdGFuZ2xlcykgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm47CisKKyAgICBG
bG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKTsKKworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIHRvTm9ybWFs
aXplZFJhbmdlKCktPnRleHRRdWFkcyhxdWFkcywgdHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogV2Ug
YXJlIGFwcGVuZGluZyBlbXB0eSByZWN0YW5nbGVzIHRvIHRoZSBsaXN0IGZvciB0aG9zZSB0aGF0
IGZhbGwgb3V0c2lkZSB2aXNpYmxlQ29udGVudFJlY3QuCisgICAgLy8gSXQgbWlnaHQgYmUgYmV0
dGVyIHRvIG9taXQgdGhvc2UgcmVjdGFuZ2xlcyBlbnRpcmVseS4KKyAgICBzaXplX3Qgc2l6ZSA9
IHF1YWRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50ZXJzZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCksIHZpc2libGVDb250ZW50UmVjdCkpOworfQorCisvLyBTY2FucyBsb2dpY2Fs
bHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgorc3Rh
dGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0oTm9kZSogc3RhcnQpCit7CisgICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlm
IChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoZnJhbWVUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgeworICAgICAgICAg
ICAgTm9kZSogY2hpbGREb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNl
Kj4obm9kZSktPmNvbnRlbnREb2N1bWVudCgpOworICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxl
bWVudCogZnJhbWVSZXN1bHQgPSBzY2FuRm9yRm9ybShjaGlsZERvY3VtZW50KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZnJhbWVSZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKKy8vIFdlIGxvb2sgZm9yIGVpdGhlciB0aGUgZm9ybSBjb250YWluaW5nIHRoZSBj
dXJyZW50IGZvY3VzLCBvciBmb3Igb25lIGltbWVkaWF0ZWx5IGFmdGVyIGl0CitIVE1MRm9ybUVs
ZW1lbnQqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmN1cnJlbnRGb3JtKCkgY29uc3QKK3sKKyAgICAv
LyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5v
ZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCisgICAgTm9kZSogc3RhcnQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgIGlmICghc3RhcnQpCisgICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOworCisgICAgLy8gVHJ5IHdhbGtp
bmcgdXAgdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50LgorICAgIE5vZGUqIG5v
ZGU7CisgICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlm
IChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKTsKKyAgICB9CisKKyAgICAvLyBUcnkgd2Fsa2lu
ZyBmb3J3YXJkIGluIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4KKyAgICBy
ZXR1cm4gc2NhbkZvckZvcm0oc3RhcnQpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgYm9vbCBy
ZXZlYWxFeHRlbnQpCit7CisgICAgSW50UmVjdCByZWN0OworCisgICAgc3dpdGNoIChzZWxlY3Rp
b25UeXBlKCkpIHsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgorICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoK
KyAgICAgICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKKyAgICAgICAgcmVjdCA9
IHJldmVhbEV4dGVudCA/IFZpc2libGVQb3NpdGlvbihleHRlbnQoKSkuYWJzb2x1dGVDYXJldEJv
dW5kcygpIDogZW5jbG9zaW5nSW50UmVjdChib3VuZHMoZmFsc2UpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgUG9zaXRpb24gc3RhcnQgPSB0aGlzLT5zdGFydCgpOworICAgIEFTU0VS
VChzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgb25seSBoYW5kbGVzIHNjcm9sbGluZyB0aGUgc3RhcnRDb250YWluZXIn
cyBsYXllciwgYnV0CisgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gcmVjdCBjb3VsZCBpbnRlcnNl
Y3QgbW9yZSB0aGFuIGp1c3QgdGhhdC4KKyAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80
Nzk5ODk5Pi4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIGxh
eWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGZhbHNlLCBhbGlnbm1lbnQsIGFsaWdubWVu
dCk7CisgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQorewor
ICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlz
IGVkaXRhYmxlIChlaXRoZXIgdGhlCisgICAgLy8gZW50aXJlIFdlYlZpZXcgaXMgZWRpdGFibGUg
b3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVudCkuCisKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICBpZiAoIWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2Rl
KiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIHdoaWxlIChub2RlICYm
ICFub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQorICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpOworICAgIGlmIChub2RlKQorICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0p
KTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAoreworICAgIHJldHVy
biBtX2ZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLCBu
ZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9ybWF0Rm9yRGVidWdnZXIo
Y2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgbV9zZWxlY3Rpb24u
Zm9ybWF0Rm9yRGVidWdnZXIoYnVmZmVyLCBsZW5ndGgpOworfQorCit2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0Cit7CisgICAgbV9zZWxlY3Rpb24uc2hv
d1RyZWVGb3JUaGlzKCk7Cit9CisKKyNlbmRpZgorCit9CisKKyNpZm5kZWYgTkRFQlVHCisKK3Zv
aWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciYgc2VsKQorewor
ICAgIHNlbC5zaG93VHJlZUZvclRoaXMoKTsKK30KKwordm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyKiBzZWwpCit7CisgICAgaWYgKHNlbCkKKyAgICAgICAg
c2VsLT5zaG93VHJlZUZvclRoaXMoKTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NyArMjQsNyBAQAogICovCiAgIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogCiAjaW5jbHVk
ZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIK
QEAgLTcwLDExICs3MCwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBjb25zdCBp
bnQgTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBJTlRfTUlOOwogCi1TZWxlY3Rp
b25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSwgYm9vbCBpc0Ry
YWdDYXJldENvbnRyb2xsZXIpCitGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRnJhbWUq
IGZyYW1lLCBib29sIGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKICAgICA6IG1fZnJhbWUoZnJhbWUp
CiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbikKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpCi0gICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmU2VsZWN0aW9uQ29udHJvbGxlcjo6
Y2FyZXRCbGlua1RpbWVyRmlyZWQpCisgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmRnJh
bWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKQogICAgICwgbV9jYXJldFJlY3ROZWVk
c1VwZGF0ZSh0cnVlKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCiAgICAgLCBt
X2lzRHJhZ0NhcmV0Q29udHJvbGxlcihpc0RyYWdDYXJldENvbnRyb2xsZXIpCkBAIC04Niw3ICs4
Niw3IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIKICAgICBzZXRJ
c0RpcmVjdGlvbmFsKGZhbHNlKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3Zl
VG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCwgQ3Vyc29y
QWxpZ25PblNjcm9sbCBhbGlnbikKK3ZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBW
aXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Ny
b2xsIGFsaWduKQogewogICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3NlVHlw
aW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKICAgICBpZiAodXNlclRyaWdnZXJlZCkKQEAgLTk0LDcg
Kzk0LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgVgogICAgIHNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuZGVl
cEVxdWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCBvcHRpb25zLCBhbGlnbik7CiB9CiAKLXZv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYmFz
ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZleHRlbnQsIGJvb2wgdXNlclRyaWdnZXJlZCkKK3Zv
aWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJhc2UsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAg
U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0
eWxlOwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFYKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihiYXNlLmRlZXBFcXVpdmFsZW50KCksIGV4dGVudC5kZWVwRXF1aXZhbGVudCgp
LCBiYXNlLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRp
b24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAg
U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0
eWxlOwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFAKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBSYW5n
ZSAqciwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgU2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxl
OwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFIKICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9u
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3Qg
UG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0
eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0
IFBvc2l0aW9uICZiYXNlLCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlv
bnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7CiAgICAgaWYgKHVzZXJUcmlnZ2Vy
ZWQpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8o
Y29uc3QgUAogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhc2UsIGV4dGVudCwg
YWZmaW5pdHkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcywgU2V0U2VsZWN0aW9uT3B0aW9ucyBv
cHRpb25zLCBDdXJzb3JBbGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVjdGlvbmFsaXR5UG9saWN5KQordm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIFNl
dFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucywgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBkaXJlY3Rpb25h
bGl0eVBvbGljeSkKIHsKICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CiAKQEAgLTE1
MCw3ICsxNTAsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM0NjQ+OiBJbmZpbml0ZSByZWN1cnNpb24gYXQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U2VsZWN0aW9uCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IEZyYW1lU2VsZWN0aW9u
OjpzZXRTZWxlY3Rpb24KICAgICAvLyBpZiBkb2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdl
IGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wCiAgICAgaWYgKHMuYmFzZSgpLmFuY2hvck5v
ZGUoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzLmJhc2UoKS5hbmNob3JOb2Rl
KCktPmRvY3VtZW50KCk7CkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIGJvb2wgcmVtb3ZpbmdO
b2RlUmVtb3Zlc1Bvc2l0aW9uKAogICAgIHJldHVybiBlbGVtZW50LT5jb250YWlucyhwb3NpdGlv
bi5hbmNob3JOb2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUo
KS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUgKm5vZGUpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpub2Rl
V2lsbEJlUmVtb3ZlZChOb2RlICpub2RlKQogewogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9k
ZVdpbGxCZVJlbW8KICAgICAgICAgcmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKG5vZGUsIG1f
c2VsZWN0aW9uLnN0YXJ0KCkpLCByZW1vdmluZ05vZGVSZW1vdmVzUG9zaXRpb24obm9kZSwgbV9z
ZWxlY3Rpb24uZW5kKCkpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZXNwb25k
VG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUqIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvb2wgZXh0
ZW50UmVtb3ZlZCwgYm9vbCBzdGFydFJlbW92ZWQsIGJvb2wgZW5kUmVtb3ZlZCkKK3ZvaWQgRnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSogbm9kZSwgYm9vbCBi
YXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRSZW1vdmVkLCBib29sIHN0YXJ0UmVtb3ZlZCwgYm9vbCBl
bmRSZW1vdmVkKQogewogICAgIGJvb2wgY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uID0gZmFsc2U7
CiAgICAgYm9vbCBjbGVhckRPTVRyZWVTZWxlY3Rpb24gPSBmYWxzZTsKQEAgLTI5NSw3ICsyOTUs
NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZW1vdmVQb3NpdGlvbkFmdGVyQWRvCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnRleHRXaWxsQmVSZXBsYWNl
ZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG9sZExlbmd0
aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6dGV4dFdpbGxCZVJl
cGxhY2VkKENoYXJhY3RlckRhdGEqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgb2xk
TGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhlIGZyYWdtZW50IGNoZWNr
IGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMzAwNjIuCiAgICAgaWYgKGlzTm9uZSgpIHx8ICFub2RlIHx8IGhpZ2hlc3RB
bmNlc3Rvcihub2RlKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RF
KQpAQCAtMzI5LDE3ICszMjksMTcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp0ZXh0V2ls
bEJlUmVwbAogICAgIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24obm9kZSwgc2hvdWxkUmVtb3Zl
QmFzZSwgc2hvdWxkUmVtb3ZlRXh0ZW50LCBzaG91bGRSZW1vdmVTdGFydCwgc2hvdWxkUmVtb3Zl
RW5kKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRJc0RpcmVjdGlvbmFsKGJv
b2wgaXNEaXJlY3Rpb25hbCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNldElzRGlyZWN0aW9uYWwo
Ym9vbCBpc0RpcmVjdGlvbmFsKQogewogICAgIG1faXNEaXJlY3Rpb25hbCA9ICFtX2ZyYW1lIHx8
IG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZENvbnNpZGVyU2VsZWN0aW9uQXNE
aXJlY3Rpb25hbCgpIHx8IGlzRGlyZWN0aW9uYWw7CiB9CiAKLVRleHREaXJlY3Rpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpCitUZXh0RGlyZWN0aW9u
IEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkKIHsKICAgICByZXR1
cm4gV2ViQ29yZTo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhtX3NlbGVjdGlvbi5leHRlbnQo
KSk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVy
YXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAoYWx0ZXIgIT0gQWx0ZXJhdGlvbkV4dGVuZCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6d2lsbEJlTW9kaWZpZWQKICAgICB9CiB9CiAKLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25D
b250cm9sbGVyOjpwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3QKK1Zp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6cG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlz
R2V0U3RhcnQpIGNvbnN0CiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZSA/IG1f
ZnJhbWUtPnNldHRpbmdzKCkgOiAwOwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZWRp
dGluZ0JlaGF2aW9yVHlwZSgpID09IEVkaXRpbmdNYWNCZWhhdmlvcikKQEAgLTQwMSwxNyArNDAx
LDE3IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpwb3MKICAgICByZXR1
cm4gbV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6
IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6c3RhcnRGb3JQbGF0Zm9ybSgpIGNvbnN0CitWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246OnN0YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdAogewogICAgIHJldHVybiBw
b3NpdGlvbkZvclBsYXRmb3JtKHRydWUpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9u
Q29udHJvbGxlcjo6ZW5kRm9yUGxhdGZvcm0oKSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIEZyYW1l
U2VsZWN0aW9uOjplbmRGb3JQbGF0Zm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBvc2l0aW9u
Rm9yUGxhdGZvcm0oZmFsc2UpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJv
bGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQor
VmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdodChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3Nl
bGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAKQEAgLTQ1NCw3ICs0
NTQsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgcmV0
dXJuIHBvczsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlm
eUV4dGVuZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdGb3J3YXJkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsZWN0aW9u
LmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKICAgICBzd2l0Y2ggKGdyYW51bGFy
aXR5KSB7CkBAIC00OTYsNyArNDk2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vZAogICAgIHJldHVybiBwb3M7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rp
b25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkpCitWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zOwog
ICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTUyOSw3ICs1MjksNyBAQCBWaXNpYmxlUG9z
aXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgcmV0dXJuIHBvczsKIH0KIAotVmlz
aWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ0ZvcndhcmQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zOwogICAgIC8vIEZJWE1FOiBTdGF5IGluIGVkaXRhYmxlIGNv
bnRlbnQgZm9yIHRoZSBsZXNzIGNvbW1vbiBncmFudWxhcml0aWVzLgpAQCAtNTc5LDcgKzU3OSw3
IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICByZXR1cm4g
cG9zOwogfQogCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0
ZW5kaW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWxlY3Rpb24uZXh0ZW50KCks
IG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogCkBAIC02MjEsNyArNjIxLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIHJldHVybiBwb3M7CiB9CiAgICAg
ICAgCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5n
QmFja3dhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIEZy
YW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQCBWaXNpYmxl
UG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgcmV0dXJuIHBvczsKIH0KIAot
VmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ0xlZnQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTcwMCw3
ICs3MDAsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAg
cmV0dXJuIHBvczsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK1Zpc2libGVQ
b3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nQmFja3dhcmQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KQogewogICAgIFZpc2libGVQb3NpdGlvbiBwb3M7CiAgICAgc3dpdGNo
IChncmFudWxhcml0eSkgewpAQCAtNzQ5LDE1ICs3NDksMTUgQEAgc3RhdGljIGJvb2wgaXNCb3Vu
ZGFyeShUZXh0R3JhbnVsYXJpdHkgZwogICAgIHJldHVybiBncmFudWxhcml0eSA9PSBMaW5lQm91
bmRhcnkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoQm91bmRhcnkgfHwgZ3JhbnVsYXJpdHkg
PT0gRG9jdW1lbnRCb3VuZGFyeTsKIH0gICAgCiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgdXNlclRyaWdnZXJlZCkKK2Jvb2wgRnJh
bWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHVzZXJUcmlnZ2Vy
ZWQpCiB7CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpIHsKLSAgICAgICAgU2VsZWN0aW9uQ29udHJv
bGxlciB0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXI7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29u
dHJvbGxlci5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwotICAgICAgICB0cmlhbFNlbGVjdGlv
bkNvbnRyb2xsZXIuc2V0SXNEaXJlY3Rpb25hbChtX2lzRGlyZWN0aW9uYWwpOwotICAgICAgICB0
cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIubW9kaWZ5KGFsdGVyLCBkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBmYWxzZSk7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uIHRyaWFsRnJhbWVTZWxlY3Rpb247
CisgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKTsK
KyAgICAgICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKG1faXNEaXJlY3Rp
b25hbCk7CisgICAgICAgIHRyaWFsRnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyLCBkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBmYWxzZSk7CiAKLSAgICAgICAgYm9vbCBjaGFuZ2UgPSBzaG91bGRD
aGFuZ2VTZWxlY3Rpb24odHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNlbGVjdGlvbigpKTsKKyAg
ICAgICAgYm9vbCBjaGFuZ2UgPSBzaG91bGRDaGFuZ2VTZWxlY3Rpb24odHJpYWxGcmFtZVNlbGVj
dGlvbi5zZWxlY3Rpb24oKSk7CiAgICAgICAgIGlmICghY2hhbmdlKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTg1MCwxOCArODUwLDE4IEBAIHN0YXRpYyBib29sIGFic29s
dXRlQ2FyZXRZKGNvbnN0IFZpc2libGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTZWxl
Y3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERp
c3RhbmNlLCBib29sIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCiti
b29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNh
bERpc3RhbmNlLCBib29sIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24p
CiB7CiAgICAgaWYgKCF2ZXJ0aWNhbERpc3RhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAodXNlclRyaWdnZXJlZCkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHRy
aWFsU2VsZWN0aW9uQ29udHJvbGxlcjsKLSAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVy
LnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJv
bGxlci5zZXRJc0RpcmVjdGlvbmFsKG1faXNEaXJlY3Rpb25hbCk7Ci0gICAgICAgIHRyaWFsU2Vs
ZWN0aW9uQ29udHJvbGxlci5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFuY2UsIGZhbHNlKTsK
KyAgICAgICAgRnJhbWVTZWxlY3Rpb24gdHJpYWxGcmFtZVNlbGVjdGlvbjsKKyAgICAgICAgdHJp
YWxGcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOworICAgICAgICB0cmlh
bEZyYW1lU2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwobV9pc0RpcmVjdGlvbmFsKTsKKyAgICAg
ICAgdHJpYWxGcmFtZVNlbGVjdGlvbi5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFuY2UsIGZh
bHNlKTsKIAotICAgICAgICBib29sIGNoYW5nZSA9IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlh
bFNlbGVjdGlvbkNvbnRyb2xsZXIuc2VsZWN0aW9uKCkpOworICAgICAgICBib29sIGNoYW5nZSA9
IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbEZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpKTsK
ICAgICAgICAgaWYgKCFjaGFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtOTMzLDcgKzkzMyw3IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRl
cmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5cGUpCitpbnQgRnJhbWVT
ZWxlY3Rpb246OnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5
cGUpCiB7CiAgICAgaW50IHggPSAwOwogCkBAIC05NzIsMTMgKzk3MiwxMyBAQCBpbnQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6eFBvc0ZvclZlcnRpY2FsCiAgICAgcmV0dXJuIHg7CiB9CiAKLXZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2xlYXIo
KQogewogICAgIG1fZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKICAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJpZ2dl
cmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U3RhcnQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSkKICAgICAgICAgc2V0QmFzZShwb3MsIHVzZXJUcmlnZ2VyZWQpOwpAQCAtOTg2LDcg
Kzk4Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U3RhcnQoY29uc3QKICAgICAg
ICAgc2V0RXh0ZW50KHBvcywgdXNlclRyaWdnZXJlZCk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmln
Z2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRFbmQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSkKICAgICAgICAgc2V0RXh0ZW50KHBvcywgdXNlclRyaWdnZXJlZCk7CkBAIC05OTQs
NyArOTk0LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFbmQoY29uc3QgVgogICAg
ICAgICBzZXRCYXNlKHBvcywgdXNlclRyaWdnZXJlZCk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCB1c2VyVHJp
Z2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnBvcywgYm9vbCB1c2VyVHJpZ2dlcmVkKQogewogICAgIFNldFNlbGVjdGlvbk9wdGlvbnMg
b3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKICAgICBpZiAodXNlclRy
aWdnZXJlZCkKQEAgLTEwMDIsNyArMTAwMiw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0QmFzZShjb25zdCAKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MuZGVl
cEVxdWl2YWxlbnQoKSwgbV9zZWxlY3Rpb24uZXh0ZW50KCksIHBvcy5hZmZpbml0eSgpKSwgb3B0
aW9ucyk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0
aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdn
ZXJlZCkKIHsKICAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8
IENsZWFyVHlwaW5nU3R5bGU7CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCkBAIC0xMDEwLDcgKzEw
MTAsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEV4dGVudChjb25zCiAgICAgc2V0
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MuZGVlcEVx
dWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0QmFzZShj
b25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJl
ZCkKIHsKICAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENs
ZWFyVHlwaW5nU3R5bGU7CiAgICAgaWYgKHVzZXJUcmlnZ2VyZWQpCkBAIC0xMDE4LDcgKzEwMTgs
NyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgCiAgICAgc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLCBtX3NlbGVjdGlvbi5leHRlbnQoKSwgYWZmaW5p
dHkpLCBvcHRpb25zKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQo
Y29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2Vy
ZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgU2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOwogICAg
IGlmICh1c2VyVHJpZ2dlcmVkKQpAQCAtMTAyNiwxMiArMTAyNiwxMiBAQCB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnNldEV4dGVudChjb25zCiAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoYm9vbCBm
bGFnKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoYm9vbCBm
bGFnKQogewogICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUgPSBmbGFnOwogfQogCi12b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUNhcmV0UmVjdCgpCit2b2lkIEZyYW1lU2VsZWN0aW9u
Ojp1cGRhdGVDYXJldFJlY3QoKQogewogICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rpb24u
c3RhcnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCku
YW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRS
ZWN0KCk7CkBAIC0xMDc3LDcgKzEwNzcsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVw
ZGF0ZUNhcmV0UmVjCiAgICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9IGZhbHNlOwogfQogCi1S
ZW5kZXJPYmplY3QqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVyZXIoKSBjb25zdAor
UmVuZGVyT2JqZWN0KiBGcmFtZVNlbGVjdGlvbjo6Y2FyZXRSZW5kZXJlcigpIGNvbnN0CiB7CiAg
ICAgTm9kZSogbm9kZSA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBSZW5kZXJPYmplY3QqIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OmNhcmV0CiAgICAgcmV0dXJuIHBhaW50ZWRCeUJsb2NrID8gcmVuZGVyZXIg
OiByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiB9CiAKLUludFJlY3QgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6bG9jYWxDYXJldFJlY3QoKQorSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6bG9jYWxD
YXJldFJlY3QoKQogewogICAgIGlmIChtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKQogICAgICAgICB1
cGRhdGVDYXJldFJlY3QoKTsKQEAgLTExMDAsNyArMTEwMCw3IEBAIEludFJlY3QgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bG9jYWxDYXJldFIKICAgICByZXR1cm4gbV9jYXJldFJlY3Q7CiB9CiAKLUlu
dFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6YWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRl
Qm91bmRzRm9yTG9jYWxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgUmVu
ZGVyT2JqZWN0KiBjYXJldFBhaW50ZXIgPSBjYXJldFJlbmRlcmVyKCk7CiAgICAgaWYgKCFjYXJl
dFBhaW50ZXIpCkBAIC0xMTEyLDcgKzExMTIsNyBAQCBJbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmFic29sdXRlQm91CiAgICAgcmV0dXJuIGNhcmV0UGFpbnRlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAot
SW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjphYnNvbHV0ZUNhcmV0Qm91bmRzKCkKK0ludFJl
Y3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoKQogewogICAgIHJlY29tcHV0
ZUNhcmV0UmVjdCgpOwogICAgIHJldHVybiBtX2Fic0NhcmV0Qm91bmRzOwpAQCAtMTEyOCwxMiAr
MTEyOCwxMiBAQCBzdGF0aWMgSW50UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlCiAgICAg
cmV0dXJuIGNhcmV0OwogfQogCi1JbnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVw
YWludFJlY3QoKSBjb25zdAorSW50UmVjdCBGcmFtZVNlbGVjdGlvbjo6Y2FyZXRSZXBhaW50UmVj
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KHJlcGFp
bnRSZWN0Rm9yQ2FyZXQobG9jYWxDYXJldFJlY3RGb3JQYWludGluZygpKSk7CiB9CiAKLWJvb2wg
U2VsZWN0aW9uQ29udHJvbGxlcjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKK2Jvb2wgRnJhbWVTZWxl
Y3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgpCiB7CiAgICAgaWYgKCFtX2NhcmV0UmVjdE5lZWRz
VXBkYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTczLDcgKzExNzMsNyBAQCBib29s
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJl
bmRlclZpZXcqIHZpZXcpIGNvbnN0Citib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGRSZXBhaW50
Q2FyZXQoY29uc3QgUmVuZGVyVmlldyogdmlldykgY29uc3QKIHsKICAgICBBU1NFUlQodmlldyk7
CiAgICAgRnJhbWUqIGZyYW1lID0gdmlldy0+ZnJhbWVWaWV3KCkgPyB2aWV3LT5mcmFtZVZpZXco
KS0+ZnJhbWUoKSA6IDA7IC8vIFRoZSBmcmFtZSB3aGVyZSB0aGUgc2VsZWN0aW9uIHN0YXJ0ZWQu
CkBAIC0xMTgxLDcgKzExODEsNyBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJl
cGFpbnRDCiAgICAgcmV0dXJuIChjYXJldEJyb3dzaW5nIHx8IGlzQ29udGVudEVkaXRhYmxlKCkp
OwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmludmFsaWRhdGVDYXJldFJlY3QoKQor
dm9pZCBGcmFtZVNlbGVjdGlvbjo6aW52YWxpZGF0ZUNhcmV0UmVjdCgpCiB7CiAgICAgaWYgKCFp
c0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6aW52YWxpZGF0ZUNhcmUKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0
eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAgaWYg
KCFtX2NhcmV0VmlzaWJsZSkKQEAgLTEyNDcsNyArMTI0Nyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6cGFpbnRDYXJldChHcmEKICNlbmRpZgogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVkKSBjb25z
dAordm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QgKnIsIGJv
b2wgc2VsZWN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgp
KSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KHIt
Pm5vZGUoKSk7CkBAIC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmRlYnVnUmVuZGVyZXIoCiAgICAgfQogfQogCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNv
bnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRh
aW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIApAQCAtMTM0OSw3ICsxMzQ5LDcgQEAgYm9vbCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpjb250YWlucyhjb25zdAogLy8gQ2FuJ3QgZG8gdGhpcyBpbXBsaWNp
dGx5IGFzIHBhcnQgb2YgZXZlcnkgc2V0U2VsZWN0aW9uIGNhbGwgYmVjYXVzZSBpbiBzb21lIGNv
bnRleHRzIGl0IG1pZ2h0IG5vdCBiZSBnb29kCiAvLyBmb3IgdGhlIGZvY3VzIHRvIG1vdmUgdG8g
YW5vdGhlciBmcmFtZS4gU28gaW5zdGVhZCB3ZSBjYWxsIGl0IGZyb20gcGxhY2VzIHdoZXJlIHdl
IGFyZSBzZWxlY3Rpbmcgd2l0aCB0aGUKIC8vIG1vdXNlIG9yIHRoZSBrZXlib2FyZCBhZnRlciBz
ZXR0aW5nIHRoZSBzZWxlY3Rpb24uCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEZy
YW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKIHsKICAgICAvLyBG
aW5kIHRoZSBwYXJlbnQgZnJhbWU7IGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gd2UgaGF2ZSBub3Ro
aW5nIHRvIGRvLgogICAgIEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgp
OwpAQCAtMTM5Miw3ICsxMzkyLDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RG
cmFtZUVsZQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwo
KQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKIHsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIApAQCAtMTQxOCw3ICsxNDE4LDcgQEAg
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwoKQogICAgIG5vdGlmeVJlbmRlcmVy
T2ZTZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CiB9CiAKLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBj
bG9zZVR5cGluZykKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2Uq
IHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpCiB7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ2Miw3ICsxNDYyLDcgQEAgYm9v
bCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbgogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3QK
K2Jvb2wgRnJhbWVTZWxlY3Rpb246OmlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoc3RhcnQoKS5pc051bGwoKSB8fCBzdGFydCgpLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAgICAgIHx8IHN0YXJ0KCkuY29udGFp
bmVyTm9kZSgpIHx8ICFzdGFydCgpLmFuY2hvck5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkp
OwpAQCAtMTQ4MCwxNCArMTQ4MCwxNCBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5Q
YXNzd29yZEZpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzdGFy
dE5vZGUpLT5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVy
OjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIEZyYW1lU2Vs
ZWN0aW9uOjpjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuICFpc1RhYmxlRWxl
bWVudChub2RlKSAmJiAhZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpOwogfQogCi12b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCit2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwogCkBAIC0xNTIwLDE4ICsx
NTIwLDE4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNlZE9yQWN0aXYKICAgICAg
ICAgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShhY3RpdmVBbmRGb2N1c2VkKTsKIH0KIAotdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWdlQWN0aXZhdGlvbkNoYW5nZWQoKQordm9pZCBGcmFt
ZVNlbGVjdGlvbjo6cGFnZUFjdGl2YXRpb25DaGFuZ2VkKCkKIHsKICAgICBmb2N1c2VkT3JBY3Rp
dmVTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVT
ZWN1cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
U2VjdXJlS2V5Ym9hcmRFbnRyeUlmQWN0aXZlKCkKIHsKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1l
bnQoKSAmJiBpc0ZvY3VzZWRBbmRBY3RpdmUoKSkKICAgICAgICAgc2V0VXNlU2VjdXJlS2V5Ym9h
cmRFbnRyeShtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFj
dGl2ZSgpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRVc2VTZWN1cmVLZXli
b2FyZEVudHJ5KGJvb2wgZW5hYmxlKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0VXNlU2VjdXJl
S2V5Ym9hcmRFbnRyeShib29sIGVuYWJsZSkKIHsKICAgICBpZiAoZW5hYmxlKQogICAgICAgICBl
bmFibGVTZWN1cmVUZXh0SW5wdXQoKTsKQEAgLTE1MzksNyArMTUzOSw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0VXNlU2VjdXJlS2UKICAgICAgICAgZGlzYWJsZVNlY3VyZVRleHRJ
bnB1dCgpOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEZvY3VzZWQoYm9vbCBm
bGFnKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZChib29sIGZsYWcpCiB7CiAgICAg
aWYgKG1fZm9jdXNlZCA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC0xNTQ4LDEyICsxNTQ4
LDEyIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0Rm9jdXNlZChib28KICAgICBmb2N1
c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVy
Ojppc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25zdAorYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNGb2N1
c2VkQW5kQWN0aXZlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUt
PnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgp
OwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFwcGVhcmFuY2UoKQordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lz
RHJhZ0NhcmV0Q29udHJvbGxlcik7CiAKQEAgLTE2MTAsNyArMTYxMCw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6dXBkYXRlQXBwZWFyYW4KICAgICAgICAgZW5kUG9zID0gY2FuZGlkYXRl
OwogCiAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBl
bmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0aW9u
IGlzIGRlbGV0ZWQKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHlldCBub3RpZnkgdGhlIFNlbGVj
dGlvbkNvbnRyb2xsZXIgb2YgdGV4dCByZW1vdmFsLgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qg
eWV0IG5vdGlmeSB0aGUgRnJhbWVTZWxlY3Rpb24gb2YgdGV4dCByZW1vdmFsLgogICAgIGlmIChz
dGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVy
ZXIoKTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjp1cGRhdGVBcHBlYXJhbgogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRDYXJldFZpc2libGUoYm9vbCBmbGFnKQordm9pZCBGcmFtZVNlbGVjdGlv
bjo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZykKIHsKICAgICBpZiAobV9jYXJldFZpc2libGUg
PT0gZmxhZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAgdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRDYXJldFZpc2libAogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsK
IH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhckNhcmV0UmVjdElmTmVlZGVkKCkK
K3ZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKQogewogI2lmIEVO
QUJMRShURVhUX0NBUkVUKQogICAgIGlmICghbV9jYXJldFBhaW50KQpAQCAtMTYzNyw3ICsxNjM3
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhckNhcmV0UmVjdAogI2VuZGlmCiB9
CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8
U2VsZWN0aW9uQ29udHJvbGxlcj4qKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1Rp
bWVyRmlyZWQoVGltZXI8RnJhbWVTZWxlY3Rpb24+KikKIHsKICNpZiBFTkFCTEUoVEVYVF9DQVJF
VCkKICAgICBBU1NFUlQobV9jYXJldFZpc2libGUpOwpAQCAtMTY1MCw3ICsxNjUwLDcgQEAgdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldEJsaW5rVGltZQogI2VuZGlmCiB9CiAKLXZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29s
IHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpub3RpZnlSZW5kZXJlck9mU2Vs
ZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKQEAgLTE2NzcsNyArMTY3Nyw3IEBAIHN0YXRp
YyBib29sIGlzRnJhbWVFbGVtZW50KGNvbnN0IE5vZGUqIG4KICAgICByZXR1cm4gd2lkZ2V0ICYm
IHdpZGdldC0+aXNGcmFtZVZpZXcoKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpz
ZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRO
b2RlSWZOZWVkZWQoKQogewogICAgIGlmIChpc05vbmUoKSB8fCAhaXNGb2N1c2VkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3MDksMTAgKzE3MDksMTAgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRGb2N1c2VkTm9kZQogICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRGb2N1c2VkTm9kZSgwLCBtX2ZyYW1lKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50
IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgY29uc3QKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdAogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAg
IFNlbGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIgPSBtX2ZyYW1lLT5wYWdl
KCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogZHJhZ0NhcmV0
Q29udHJvbGxlciA9IG1fZnJhbWUtPnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwogICAg
IEFTU0VSVChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkpOwogICAg
IGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICAgICBkcmFnQ2FyZXRDb250
cm9sbGVyLT5wYWludENhcmV0KHAsIHR4LCB0eSwgY2xpcFJlY3QpOwpAQCAtMTcyNCwxOSArMTcy
NCwxOSBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0CiAjZW5kaWYK
IH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gU2VsZWN0aW9uQ29u
dHJvbGxlcjo6Y29weVR5cGluZ1N0eWxlKCkgY29uc3QKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IEZyYW1lU2VsZWN0aW9uOjpjb3B5VHlwaW5nU3R5bGUoKSBjb25zdAog
ewogICAgIGlmICghbV90eXBpbmdTdHlsZSB8fCAhbV90eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUtPnN0eWxlKCktPmNvcHko
KTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGREZWxldGVTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAorYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5z
aG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9
CiAKLUZsb2F0UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpib3VuZHMoYm9vbCBjbGlwVG9WaXNp
YmxlQ29udGVudCkgY29uc3QKK0Zsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6Ym91bmRzKGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogcm9vdCA9IG1f
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKTsKQEAgLTE3NDcsNyArMTc0Nyw3IEBAIEZsb2F0UmVjdCBTZWxlY3Rpb25Db250cm9s
bGVyOjpib3VuZHMoYm8KICAgICByZXR1cm4gY2xpcFRvVmlzaWJsZUNvbnRlbnQgPyBpbnRlcnNl
Y3Rpb24oc2VsZWN0aW9uUmVjdCwgdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkpIDogc2VsZWN0
aW9uUmVjdDsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpnZXRDbGlwcGVkVmlzaWJs
ZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzKSBjb25zdAordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcykgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiByb290ID0g
bV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CiAgICAgaWYgKCFyb290KQpAQCAtMTc4Myw3ICsx
NzgzLDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZvcm0oTm9kZQogfQogCiAv
LyBXZSBsb29rIGZvciBlaXRoZXIgdGhlIGZvcm0gY29udGFpbmluZyB0aGUgY3VycmVudCBmb2N1
cywgb3IgZm9yIG9uZSBpbW1lZGlhdGVseSBhZnRlciBpdAotSFRNTEZvcm1FbGVtZW50KiBTZWxl
Y3Rpb25Db250cm9sbGVyOjpjdXJyZW50Rm9ybSgpIGNvbnN0CitIVE1MRm9ybUVsZW1lbnQqIEZy
YW1lU2VsZWN0aW9uOjpjdXJyZW50Rm9ybSgpIGNvbnN0CiB7CiAgICAgLy8gU3RhcnQgbG9va2lu
ZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0
aGUgc2VsZWN0aW9uIGlzLgogICAgIE5vZGUqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
Zm9jdXNlZE5vZGUoKTsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIEhUTUxGb3JtRWxlbWVudCogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y3UKICAgICByZXR1cm4gc2NhbkZvckZvcm0oc3RhcnQpOwogfQog
Ci12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxB
bGlnbm1lbnQmIGFsaWdubWVudCwgYm9vbCByZXZlYWxFeHRlbnQpCit2b2lkIEZyYW1lU2VsZWN0
aW9uOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJv
b2wgcmV2ZWFsRXh0ZW50KQogewogICAgIEludFJlY3QgcmVjdDsKIApAQCAtMTgzMSw3ICsxODMx
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZXZlYWxTZWxlY3RpbwogICAgIH0KIH0K
IAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCit2b2lk
IEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiB7CiAgICAgLy8gUHV0IGEg
Y2FyZXQgaW5zaWRlIHRoZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVp
dGhlciB0aGUKICAgICAvLyBlbnRpcmUgV2ViVmlldyBpcyBlZGl0YWJsZSBvciBkZXNpZ25Nb2Rl
IGlzIG9uIGZvciB0aGlzIGRvY3VtZW50KS4KQEAgLTE4NDgsMTkgKzE4NDgsMTkgQEAgdm9pZCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb25GcgogICAgICAgICBzZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05T
VFJFQU0pKTsKIH0KIAotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAorYm9vbCBG
cmFtZVNlbGVjdGlvbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG5ld1NlbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkt
PnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxl
Y3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiAjaWZuZGVmIE5ERUJVRwogCi12b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAordm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIo
Y2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgbV9zZWxlY3Rpb24u
Zm9ybWF0Rm9yRGVidWdnZXIoYnVmZmVyLCBsZW5ndGgpOwogfQogCi12b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
aG93VHJlZUZvclRoaXMoKSBjb25zdAogewogICAgIG1fc2VsZWN0aW9uLnNob3dUcmVlRm9yVGhp
cygpOwogfQpAQCAtMTg3MSwxMiArMTg3MSwxMiBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNob3dUcmVlRm9yVGhpCiAKICNpZm5kZWYgTkRFQlVHCiAKLXZvaWQgc2hvd1RyZWUoY29uc3Qg
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciYgc2VsKQordm9pZCBzaG93VHJlZShjb25zdCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYgc2VsKQogewogICAgIHNlbC5zaG93VHJlZUZvclRoaXMo
KTsKIH0KIAotdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVy
KiBzZWwpCit2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uKiBzZWwp
CiB7CiAgICAgaWYgKHNlbCkKICAgICAgICAgc2VsLT5zaG93VHJlZUZvclRoaXMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHJldmlzaW9uIDg1ODM0KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDo4NTgzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2VsZWN0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIFNlbGVjdGlv
bkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
aGFyYWN0ZXJEYXRhOworY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CitjbGFzcyBG
cmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2Ns
YXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBTZXR0aW5nczsKK2Ns
YXNzIFZpc2libGVQb3NpdGlvbjsKKworZW51bSBEaXJlY3Rpb25hbGl0eVBvbGljeSB7IE1ha2VO
b25EaXJlY3Rpb25hbFNlbGVjdGlvbiwgTWFrZURpcmVjdGlvbmFsU2VsZWN0aW9uIH07CisKK2Ns
YXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlbGVj
dGlvbkNvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
bnVtIEVBbHRlcmF0aW9uIHsgQWx0ZXJhdGlvbk1vdmUsIEFsdGVyYXRpb25FeHRlbmQgfTsKKyAg
ICBlbnVtIEN1cnNvckFsaWduT25TY3JvbGwgeyBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5
cyB9OworICAgIGVudW0gU2V0U2VsZWN0aW9uT3B0aW9uIHsKKyAgICAgICAgQ2xvc2VUeXBpbmcg
PSAxIDw8IDAsCisgICAgICAgIENsZWFyVHlwaW5nU3R5bGUgPSAxIDw8IDEsCisgICAgICAgIFVz
ZXJUcmlnZ2VyZWQgPSAxIDw8IDIsCisgICAgICAgIFNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCA9
IDEgPDwgMywKKyAgICB9OworICAgIHR5cGVkZWYgdW5zaWduZWQgU2V0U2VsZWN0aW9uT3B0aW9u
czsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqID0gMCwgYm9vbCBpc0RyYWdDYXJl
dENvbnRyb2xsZXIgPSBmYWxzZSk7CisKKyAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOyB9Cisg
ICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
Q29udGVudEVkaXRhYmxlKCk7IH0KKyAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsgfQor
ICAgIE5vZGUqIHNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
LnNoYWRvd1RyZWVSb290Tm9kZSgpOyB9CisgICAgIAorICAgIHZvaWQgbW92ZVRvKGNvbnN0IFJh
bmdlKiwgRUFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7CisgICAgdm9pZCBt
b3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2Us
IEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQpOworICAg
IHZvaWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKKyAgICB2b2lkIG1vdmVUbyhjb25zdCBQ
b3NpdGlvbiYsIEVBZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworICAgIHZv
aWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKKworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFNldFNlbGVjdGlvbk9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGln
bkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51
bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSA9IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbik7
CisgICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5IGRpcmVj
dGlvbmFsaXR5ID0gTWFrZURpcmVjdGlvbmFsU2VsZWN0aW9uKSB7IHNldFNlbGVjdGlvbihzZWxl
Y3Rpb24sIENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSwgQWxpZ25DdXJzb3JPblNjcm9s
bElmTmVlZGVkLCBncmFudWxhcml0eSwgZGlyZWN0aW9uYWxpdHkpOyB9CisgICAgYm9vbCBzZXRT
ZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICB2
b2lkIHNlbGVjdEFsbCgpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICAvLyBDYWxsIHRo
aXMgYWZ0ZXIgZG9pbmcgdXNlci10cmlnZ2VyZWQgc2VsZWN0aW9ucyB0byBtYWtlIGl0IGVhc3kg
dG8gZGVsZXRlIHRoZSBmcmFtZSB5b3UgZW50aXJlbHkgc2VsZWN0ZWQuCisgICAgdm9pZCBzZWxl
Y3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOworCisgICAgYm9vbCBjb250
YWlucyhjb25zdCBJbnRQb2ludCYpOworCisgICAgVmlzaWJsZVNlbGVjdGlvbjo6U2VsZWN0aW9u
VHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uc2VsZWN0aW9u
VHlwZSgpOyB9CisKKyAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpOyB9CisKKyAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgU2Vs
ZWN0aW9uRGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZh
bHNlKTsKKyAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgaW50IHZlcnRpY2FsRGlzdGFuY2Us
IGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25D
dXJzb3JPblNjcm9sbElmTmVlZGVkKTsKKyAgICBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHko
KSBjb25zdCB7IHJldHVybiBtX2dyYW51bGFyaXR5OyB9CisKKyAgICB2b2lkIHNldFN0YXJ0KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmLCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7CisgICAg
dm9pZCBzZXRFbmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGJvb2wgdXNlclRyaWdnZXJlZCA9
IGZhbHNlKTsKKyAgICAKKyAgICB2b2lkIHNldEJhc2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Ym9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworICAgIHZvaWQgc2V0QmFzZShjb25zdCBQb3Np
dGlvbiYsIEVBZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworICAgIHZvaWQg
c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZh
bHNlKTsKKyAgICB2b2lkIHNldEV4dGVudChjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSwgYm9v
bCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOworCisgICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmJhc2UoKTsgfQorICAgIFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmV4dGVudCgpOyB9CisgICAgUG9zaXRpb24gc3RhcnQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5zdGFydCgpOyB9CisgICAgUG9zaXRpb24gZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uZW5kKCk7IH0KKworICAgIC8vIFJldHVybiB0aGUg
cmVuZGVyZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0IChpbiB0
aGUgc2VsZWN0aW9uIHN0YXJ0IG5vZGUpCisgICAgUmVuZGVyT2JqZWN0KiBjYXJldFJlbmRlcmVy
KCkgY29uc3Q7CisKKyAgICAvLyBDYXJldCByZWN0IGxvY2FsIHRvIHRoZSBjYXJldCdzIHJlbmRl
cmVyCisgICAgSW50UmVjdCBsb2NhbENhcmV0UmVjdCgpOworICAgIEludFJlY3QgbG9jYWxDYXJl
dFJlY3RGb3JQYWludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fY2FyZXRSZWN0OyB9CisKKyAgICAv
LyBCb3VuZHMgb2YgKHBvc3NpYmx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29y
ZHMKKyAgICBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICB2b2lkIHNldENhcmV0
UmVjdE5lZWRzVXBkYXRlKGJvb2wgZmxhZyA9IHRydWUpOworCisgICAgdm9pZCBzZXRJc0RpcmVj
dGlvbmFsKGJvb2wpOworICAgIHZvaWQgd2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24sIFNlbGVj
dGlvbkRpcmVjdGlvbik7CisKKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uLmlzTm9uZSgpOyB9CisgICAgYm9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rpb24uaXNDYXJldCgpOyB9CisgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb24uaXNSYW5nZSgpOyB9CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCk7IH0KKyAgICBib29sIGlzSW5Q
YXNzd29yZEZpZWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbi5pc0FsbChydWxlKTsgfQorICAgIAorICAgIFBhc3NSZWZQdHI8UmFuZ2U+
IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsgfQorCisgICAgdm9pZCBkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCosIGJv
b2wgc2VsZWN0ZWQpIGNvbnN0OworCisgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7
CisgICAgdm9pZCB0ZXh0V2lsbEJlUmVwbGFjZWQoQ2hhcmFjdGVyRGF0YSosIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgdm9p
ZCBzZXRDYXJldFZpc2libGUoYm9vbCA9IHRydWUpOworICAgIHZvaWQgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOworICAgIGJvb2wgcmVjb21wdXRlQ2FyZXRSZWN0KCk7IC8vIHJldHVybnMgdHJ1
ZSBpZiBjYXJldCByZWN0IG1vdmVkCisgICAgdm9pZCBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7Cisg
ICAgdm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCk7CisKKyAgICAvLyBVc2VkIHRvIHN1c3BlbmQgY2FyZXQgYmxp
bmtpbmcgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgdm9pZCBzZXRDYXJldEJsaW5raW5n
U3VzcGVuZGVkKGJvb2wgc3VzcGVuZGVkKSB7IG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkID0g
c3VzcGVuZGVkOyB9CisgICAgYm9vbCBpc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZDsgfQorCisgICAgLy8gRm9jdXMKKyAg
ICB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CisgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJl
dHVybiBtX2ZvY3VzZWQ7IH0KKyAgICBib29sIGlzRm9jdXNlZEFuZEFjdGl2ZSgpIGNvbnN0Owor
ICAgIHZvaWQgcGFnZUFjdGl2YXRpb25DaGFuZ2VkKCk7CisKKyAgICAvLyBQYWludGluZy4KKyAg
ICB2b2lkIHVwZGF0ZUFwcGVhcmFuY2UoKTsKKworICAgIHZvaWQgdXBkYXRlU2VjdXJlS2V5Ym9h
cmRFbnRyeUlmQWN0aXZlKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBmb3JtYXRGb3JE
ZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CisgICAgdm9pZCBz
aG93VHJlZUZvclRoaXMoKSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxk
RGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKKyAgICB2b2lk
IHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKKyAgICB2b2lkIG5vdGlmeVJlbmRlcmVyT2ZTZWxl
Y3Rpb25DaGFuZ2UoYm9vbCB1c2VyVHJpZ2dlcmVkKTsKKworICAgIHZvaWQgcGFpbnREcmFnQ2Fy
ZXQoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0KSBjb25zdDsKKworICAgIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUoKSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5VHlwaW5nU3R5bGUo
KSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxl
Pik7CisgICAgdm9pZCBjbGVhclR5cGluZ1N0eWxlKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRz
KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKworICAgIHZvaWQgZ2V0
Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYpIGNvbnN0Owor
CisgICAgSFRNTEZvcm1FbGVtZW50KiBjdXJyZW50Rm9ybSgpIGNvbnN0OworCisgICAgdm9pZCBy
ZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiA9IFNjcm9sbEFsaWdubWVudDo6
YWxpZ25DZW50ZXJJZk5lZWRlZCwgYm9vbCByZXZlYWxFeHRlbnQgPSBmYWxzZSk7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworCitwcml2YXRlOgorICAgIGVudW0gRVBvc2l0aW9u
VHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9OworCisgICAgdm9pZCByZXNwb25kVG9O
b2RlTW9kaWZpY2F0aW9uKE5vZGUqLCBib29sIGJhc2VSZW1vdmVkLCBib29sIGV4dGVudFJlbW92
ZWQsIGJvb2wgc3RhcnRSZW1vdmVkLCBib29sIGVuZFJlbW92ZWQpOworICAgIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uRm9yUGxhdGZvcm0oYm9vbCBpc0dldFN0YXJ0KSBjb25zdDsKKyAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRGb3JQbGF0Zm9ybSgpIGNvbnN0OworICAgIFZpc2libGVQb3NpdGlvbiBlbmRG
b3JQbGF0Zm9ybSgpIGNvbnN0OworCisgICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeUV4dGVuZGlu
Z1JpZ2h0KFRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5
TW92aW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5
TW92aW5nRm9yd2FyZChUZXh0R3JhbnVsYXJpdHkpOworICAgIFZpc2libGVQb3NpdGlvbiBtb2Rp
ZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIG1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gbW9kaWZ5TW92aW5nQmFja3dhcmQoVGV4dEdyYW51bGFyaXR5KTsKKworICAgIHZvaWQgdXBk
YXRlQ2FyZXRSZWN0KCk7CisgICAgSW50UmVjdCBjYXJldFJlcGFpbnRSZWN0KCkgY29uc3Q7Cisg
ICAgYm9vbCBzaG91bGRSZXBhaW50Q2FyZXQoY29uc3QgUmVuZGVyVmlldyogdmlldykgY29uc3Q7
CisKKyAgICBpbnQgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUp
OworICAgIAorICAgIHZvaWQgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgp
OworCisgICAgdm9pZCBmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKTsKKyAgICBib29sIGNh
cmV0UmVuZGVyc0luc2lkZU5vZGUoTm9kZSopIGNvbnN0OworICAgIAorICAgIEludFJlY3QgYWJz
b2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworCisgICAgdm9p
ZCBjYXJldEJsaW5rVGltZXJGaXJlZChUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiopOworCisg
ICAgdm9pZCBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wpOworCisgICAgRnJhbWUqIG1f
ZnJhbWU7CisKKyAgICBpbnQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CisKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uOworICAgIFRleHRHcmFudWxhcml0eSBtX2dy
YW51bGFyaXR5OworCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKKwor
ICAgIFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fY2FyZXRCbGlua1RpbWVyOworCisgICAg
SW50UmVjdCBtX2NhcmV0UmVjdDsgLy8gY2FyZXQgcmVjdCBpbiBjb29yZHMgbG9jYWwgdG8gdGhl
IHJlbmRlcmVyIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQKKyAgICBJbnRSZWN0
IG1fYWJzQ2FyZXRCb3VuZHM7IC8vIGFic29sdXRlIGJvdW5kaW5nIHJlY3QgZm9yIHRoZSBjYXJl
dAorICAgIEludFJlY3QgbV9hYnNvbHV0ZUNhcmV0UmVwYWludEJvdW5kczsKKyAgICAKKyAgICBi
b29sIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGU7IC8vIHRydWUgaWYgbV9jYXJldFJlY3QgYW5kIG1f
YWJzQ2FyZXRCb3VuZHMgbmVlZCB0byBiZSBjYWxjdWxhdGVkCisgICAgYm9vbCBtX2Fic0NhcmV0
Qm91bmRzRGlydHk7CisgICAgYm9vbCBtX2lzRGlyZWN0aW9uYWw7CisgICAgYm9vbCBtX2lzRHJh
Z0NhcmV0Q29udHJvbGxlcjsKKyAgICBib29sIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkOwor
ICAgIGJvb2wgbV9mb2N1c2VkOworICAgIGJvb2wgbV9jYXJldFZpc2libGU7CisgICAgYm9vbCBt
X2NhcmV0UGFpbnQ7Cit9OworCitpbmxpbmUgRWRpdGluZ1N0eWxlKiBTZWxlY3Rpb25Db250cm9s
bGVyOjp0eXBpbmdTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUuZ2V0
KCk7Cit9CisKK2lubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyVHlwaW5nU3R5
bGUoKQoreworICAgIG1fdHlwaW5nU3R5bGUuY2xlYXIoKTsKK30KKworaW5saW5lIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0VHlwaW5nU3R5bGUoUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+
IHN0eWxlKQoreworICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKK30KKworI2lmICEoUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKENIUk9NSVVNKSkKK2lubGluZSB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25D
aGFuZ2UoKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmbmRl
ZiBOREVCVUcKKy8vIE91dHNpZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlIGZvciBlYXNlIG9mIGlu
dm9jYXRpb24gZnJvbSBnZGIuCit2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlv
bkNvbnRyb2xsZXImKTsKK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uQ29u
dHJvbGxlciopOworI2VuZGlmCisKKyNlbmRpZiAvLyBTZWxlY3Rpb25Db250cm9sbGVyX2gKKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYg
U2VsZWN0aW9uQ29udHJvbGxlcl9oCi0jZGVmaW5lIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAorI2lm
bmRlZiBGcmFtZVNlbGVjdGlvbl9oCisjZGVmaW5lIEZyYW1lU2VsZWN0aW9uX2gKIAogI2luY2x1
ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTQ4LDggKzQ4LDkg
QEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCiBlbnVtIERpcmVjdGlvbmFsaXR5UG9saWN5IHsg
TWFrZU5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uLCBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rpb24gfTsK
IAotY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2VsZWN0aW9uQ29udHJvbGxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgRnJh
bWVTZWxlY3Rpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyYW1lU2VsZWN0aW9uKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBlbnVtIEVBbHRlcmF0
aW9uIHsgQWx0ZXJhdGlvbk1vdmUsIEFsdGVyYXRpb25FeHRlbmQgfTsKICAgICBlbnVtIEN1cnNv
ckFsaWduT25TY3JvbGwgeyBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsCkBAIC02Miw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQgU2V0U2VsZWN0aW9u
T3B0aW9uczsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqID0gMCwgYm9vbCBpc0Ry
YWdDYXJldENvbnRyb2xsZXIgPSBmYWxzZSk7CisgICAgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0g
MCwgYm9vbCBpc0RyYWdDYXJldENvbnRyb2xsZXIgPSBmYWxzZSk7CiAKICAgICBFbGVtZW50KiBy
b290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24ucm9vdEVkaXRh
YmxlRWxlbWVudCgpOyB9CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KQEAgLTIxNSw3ICsyMTYsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3Qo
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBjYXJldEJsaW5rVGltZXJGaXJlZChU
aW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiopOworICAgIHZvaWQgY2FyZXRCbGlua1RpbWVyRmly
ZWQoVGltZXI8RnJhbWVTZWxlY3Rpb24+Kik7CiAKICAgICB2b2lkIHNldFVzZVNlY3VyZUtleWJv
YXJkRW50cnkoYm9vbCk7CiAKQEAgLTIyOCw3ICsyMjksNyBAQCBwcml2YXRlOgogCiAgICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKIAotICAgIFRpbWVyPFNlbGVjdGlvbkNv
bnRyb2xsZXI+IG1fY2FyZXRCbGlua1RpbWVyOworICAgIFRpbWVyPEZyYW1lU2VsZWN0aW9uPiBt
X2NhcmV0QmxpbmtUaW1lcjsKIAogICAgIEludFJlY3QgbV9jYXJldFJlY3Q7IC8vIGNhcmV0IHJl
Y3QgaW4gY29vcmRzIGxvY2FsIHRvIHRoZSByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgcGFpbnRp
bmcgdGhlIGNhcmV0CiAgICAgSW50UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBhYnNvbHV0ZSBi
b3VuZGluZyByZWN0IGZvciB0aGUgY2FyZXQKQEAgLTI0NCwyMyArMjQ1LDIzIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2NhcmV0UGFpbnQ7CiB9OwogCi1pbmxpbmUgRWRpdGluZ1N0eWxlKiBTZWxl
Y3Rpb25Db250cm9sbGVyOjp0eXBpbmdTdHlsZSgpIGNvbnN0CitpbmxpbmUgRWRpdGluZ1N0eWxl
KiBGcmFtZVNlbGVjdGlvbjo6dHlwaW5nU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3R5
cGluZ1N0eWxlLmdldCgpOwogfQogCi1pbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpj
bGVhclR5cGluZ1N0eWxlKCkKK2lubGluZSB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhclR5cGlu
Z1N0eWxlKCkKIHsKICAgICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7CiB9CiAKLWlubGluZSB2b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzdHlsZSkKK2lubGluZSB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRUeXBpbmdTdHlsZShQ
YXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUpCiB7CiAgICAgbV90eXBpbmdTdHlsZSA9IHN0
eWxlOwogfQogCiAjaWYgIShQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oQ0hST01JVU0pKQotaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNj
ZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCitpbmxpbmUgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCiB7CiB9CiAjZW5kaWYK
QEAgLTI2OSw5ICsyNzAsOSBAQCBpbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3Rp
ZnlBCiAKICNpZm5kZWYgTkRFQlVHCiAvLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBm
b3IgZWFzZSBvZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgotdm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyJik7Ci12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb24mKTsKK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b24qKTsKICNlbmRpZgogCi0jZW5kaWYgLy8gU2VsZWN0aW9uQ29udHJvbGxlcl9oCisjZW5kaWYg
Ly8gRnJhbWVTZWxlY3Rpb25faAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVt
b3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNp
bmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIg
KzM5LDEyIEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U21hcnRSZXBsYWNlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ODUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0gIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEu
aCIKLSNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNp
bmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJh
c2UuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgotI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5oIgotI2luY2x1ZGUgIlNlY3VyZVRleHRJbnB1dC5oIgotI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5o
IgotI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVm
aW5lIEVESVRfREVCVUcgMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7Ci0KLWNvbnN0IGludCBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
biA9IElOVF9NSU47Ci0KLVNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIo
RnJhbWUqIGZyYW1lLCBib29sIGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKLSAgICA6IG1fZnJhbWUo
ZnJhbWUpCi0gICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JW
ZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKLSAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpCi0gICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmU2VsZWN0aW9uQ29udHJv
bGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCi0gICAgLCBtX2NhcmV0UmVjdE5lZWRzVXBkYXRl
KHRydWUpCi0gICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKLSAgICAsIG1faXNEcmFn
Q2FyZXRDb250cm9sbGVyKGlzRHJhZ0NhcmV0Q29udHJvbGxlcikKLSAgICAsIG1faXNDYXJldEJs
aW5raW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZyYW1lICYmIGZyYW1lLT5w
YWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgp
ID09IGZyYW1lKQotICAgICwgbV9jYXJldFZpc2libGUoaXNEcmFnQ2FyZXRDb250cm9sbGVyKQot
ICAgICwgbV9jYXJldFBhaW50KHRydWUpCi17Ci0gICAgc2V0SXNEaXJlY3Rpb25hbChmYWxzZSk7
Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24p
Ci17Ci0gICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVh
clR5cGluZ1N0eWxlOwotICAgIGlmICh1c2VyVHJpZ2dlcmVkKQotICAgICAgICBvcHRpb25zIHw9
IFVzZXJUcmlnZ2VyZWQ7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLmRl
ZXBFcXVpdmFsZW50KCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuYWZmaW5pdHkoKSksIG9w
dGlvbnMsIGFsaWduKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZiYXNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmV4dGVudCwg
Ym9vbCB1c2VyVHJpZ2dlcmVkKQotewotICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9
IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkK
LSAgICAgICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOwotICAgIHNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSwgZXh0ZW50LmRlZXBFcXVpdmFsZW50
KCksIGJhc2UuYWZmaW5pdHkoKSksIG9wdGlvbnMpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0g
ICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGFmZmluaXR5KSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBD
bG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0g
ICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IHIgPyBWaXNpYmxlU2VsZWN0aW9uKHItPnN0YXJ0UG9zaXRpb24oKSwgci0+ZW5k
UG9zaXRpb24oKSwgYWZmaW5pdHkpIDogVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbigpLCBQb3Np
dGlvbigpLCBhZmZpbml0eSk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7
Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZi
YXNlLCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgdXNl
clRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5
cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAgaWYgKHVzZXJUcmlnZ2VyZWQpCi0gICAgICAg
IG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihiYXNlLCBleHRlbnQsIGFmZmluaXR5KSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIFNl
dFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucywgQ3Vyc29yQWxpZ25PblNjcm9sbCBhbGlnbiwgVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBkaXJlY3Rpb25h
bGl0eVBvbGljeSkKLXsKLSAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7Ci0KLSAgICBi
b29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIENsb3NlVHlwaW5nOwotICAgIGJvb2wgc2hvdWxk
Q2xlYXJUeXBpbmdTdHlsZSA9IG9wdGlvbnMgJiBDbGVhclR5cGluZ1N0eWxlOwotICAgIGJvb2wg
dXNlclRyaWdnZXJlZCA9IG9wdGlvbnMgJiBVc2VyVHJpZ2dlcmVkOwotCi0gICAgc2V0SXNEaXJl
Y3Rpb25hbChkaXJlY3Rpb25hbGl0eVBvbGljeSA9PSBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rpb24p
OwotCi0gICAgaWYgKG1faXNEcmFnQ2FyZXRDb250cm9sbGVyKSB7Ci0gICAgICAgIGludmFsaWRh
dGVDYXJldFJlY3QoKTsKLSAgICAgICAgbV9zZWxlY3Rpb24gPSBzOwotICAgICAgICBtX2NhcmV0
UmVjdE5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVjdCgpOwot
ICAgICAgICB1cGRhdGVDYXJldFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIW1fZnJhbWUpIHsKLSAgICAgICAgbV9zZWxlY3Rpb24gPSBzOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNl
bGVjdGlvbgotICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2FuIGdl
dCBpbnRvIGFuIGluZmluaXRlIGxvb3AKLSAgICBpZiAocy5iYXNlKCkuYW5jaG9yTm9kZSgpKSB7
Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHMuYmFzZSgpLmFuY2hvck5vZGUoKS0+ZG9j
dW1lbnQoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRv
Y3VtZW50LT5mcmFtZSgpICE9IG1fZnJhbWUgJiYgZG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1l
bnQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRT
ZWxlY3Rpb24ocywgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoY2xvc2VUeXBpbmcpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3Nl
VHlwaW5nKG1fZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKSk7Ci0KLSAgICBpZiAo
c2hvdWxkQ2xlYXJUeXBpbmdTdHlsZSkKLSAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwotCi0g
ICAgaWYgKG1fc2VsZWN0aW9uID09IHMpIHsKLSAgICAgICAgLy8gRXZlbiBpZiBzZWxlY3Rpb24g
d2FzIG5vdCBjaGFuZ2VkLCBzZWxlY3Rpb24gb2Zmc2V0cyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQu
Ci0gICAgICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVj
dGlvbiA9IG1fc2VsZWN0aW9uOwotCi0gICAgbV9zZWxlY3Rpb24gPSBzOwotICAgIAotICAgIG1f
Y2FyZXRSZWN0TmVlZHNVcGRhdGUgPSB0cnVlOwotICAgIAotICAgIGlmICghcy5pc05vbmUoKSkK
LSAgICAgICAgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOwotICAgIAotICAgIHVwZGF0ZUFwcGVh
cmFuY2UoKTsKLQotICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2
ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgotICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkg
dGhlIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCi0gICAgbV94
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbjsKLSAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgp
OwotICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7Ci0g
ICAgbV9mcmFtZS0+ZWRpdG9yKCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0
aW9uLCBvcHRpb25zKTsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkgewotICAgICAgICBTY3JvbGxB
bGlnbm1lbnQgYWxpZ25tZW50OwotCi0gICAgICAgIGlmIChtX2ZyYW1lLT5lZGl0b3IoKS0+YmVo
YXZpb3IoKS5zaG91bGRDZW50ZXJBbGlnbldoZW5TZWxlY3Rpb25Jc1JldmVhbGVkKCkpCi0gICAg
ICAgICAgICBhbGlnbm1lbnQgPSAoYWxpZ24gPT0gQWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cykg
PyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50Ojph
bGlnbkNlbnRlcklmTmVlZGVkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbGlnbm1lbnQg
PSAoYWxpZ24gPT0gQWxpZ25DdXJzb3JPblNjcm9sbEFsd2F5cykgPyBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9wQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkOwot
Ci0gICAgICAgIHJldmVhbFNlbGVjdGlvbihhbGlnbm1lbnQsIHRydWUpOwotICAgIH0KLQotICAg
IG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKTsKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5lbnF1ZXVlRG9jdW1lbnRFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXN0YXRpYyBib29s
IHJlbW92aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pCi17Ci0gICAgaWYgKCFwb3NpdGlvbi5hbmNob3JOb2RlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChwb3NpdGlvbi5hbmNob3JOb2RlKCkgPT0gbm9kZSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+Y29udGFpbnMocG9zaXRpb24u
YW5jaG9yTm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5hbmNob3JOb2RlKCkt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpu
b2RlV2lsbEJlUmVtb3ZlZChOb2RlICpub2RlKQotewotICAgIGlmIChpc05vbmUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gVGhlcmUgY2FuJ3QgYmUgYSBzZWxlY3Rpb24gaW5zaWRlIGEg
ZnJhZ21lbnQsIHNvIGlmIGEgZnJhZ21lbnQncyBub2RlIGlzIGJlaW5nIHJlbW92ZWQsCi0gICAg
Ly8gdGhlIHNlbGVjdGlvbiBpbiB0aGUgZG9jdW1lbnQgdGhhdCBjcmVhdGVkIHRoZSBmcmFnbWVu
dCBuZWVkcyBubyBhZGp1c3RtZW50LgotICAgIGlmIChub2RlICYmIGhpZ2hlc3RBbmNlc3Rvcihu
b2RlKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKG5vZGUsIHJlbW92aW5n
Tm9kZVJlbW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5iYXNlKCkpLCByZW1vdmluZ05v
ZGVSZW1vdmVzUG9zaXRpb24obm9kZSwgbV9zZWxlY3Rpb24uZXh0ZW50KCkpLAotICAgICAgICBy
ZW1vdmluZ05vZGVSZW1vdmVzUG9zaXRpb24obm9kZSwgbV9zZWxlY3Rpb24uc3RhcnQoKSksIHJl
bW92aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihub2RlLCBtX3NlbGVjdGlvbi5lbmQoKSkpOwotfQot
Ci12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9k
ZSogbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRSZW1vdmVkLCBib29sIHN0YXJ0
UmVtb3ZlZCwgYm9vbCBlbmRSZW1vdmVkKQotewotICAgIGJvb2wgY2xlYXJSZW5kZXJUcmVlU2Vs
ZWN0aW9uID0gZmFsc2U7Ci0gICAgYm9vbCBjbGVhckRPTVRyZWVTZWxlY3Rpb24gPSBmYWxzZTsK
LQotICAgIGlmIChzdGFydFJlbW92ZWQgfHwgZW5kUmVtb3ZlZCkgewotICAgICAgICAvLyBGSVhN
RTogV2hlbiBlbmRwb2ludHMgYXJlIHJlbW92ZWQsIHdlIHNob3VsZCBqdXN0IGFsdGVyIHRoZSBz
ZWxlY3Rpb24sIGluc3RlYWQgb2YgYmxvd2luZyBpdCBhd2F5LgotICAgICAgICBjbGVhclJlbmRl
clRyZWVTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICBjbGVhckRPTVRyZWVTZWxlY3Rpb24gPSB0
cnVlOwotICAgIH0gZWxzZSBpZiAoYmFzZVJlbW92ZWQgfHwgZXh0ZW50UmVtb3ZlZCkgewotICAg
ICAgICAvLyBUaGUgYmFzZSBhbmQvb3IgZXh0ZW50IGFyZSBhYm91dCB0byBiZSByZW1vdmVkLCBi
dXQgdGhlIHN0YXJ0IGFuZCBlbmQgYXJlbid0LgotICAgICAgICAvLyBDaGFuZ2UgdGhlIGJhc2Ug
YW5kIGV4dGVudCB0byB0aGUgc3RhcnQgYW5kIGVuZCwgYnV0IGRvbid0IHJlLXZhbGlkYXRlIHRo
ZQotICAgICAgICAvLyBzZWxlY3Rpb24sIHNpbmNlIGRvaW5nIHNvIGNvdWxkIG1vdmUgdGhlIHN0
YXJ0IGFuZCBlbmQgaW50byB0aGUgbm9kZQotICAgICAgICAvLyB0aGF0IGlzIGFib3V0IHRvIGJl
IHJlbW92ZWQuCi0gICAgICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQotICAgICAg
ICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24obV9zZWxlY3Rpb24uc3RhcnQo
KSwgbV9zZWxlY3Rpb24uZW5kKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NlbGVj
dGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24u
c3RhcnQoKSk7Ci0gICAgfSBlbHNlIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rp
b24uZmlyc3RSYW5nZSgpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICBSYW5nZTo6Q29tcGFyZVJlc3VsdHMgY29tcGFyZVJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9k
ZShub2RlLCBlYyk7Ci0gICAgICAgIGlmICghZWMgJiYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6
Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lO
U0lERSkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3RoaW5nIGhlcmUsIHdoZW4gdGhp
cyBub2RlJ3MgcmVuZGVyZXIgd2FzIGRlc3Ryb3llZCwgdGhlIHJlY3QgdGhhdCBpdCAKLSAgICAg
ICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVjdGlvbiBn
YXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mIAotICAgICAgICAgICAgLy8gdGhlIHJlbW92
YWwgd291bGRuJ3QgYmUgaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3Qg
ZG8gc28gbXVjaCB1bm5lY2Vzc2FyeSBpbnZhbGlkYXRpb24uCi0gICAgICAgICAgICBjbGVhclJl
bmRlclRyZWVTZWxlY3Rpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNs
ZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewotICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3Vt
ZW50ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCk7Ci0gICAg
ICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChSZW5kZXJW
aWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KGRvY3VtZW50LT5yZW5kZXJlcigpKSkKLSAgICAgICAg
ICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgfQotCi0gICAgaWYgKGNsZWFyRE9NVHJl
ZVNlbGVjdGlvbikKLSAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKSwgMCk7
Ci19Ci0KLWVudW0gRW5kUG9pbnRUeXBlIHsgRW5kUG9pbnRJc1N0YXJ0LCBFbmRQb2ludElzRW5k
IH07Ci0KLXN0YXRpYyBib29sIHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRS
ZXBsYWNlbWVudChQb3NpdGlvbiYgcG9zaXRpb24sIEVuZFBvaW50VHlwZSB0eXBlLCBDaGFyYWN0
ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWdu
ZWQgbmV3TGVuZ3RoKQotewotICAgIGlmICghcG9zaXRpb24uYW5jaG9yTm9kZSgpIHx8IHBvc2l0
aW9uLmFuY2hvck5vZGUoKSAhPSBub2RlIHx8IHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBBU1NFUlQocG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gMCk7Ci0gICAg
dW5zaWduZWQgcG9zaXRpb25PZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgIGlmIChwb3NpdGlvbk9mZnNldCA+IG9mZnNl
dCAmJiBwb3NpdGlvbk9mZnNldCA8IG9mZnNldCArIG9sZExlbmd0aCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIG9mZnNldCBpZiB0aGUgcG9zaXRpb24gaXMgYWZ0
ZXIgb3IgYXQgdGhlIGVuZCBvZiB0aGUgZGVsZXRlZCBjb250ZW50cyAocG9zaXRpb25PZmZzZXQg
Pj0gb2Zmc2V0ICsgb2xkTGVuZ3RoKQotICAgIC8vIHRvIGF2b2lkIGhhdmluZyBhIHN0YWxlIG9m
ZnNldCBleGNlcHQgd2hlbiB0aGUgcG9zaXRpb24gaXMgdGhlIGVuZCBvZiBzZWxlY3Rpb24gYW5k
IG5vdGhpbmcgaXMgZGVsZXRlZCwgaW4gd2hpY2ggY2FzZSwKLSAgICAvLyBhZGp1c3Rpbmcgb2Zm
c2V0IHJlc3VsdHMgaW4gaW5jb3JyZWN0bHkgZXh0ZW5kaW5nIHRoZSBzZWxlY3Rpb24gdW50aWwg
dGhlIGVuZCBvZiBuZXdseSBpbnNlcnRlZCBjb250ZW50cy4KLSAgICBpZiAoKHBvc2l0aW9uT2Zm
c2V0ID4gb2Zmc2V0ICsgb2xkTGVuZ3RoKSB8fCAocG9zaXRpb25PZmZzZXQgPT0gb2Zmc2V0ICsg
b2xkTGVuZ3RoICYmICh0eXBlID09IEVuZFBvaW50SXNTdGFydCB8fCBvbGRMZW5ndGgpKSkKLSAg
ICAgICAgcG9zaXRpb24ubW92ZVRvT2Zmc2V0KHBvc2l0aW9uT2Zmc2V0IC0gb2xkTGVuZ3RoICsg
bmV3TGVuZ3RoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjp0ZXh0V2lsbEJlUmVwbGFjZWQoQ2hhcmFjdGVyRGF0YSogbm9kZSwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAv
LyBUaGUgZnJhZ21lbnQgY2hlY2sgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIFNlZSBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zMDA2Mi4KLSAgICBpZiAoaXNOb25lKCkg
fHwgIW5vZGUgfHwgaGlnaGVzdEFuY2VzdG9yKG5vZGUpLT5ub2RlVHlwZSgpID09IE5vZGU6OkRP
Q1VNRU5UX0ZSQUdNRU5UX05PREUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIGJh
c2UgPSBtX3NlbGVjdGlvbi5iYXNlKCk7Ci0gICAgUG9zaXRpb24gZXh0ZW50ID0gbV9zZWxlY3Rp
b24uZXh0ZW50KCk7Ci0gICAgUG9zaXRpb24gc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwot
ICAgIFBvc2l0aW9uIGVuZCA9IG1fc2VsZWN0aW9uLmVuZCgpOwotICAgIGJvb2wgc2hvdWxkUmVt
b3ZlQmFzZSA9IHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRSZXBsYWNlbWVu
dChiYXNlLCBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gRW5kUG9pbnRJc1N0YXJ0IDogRW5k
UG9pbnRJc0VuZCwgbm9kZSwgb2Zmc2V0LCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7Ci0gICAgYm9v
bCBzaG91bGRSZW1vdmVFeHRlbnQgPSBzaG91bGRSZW1vdmVQb3NpdGlvbkFmdGVyQWRvcHRpbmdU
ZXh0UmVwbGFjZW1lbnQoZXh0ZW50LCBtX3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gRW5kUG9p
bnRJc0VuZCA6IEVuZFBvaW50SXNTdGFydCwgbm9kZSwgb2Zmc2V0LCBvbGRMZW5ndGgsIG5ld0xl
bmd0aCk7Ci0gICAgYm9vbCBzaG91bGRSZW1vdmVTdGFydCA9IHNob3VsZFJlbW92ZVBvc2l0aW9u
QWZ0ZXJBZG9wdGluZ1RleHRSZXBsYWNlbWVudChzdGFydCwgRW5kUG9pbnRJc1N0YXJ0LCBub2Rl
LCBvZmZzZXQsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKLSAgICBib29sIHNob3VsZFJlbW92ZUVu
ZCA9IHNob3VsZFJlbW92ZVBvc2l0aW9uQWZ0ZXJBZG9wdGluZ1RleHRSZXBsYWNlbWVudChlbmQs
IEVuZFBvaW50SXNFbmQsIG5vZGUsIG9mZnNldCwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOwotCi0g
ICAgaWYgKChiYXNlICE9IG1fc2VsZWN0aW9uLmJhc2UoKSB8fCBleHRlbnQgIT0gbV9zZWxlY3Rp
b24uZXh0ZW50KCkgfHwgc3RhcnQgIT0gbV9zZWxlY3Rpb24uc3RhcnQoKSB8fCBlbmQgIT0gbV9z
ZWxlY3Rpb24uZW5kKCkpCi0gICAgICAgICYmICFzaG91bGRSZW1vdmVTdGFydCAmJiAhc2hvdWxk
UmVtb3ZlRW5kKSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwotICAg
ICAgICBpZiAoIXNob3VsZFJlbW92ZUJhc2UgJiYgIXNob3VsZFJlbW92ZUV4dGVudCkKLSAgICAg
ICAgICAgIG5ld1NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihiYXNlLCBleHRlbnQpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb24uaXNCYXNlRmlyc3Qo
KSkKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24oc3Rh
cnQsIGVuZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9u
LnNldFdpdGhvdXRWYWxpZGF0aW9uKGVuZCwgc3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgICAgICBzZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3BvbmRU
b05vZGVNb2RpZmljYXRpb24obm9kZSwgc2hvdWxkUmVtb3ZlQmFzZSwgc2hvdWxkUmVtb3ZlRXh0
ZW50LCBzaG91bGRSZW1vdmVTdGFydCwgc2hvdWxkUmVtb3ZlRW5kKTsKLX0KLQotdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRJc0RpcmVjdGlvbmFsKGJvb2wgaXNEaXJlY3Rpb25hbCkKLXsK
LSAgICBtX2lzRGlyZWN0aW9uYWwgPSAhbV9mcmFtZSB8fCBtX2ZyYW1lLT5lZGl0b3IoKS0+YmVo
YXZpb3IoKS5zaG91bGRDb25zaWRlclNlbGVjdGlvbkFzRGlyZWN0aW9uYWwoKSB8fCBpc0RpcmVj
dGlvbmFsOwotfQotCi1UZXh0RGlyZWN0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmRpcmVjdGlv
bk9mRW5jbG9zaW5nQmxvY2soKQotewotICAgIHJldHVybiBXZWJDb3JlOjpkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKG1fc2VsZWN0aW9uLmV4dGVudCgpKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBpZiAoYWx0ZXIgIT0gQWx0ZXJhdGlvbkV4dGVuZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnQgPSBtX3NlbGVjdGlvbi5zdGFy
dCgpOwotICAgIFBvc2l0aW9uIGVuZCA9IG1fc2VsZWN0aW9uLmVuZCgpOwotCi0gICAgYm9vbCBi
YXNlSXNTdGFydCA9IHRydWU7Ci0KLSAgICBpZiAobV9pc0RpcmVjdGlvbmFsKSB7Ci0gICAgICAg
IC8vIE1ha2UgYmFzZSBhbmQgZXh0ZW50IG1hdGNoIHN0YXJ0IGFuZCBlbmQgc28gd2UgZXh0ZW5k
IHRoZSB1c2VyLXZpc2libGUgc2VsZWN0aW9uLgotICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVy
cyBmb3IgY2FzZXMgd2hlcmUgYmFzZSBhbmQgZXh0ZW5kIHBvaW50IHRvIGRpZmZlcmVudCBwb3Np
dGlvbnMgdGhhbgotICAgICAgICAvLyBzdGFydCBhbmQgZW5kIChlLmcuIGFmdGVyIGEgZG91Ymxl
LWNsaWNrIHRvIHNlbGVjdCBhIHdvcmQpLgotICAgICAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNl
Rmlyc3QoKSkKLSAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBz
d2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAgICBjYXNlIERpcmVjdGlvblJpZ2h0OgotICAgICAg
ICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBMVFIpCi0gICAgICAgICAg
ICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGJhc2VJc1N0YXJ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBEaXJlY3Rpb25Gb3J3YXJkOgotICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgICAg
IGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgICAg
IGJhc2VJc1N0YXJ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
YmFzZUlzU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGly
ZWN0aW9uQmFja3dhcmQ6Ci0gICAgICAgICAgICBiYXNlSXNTdGFydCA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGJhc2VJc1N0YXJ0KSB7Ci0g
ICAgICAgIG1fc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnQpOwotICAgICAgICBtX3NlbGVjdGlvbi5z
ZXRFeHRlbnQoZW5kKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3NlbGVjdGlvbi5zZXRCYXNl
KGVuZCk7Ci0gICAgICAgIG1fc2VsZWN0aW9uLnNldEV4dGVudChzdGFydCk7Ci0gICAgfQotfQot
Ci1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25Gb3JQbGF0Zm9y
bShib29sIGlzR2V0U3RhcnQpIGNvbnN0Ci17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZSA/IG1fZnJhbWUtPnNldHRpbmdzKCkgOiAwOwotICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0
aW5ncy0+ZWRpdGluZ0JlaGF2aW9yVHlwZSgpID09IEVkaXRpbmdNYWNCZWhhdmlvcikKLSAgICAg
ICAgcmV0dXJuIGlzR2V0U3RhcnQgPyBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IG1fc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICAvLyBMaW51eCBhbmQgV2luZG93cyBhbHdheXMgZXh0
ZW5kIHNlbGVjdGlvbnMgZnJvbSB0aGUgZXh0ZW50IGVuZHBvaW50LgotICAgIC8vIEZJWE1FOiBW
aXNpYmxlU2VsZWN0aW9uIHNob3VsZCBiZSBmaXhlZCB0byBlbnN1cmUgYXMgYW4gaW52YXJpYW50
IHRoYXQKLSAgICAvLyBiYXNlL2V4dGVudCBhbHdheXMgcG9pbnQgdG8gdGhlIHNhbWUgbm9kZXMg
YXMgc3RhcnQvZW5kLCBidXQgd2hpY2ggcG9pbnRzCi0gICAgLy8gdG8gd2hpY2ggZGVwZW5kcyBv
biB0aGUgdmFsdWUgb2YgaXNCYXNlRmlyc3QuIFRoZW4gdGhpcyBjYW4gYmUgY2hhbmdlZAotICAg
IC8vIHRvIGp1c3QgcmV0dXJuIG1fc2VsLmV4dGVudCgpLgotICAgIHJldHVybiBtX3NlbGVjdGlv
bi5pc0Jhc2VGaXJzdCgpID8gbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpIDogbV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVy
OjpzdGFydEZvclBsYXRmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb25Gb3JQbGF0
Zm9ybSh0cnVlKTsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmVu
ZEZvclBsYXRmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb25Gb3JQbGF0Zm9ybShm
YWxzZSk7Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlF
eHRlbmRpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHko
KSk7Ci0KLSAgICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1vZGlmeUV4dGVuZGluZ1JpZ2h0
IGFuZCBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkIGlzOgotICAgIC8vIG1vZGlmeUV4dGVuZGluZ0Zv
cndhcmQgYWx3YXlzIGV4dGVuZHMgZm9yd2FyZCBsb2dpY2FsbHkuCi0gICAgLy8gbW9kaWZ5RXh0
ZW5kaW5nUmlnaHQgYmVoYXZlcyB0aGUgc2FtZSBhcyBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkIGV4
Y2VwdCBmb3IgZXh0ZW5kaW5nIGNoYXJhY3RlciBvciB3b3JkLAotICAgIC8vIGl0IGV4dGVuZHMg
Zm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBMVFIgZGlyZWN0aW9u
LAotICAgIC8vIGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9z
aW5nIGJsb2NrIGlzIFJUTCBkaXJlY3Rpb24uCi0gICAgc3dpdGNoIChncmFudWxhcml0eSkgewot
ICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgcG9zID0gcG9zLm5leHQoQ2Fubm90
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBw
b3MucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSA9PSBMVFIpCi0gICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uKHBv
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KHBvcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBp
ZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IExUUikKLSAgICAgICAgICAgIHBvcyA9
IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVH
cmFudWxhcml0eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2Vu
dGVuY2VCb3VuZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9j
dW1lbnRCb3VuZGFyeToKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBhbGwgb2YgdGhlIGFi
b3ZlPwotICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlv
bi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgc3dpdGNoIChncmFudWxh
cml0eSkgewotICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IHBv
cy5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXb3JkR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24ocG9z
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgotICAgICAg
ICBwb3MgPSBuZXh0U2VudGVuY2VQb3NpdGlvbihwb3MpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIExpbmVHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3Ms
IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFWFRFTlQpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0gbmV4dFBhcmFn
cmFwaFBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlbnRlbmNlQm91bmRhcnk6Ci0gICAgICAgIHBv
cyA9IGVuZE9mU2VudGVuY2UoZW5kRm9yUGxhdGZvcm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBsb2dpY2FsRW5kT2ZMaW5lKGVuZEZv
clBsYXRmb3JtKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5
OgotICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChlbmRGb3JQbGF0Zm9ybSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBlbmRG
b3JQbGF0Zm9ybSgpOwotICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9uKHBvcy5kZWVwRXF1
aXZhbGVudCgpKSkKLSAgICAgICAgICAgIHBvcyA9IGVuZE9mRWRpdGFibGVDb250ZW50KHBvcyk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyA9IGVuZE9mRG9jdW1lbnQocG9zKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9z
aXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nUmlnaHQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KQotewotICAgIFZpc2libGVQb3NpdGlvbiBwb3M7Ci0gICAgc3dpdGNo
IChncmFudWxhcml0eSkgewotICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAg
IGlmIChpc1JhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3Nl
bGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0
KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSkucmlnaHQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV29yZEdy
YW51bGFyaXR5OgotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVH
cmFudWxhcml0eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2Vu
dGVuY2VCb3VuZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9j
dW1lbnRCb3VuZGFyeToKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhbGwgb2YgdGhlIGFi
b3ZlLgotICAgICAgICBwb3MgPSBtb2RpZnlNb3ZpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgIHBvcyA9IHJpZ2h0
Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKLSAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1f
c2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9zaXRpb24gU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nRm9yd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICAvLyBGSVhNRTogU3RheSBp
biBlZGl0YWJsZSBjb250ZW50IGZvciB0aGUgbGVzcyBjb21tb24gZ3JhbnVsYXJpdGllcy4KLSAg
ICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0gICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToK
LSAgICAgICAgaWYgKGlzUmFuZ2UoKSkKLSAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlv
bihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkubmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgotICAgICAgICBw
b3MgPSBuZXh0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQo
KSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNl
bnRlbmNlR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IG5leHRTZW50ZW5jZVBvc2l0aW9uKFZp
c2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHko
KSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVHcmFudWxhcml0eTogewotICAgICAg
ICAvLyBkb3duLWFycm93aW5nIGZyb20gYSByYW5nZSBzZWxlY3Rpb24gdGhhdCBlbmRzIGF0IHRo
ZSBzdGFydCBvZiBhIGxpbmUgbmVlZHMKLSAgICAgICAgLy8gdG8gbGVhdmUgdGhlIHNlbGVjdGlv
biBhdCB0aGF0IGxpbmUgc3RhcnQgKG5vIG5lZWQgdG8gY2FsbCBuZXh0TGluZVBvc2l0aW9uISkK
LSAgICAgICAgcG9zID0gZW5kRm9yUGxhdGZvcm0oKTsKLSAgICAgICAgaWYgKCFpc1JhbmdlKCkg
fHwgIWlzU3RhcnRPZkxpbmUocG9zKSkKLSAgICAgICAgICAgIHBvcyA9IG5leHRMaW5lUG9zaXRp
b24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oU1RBUlQpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBv
cyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlvbihlbmRGb3JQbGF0Zm9ybSgpLCB4UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oU1RBUlQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTZW50
ZW5jZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBlbmRPZlNlbnRlbmNlKGVuZEZvclBsYXRmb3Jt
KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVCb3VuZGFyeToKLSAgICAgICAgcG9z
ID0gbG9naWNhbEVuZE9mTGluZShlbmRGb3JQbGF0Zm9ybSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKLSAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgo
ZW5kRm9yUGxhdGZvcm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9jdW1lbnRCb3Vu
ZGFyeToKLSAgICAgICAgcG9zID0gZW5kRm9yUGxhdGZvcm0oKTsKLSAgICAgICAgaWYgKGlzRWRp
dGFibGVQb3NpdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSkpCi0gICAgICAgICAgICBwb3MgPSBl
bmRPZkVkaXRhYmxlQ29udGVudChwb3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3Mg
PSBlbmRPZkRvY3VtZW50KHBvcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0Vmlz
dWFsV29yZEdyYW51bGFyaXR5OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHBv
czsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVu
ZGluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIFZpc2libGVQb3Np
dGlvbiBwb3MobV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwot
Ci0gICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtb2RpZnlFeHRlbmRpbmdMZWZ0IGFuZCBt
b2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBpczoKLSAgICAvLyBtb2RpZnlFeHRlbmRpbmdCYWNrd2Fy
ZCBhbHdheXMgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkuCi0gICAgLy8gbW9kaWZ5RXh0ZW5k
aW5nTGVmdCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGV4Y2Vw
dCBmb3IgZXh0ZW5kaW5nIGNoYXJhY3RlciBvciB3b3JkLAotICAgIC8vIGl0IGV4dGVuZHMgYmFj
a3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgTFRSIGRpcmVjdGlvbiwK
LSAgICAvLyBidXQgaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5n
IGJsb2NrIGlzIFJUTCBkaXJlY3Rpb24uCi0gICAgc3dpdGNoIChncmFudWxhcml0eSkgewotICAg
IGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xv
c2luZ0Jsb2NrKCkgPT0gTFRSKQotICAgICAgICAgICAgcG9zID0gcG9zLnByZXZpb3VzKENhbm5v
dENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zID0g
cG9zLm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdvcmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBMVFIpCi0gICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihw
b3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uKHBv
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBpZiAo
ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IExUUikKLSAgICAgICAgICAgIHBvcyA9IG1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVHcmFu
dWxhcml0eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2VudGVu
Y2VCb3VuZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9jdW1l
bnRCb3VuZGFyeToKLSAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVs
YXJpdHkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBwb3M7Ci19Ci0gICAgICAg
Ci1WaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIFZpc2libGVQb3NpdGlv
biBwb3MobV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotCi0g
ICAgLy8gRXh0ZW5kaW5nIGEgc2VsZWN0aW9uIGJhY2t3YXJkIGJ5IHdvcmQgb3IgY2hhcmFjdGVy
IGZyb20ganVzdCBhZnRlciBhIHRhYmxlIHNlbGVjdHMKLSAgICAvLyB0aGUgdGFibGUuICBUaGlz
ICJtYWtlcyBzZW5zZSIgZnJvbSB0aGUgdXNlciBwZXJzcGVjdGl2ZSwgZXNwLiB3aGVuIGRlbGV0
aW5nLgotICAgIC8vIEl0IHdhcyBkb25lIGhlcmUgaW5zdGVhZCBvZiBpbiBWaXNpYmxlUG9zaXRp
b24gYmVjYXVzZSB3ZSB3YW50IFZQcyB0byBpdGVyYXRlCi0gICAgLy8gb3ZlciBldmVyeXRoaW5n
LgotICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIENoYXJhY3RlckdyYW51bGFy
aXR5OgotICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRh
cnkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKLSAgICAgICAg
cG9zID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTZW50ZW5jZUdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1NlbnRlbmNlUG9z
aXRpb24ocG9zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lR3JhbnVsYXJpdHk6Ci0g
ICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uKEVYVEVOVCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhcmFncmFw
aEdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKHBv
cywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNlbnRlbmNlQm91bmRhcnk6Ci0gICAgICAgIHBvcyA9IHN0YXJ0T2ZTZW50
ZW5jZShzdGFydEZvclBsYXRmb3JtKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVC
b3VuZGFyeToKLSAgICAgICAgcG9zID0gbG9naWNhbFN0YXJ0T2ZMaW5lKHN0YXJ0Rm9yUGxhdGZv
cm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6Ci0gICAg
ICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRGb3JQbGF0Zm9ybSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBzdGFydEZv
clBsYXRmb3JtKCk7Ci0gICAgICAgIGlmIChpc0VkaXRhYmxlUG9zaXRpb24ocG9zLmRlZXBFcXVp
dmFsZW50KCkpKQotICAgICAgICAgICAgcG9zID0gc3RhcnRPZkVkaXRhYmxlQ29udGVudChwb3Mp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCi1WaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nTGVmdChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICBzd2l0Y2ggKGdy
YW51bGFyaXR5KSB7Ci0gICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKLSAgICAgICAgaWYg
KGlzUmFuZ2UoKSkKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkg
PT0gTFRSKQotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1f
c2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3MgPSBW
aXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpLmxlZnQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV29yZEdyYW51bGFyaXR5
OgotICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKLSAgICBjYXNlIExpbmVHcmFudWxhcml0
eToKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgIGNhc2UgU2VudGVuY2VCb3Vu
ZGFyeToKLSAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgotICAgIGNhc2UgRG9jdW1lbnRCb3Vu
ZGFyeToKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlLgotICAg
ICAgICBwb3MgPSBtb2RpZnlNb3ZpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBsZWZ0Qm91bmRhcnlP
ZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKLSAg
ICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24u
ZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiBwb3M7Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnlNb3ZpbmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0g
ICAgY2FzZSBDaGFyYWN0ZXJHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGlzUmFuZ2UoKSkKLSAg
ICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3Nl
bGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgp
KS5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3Np
dGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5
OgotICAgICAgICBwb3MgPSBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTGluZUdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91
c0xpbmVQb3NpdGlvbihzdGFydEZvclBsYXRmb3JtKCksIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihTVEFSVCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhcmFncmFwaEdyYW51
bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKHN0YXJ0Rm9y
UGxhdGZvcm0oKSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKFNUQVJUKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKLSAgICAgICAgcG9zID0gc3Rh
cnRPZlNlbnRlbmNlKHN0YXJ0Rm9yUGxhdGZvcm0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTGluZUJvdW5kYXJ5OgotICAgICAgICBwb3MgPSBsb2dpY2FsU3RhcnRPZkxpbmUoc3RhcnRG
b3JQbGF0Zm9ybSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFy
eToKLSAgICAgICAgcG9zID0gc3RhcnRPZlBhcmFncmFwaChzdGFydEZvclBsYXRmb3JtKCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6Ci0gICAgICAgIHBvcyA9
IHN0YXJ0Rm9yUGxhdGZvcm0oKTsKLSAgICAgICAgaWYgKGlzRWRpdGFibGVQb3NpdGlvbihwb3Mu
ZGVlcEVxdWl2YWxlbnQoKSkpCi0gICAgICAgICAgICBwb3MgPSBzdGFydE9mRWRpdGFibGVDb250
ZW50KHBvcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVu
dChwb3MpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBwb3M7Ci19Ci0KLXN0YXRp
YyBib29sIGlzQm91bmRhcnkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIHJl
dHVybiBncmFudWxhcml0eSA9PSBMaW5lQm91bmRhcnkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdy
YXBoQm91bmRhcnkgfHwgZ3JhbnVsYXJpdHkgPT0gRG9jdW1lbnRCb3VuZGFyeTsKLX0gICAgCi0K
LWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkgewotICAgICAgICBT
ZWxlY3Rpb25Db250cm9sbGVyIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlcjsKLSAgICAgICAgdHJp
YWxTZWxlY3Rpb25Db250cm9sbGVyLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7Ci0gICAgICAg
IHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZXRJc0RpcmVjdGlvbmFsKG1faXNEaXJlY3Rpb25h
bCk7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5tb2RpZnkoYWx0ZXIsIGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIGZhbHNlKTsKLQotICAgICAgICBib29sIGNoYW5nZSA9IHNob3Vs
ZENoYW5nZVNlbGVjdGlvbih0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIuc2VsZWN0aW9uKCkpOwot
ICAgICAgICBpZiAoIWNoYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICB3aWxsQmVNb2RpZmllZChhbHRlciwgZGlyZWN0aW9uKTsKLQotICAgIGJvb2wgd2FzUmFu
Z2UgPSBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7Ci0gICAgUG9zaXRpb24gb3JpZ2luYWxTdGFydFBv
c2l0aW9uID0gbV9zZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b247Ci0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIERpcmVjdGlvblJpZ2h0Ogot
ICAgICAgICBpZiAoYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUpCi0gICAgICAgICAgICBwb3NpdGlv
biA9IG1vZGlmeU1vdmluZ1JpZ2h0KGdyYW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdSaWdodChncmFudWxhcml0eSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRGlyZWN0aW9uRm9yd2FyZDoKLSAgICAgICAgaWYgKGFsdGVy
ID09IEFsdGVyYXRpb25FeHRlbmQpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb3Np
dGlvbiA9IG1vZGlmeU1vdmluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIERpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9u
TW92ZSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5TW92aW5nTGVmdChncmFudWxhcml0
eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5n
TGVmdChncmFudWxhcml0eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRGlyZWN0aW9uQmFj
a3dhcmQ6Ci0gICAgICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKQotICAgICAgICAg
ICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5TW92aW5nQmFja3dhcmQoZ3Jh
bnVsYXJpdHkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAocG9zaXRpb24uaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChtX2ZyYW1lKSkKLSAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBB
bHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTb21lIG9mIHRoZSBhYm92ZSBvcGVyYXRp
b25zIHNldCBhbiB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24uCi0gICAgLy8gU2V0dGlu
ZyBhIHNlbGVjdGlvbiB3aWxsIGNsZWFyIGl0LCBzbyBzYXZlIGl0IHRvIHBvc3NpYmx5IHJlc3Rv
cmUgbGF0ZXIuCi0gICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRy
YXJ5IGJlY2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQotICAgIC8vIHRoZSByZXF1ZXN0
ZWQgcG9zaXRpb24gdHlwZSBpZiB0aGVyZSB3ZXJlIG5vIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbiBzZXQuCi0gICAgaW50IHggPSB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
U1RBUlQpOwotCi0gICAgc3dpdGNoIChhbHRlcikgewotICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6
Ci0gICAgICAgIG1vdmVUbyhwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQWx0ZXJhdGlvbkV4dGVuZDoKLSAgICAgICAgLy8gU3RhbmRhcmQgTWFjIGJl
aGF2aW9yIHdoZW4gZXh0ZW5kaW5nIHRvIGEgYm91bmRhcnkgaXMgZ3JvdyB0aGUgc2VsZWN0aW9u
IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlCi0gICAgICAgIC8vIGJhc2UgaW4gcGxhY2UgYW5kIG1v
dmluZyB0aGUgZXh0ZW50LiBNYXRjaGVzIE5TVGV4dFZpZXcuCi0gICAgICAgIGlmICghbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+ZWRpdG9yKCktPmJlaGF2aW9yKCkuc2hvdWxkQWx3YXlzR3Jvd1NlbGVj
dGlvbldoZW5FeHRlbmRpbmdUb0JvdW5kYXJ5KCkgfHwgbV9zZWxlY3Rpb24uaXNDYXJldCgpIHx8
ICFpc0JvdW5kYXJ5KGdyYW51bGFyaXR5KSkKLSAgICAgICAgICAgIHNldEV4dGVudChwb3NpdGlv
biwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgVGV4dERpcmVj
dGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwotICAgICAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25Gb3J3YXJkIHx8ICh0ZXh0RGlyZWN0aW9u
ID09IExUUiAmJiBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uUmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9u
ID09IFJUTCAmJiBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uTGVmdCkpCi0gICAgICAgICAgICAgICAg
c2V0RW5kKHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzZXRTdGFydChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChncmFudWxhcml0eSA9PSBMaW5l
R3JhbnVsYXJpdHkgfHwgZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoR3JhbnVsYXJpdHkpCi0gICAg
ICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0geDsKLQotICAgIGlmICh1c2Vy
VHJpZ2dlcmVkKQotICAgICAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7
Ci0KLQotICAgIHNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7Ci0KLSAgICBzZXRJc0RpcmVjdGlv
bmFsKGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBiZXR0ZXI/Ci1zdGF0aWMgYm9vbCBh
YnNvbHV0ZUNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCAmeSkKLXsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBjLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKLSAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB5ID0gcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpIC8gMjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIGludCB2ZXJ0aWNhbERpc3RhbmNlLCBib29s
IHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCi17Ci0gICAgaWYgKCF2
ZXJ0aWNhbERpc3RhbmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodXNlclRy
aWdnZXJlZCkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHRyaWFsU2VsZWN0aW9uQ29u
dHJvbGxlcjsKLSAgICAgICAgdHJpYWxTZWxlY3Rpb25Db250cm9sbGVyLnNldFNlbGVjdGlvbiht
X3NlbGVjdGlvbik7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxlci5zZXRJc0RpcmVj
dGlvbmFsKG1faXNEaXJlY3Rpb25hbCk7Ci0gICAgICAgIHRyaWFsU2VsZWN0aW9uQ29udHJvbGxl
ci5tb2RpZnkoYWx0ZXIsIHZlcnRpY2FsRGlzdGFuY2UsIGZhbHNlKTsKLQotICAgICAgICBib29s
IGNoYW5nZSA9IHNob3VsZENoYW5nZVNlbGVjdGlvbih0cmlhbFNlbGVjdGlvbkNvbnRyb2xsZXIu
c2VsZWN0aW9uKCkpOwotICAgICAgICBpZiAoIWNoYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHVwID0gdmVydGljYWxEaXN0YW5jZSA8IDA7Ci0gICAg
aWYgKHVwKQotICAgICAgICB2ZXJ0aWNhbERpc3RhbmNlID0gLXZlcnRpY2FsRGlzdGFuY2U7Ci0K
LSAgICB3aWxsQmVNb2RpZmllZChhbHRlciwgdXAgPyBEaXJlY3Rpb25CYWNrd2FyZCA6IERpcmVj
dGlvbkZvcndhcmQpOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKLSAgICBpbnQgeFBvcyA9
IDA7Ci0gICAgc3dpdGNoIChhbHRlcikgewotICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6Ci0gICAg
ICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbih1cCA/IG1fc2VsZWN0aW9uLnN0YXJ0KCkgOiBtX3Nl
bGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIHhQb3MgPSB4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24odXAgPyBTVEFSVCA6IEVORCk7Ci0gICAgICAg
IG1fc2VsZWN0aW9uLnNldEFmZmluaXR5KHVwID8gVVBTVFJFQU0gOiBET1dOU1RSRUFNKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgotICAgICAgICBwb3MgPSBW
aXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpOwotICAgICAgICB4UG9zID0geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVO
VCk7Ci0gICAgICAgIG1fc2VsZWN0aW9uLnNldEFmZmluaXR5KERPV05TVFJFQU0pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpbnQgc3RhcnRZOwotICAgIGlmICghYWJzb2x1dGVDYXJl
dFkocG9zLCBzdGFydFkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHVwKQotICAg
ICAgICBzdGFydFkgPSAtc3RhcnRZOwotICAgIGludCBsYXN0WSA9IHN0YXJ0WTsKLQotICAgIFZp
c2libGVQb3NpdGlvbiByZXN1bHQ7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHQ7Ci0gICAgZm9y
IChWaXNpYmxlUG9zaXRpb24gcCA9IHBvczsgOyBwID0gbmV4dCkgewotICAgICAgICBuZXh0ID0g
KHVwID8gcHJldmlvdXNMaW5lUG9zaXRpb24gOiBuZXh0TGluZVBvc2l0aW9uKShwLCB4UG9zKTsK
LSAgICAgICAgaWYgKG5leHQuaXNOdWxsKCkgfHwgbmV4dCA9PSBwKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGludCBuZXh0WTsKLSAgICAgICAgaWYgKCFhYnNvbHV0ZUNhcmV0WShuZXh0
LCBuZXh0WSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKHVwKQotICAgICAgICAg
ICAgbmV4dFkgPSAtbmV4dFk7Ci0gICAgICAgIGlmIChuZXh0WSAtIHN0YXJ0WSA+IHZlcnRpY2Fs
RGlzdGFuY2UpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG5leHRZID49IGxhc3RZ
KSB7Ci0gICAgICAgICAgICBsYXN0WSA9IG5leHRZOwotICAgICAgICAgICAgcmVzdWx0ID0gbmV4
dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAoYWx0ZXIpIHsKLSAgICBjYXNlIEFsdGVyYXRp
b25Nb3ZlOgotICAgICAgICBtb3ZlVG8ocmVzdWx0LCB1c2VyVHJpZ2dlcmVkLCBhbGlnbik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWx0ZXJhdGlvbkV4dGVuZDoKLSAgICAgICAgc2V0RXh0
ZW50KHJlc3VsdCwgdXNlclRyaWdnZXJlZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGlmICh1c2VyVHJpZ2dlcmVkKQotICAgICAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHk7Ci0KLSAgICBzZXRJc0RpcmVjdGlvbmFsKGFsdGVyID09IEFsdGVyYXRpb25FeHRl
bmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBTZWxlY3Rpb25Db250cm9sbGVyOjp4
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSB0eXBlKQotewotICAg
IGludCB4ID0gMDsKLQotICAgIGlmIChpc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHg7Ci0KLSAg
ICBQb3NpdGlvbiBwb3M7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBTVEFSVDoKLSAg
ICAgICAgcG9zID0gbV9zZWxlY3Rpb24uc3RhcnQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFTkQ6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9uLmVuZCgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEJBU0U6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9uLmJhc2UoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFWFRFTlQ6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9uLmV4
dGVudCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBwb3Mu
YW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiB4OwotICAgICAgICAKLSAgICBpZiAobV94UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24gPT0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIG1fc2VsZWN0aW9uLmFmZmluaXR5
KCkpOwotICAgICAgICAvLyBWaXNpYmxlUG9zaXRpb24gY3JlYXRpb24gY2FuIGZhaWwgaGVyZSBp
ZiBhIG5vZGUgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGJlY29tZXMgdmlzaWJpbGl0eTpoaWRk
ZW4KLSAgICAgICAgLy8gYWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBjcmVhdGVkIGFuZCBiZWZvcmUg
dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCi0gICAgICAgIHggPSB2aXNpYmxlUG9zaXRpb24uaXNO
b3ROdWxsKCkgPyB2aXNpYmxlUG9zaXRpb24ueE9mZnNldEZvclZlcnRpY2FsTmF2aWdhdGlvbigp
IDogMDsKLSAgICAgICAgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSB4OwotICAg
IH0gZWxzZQotICAgICAgICB4ID0gbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247Ci0g
ICAgICAgIAotICAgIHJldHVybiB4OwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNs
ZWFyKCkKLXsKLSAgICBtX2dyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHk7Ci0gICAg
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKSk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0U3RhcnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRy
aWdnZXJlZCkKLXsKLSAgICBpZiAobV9zZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSkKLSAgICAgICAg
c2V0QmFzZShwb3MsIHVzZXJUcmlnZ2VyZWQpOwotICAgIGVsc2UKLSAgICAgICAgc2V0RXh0ZW50
KHBvcywgdXNlclRyaWdnZXJlZCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0
RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0g
ICAgaWYgKG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkpCi0gICAgICAgIHNldEV4dGVudChwb3Ms
IHVzZXJUcmlnZ2VyZWQpOwotICAgIGVsc2UKLSAgICAgICAgc2V0QmFzZShwb3MsIHVzZXJUcmln
Z2VyZWQpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkKLXsKLSAgICBTZXRTZWxlY3Rp
b25PcHRpb25zIG9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGU7Ci0gICAg
aWYgKHVzZXJUcmlnZ2VyZWQpCi0gICAgICAgIG9wdGlvbnMgfD0gVXNlclRyaWdnZXJlZDsKLSAg
ICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgbV9z
ZWxlY3Rpb24uZXh0ZW50KCksIHBvcy5hZmZpbml0eSgpKSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9z
LCBib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0gICAgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25z
ID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlOwotICAgIGlmICh1c2VyVHJpZ2dlcmVk
KQotICAgICAgICBvcHRpb25zIHw9IFVzZXJUcmlnZ2VyZWQ7Ci0gICAgc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwg
cG9zLmFmZmluaXR5KCkpLCBvcHRpb25zKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
OjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQotewotICAgIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3Nl
VHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsKLSAgICBpZiAodXNlclRyaWdnZXJlZCkKLSAgICAg
ICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVkOwotICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHBvcywgbV9zZWxlY3Rpb24uZXh0ZW50KCksIGFmZmluaXR5KSwgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uICZw
b3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQotewotICAgIFNldFNl
bGVjdGlvbk9wdGlvbnMgb3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZTsK
LSAgICBpZiAodXNlclRyaWdnZXJlZCkKLSAgICAgICAgb3B0aW9ucyB8PSBVc2VyVHJpZ2dlcmVk
OwotICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1fc2VsZWN0aW9uLmJhc2UoKSwg
cG9zLCBhZmZpbml0eSksIG9wdGlvbnMpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKGJvb2wgZmxhZykKLXsKLSAgICBtX2NhcmV0UmVjdE5l
ZWRzVXBkYXRlID0gZmxhZzsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVD
YXJldFJlY3QoKQotewotICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rpb24uc3RhcnQoKS5h
bmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCkuYW5jaG9yTm9k
ZSgpLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRSZWN0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3NlbGVjdGlvbi5zdGFydCgpLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotICAgIAotICAgIG1fY2Fy
ZXRSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICAKLSAgICBpZiAoaXNDYXJldCgpKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24u
YWZmaW5pdHkoKSk7Ci0gICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRmlyc3QgY29tcHV0ZSBhIHJlY3QgbG9j
YWwgdG8gdGhlIHJlbmRlcmVyIGF0IHRoZSBzZWxlY3Rpb24gc3RhcnQKLSAgICAgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXI7Ci0gICAgICAgICAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHBv
cy5sb2NhbENhcmV0UmVjdChyZW5kZXJlcik7Ci0KLSAgICAgICAgICAgIC8vIEdldCB0aGUgcmVu
ZGVyZXIgdGhhdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQgKHdo
aWNoCi0gICAgICAgICAgICAvLyBpcyBlaXRoZXIgdGhlIHJlbmRlcmVyIHdlIGp1c3QgZm91bmQs
IG9yIG9uZSBvZiBpdHMgY29udGFpbmVycykKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2Fy
ZXRQYWludGVyID0gY2FyZXRSZW5kZXJlcigpOwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGFu
IG9mZnNldCBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlIGNhcmV0UGFpbnRlcgotICAgICAg
ICAgICAgYm9vbCB1bnJvb3RlZCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKHJlbmRlcmVy
ICE9IGNhcmV0UGFpbnRlcikgewotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY29udGFp
bmVyT2JqZWN0ID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgIGlmICgh
Y29udGFpbmVyT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVucm9vdGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGxvY2FsUmVjdC5tb3ZlKHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRh
aW5lck9iamVjdCwgbG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgICAgICAgICByZW5k
ZXJlciA9IGNvbnRhaW5lck9iamVjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCF1bnJvb3RlZCkKLSAgICAgICAgICAgICAgICBtX2NhcmV0UmVjdCA9IGxv
Y2FsUmVjdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9hYnNDYXJldEJvdW5kc0RpcnR5
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUg
PSBmYWxzZTsKLX0KLQotUmVuZGVyT2JqZWN0KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJl
bmRlcmVyKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIGlmIGNhcmV0Tm9kZSBpcyBhIGJs
b2NrIGFuZCBjYXJldCBpcyBpbnNpZGUgaXQgdGhlbiBjYXJldCBzaG91bGQgYmUgcGFpbnRlZCBi
eSB0aGF0IGJsb2NrCi0gICAgYm9vbCBwYWludGVkQnlCbG9jayA9IHJlbmRlcmVyLT5pc0Jsb2Nr
RmxvdygpICYmIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUobm9kZSk7Ci0gICAgcmV0dXJuIHBhaW50
ZWRCeUJsb2NrID8gcmVuZGVyZXIgOiByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0K
LUludFJlY3QgU2VsZWN0aW9uQ29udHJvbGxlcjo6bG9jYWxDYXJldFJlY3QoKQotewotICAgIGlm
IChtX2NhcmV0UmVjdE5lZWRzVXBkYXRlKQotICAgICAgICB1cGRhdGVDYXJldFJlY3QoKTsKLSAg
ICAKLSAgICByZXR1cm4gbV9jYXJldFJlY3Q7Ci19Ci0KLUludFJlY3QgU2VsZWN0aW9uQ29udHJv
bGxlcjo6YWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKLXsKLSAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9IGNhcmV0UmVuZGVyZXIoKTsK
LSAgICBpZiAoIWNhcmV0UGFpbnRlcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAK
LSAgICBJbnRSZWN0IGxvY2FsUmVjdChyZWN0KTsKLSAgICBpZiAoY2FyZXRQYWludGVyLT5pc0Jv
eCgpKQotICAgICAgICB0b1JlbmRlckJveChjYXJldFBhaW50ZXIpLT5mbGlwRm9yV3JpdGluZ01v
ZGUobG9jYWxSZWN0KTsKLSAgICByZXR1cm4gY2FyZXRQYWludGVyLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotfQotCi1J
bnRSZWN0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmFic29sdXRlQ2FyZXRCb3VuZHMoKQotewotICAg
IHJlY29tcHV0ZUNhcmV0UmVjdCgpOwotICAgIHJldHVybiBtX2Fic0NhcmV0Qm91bmRzOwotfQot
Ci1zdGF0aWMgSW50UmVjdCByZXBhaW50UmVjdEZvckNhcmV0KEludFJlY3QgY2FyZXQpCi17Ci0g
ICAgaWYgKGNhcmV0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgZGlydHkgcmVjdCBpbnRlcnNlY3RzIHRoZSBibG9jayB0aGF0IHBh
aW50cyB0aGUgY2FyZXQgZXZlbiBpbiB0aGUgY2FzZSB3aGVyZQotICAgIC8vIHRoZSBjYXJldCBp
dHNlbGYgaXMganVzdCBvdXRzaWRlIHRoZSBibG9jay4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwODY+LgotICAgIGNhcmV0LmluZmxhdGVYKDEpOwotICAg
IHJldHVybiBjYXJldDsKLX0KLQotSW50UmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJl
cGFpbnRSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJl
Y3QocmVwYWludFJlY3RGb3JDYXJldChsb2NhbENhcmV0UmVjdEZvclBhaW50aW5nKCkpKTsKLX0K
LQotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1dGVDYXJldFJlY3QoKQotewotICAg
IGlmICghbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIEZy
YW1lVmlldyogdiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKTsKLSAgICBpZiAoIXYpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEludFJlY3Qgb2xkUmVjdCA9IG1fY2FyZXRSZWN0
OwotICAgIEludFJlY3QgbmV3UmVjdCA9IGxvY2FsQ2FyZXRSZWN0KCk7Ci0gICAgaWYgKG9sZFJl
Y3QgPT0gbmV3UmVjdCAmJiAhbV9hYnNDYXJldEJvdW5kc0RpcnR5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBJbnRSZWN0IG9sZEFic0NhcmV0Qm91bmRzID0gbV9hYnNDYXJldEJvdW5k
czsKLSAgICAvLyBGSVhNRTogUmVuYW1lIG1fY2FyZXRSZWN0IHRvIG1fbG9jYWxDYXJldFJlY3Qu
Ci0gICAgbV9hYnNDYXJldEJvdW5kcyA9IGFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KG1fY2Fy
ZXRSZWN0KTsKLSAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSBmYWxzZTsKLSAgICAKLSAgICBp
ZiAob2xkQWJzQ2FyZXRCb3VuZHMgPT0gbV9hYnNDYXJldEJvdW5kcykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICBJbnRSZWN0IG9sZEFic29sdXRlQ2FyZXRSZXBhaW50Qm91
bmRzID0gbV9hYnNvbHV0ZUNhcmV0UmVwYWludEJvdW5kczsKLSAgICAvLyBXZSBiZWxpZXZlIHRo
YXQgd2UgbmVlZCB0byBpbmZsYXRlIHRoZSBsb2NhbCByZWN0IGJlZm9yZSB0cmFuc2Zvcm1pbmcg
aXQgdG8gb2J0YWluIHRoZSByZXBhaW50IGJvdW5kcy4KLSAgICBtX2Fic29sdXRlQ2FyZXRSZXBh
aW50Qm91bmRzID0gY2FyZXRSZXBhaW50UmVjdCgpOwotCi0jaWYgRU5BQkxFKFRFWFRfQ0FSRVQp
ICAgIAotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRv
Y3VtZW50KCktPnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIGNhcmV0IHJl
cGFpbnRpbmcgY29udGFpbmVyLWF3YXJlLgotICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFuZ2xl
SW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhvbGRBYnNvbHV0ZUNhcmV0UmVwYWludEJvdW5kcywg
ZmFsc2UpOwotICAgICAgICBpZiAoc2hvdWxkUmVwYWludENhcmV0KHZpZXcpKQotICAgICAgICAg
ICAgdmlldy0+cmVwYWludFJlY3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMobV9hYnNv
bHV0ZUNhcmV0UmVwYWludEJvdW5kcywgZmFsc2UpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlcGFpbnRDYXJl
dChjb25zdCBSZW5kZXJWaWV3KiB2aWV3KSBjb25zdAotewotICAgIEFTU0VSVCh2aWV3KTsKLSAg
ICBGcmFtZSogZnJhbWUgPSB2aWV3LT5mcmFtZVZpZXcoKSA/IHZpZXctPmZyYW1lVmlldygpLT5m
cmFtZSgpIDogMDsgLy8gVGhlIGZyYW1lIHdoZXJlIHRoZSBzZWxlY3Rpb24gc3RhcnRlZC4KLSAg
ICBib29sIGNhcmV0QnJvd3NpbmcgPSBmcmFtZSAmJiBmcmFtZS0+c2V0dGluZ3MoKSAmJiBmcmFt
ZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICByZXR1cm4gKGNhcmV0
QnJvd3NpbmcgfHwgaXNDb250ZW50RWRpdGFibGUoKSk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6aW52YWxpZGF0ZUNhcmV0UmVjdCgpCi17Ci0gICAgaWYgKCFpc0NhcmV0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCk7Ci0KLSAgICAvLyByZWNvbXB1dGVDYXJldFJlY3Qgd2ls
bCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciB0aGUgZHJhZyBjYXJldCwKLSAgICAvLyBiZWNhdXNl
IGl0cyBtX2ZyYW1lIGlzIGFsd2F5cyAwLgotICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZCA9IHJl
Y29tcHV0ZUNhcmV0UmVjdCgpOwotCi0gICAgLy8gRURJVCBGSVhNRTogVGhpcyBpcyBhbiB1bmZv
cnR1bmF0ZSBoYWNrLgotICAgIC8vIEJhc2ljYWxseSwgd2UgY2FuJ3QgdHJ1c3QgdGhpcyBsYXlv
dXQgcG9zaXRpb24gc2luY2Ugd2UgCi0gICAgLy8gY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNo
ZWNrIHRvIHNlZSBpZiB3ZSBhcmUgaW4gdW5yZW5kZXJlZCAKLSAgICAvLyBjb250ZW50IHdpbGwg
d29yayBhdCB0aGlzIHBvaW50LiBXZSBtYXkgaGF2ZSB0byB3YWl0IGZvcgotICAgIC8vIGEgbGF5
b3V0IGFuZCByZS1yZW5kZXIgb2YgdGhlIGRvY3VtZW50IHRvIGhhcHBlbi4gU28sIHJlc2V0dGlu
ZyB0aGlzCi0gICAgLy8gZmxhZyB3aWxsIGNhdXNlIGFub3RoZXIgY2FyZXQgbGF5b3V0IHRvIGhh
cHBlbiB0aGUgZmlyc3QgdGltZQotICAgIC8vIHRoYXQgd2UgdHJ5IHRvIHBhaW50IHRoZSBjYXJl
dCBhZnRlciB0aGlzIGNhbGwuIFRoYXQgb25lIHdpbGwgd29yayBzaW5jZQotICAgIC8vIGl0IGhh
cHBlbnMgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBhY2NvdW50ZWQgZm9yIGFueSBlZGl0aW5nCi0g
ICAgLy8gY2hhbmdlcyB3aGljaCBtYXkgaGF2ZSBiZWVuIGRvbmUuCi0gICAgLy8gQW5kLCB3ZSBu
ZWVkIHRvIGxlYXZlIHRoaXMgbGF5b3V0IGhlcmUgc28gdGhlIGNhcmV0IG1vdmVzIHJpZ2h0IAot
ICAgIC8vIGF3YXkgYWZ0ZXIgY2xpY2tpbmcuCi0gICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0ZSA9
IHRydWU7Ci0KLSAgICBpZiAoIWNhcmV0UmVjdENoYW5nZWQpIHsKLSAgICAgICAgUmVuZGVyVmll
dyogdmlldyA9IHRvUmVuZGVyVmlldyhkLT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKHZpZXcg
JiYgc2hvdWxkUmVwYWludENhcmV0KHZpZXcpKQotICAgICAgICAgICAgdmlldy0+cmVwYWludFJl
Y3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoY2FyZXRSZXBhaW50UmVjdCgpLCBmYWxz
ZSk7Ci0gICAgfQotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhaW50Q2FyZXQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCi17Ci0jaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCi0gICAgaWYgKCFtX2NhcmV0VmlzaWJs
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9jYXJldFBhaW50KQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFtX3NlbGVjdGlvbi5pc0NhcmV0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSBsb2NhbENhcmV0UmVjdEZvclBhaW50aW5nKCk7Ci0g
ICAgaWYgKGNhcmV0UmVuZGVyZXIoKSAmJiBjYXJldFJlbmRlcmVyKCktPmlzQm94KCkpCi0gICAg
ICAgIHRvUmVuZGVyQm94KGNhcmV0UmVuZGVyZXIoKSktPmZsaXBGb3JXcml0aW5nTW9kZShkcmF3
aW5nUmVjdCk7Ci0gICAgZHJhd2luZ1JlY3QubW92ZSh0eCwgdHkpOwotICAgIEludFJlY3QgY2Fy
ZXQgPSBpbnRlcnNlY3Rpb24oZHJhd2luZ1JlY3QsIGNsaXBSZWN0KTsKLSAgICBpZiAoY2FyZXQu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjYXJldENvbG9yID0gQ29s
b3I6OmJsYWNrOwotICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VS
R0I7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBp
ZiAoZWxlbWVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGNhcmV0Q29sb3Ig
PSBlbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcik7Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBlbGVtZW50LT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5jb2xvclNwYWNlKCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+ZmlsbFJlY3Qo
Y2FyZXQsIGNhcmV0Q29sb3IsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR4KTsKLSAgICBVTlVTRURfUEFSQU0odHkpOwot
ICAgIFVOVVNFRF9QQVJBTShjbGlwUmVjdCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCAqciwgYm9vbCBzZWxlY3RlZCkg
Y29uc3QKLXsKLSAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4oci0+bm9kZSgpKTsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAg
IiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgfSBl
bHNlIGlmIChyLT5pc1RleHQoKSkgewotICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIg
PSB0b1JlbmRlclRleHQocik7Ci0gICAgICAgIGlmICghdGV4dFJlbmRlcmVyLT50ZXh0TGVuZ3Ro
KCkgfHwgIXRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiJXMjdGV4dCAoZW1wdHkpXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAg
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4ID0gMzY7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gdGV4dFJlbmRl
cmVyLT50ZXh0KCk7Ci0gICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAg
ICAgICAgaWYgKHNlbGVjdGVkKSB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3RhcnQoKS5jb250YWluZXJOb2Rl
KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyLT5ub2RlKCkg
PT0gbV9zZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpKQotICAgICAgICAgICAgICAgIG9m
ZnNldCA9IG1fc2VsZWN0aW9uLmVuZCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
LQotICAgICAgICAgICAgaW50IHBvczsKLSAgICAgICAgICAgIElubGluZVRleHRCb3gqIGJveCA9
IHRleHRSZW5kZXJlci0+ZmluZE5leHRJbmxpbmVUZXh0Qm94KG9mZnNldCwgcG9zKTsKLSAgICAg
ICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhib3gtPnN0YXJ0KCksIGJveC0+bGVuKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgc2hvdzsKLSAgICAgICAgICAgIGludCBt
aWQgPSBtYXggLyAyOwotICAgICAgICAgICAgaW50IGNhcmV0ID0gMDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gdGV4dCBpcyBzaG9ydGVyIHRoYW4gbWF4Ci0gICAgICAgICAgICBpZiAo
dGV4dExlbmd0aCA8IG1heCkgewotICAgICAgICAgICAgICAgIHNob3cgPSB0ZXh0OwotICAgICAg
ICAgICAgICAgIGNhcmV0ID0gcG9zOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgLSBtaWQg
PCAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gdG9vIGZldyBjaGFyYWN0ZXJzIHRvIGxlZnQKLSAg
ICAgICAgICAgICAgICBzaG93ID0gdGV4dC5sZWZ0KG1heCAtIDMpICsgIi4uLiI7Ci0gICAgICAg
ICAgICAgICAgY2FyZXQgPSBwb3M7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyAtIG1pZCA+
PSAwICYmIHBvcyArIG1pZCA8PSB0ZXh0TGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gZW5v
dWdoIGNoYXJhY3RlcnMgb24gZWFjaCBzaWRlCi0gICAgICAgICAgICAgICAgc2hvdyA9ICIuLi4i
ICsgdGV4dC5zdWJzdHJpbmcocG9zIC0gbWlkICsgMywgbWF4IC0gNikgKyAiLi4uIjsKLSAgICAg
ICAgICAgICAgICBjYXJldCA9IG1pZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gdG9vIGZldyBjaGFyYWN0ZXJzIG9uIHJpZ2h0Ci0gICAgICAgICAgICAgICAgc2hv
dyA9ICIuLi4iICsgdGV4dC5yaWdodChtYXggLSAzKTsKLSAgICAgICAgICAgICAgICBjYXJldCA9
IHBvcyAtICh0ZXh0TGVuZ3RoIC0gc2hvdy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNob3cucmVwbGFjZSgnXG4nLCAnICcpOwotICAgICAgICAg
ICAgc2hvdy5yZXBsYWNlKCdccicsICcgJyk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ij09PiAjdGV4dCA6IFwiJXNcIiBhdCBvZmZzZXQgJWRcbiIsIHNob3cudXRmOCgpLmRhdGEoKSwg
cG9zKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAiKTsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FyZXQ7IGkrKykKLSAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAiKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXlxuIik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKGludCl0ZXh0Lmxlbmd0aCgpID4g
bWF4KQotICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmxlZnQobWF4IC0gMykgKyAiLi4uIjsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5sZWZ0KG1heCk7
Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAjdGV4dCA6IFwiJXNcIlxuIiwgdGV4
dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjpjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICAvLyBUcmVhdCBh
IGNvbGxhcHNlZCBzZWxlY3Rpb24gbGlrZSBubyBzZWxlY3Rpb24uCi0gICAgaWYgKCFpc1Jhbmdl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRvY3VtZW50LT5yZW5kZXJlcigp
KSAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVl
c3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50
KTsKLSAgICBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3Qs
IHJlc3VsdCk7Ci0gICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAg
IGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhpbm5lck5vZGUt
PnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAg
IGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgIGlmIChtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5pc051bGwoKSB8fCBtX3NlbGVj
dGlvbi52aXNpYmxlRW5kKCkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgUG9zaXRpb24gc3RhcnQobV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuZGVlcEVx
dWl2YWxlbnQoKSk7Ci0gICAgUG9zaXRpb24gZW5kKG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKS5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICBQb3NpdGlvbiBwKHZpc2libGVQb3MuZGVlcEVxdWl2YWxl
bnQoKSk7Ci0KLSAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgcCkgPD0gMCAmJiBj
b21wYXJlUG9zaXRpb25zKHAsIGVuZCkgPD0gMDsKLX0KLQotLy8gV29ya2Fyb3VuZCBmb3IgdGhl
IGZhY3QgdGhhdCBpdCdzIGhhcmQgdG8gZGVsZXRlIGEgZnJhbWUuCi0vLyBDYWxsIHRoaXMgYWZ0
ZXIgZG9pbmcgdXNlci10cmlnZ2VyZWQgc2VsZWN0aW9ucyB0byBtYWtlIGl0IGVhc3kgdG8gZGVs
ZXRlIHRoZSBmcmFtZSB5b3UgZW50aXJlbHkgc2VsZWN0ZWQuCi0vLyBDYW4ndCBkbyB0aGlzIGlt
cGxpY2l0bHkgYXMgcGFydCBvZiBldmVyeSBzZXRTZWxlY3Rpb24gY2FsbCBiZWNhdXNlIGluIHNv
bWUgY29udGV4dHMgaXQgbWlnaHQgbm90IGJlIGdvb2QKLS8vIGZvciB0aGUgZm9jdXMgdG8gbW92
ZSB0byBhbm90aGVyIGZyYW1lLiBTbyBpbnN0ZWFkIHdlIGNhbGwgaXQgZnJvbSBwbGFjZXMgd2hl
cmUgd2UgYXJlIHNlbGVjdGluZyB3aXRoIHRoZQotLy8gbW91c2Ugb3IgdGhlIGtleWJvYXJkIGFm
dGVyIHNldHRpbmcgdGhlIHNlbGVjdGlvbi4KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2Vs
ZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQotewotICAgIC8vIEZpbmQg
dGhlIHBhcmVudCBmcmFtZTsgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcg
dG8gZG8uCi0gICAgRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0g
ICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFt
ZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hl
Y2sgaWYgdGhlIHNlbGVjdGlvbiBjb250YWlucyB0aGUgZW50aXJlIGZyYW1lIGNvbnRlbnRzOyBp
ZiBub3QsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICBpZiAoIWlzUmFuZ2UoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNTdGFydE9mRG9jdW1lbnQoc2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0VuZE9mRG9jdW1l
bnQoc2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
R2V0IHRvIHRoZSA8aWZyYW1lPiBvciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50
IGluIHRoZSBwYXJlbnQgZnJhbWUuCi0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFt
ZS0+b3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBDb250YWluZXJOb2RlKiBvd25lckVsZW1lbnRQYXJlbnQgPSBvd25lckVsZW1lbnQt
PnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIW93bmVyRWxlbWVudFBhcmVudCkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAvLyBUaGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFr
ZSBpdCBlYXNpZXIgdG8gc2VsZWN0IGlmcmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4g
IERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlm
ICghb3duZXJFbGVtZW50UGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gQ3JlYXRlIGNvbXB1dGUgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIg
dGhlIGVsZW1lbnQuCi0gICAgdW5zaWduZWQgb3duZXJFbGVtZW50Tm9kZUluZGV4ID0gb3duZXJF
bGVtZW50LT5ub2RlSW5kZXgoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlT3duZXJFbGVt
ZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxl
bWVudE5vZGVJbmRleCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4ICsgMSwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7
Ci0KLSAgICAvLyBGb2N1cyBvbiB0aGUgcGFyZW50IGZyYW1lLCBhbmQgdGhlbiBzZWxlY3QgZnJv
bSBiZWZvcmUgdGhpcyBlbGVtZW50IHRvIGFmdGVyLgotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOwotICAgIGlm
IChwYXJlbnQtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkgewotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKHBh
cmVudCk7Ci0gICAgICAgIHBhcmVudC0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pOwotICAgIH0KLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwo
KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAg
Ci0gICAgaWYgKGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkTm9k
ZSgpLT5jYW5TZWxlY3RBbGwoKSkgewotICAgICAgICBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKS0+
c2VsZWN0QWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogcm9v
dCA9IDA7Ci0gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJvb3QgPSBoaWdo
ZXN0RWRpdGFibGVSb290KG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIGVsc2UgewotICAgICAg
ICByb290ID0gc2hhZG93VHJlZVJvb3ROb2RlKCk7Ci0gICAgICAgIGlmICghcm9vdCkKLSAgICAg
ICAgICAgIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgfQotICAgIGlm
ICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShyb290KSk7
Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICBz
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKLSAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVu
dElmRnVsbHlTZWxlY3RlZCgpOwotICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2Uo
dHJ1ZSk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZShS
YW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZykKLXsKLSAg
ICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5l
cihlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOb2RlKiBl
bmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKTsKLSAgICBpZiAoZWMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoc3RhcnRDb250YWluZXIpOwotICAg
IEFTU0VSVChlbmRDb250YWluZXIpOwotICAgIEFTU0VSVChzdGFydENvbnRhaW5lci0+ZG9jdW1l
bnQoKSA9PSBlbmRDb250YWluZXItPmRvY3VtZW50KCkpOwotICAgIAotICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotCi0gICAg
Ly8gTm9uLWNvbGxhcHNlZCByYW5nZXMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0YXJ0IGF0IHRoZSBl
bmQgb2YgYSBsaW5lIHRoYXQgaXMgd3JhcHBlZCwKLSAgICAvLyB0aGV5IHN0YXJ0IGF0IHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSBpbnN0ZWFkCi0gICAgYm9vbCBjb2xsYXBzZWQgPSBy
YW5nZS0+Y29sbGFwc2VkKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoZWMpOwotICAg
IGlmIChlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGVuZE9mZnNldCA9IHJh
bmdlLT5lbmRPZmZzZXQoZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KLSAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVyLCBzdGFy
dE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIGNvbGxhcHNlZCA/
IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQo
UG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgU2V0U2VsZWN0aW9uT3B0
aW9ucyBvcHRpb25zID0gQ2xlYXJUeXBpbmdTdHlsZTsKLSAgICBpZiAoY2xvc2VUeXBpbmcpCi0g
ICAgICAgIG9wdGlvbnMgfD0gQ2xvc2VUeXBpbmc7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6aXNJblBhc3N3b3JkRmllbGQo
KSBjb25zdAotewotICAgIEFTU0VSVChzdGFydCgpLmlzTnVsbCgpIHx8IHN0YXJ0KCkuYW5jaG9y
VHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IKLSAgICAgICAgICAg
fHwgc3RhcnQoKS5jb250YWluZXJOb2RlKCkgfHwgIXN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKSk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQoKS5jb250YWlu
ZXJOb2RlKCk7Ci0gICAgaWYgKCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYg
KCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3RhcnROb2Rl
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc3RhcnROb2RlKS0+aXNQYXNz
d29yZEZpZWxkKCk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZW5kZXJz
SW5zaWRlTm9kZShOb2RlKiBub2RlKSBjb25zdAotewotICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAhaXNUYWJsZUVsZW1lbnQobm9kZSkgJiYgIWVkaXRp
bmdJZ25vcmVzQ29udGVudChub2RlKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQotewotICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNl
ZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotCi0gICAgLy8gQmVjYXVzZSBSZW5kZXJPYmplY3Q6
OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAotICAgIC8vIFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwKLSAg
ICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFpbnRlZC4K
LSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRvUmVuZGVyVmlldyhtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5yZW5kZXJlcigpKSkKLSAgICAgICAgdmlldy0+cmVwYWludFJlY3RhbmdsZUluVmlld0Fu
ZENvbXBvc2l0ZWRMYXllcnMoZW5jbG9zaW5nSW50UmVjdChib3VuZHMoKSkpOwotCi0gICAgLy8g
Q2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgotICAgIGlmIChhY3RpdmVBbmRGb2N1
c2VkKQotICAgICAgICBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwotICAgIHNldENhcmV0VmlzaWJs
ZShhY3RpdmVBbmRGb2N1c2VkKTsKLQotICAgIC8vIFVwZGF0ZSBmb3IgY2FwcyBsb2NrIHN0YXRl
Ci0gICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdl
ZCgpOwotCi0gICAgLy8gQmVjYXVzZSBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9y
KCkgYW5kCi0gICAgLy8gUmVuZGVyVGhlbWU6OmlzRm9jdXNlZCgpIGNoZWNrIGlmIHRoZSBmcmFt
ZSBpcyBhY3RpdmUsIHdlIGhhdmUgdG8KLSAgICAvLyB1cGRhdGUgc3R5bGUgYW5kIHRoZW1lIHN0
YXRlIHRoYXQgZGVwZW5kZWQgb24gdGhvc2UuCi0gICAgaWYgKE5vZGUqIG5vZGUgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKSB7Ci0gICAgICAgIG5vZGUtPnNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpKQotICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXItPnRoZW1lKCktPnN0
YXRlQ2hhbmdlZChyZW5kZXJlciwgRm9jdXNTdGF0ZSk7Ci0gICAgfQotCi0gICAgLy8gU2VjdXJl
IGtleWJvYXJkIGVudHJ5IGlzIHNldCBieSB0aGUgYWN0aXZlIGZyYW1lLgotICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSgpKQotICAg
ICAgICBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGFjdGl2ZUFuZEZvY3VzZWQpOwotfQotCi12
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnBhZ2VBY3RpdmF0aW9uQ2hhbmdlZCgpCi17Ci0gICAg
Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6dXBkYXRlU2VjdXJlS2V5Ym9hcmRFbnRyeUlmQWN0aXZlKCkKLXsKLSAgICBpZiAobV9m
cmFtZS0+ZG9jdW1lbnQoKSAmJiBpc0ZvY3VzZWRBbmRBY3RpdmUoKSkKLSAgICAgICAgc2V0VXNl
U2VjdXJlS2V5Ym9hcmRFbnRyeShtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2VTZWN1cmVLZXlib2Fy
ZEVudHJ5V2hlbkFjdGl2ZSgpKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRV
c2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFibGUpCi0g
ICAgICAgIGVuYWJsZVNlY3VyZVRleHRJbnB1dCgpOwotICAgIGVsc2UKLSAgICAgICAgZGlzYWJs
ZVNlY3VyZVRleHRJbnB1dCgpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEZv
Y3VzZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2ZvY3VzZWQgPT0gZmxhZykKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fZm9jdXNlZCA9IGZsYWc7Ci0KLSAgICBmb2N1c2VkT3JBY3RpdmVTdGF0
ZUNoYW5nZWQoKTsKLX0KLQotYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjppc0ZvY3VzZWRBbmRB
Y3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ZvY3VzZWQgJiYgbV9mcmFtZS0+cGFnZSgp
ICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci19Ci0K
LXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6dXBkYXRlQXBwZWFyYW5jZSgpCi17Ci0gICAgQVNT
RVJUKCFtX2lzRHJhZ0NhcmV0Q29udHJvbGxlcik7Ci0KLSNpZiBFTkFCTEUoVEVYVF9DQVJFVCkK
LSAgICBib29sIGNhcmV0UmVjdENoYW5nZWQgPSByZWNvbXB1dGVDYXJldFJlY3QoKTsKLQotICAg
IGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0
dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIHNob3VsZEJsaW5rID0g
bV9jYXJldFZpc2libGUKLSAgICAgICAgJiYgaXNDYXJldCgpICYmIChpc0NvbnRlbnRFZGl0YWJs
ZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwotCi0gICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9w
IHRoZSBibGluayB0aW1lciBzbyB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKLSAgICAvLyBibGFjayBj
YXJldCBpbiB0aGUgbmV3IGxvY2F0aW9uLgotICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkIHx8ICFz
aG91bGRCbGluaykKLSAgICAgICAgbV9jYXJldEJsaW5rVGltZXIuc3RvcCgpOwotCi0gICAgLy8g
U3RhcnQgYmxpbmtpbmcgd2l0aCBhIGJsYWNrIGNhcmV0LiBCZSBzdXJlIG5vdCB0byByZXN0YXJ0
IGlmIHdlJ3JlCi0gICAgLy8gYWxyZWFkeSBibGlua2luZyBpbiB0aGUgcmlnaHQgbG9jYXRpb24u
Ci0gICAgaWYgKHNob3VsZEJsaW5rICYmICFtX2NhcmV0QmxpbmtUaW1lci5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIGlmIChkb3VibGUgYmxpbmtJbnRlcnZhbCA9IG1fZnJhbWUtPnBhZ2UoKS0+dGhl
bWUoKS0+Y2FyZXRCbGlua0ludGVydmFsKCkpCi0gICAgICAgICAgICBtX2NhcmV0QmxpbmtUaW1l
ci5zdGFydFJlcGVhdGluZyhibGlua0ludGVydmFsKTsKLQotICAgICAgICBpZiAoIW1fY2FyZXRQ
YWludCkgewotICAgICAgICAgICAgbV9jYXJldFBhaW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlu
dmFsaWRhdGVDYXJldFJlY3QoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgLy8g
V2UgbmVlZCB0byB1cGRhdGUgc3R5bGUgaW4gY2FzZSB0aGUgbm9kZSBjb250YWluaW5nIHRoZSBz
ZWxlY3Rpb24gaXMgbWFkZSBkaXNwbGF5Om5vbmUuCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0aGlzLT5zZWxlY3Rpb24oKTsKLQotICAg
IGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlv
bigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXNlIHRoZSByaWdodG1vc3Qg
Y2FuZGlkYXRlIGZvciB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgYW5kIHRoZSBsZWZ0bW9z
dCBjYW5kaWRhdGUgZm9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAvLyBFeGFtcGxl
OiBmb28gPGE+YmFyPC9hPi4gIEltYWdpbmUgdGhhdCBhIGxpbmUgd3JhcCBvY2N1cnMgYWZ0ZXIg
J2ZvbycsIGFuZCB0aGF0ICdiYXInIGlzIHNlbGVjdGVkLiAgIElmIHdlIHBhc3MgW2ZvbywgM10K
LSAgICAvLyBhcyB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgdGhlIHNlbGVjdGlvbiBwYWlu
dGluZyBjb2RlIHdpbGwgdGhpbmsgdGhhdCBjb250ZW50IG9uIHRoZSBsaW5lIGNvbnRhaW5pbmcg
J2ZvbycgaXMgc2VsZWN0ZWQKLSAgICAvLyBhbmQgd2lsbCBmaWxsIHRoZSBnYXAgYmVmb3JlICdi
YXInLgotICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgUG9z
aXRpb24gY2FuZGlkYXRlID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOwotICAgIGlmIChjYW5kaWRh
dGUuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgc3RhcnRQb3MgPSBjYW5kaWRhdGU7Ci0gICAgUG9z
aXRpb24gZW5kUG9zID0gc2VsZWN0aW9uLmVuZCgpOwotICAgIGNhbmRpZGF0ZSA9IGVuZFBvcy51
cHN0cmVhbSgpOwotICAgIGlmIChjYW5kaWRhdGUuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgZW5k
UG9zID0gY2FuZGlkYXRlOwotCi0gICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUg
dGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3NpdGlvbiB3
aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHlldCBu
b3RpZnkgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgb2YgdGV4dCByZW1vdmFsLgotICAgIGlmIChz
dGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRS
ZW5kZXJlciwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIs
IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhZykKLXsKLSAgICBpZiAo
bV9jYXJldFZpc2libGUgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIGNsZWFyQ2FyZXRS
ZWN0SWZOZWVkZWQoKTsKLSAgICBtX2NhcmV0VmlzaWJsZSA9IGZsYWc7Ci0gICAgdXBkYXRlQXBw
ZWFyYW5jZSgpOwotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyQ2FyZXRSZWN0
SWZOZWVkZWQoKQotewotI2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIGlmICghbV9jYXJldFBh
aW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jYXJldFBhaW50ID0gZmFsc2U7Ci0gICAgaW52
YWxpZGF0ZUNhcmV0UmVjdCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8U2VsZWN0aW9uQ29udHJvbGxlcj4qKQotewot
I2lmIEVOQUJMRShURVhUX0NBUkVUKQotICAgIEFTU0VSVChtX2NhcmV0VmlzaWJsZSk7Ci0gICAg
QVNTRVJUKGlzQ2FyZXQoKSk7Ci0gICAgYm9vbCBjYXJldFBhaW50ID0gbV9jYXJldFBhaW50Owot
ICAgIGlmIChpc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoKSAmJiBjYXJldFBhaW50KQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9jYXJldFBhaW50ID0gIWNhcmV0UGFpbnQ7Ci0gICAgaW52YWxpZGF0
ZUNhcmV0UmVjdCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90
aWZ5UmVuZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29sIHVzZXJUcmlnZ2VyZWQpCi17Ci0gICAg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFy
b290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSByb290RWRpdGFibGVFbGVtZW50KCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1RleHRDb250
cm9sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVy
ZXIpLT5zZWxlY3Rpb25DaGFuZ2VkKHVzZXJUcmlnZ2VyZWQpOwotfQotCi0vLyBIZWxwZXIgZnVu
Y3Rpb24gdGhhdCB0ZWxscyB3aGV0aGVyIGEgcGFydGljdWxhciBub2RlIGlzIGFuIGVsZW1lbnQg
dGhhdCBoYXMgYW4gZW50aXJlCi0vLyBGcmFtZSBhbmQgRnJhbWVWaWV3LCBhIDxmcmFtZT4sIDxp
ZnJhbWU+LCBvciA8b2JqZWN0Pi4KLXN0YXRpYyBib29sIGlzRnJhbWVFbGVtZW50KGNvbnN0IE5v
ZGUqIG4pCi17Ci0gICAgaWYgKCFuKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG4tPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAh
cmVuZGVyZXItPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaWRnZXQq
IHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7Ci0gICAgcmV0dXJu
IHdpZGdldCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpCi17Ci0gICAgaWYgKGlzTm9uZSgpIHx8
ICFpc0ZvY3VzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOwotICAgIGlmIChjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgIGlmIChOb2Rl
KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KGJhc2UoKSkpIHsKLSAgICAgICAgICAg
IG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKGFuY2hv
ciwgbV9mcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoTm9kZSogdGFyZ2V0ID0gcm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7Ci0gICAgICAgIC8v
IFdhbGsgdXAgdGhlIERPTSB0cmVlIHRvIHNlYXJjaCBmb3IgYSBub2RlIHRvIGZvY3VzLiAKLSAg
ICAgICAgd2hpbGUgKHRhcmdldCkgewotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBz
ZXQgZm9jdXMgb24gYSBzdWJmcmFtZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwK
LSAgICAgICAgICAgIC8vIHNvIGFkZCB0aGUgIWlzRnJhbWVFbGVtZW50IGNoZWNrIGhlcmUuIFRo
ZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIG1ha2UgdGhpcwotICAgICAgICAgICAgLy8g
d29yayBpbiB0aGUgbG9uZyB0ZXJtLCBidXQgdGhpcyBpcyB0aGUgc2FmZXN0IGZpeCBhdCB0aGlz
IHRpbWUuCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC0+aXNNb3VzZUZvY3VzYWJs
ZSgpICYmICFpc0ZyYW1lRWxlbWVudCh0YXJnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGFyZ2V0LCBtX2Zy
YW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0YXJnZXQgPSB0YXJnZXQtPnBhcmVudE9ySG9zdE5vZGUoKTsgCi0gICAgICAgIH0KLSAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUoMCk7Ci0gICAgfQotCi0gICAg
aWYgKGNhcmV0QnJvd3NpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWROb2RlKDAsIG1fZnJhbWUpOwotfQotCi12b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQg
dHksIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdAotewotI2lmIEVOQUJMRShURVhUX0NB
UkVUKQotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIgPSBtX2Zy
YW1lLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKLSAgICBBU1NFUlQoZHJhZ0NhcmV0
Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuaXNDYXJldCgpKTsKLSAgICBpZiAoZHJhZ0NhcmV0Q29u
dHJvbGxlci0+c2VsZWN0aW9uKCkuc3RhcnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkgPT0gbV9mcmFtZSkKLSAgICAgICAgZHJhZ0NhcmV0Q29udHJvbGxlci0+cGFpbnRDYXJl
dChwLCB0eCwgdHksIGNsaXBSZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHApOwotICAg
IFVOVVNFRF9QQVJBTSh0eCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5KTsKLSAgICBVTlVTRURfUEFS
QU0oY2xpcFJlY3QpOwotI2VuZGlmCi19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX3R5cGluZ1N0eWxlIHx8ICFtX3R5cGluZ1N0eWxlLT5zdHlsZSgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV90eXBpbmdTdHlsZS0+c3R5bGUoKS0+Y29weSgp
OwotfQotCi1ib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZERlbGV0ZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotfQotCi1GbG9hdFJlY3QgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgIEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXJvb3QgfHwgIXZpZXcpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290
LT5zZWxlY3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotICAgIHJldHVybiBjbGlw
VG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlvbihzZWxlY3Rpb25SZWN0LCB2aWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0OwotfQotCi12b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RhbmdsZXMpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRmxvYXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJs
ZUNvbnRlbnRSZWN0KCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICB0b05v
cm1hbGl6ZWRSYW5nZSgpLT50ZXh0UXVhZHMocXVhZHMsIHRydWUpOwotCi0gICAgLy8gRklYTUU6
IFdlIGFyZSBhcHBlbmRpbmcgZW1wdHkgcmVjdGFuZ2xlcyB0byB0aGUgbGlzdCBmb3IgdGhvc2Ug
dGhhdCBmYWxsIG91dHNpZGUgdmlzaWJsZUNvbnRlbnRSZWN0LgotICAgIC8vIEl0IG1pZ2h0IGJl
IGJldHRlciB0byBvbWl0IHRob3NlIHJlY3RhbmdsZXMgZW50aXJlbHkuCi0gICAgc2l6ZV90IHNp
emUgPSBxdWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKGludGVyc2VjdGlvbihxdWFkc1tpXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpLCB2aXNpYmxlQ29udGVudFJlY3QpKTsKLX0KLQotLy8gU2NhbnMgbG9n
aWNhbGx5IGZvcndhcmQgZnJvbSAic3RhcnQiLCBpbmNsdWRpbmcgYW55IGNoaWxkIGZyYW1lcy4K
LXN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKE5vZGUqIHN0YXJ0KQotewotICAg
IGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7Ci0gICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAg
ICAgICAgIE5vZGUqIGNoaWxkRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50
QmFzZSo+KG5vZGUpLT5jb250ZW50RG9jdW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChIVE1MRm9y
bUVsZW1lbnQqIGZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2N1bWVudCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lUmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfQotCi0vLyBXZSBsb29rIGZvciBlaXRoZXIgdGhlIGZvcm0gY29udGFpbmluZyB0
aGUgY3VycmVudCBmb2N1cywgb3IgZm9yIG9uZSBpbW1lZGlhdGVseSBhZnRlciBpdAotSFRNTEZv
cm1FbGVtZW50KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjdXJyZW50Rm9ybSgpIGNvbnN0Ci17Ci0g
ICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhlIGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVy
KSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzLgotICAgIE5vZGUqIHN0YXJ0ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKLQotICAgIC8vIFRyeSB3
YWxraW5nIHVwIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4KLSAgICBOb2Rl
KiBub2RlOwotICAgIGZvciAobm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50
Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7Ci0gICAgfQotCi0gICAgLy8gVHJ5IHdh
bGtpbmcgZm9yd2FyZCBpbiB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQuCi0g
ICAgcmV0dXJuIHNjYW5Gb3JGb3JtKHN0YXJ0KTsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJv
b2wgcmV2ZWFsRXh0ZW50KQotewotICAgIEludFJlY3QgcmVjdDsKLQotICAgIHN3aXRjaCAoc2Vs
ZWN0aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rp
b246Ci0gICAgICAgIHJlY3QgPSBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246Ci0gICAgICAgIHJl
Y3QgPSByZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KCkpLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKSA6IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIFBvc2l0aW9uIHN0YXJ0ID0gdGhpcy0+c3RhcnQoKTsKLSAgICBB
U1NFUlQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb2RlIG9ubHkgaGFuZGxlcyBzY3JvbGxpbmcgdGhlIHN0YXJ0Q29udGFp
bmVyJ3MgbGF5ZXIsIGJ1dAotICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIHJlY3QgY291bGQgaW50
ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRoYXQuCi0gICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNDc5OTg5OT4uCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7Ci0gICAgICAgICAg
ICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwgYWxpZ25tZW50LCBhbGln
bm1lbnQpOwotICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyb21Ob25lKCkK
LXsKLSAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJvZHkgaWYgdGhlIGVudGlyZSBmcmFt
ZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZQotICAgIC8vIGVudGlyZSBXZWJWaWV3IGlzIGVkaXRh
YmxlIG9yIGRlc2lnbk1vZGUgaXMgb24gZm9yIHRoaXMgZG9jdW1lbnQpLgotCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBib29sIGNhcmV0QnJvd3Np
bmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJv
d3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50LT5yZW5kZXJl
cklzRWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Tm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICB3aGlsZSAobm9k
ZSAmJiAhbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgc2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RS
RUFNKSk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24o
KSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwotfQotCi0j
aWZuZGVmIE5ERUJVRwotCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIG1fc2VsZWN0
aW9uLmZvcm1hdEZvckRlYnVnZ2VyKGJ1ZmZlciwgbGVuZ3RoKTsKLX0KLQotdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzaG93VHJlZUZvclRoaXMoKSBjb25zdAotewotICAgIG1fc2VsZWN0aW9u
LnNob3dUcmVlRm9yVGhpcygpOwotfQotCi0jZW5kaWYKLQotfQotCi0jaWZuZGVmIE5ERUJVRwot
Ci12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXImIHNlbCkK
LXsKLSAgICBzZWwuc2hvd1RyZWVGb3JUaGlzKCk7Ci19Ci0KLXZvaWQgc2hvd1RyZWUoY29uc3Qg
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciogc2VsKQotewotICAgIGlmIChzZWwpCi0gICAg
ICAgIHNlbC0+c2hvd1RyZWVGb3JUaGlzKCk7Ci19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDg1ODM0KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAotI2RlZmluZSBTZWxl
Y3Rpb25Db250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9y
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ2hhcmFjdGVyRGF0YTsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7
Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJWaWV3OwotY2xhc3MgU2V0dGluZ3M7
Ci1jbGFzcyBWaXNpYmxlUG9zaXRpb247Ci0KLWVudW0gRGlyZWN0aW9uYWxpdHlQb2xpY3kgeyBN
YWtlTm9uRGlyZWN0aW9uYWxTZWxlY3Rpb24sIE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbiB9Owot
Ci1jbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
ZWxlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBFQWx0ZXJhdGlvbiB7IEFsdGVyYXRpb25Nb3ZlLCBBbHRlcmF0aW9uRXh0ZW5kIH07
Ci0gICAgZW51bSBDdXJzb3JBbGlnbk9uU2Nyb2xsIHsgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVl
ZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsaWduQ3Vyc29yT25TY3JvbGxB
bHdheXMgfTsKLSAgICBlbnVtIFNldFNlbGVjdGlvbk9wdGlvbiB7Ci0gICAgICAgIENsb3NlVHlw
aW5nID0gMSA8PCAwLAotICAgICAgICBDbGVhclR5cGluZ1N0eWxlID0gMSA8PCAxLAotICAgICAg
ICBVc2VyVHJpZ2dlcmVkID0gMSA8PCAyLAotICAgICAgICBTcGVsbENvcnJlY3Rpb25UcmlnZ2Vy
ZWQgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFNldFNlbGVjdGlvbk9w
dGlvbnM7Ci0KLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKEZyYW1lKiA9IDAsIGJvb2wgaXNEcmFn
Q2FyZXRDb250cm9sbGVyID0gZmFsc2UpOwotCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsg
fQotICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
bi5pc0NvbnRlbnRFZGl0YWJsZSgpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7
IH0KLSAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvbi5zaGFkb3dUcmVlUm9vdE5vZGUoKTsgfQotICAgICAKLSAgICB2b2lkIG1vdmVUbyhjb25z
dCBSYW5nZSosIEVBZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOwotICAgIHZv
aWQgbW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZh
bHNlLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkKTsK
LSAgICB2b2lkIG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7Ci0gICAgdm9pZCBtb3ZlVG8oY29u
c3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAg
ICB2b2lkIG1vdmVUbyhjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5
LCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSk7Ci0KLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQotICAgIHZvaWQg
c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBTZXRTZWxlY3Rpb25PcHRpb25z
ID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0g
QWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eSwgRGlyZWN0aW9uYWxpdHlQb2xpY3kgPSBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rp
b24pOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSBk
aXJlY3Rpb25hbGl0eSA9IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbikgeyBzZXRTZWxlY3Rpb24o
c2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWduQ3Vyc29yT25T
Y3JvbGxJZk5lZWRlZCwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbmFsaXR5KTsgfQotICAgIGJvb2wg
c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBjbG9zZVR5cGluZyk7Ci0g
ICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgCi0gICAgLy8gQ2Fs
bCB0aGlzIGFmdGVyIGRvaW5nIHVzZXItdHJpZ2dlcmVkIHNlbGVjdGlvbnMgdG8gbWFrZSBpdCBl
YXN5IHRvIGRlbGV0ZSB0aGUgZnJhbWUgeW91IGVudGlyZWx5IHNlbGVjdGVkLgotICAgIHZvaWQg
c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKLQotICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIFZpc2libGVTZWxlY3Rpb246OlNlbGVj
dGlvblR5cGUgc2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnNlbGVj
dGlvblR5cGUoKTsgfQotCi0gICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb24uYWZmaW5pdHkoKTsgfQotCi0gICAgYm9vbCBtb2RpZnkoRUFsdGVyYXRpb24s
IFNlbGVjdGlvbkRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQg
PSBmYWxzZSk7Ci0gICAgYm9vbCBtb2RpZnkoRUFsdGVyYXRpb24sIGludCB2ZXJ0aWNhbERpc3Rh
bmNlLCBib29sIHVzZXJUcmlnZ2VyZWQgPSBmYWxzZSwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFs
aWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCk7Ci0gICAgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5KCkgY29uc3QgeyByZXR1cm4gbV9ncmFudWxhcml0eTsgfQotCi0gICAgdm9pZCBzZXRTdGFy
dChjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFsc2UpOwot
ICAgIHZvaWQgc2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmLCBib29sIHVzZXJUcmlnZ2Vy
ZWQgPSBmYWxzZSk7Ci0gICAgCi0gICAgdm9pZCBzZXRCYXNlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldEJhc2UoY29uc3Qg
UG9zaXRpb24mLCBFQWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLSAgICB2
b2lkIHNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29sIHVzZXJUcmlnZ2VyZWQg
PSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHks
IGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKLQotICAgIFBvc2l0aW9uIGJhc2UoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi5iYXNlKCk7IH0KLSAgICBQb3NpdGlvbiBleHRlbnQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5leHRlbnQoKTsgfQotICAgIFBvc2l0aW9uIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uc3RhcnQoKTsgfQotICAgIFBvc2l0aW9uIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmVuZCgpOyB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIHJlbmRlcmVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAo
aW4gdGhlIHNlbGVjdGlvbiBzdGFydCBub2RlKQotICAgIFJlbmRlck9iamVjdCogY2FyZXRSZW5k
ZXJlcigpIGNvbnN0OwotCi0gICAgLy8gQ2FyZXQgcmVjdCBsb2NhbCB0byB0aGUgY2FyZXQncyBy
ZW5kZXJlcgotICAgIEludFJlY3QgbG9jYWxDYXJldFJlY3QoKTsKLSAgICBJbnRSZWN0IGxvY2Fs
Q2FyZXRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhcmV0UmVjdDsgfQotCi0g
ICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUg
Y29vcmRzCi0gICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgdm9pZCBzZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZShib29sIGZsYWcgPSB0cnVlKTsKLQotICAgIHZvaWQgc2V0SXNE
aXJlY3Rpb25hbChib29sKTsKLSAgICB2b2lkIHdpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uLCBT
ZWxlY3Rpb25EaXJlY3Rpb24pOwotCi0gICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdGlvbi5pc05vbmUoKTsgfQotICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKTsgfQotICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsgfQotICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpOyB9Ci0gICAgYm9vbCBp
c0luUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwotICAgIGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7IH0KLSAgICAKLSAgICBQYXNzUmVmUHRyPFJh
bmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7IH0KLQotICAgIHZvaWQgZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3Qq
LCBib29sIHNlbGVjdGVkKSBjb25zdDsKLQotICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9k
ZSopOwotICAgIHZvaWQgdGV4dFdpbGxCZVJlcGxhY2VkKENoYXJhY3RlckRhdGEqLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKLQotICAg
IHZvaWQgc2V0Q2FyZXRWaXNpYmxlKGJvb2wgPSB0cnVlKTsKLSAgICB2b2lkIGNsZWFyQ2FyZXRS
ZWN0SWZOZWVkZWQoKTsKLSAgICBib29sIHJlY29tcHV0ZUNhcmV0UmVjdCgpOyAvLyByZXR1cm5z
IHRydWUgaWYgY2FyZXQgcmVjdCBtb3ZlZAotICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVjdCgp
OwotICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwotCi0gICAgLy8gVXNlZCB0byBzdXNwZW5kIGNhcmV0
IGJsaW5raW5nIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgotICAgIHZvaWQgc2V0Q2FyZXRCbGlu
a2luZ1N1c3BlbmRlZChib29sIHN1c3BlbmRlZCkgeyBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRl
ZCA9IHN1c3BlbmRlZDsgfQotICAgIGJvb2wgaXNDYXJldEJsaW5raW5nU3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQ7IH0KLQotICAgIC8vIEZvY3Vz
Ci0gICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpOwotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9mb2N1c2VkOyB9Ci0gICAgYm9vbCBpc0ZvY3VzZWRBbmRBY3RpdmUoKSBjb25z
dDsKLSAgICB2b2lkIHBhZ2VBY3RpdmF0aW9uQ2hhbmdlZCgpOwotCi0gICAgLy8gUGFpbnRpbmcu
Ci0gICAgdm9pZCB1cGRhdGVBcHBlYXJhbmNlKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVNlY3VyZUtl
eWJvYXJkRW50cnlJZkFjdGl2ZSgpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZm9ybWF0
Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwotICAgIHZv
aWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICBib29sIHNo
b3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAg
dm9pZCBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBub3RpZnlSZW5kZXJlck9m
U2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCk7Ci0KLSAgICB2b2lkIHBhaW50RHJh
Z0NhcmV0KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkgY29uc3Q7Ci0KLSAgICBFZGl0aW5nU3R5bGUqIHR5cGluZ1N0eWxlKCkgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVR5cGluZ1N0
eWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4pOwotICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwotCi0gICAgRmxvYXRSZWN0IGJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7Ci0KLSAgICB2b2lk
IGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mKSBjb25z
dDsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25zdDsKLQotICAgIHZv
aWQgcmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduQ2VudGVySWZOZWVkZWQsIGJvb2wgcmV2ZWFsRXh0ZW50ID0gZmFsc2UpOwotICAg
IHZvaWQgc2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIEVQb3Np
dGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKLQotICAgIHZvaWQgcmVzcG9u
ZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlKiwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRS
ZW1vdmVkLCBib29sIHN0YXJ0UmVtb3ZlZCwgYm9vbCBlbmRSZW1vdmVkKTsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKLQotICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3Q7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdDsKLSAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kRm9yUGxhdGZvcm0oKSBjb25zdDsKLQotICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlFeHRl
bmRpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlF
eHRlbmRpbmdGb3J3YXJkKFRleHRHcmFudWxhcml0eSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG1v
ZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG1v
ZGlmeU1vdmluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
bW9kaWZ5RXh0ZW5kaW5nTGVmdChUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2libGVQb3NpdGlv
biBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHkpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBtb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSk7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIG1vZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSk7Ci0KLSAgICB2b2lk
IHVwZGF0ZUNhcmV0UmVjdCgpOwotICAgIEludFJlY3QgY2FyZXRSZXBhaW50UmVjdCgpIGNvbnN0
OwotICAgIGJvb2wgc2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJlbmRlclZpZXcqIHZpZXcpIGNv
bnN0OwotCi0gICAgaW50IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25U
eXBlKTsKLSAgICAKLSAgICB2b2lkIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFu
Z2UoKTsKLQotICAgIHZvaWQgZm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCk7Ci0gICAgYm9v
bCBjYXJldFJlbmRlcnNJbnNpZGVOb2RlKE5vZGUqKSBjb25zdDsKLSAgICAKLSAgICBJbnRSZWN0
IGFic29sdXRlQm91bmRzRm9yTG9jYWxSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKLQotICAg
IHZvaWQgY2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8U2VsZWN0aW9uQ29udHJvbGxlcj4qKTsK
LQotICAgIHZvaWQgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShib29sKTsKLQotICAgIEZyYW1l
KiBtX2ZyYW1lOwotCi0gICAgaW50IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwot
Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBtX3NlbGVjdGlvbjsKLSAgICBUZXh0R3JhbnVsYXJpdHkg
bV9ncmFudWxhcml0eTsKLQotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7
Ci0KLSAgICBUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiBtX2NhcmV0QmxpbmtUaW1lcjsKLQot
ICAgIEludFJlY3QgbV9jYXJldFJlY3Q7IC8vIGNhcmV0IHJlY3QgaW4gY29vcmRzIGxvY2FsIHRv
IHRoZSByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0Ci0gICAgSW50
UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAvLyBhYnNvbHV0ZSBib3VuZGluZyByZWN0IGZvciB0aGUg
Y2FyZXQKLSAgICBJbnRSZWN0IG1fYWJzb2x1dGVDYXJldFJlcGFpbnRCb3VuZHM7Ci0gICAgCi0g
ICAgYm9vbCBtX2NhcmV0UmVjdE5lZWRzVXBkYXRlOyAvLyB0cnVlIGlmIG1fY2FyZXRSZWN0IGFu
ZCBtX2Fic0NhcmV0Qm91bmRzIG5lZWQgdG8gYmUgY2FsY3VsYXRlZAotICAgIGJvb2wgbV9hYnND
YXJldEJvdW5kc0RpcnR5OwotICAgIGJvb2wgbV9pc0RpcmVjdGlvbmFsOwotICAgIGJvb2wgbV9p
c0RyYWdDYXJldENvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX2lzQ2FyZXRCbGlua2luZ1N1c3BlbmRl
ZDsKLSAgICBib29sIG1fZm9jdXNlZDsKLSAgICBib29sIG1fY2FyZXRWaXNpYmxlOwotICAgIGJv
b2wgbV9jYXJldFBhaW50OwotfTsKLQotaW5saW5lIEVkaXRpbmdTdHlsZSogU2VsZWN0aW9uQ29u
dHJvbGxlcjo6dHlwaW5nU3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3R5cGluZ1N0eWxl
LmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhclR5cGlu
Z1N0eWxlKCkKLXsKLSAgICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7Ci19Ci0KLWlubGluZSB2b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzdHlsZSkKLXsKLSAgICBtX3R5cGluZ1N0eWxlID0gc3R5bGU7Ci19Ci0KLSNpZiAhKFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkpCi1pbmxp
bmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0
aW9uQ2hhbmdlKCkKLXsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNp
Zm5kZWYgTkRFQlVHCi0vLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBmb3IgZWFzZSBv
ZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgotdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpTZWxl
Y3Rpb25Db250cm9sbGVyJik7Ci12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlv
bkNvbnRyb2xsZXIqKTsKLSNlbmRpZgotCi0jZW5kaWYgLy8gU2VsZWN0aW9uQ29udHJvbGxlcl9o
Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5k
LmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotU2V0U2VsZWN0aW9uQ29tbWFuZDo6U2V0U2VsZWN0aW9uQ29tbWFu
ZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OlNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKK1NldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNl
bGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBGcmFtZVNl
bGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogICAgIDogU2ltcGxlRWRpdENv
bW1hbmQoc2VsZWN0aW9uLmJhc2UoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCkpCiAgICAgLCBt
X29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fc2VsZWN0aW9uVG9TZXQoc2VsZWN0aW9uKQpAQCAt
MzksMjIgKzM5LDIyIEBAIFNldFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQK
IAogdm9pZCBTZXRTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBTZWxlY3Rpb25D
b250cm9sbGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uKCk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbkNvbnRyb2xsZXIpOworICAgIEZyYW1lU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAg
ICBBU1NFUlQoc2VsZWN0aW9uKTsKIAotICAgIGlmIChzZWxlY3Rpb25Db250cm9sbGVyLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub1NldCkgJiYgbV9zZWxlY3Rpb25Ub1NldC5p
c05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpIHsKLSAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxl
ci0+c2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CisgICAgaWYgKHNl
bGVjdGlvbi0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQpICYmIG1fc2Vs
ZWN0aW9uVG9TZXQuaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpKSB7CisgICAgICAgIHNlbGVj
dGlvbi0+c2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9TZXQsIG1fb3B0aW9ucyk7CiAgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihtX3NlbGVjdGlvblRvU2V0KTsKICAgICB9CiB9CiAKIHZvaWQg
U2V0U2VsZWN0aW9uQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9s
bGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9u
KCk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbkNvbnRyb2xsZXIpOworICAgIEZyYW1lU2VsZWN0aW9u
KiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBBU1NF
UlQoc2VsZWN0aW9uKTsKIAotICAgIGlmIChzZWxlY3Rpb25Db250cm9sbGVyLT5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSkgJiYgc3RhcnRpbmdTZWxlY3Rpb24oKS5p
c05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCi0gICAgICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIt
PnNldFNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLCBtX29wdGlvbnMpOworICAgIGlmIChz
ZWxlY3Rpb24tPnNob3VsZENoYW5nZVNlbGVjdGlvbihzdGFydGluZ1NlbGVjdGlvbigpKSAmJiBz
dGFydGluZ1NlbGVjdGlvbigpLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2UoKSkKKyAgICAgICAg
c2VsZWN0aW9uLT5zZXRTZWxlY3Rpb24oc3RhcnRpbmdTZWxlY3Rpb24oKSwgbV9vcHRpb25zKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXRTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIzICsyNywyMyBAQAogI2RlZmluZSBTZXRTZWxlY3Rpb25Db21tYW5kX2gKIAogI2luY2x1ZGUg
IkVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2V0
U2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0U2VsZWN0aW9uQ29tbWFuZD4gY3JlYXRlKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0U2VsZWN0
aW9uT3B0aW9ucyBvcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldFNlbGVjdGlvbkNv
bW1hbmQ+IGNyZWF0ZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIEZyYW1lU2Vs
ZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNldFNlbGVjdGlvbkNvbW1hbmQoc2VsZWN0aW9uLCBvcHRpb25zKSk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMpOwor
ICAgIFNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEZyYW1lU2Vs
ZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlNldFNlbGVjdGlvbk9wdGlvbnMgbV9vcHRpb25zOworICAgIEZyYW1lU2VsZWN0aW9uOjpT
ZXRTZWxlY3Rpb25PcHRpb25zIG1fb3B0aW9uczsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2Vs
ZWN0aW9uVG9TZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoCiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0
aW9uVG9CZUNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxDb3JyZWN0aW9uVHJp
Z2dlcmVkIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25Db250
cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
U2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCwgRnJh
bWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCB8IEZyYW1lU2VsZWN0aW9uOjpD
bG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlKSk7CiAjaWYgU1VQ
UE9SVF9BVVRPQ09SUkVDVElPTl9QQU5FTAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNw
ZWxsaW5nQ29ycmVjdGlvblJlY29yZFVuZG9Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9j
b3JyZWN0ZWQsIG1fY29ycmVjdGlvbikpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KIHsKICAgICBjbGllbnQoKS0+cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2
ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihz
ZWxlY3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VU
eXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSB8IEZyYW1lU2VsZWN0aW9u
OjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5k
KCkpOwogCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMiBAQAogI2lu
Y2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgogI2luY2x1ZGUgIkluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCoKICAgICBpbnNlcnRUZXh0KGRvY3VtZW50
LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3Np
dGlvbik7CiB9CiAKLS8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgbmVlZCB0byB0YWtlIHNlbGVjdGlv
bkZvckluc2VydGlvbi4gSXQgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBTZWxlY3Rpb25Db250cm9s
bGVyJ3MgY3VycmVudCBzZWxlY3Rpb24uCisvLyBGSVhNRTogV2Ugc2hvdWxkbid0IG5lZWQgdG8g
dGFrZSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uIEl0IHNob3VsZCBiZSBpZGVudGljYWwgdG8gRnJh
bWVTZWxlY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlvbi4KIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBPcHRpb25zIG9wdGlvbnMsIFRl
eHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQogewogICAgIEFTU0VSVChkb2N1bWVu
dCk7CkBAIC00ODUsMTEgKzQ4NSwxMSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVBy
ZXNzZWQoVGV4CiAKICAgICAgICAgbV9zbWFydERlbGV0ZSA9IGZhbHNlOwogCi0gICAgICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uOworICAgICAgICBGcmFtZVNlbGVjdGlvbiBzZWxl
Y3Rpb247CiAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkp
OwotICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRp
b25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0eSk7CisgICAgICAgIHNlbGVj
dGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJh
Y2t3YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChraWxsUmluZyAmJiBzZWxlY3Rpb24u
aXNDYXJldCgpICYmIGdyYW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICAg
ICAgICAgc2VsZWN0aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0
ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgc2VsZWN0aW9uLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGly
ZWN0aW9uQmFja3dhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKIAogICAgICAgICBpZiAoZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYXJldCBpcyBh
dCB0aGUgc3RhcnQgb2YgdGhlIGVkaXRhYmxlIGFyZWEgaW4gYW4gZW1wdHkgbGlzdCBpdGVtLCBi
cmVhayBvdXQgb2YgdGhlIGxpc3QgaXRlbS4KQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4CiAgICAgICAgICAgICBpZiAoaXNMYXN0UG9z
aXRpb25CZWZvcmVUYWJsZSh2aXNpYmxlU3RhcnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgc2VsZWN0aW9uIGJhY2t3YXJkIGludG8gdGhlIGxh
c3QgY2VsbCwgdGhlbiBkZWxldGlvbiB3aWxsIGhhbmRsZSB0aGUgbW92ZS4KLSAgICAgICAgICAg
IHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwg
RGlyZWN0aW9uQmFja3dhcmQsIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5t
b2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJk
LCBncmFudWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBqdXN0IGFmdGVyIGEg
dGFibGUsIHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4KICAgICAg
ICAgfSBlbHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUodmlz
aWJsZVN0YXJ0KSkgewogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24ocG9zaXRpb25CZWZvcmVOb2RlKHRhYmxlKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KSwgRE9XTlNUUkVBTSkpOwpAQCAtNTgyLDExICs1ODIsMTEgQEAgdm9pZCBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJlZ2lu
bmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAvLyBEbyBub3RoaW5nIGluIHRoZSBjYXNlIHRo
YXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAgICAgICAgIC8vIHJvb3QgZWRpdGFi
bGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KLSAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciBzZWxlY3Rpb247CisgICAgICAgIEZyYW1lU2VsZWN0aW9uIHNlbGVjdGlv
bjsKICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7Ci0g
ICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4
dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgZ3JhbnVsYXJpdHkpOworICAgICAgICBzZWxlY3Rpb24u
bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBncmFudWxhcml0eSk7CiAgICAgICAgIGlmIChraWxsUmluZyAmJiBzZWxlY3Rpb24uaXNDYXJl
dCgpICYmIGdyYW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICAgICAgICAg
c2VsZWN0aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBE
aXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25G
b3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKICAgICAgICAgUG9zaXRpb24gZG93bnN0
cmVhbUVuZCA9IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLmRvd25zdHJlYW0oKTsKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5k
KCk7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRl
S2V5UHJlcwogCiAgICAgICAgIC8vIGRlbGV0aW5nIHRvIGVuZCBvZiBwYXJhZ3JhcGggd2hlbiBh
dCBlbmQgb2YgcGFyYWdyYXBoIG5lZWRzIHRvIG1lcmdlIHRoZSBuZXh0IHBhcmFncmFwaCAoaWYg
YW55KQogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gUGFyYWdyYXBoQm91bmRhcnkgJiYgc2Vs
ZWN0aW9uLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc0VuZE9mUGFyYWdyYXBoKHNlbGVjdGlv
bi5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKQotICAgICAgICAgICAgc2VsZWN0aW9uLm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CiAKICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBzZWxlY3Rpb24u
c2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICghc3RhcnRpbmdTZWxlY3Rpb24oKS5pc1JhbmdlKCkg
fHwgc2VsZWN0aW9uVG9EZWxldGUuYmFzZSgpICE9IHN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQo
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rpb25D
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1
bS9GcmFtZVNlbGVjdGlvbkNocm9taXVtLmNwcAkocmV2aXNpb24gODU4MzQpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNocm9taXVtLmNw
cDo4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rp
b25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAgLy8gRklYTUU6
IFN1cHBvcnQgZWRpdGFibGUgdGV4dCBpbiBjaHJvbWl1bS4KKyAgICBpZiAoQVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBtX3NlbGVjdGlvbi5zdGFydCgpLmlzTm90TnVs
bCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7CisgICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAgIGRvY3VtZW50LT5heE9i
amVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5n
ZWQsIGZhbHNlKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRnJhbWVTZWxlY3Rpb25DaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9GcmFtZVNlbGVj
dGlvbkNocm9taXVtLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2Nocm9taXVtL0ZyYW1lU2VsZWN0aW9uQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0zNyw3ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
Ojpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKK3ZvaWQgRnJhbWVTZWxl
Y3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKQogewogICAgIC8v
IEZJWE1FOiBTdXBwb3J0IGVkaXRhYmxlIHRleHQgaW4gY2hyb21pdW0uCiAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5p
c05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9TZWxlY3Rpb25Db250cm9sbGVyQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vU2VsZWN0
aW9uQ29udHJvbGxlckNocm9taXVtLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRyb2xsZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0
eUZvclNlbGVjdGlvbkNoYW5nZSgpCi17Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgZWRpdGFibGUg
dGV4dCBpbiBjaHJvbWl1bS4KLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSAmJiBtX3NlbGVjdGlvbi5zdGFydCgpLmlzTm90TnVsbCgpICYmIG1fc2VsZWN0aW9u
LmVuZCgpLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3RO
b3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvZ3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAJKHJldmlzaW9uIDg1ODM0KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcDo4
NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmgiCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiUmVmUHRyLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIHZvaWQgZW1pdFRleHRTZWxlY3Rpb25DaGFuZ2UoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiwgaW50IG9mZnNldCkK
K3sKKyAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gb2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYg
KCFheE9iamVjdCB8fCAhQVRLX0lTX1RFWFQoYXhPYmplY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJ0ZXh0LWNhcmV0LW1vdmVkIiwg
b2Zmc2V0KTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKGF4T2JqZWN0LCAidGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIpOworfQorCitz
dGF0aWMgdm9pZCBtYXliZUVtaXRUZXh0Rm9jdXNDaGFuZ2UoUGFzc1JlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBwcnBPYmplY3QpCit7CisgICAgLy8gVGhpcyBzdGF0aWMgdmFyaWFibGUgaXMg
bmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9sZCBvYmplY3QKKyAgICAvLyBhcyBwZXIgcHJl
dmlvdXMgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gcHJvcGVybHkKKyAgICAv
LyBkZWNpZGUgd2hldGhlciB0byBlbWl0IHNvbWUgc2lnbmFscyBvciBub3QuCisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4sIG9sZE9iamVjdCwgKCkp
OworCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IHBycE9iamVjdDsK
KworICAgIC8vIEVuc3VyZSB0aGUgb2xkT2JqZWN0IGJlbG9uZ3MgdG8gdGhlIHNhbWUgZG9jdW1l
bnQgdGhhdCB0aGUKKyAgICAvLyBjdXJyZW50IG9iamVjdCBzbyBmdXJ0aGVyIGNvbXBhcmlzb25z
IG1ha2Ugc2Vuc2UuIE90aGVyd2lzZSwKKyAgICAvLyBqdXN0IHJlc2V0IG9sZE9iamVjdCB0byAw
IHNvIGl0IHdvbid0IGJlIHRha2VuIGludG8gYWNjb3VudCBpbgorICAgIC8vIHRoZSBpbW1lZGlh
dGVseSBmb2xsb3dpbmcgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChvYmplY3QgJiYg
b2xkT2JqZWN0ICYmIG9sZE9iamVjdC0+ZG9jdW1lbnQoKSAhPSBvYmplY3QtPmRvY3VtZW50KCkp
CisgICAgICAgIG9sZE9iamVjdCA9IDA7CisKKyAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gb2Jq
ZWN0ID8gb2JqZWN0LT53cmFwcGVyKCkgOiAwOworICAgIEF0a09iamVjdCogb2xkQXhPYmplY3Qg
PSBvbGRPYmplY3QgPyBvbGRPYmplY3QtPndyYXBwZXIoKSA6IDA7CisKKyAgICBpZiAoYXhPYmpl
Y3QgIT0gb2xkQXhPYmplY3QpIHsKKyAgICAgICAgaWYgKG9sZEF4T2JqZWN0ICYmIEFUS19JU19U
RVhUKG9sZEF4T2JqZWN0KSkgeworICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9s
ZEF4T2JqZWN0LCAiZm9jdXMtZXZlbnQiLCBmYWxzZSk7CisgICAgICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUob2xkQXhPYmplY3QsICJzdGF0ZS1jaGFuZ2UiLCAiZm9jdXNlZCIsIGZhbHNl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXhPYmplY3QgJiYgQVRLX0lTX1RFWFQoYXhPYmpl
Y3QpKSB7CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJmb2N1
cy1ldmVudCIsIHRydWUpOworICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGF4T2Jq
ZWN0LCAic3RhdGUtY2hhbmdlIiwgImZvY3VzZWQiLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFVwZGF0ZSBwb2ludGVyIHRvIGxhc3QgZm9jdXNlZCBvYmplY3QuCisgICAgb2xk
T2JqZWN0ID0gb2JqZWN0OworfQorCisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5
QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAgaWYgKCFBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBS
ZXNldCBsYXN0Rm9jdXNlTm9kZSBhbmQgcmV0dXJuIGZvciBubyB2YWxpZCBzZWxlY3Rpb25zLgor
ICAgIGlmICghbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSB8fCAhbV9zZWxlY3Rpb24u
ZW5kKCkuaXNOb3ROdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlck9iamVjdCog
Zm9jdXNlZE5vZGUgPSBtX3NlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlPYmplY3QgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWROb2Rl
KTsKKworICAgIC8vIE5lZWQgdG8gY2hlY2sgdGhpcyBhcyBnZXRPckNyZWF0ZSBjb3VsZCByZXR1
cm4gMCwKKyAgICBpZiAoIWFjY2Vzc2liaWxpdHlPYmplY3QpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBvZmZzZXQ7CisgICAgLy8gQWx3YXlzIHJlcG9ydCB0aGUgZXZlbnRzIHcuci50LiB0
aGUgbm9uLWxpbmtlZCB1bmlnbm9yZWQgcGFyZW50LiAoaS5lLiBpZ25vcmVMaW5rcyA9PSB0cnVl
KS4KKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqZWN0ID0gb2JqZWN0QW5kT2Zm
c2V0VW5pZ25vcmVkKGFjY2Vzc2liaWxpdHlPYmplY3QsIG9mZnNldCwgdHJ1ZSk7CisgICAgaWYg
KCFvYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVtaXQgcmVsYXRlZHNpZ25hbHMu
CisgICAgZW1pdFRleHRTZWxlY3Rpb25DaGFuZ2Uob2JqZWN0LmdldCgpLCBtX3NlbGVjdGlvbiwg
b2Zmc2V0KTsKKyAgICBtYXliZUVtaXRUZXh0Rm9jdXNDaGFuZ2Uob2JqZWN0LnJlbGVhc2UoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvZ3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KICAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBtYXliZUVt
aXRUZXh0Rm9jdXNDaGFuZ2UoUGFzCiB9CiAKIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpu
b3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKK3ZvaWQgRnJhbWVTZWxlY3Rp
b246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoKQogewogICAgIGlmICgh
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29u
dHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSAKLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIgotI2luY2x1ZGUgIkFYT2JqZWN0Q2Fj
aGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlJlZlB0ci5oIgotCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGVtaXRU
ZXh0U2VsZWN0aW9uQ2hhbmdlKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24sIGludCBvZmZzZXQpCi17Ci0gICAgQXRrT2JqZWN0KiBheE9iamVj
dCA9IG9iamVjdC0+d3JhcHBlcigpOwotICAgIGlmICghYXhPYmplY3QgfHwgIUFUS19JU19URVhU
KGF4T2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGF4T2JqZWN0LCAidGV4dC1jYXJldC1tb3ZlZCIsIG9mZnNldCk7Ci0gICAgaWYgKHNlbGVjdGlv
bi5pc1JhbmdlKCkpCi0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInRl
eHQtc2VsZWN0aW9uLWNoYW5nZWQiKTsKLX0KLQotc3RhdGljIHZvaWQgbWF5YmVFbWl0VGV4dEZv
Y3VzQ2hhbmdlKFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gcHJwT2JqZWN0KQotewot
ICAgIC8vIFRoaXMgc3RhdGljIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBrZWVwIHRyYWNrIG9mIHRo
ZSBvbGQgb2JqZWN0Ci0gICAgLy8gYXMgcGVyIHByZXZpb3VzIGNhbGxzIHRvIHRoaXMgZnVuY3Rp
b24sIGluIG9yZGVyIHRvIHByb3Blcmx5Ci0gICAgLy8gZGVjaWRlIHdoZXRoZXIgdG8gZW1pdCBz
b21lIHNpZ25hbHMgb3Igbm90LgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+LCBvbGRPYmplY3QsICgpKTsKLQotICAgIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBvYmplY3QgPSBwcnBPYmplY3Q7Ci0KLSAgICAvLyBFbnN1cmUgdGhlIG9sZE9i
amVjdCBiZWxvbmdzIHRvIHRoZSBzYW1lIGRvY3VtZW50IHRoYXQgdGhlCi0gICAgLy8gY3VycmVu
dCBvYmplY3Qgc28gZnVydGhlciBjb21wYXJpc29ucyBtYWtlIHNlbnNlLiBPdGhlcndpc2UsCi0g
ICAgLy8ganVzdCByZXNldCBvbGRPYmplY3QgdG8gMCBzbyBpdCB3b24ndCBiZSB0YWtlbiBpbnRv
IGFjY291bnQgaW4KLSAgICAvLyB0aGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGNhbGwgdG8gdGhp
cyBmdW5jdGlvbi4KLSAgICBpZiAob2JqZWN0ICYmIG9sZE9iamVjdCAmJiBvbGRPYmplY3QtPmRv
Y3VtZW50KCkgIT0gb2JqZWN0LT5kb2N1bWVudCgpKQotICAgICAgICBvbGRPYmplY3QgPSAwOwot
Ci0gICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigpIDog
MDsKLSAgICBBdGtPYmplY3QqIG9sZEF4T2JqZWN0ID0gb2xkT2JqZWN0ID8gb2xkT2JqZWN0LT53
cmFwcGVyKCkgOiAwOwotCi0gICAgaWYgKGF4T2JqZWN0ICE9IG9sZEF4T2JqZWN0KSB7Ci0gICAg
ICAgIGlmIChvbGRBeE9iamVjdCAmJiBBVEtfSVNfVEVYVChvbGRBeE9iamVjdCkpIHsKLSAgICAg
ICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShvbGRBeE9iamVjdCwgImZvY3VzLWV2ZW50Iiwg
ZmFsc2UpOwotICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG9sZEF4T2JqZWN0LCAi
c3RhdGUtY2hhbmdlIiwgImZvY3VzZWQiLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGF4T2JqZWN0ICYmIEFUS19JU19URVhUKGF4T2JqZWN0KSkgewotICAgICAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGF4T2JqZWN0LCAiZm9jdXMtZXZlbnQiLCB0cnVlKTsKLSAgICAgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInN0YXRlLWNoYW5nZSIsICJmb2N1
c2VkIiwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgcG9pbnRlciB0
byBsYXN0IGZvY3VzZWQgb2JqZWN0LgotICAgIG9sZE9iamVjdCA9IG9iamVjdDsKLX0KLQotCi12
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25D
aGFuZ2UoKQotewotICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUmVzZXQgbGFzdEZvY3VzZU5vZGUgYW5kIHJl
dHVybiBmb3Igbm8gdmFsaWQgc2VsZWN0aW9ucy4KLSAgICBpZiAoIW1fc2VsZWN0aW9uLnN0YXJ0
KCkuaXNOb3ROdWxsKCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZW5kZXJPYmplY3QqIGZvY3VzZWROb2RlID0gbV9zZWxlY3Rpb24u
ZW5kKCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkTm9kZSk7Ci0KLSAgICAvLyBOZWVkIHRvIGNoZWNr
IHRoaXMgYXMgZ2V0T3JDcmVhdGUgY291bGQgcmV0dXJuIDAsCi0gICAgaWYgKCFhY2Nlc3NpYmls
aXR5T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAgIC8vIEFs
d2F5cyByZXBvcnQgdGhlIGV2ZW50cyB3LnIudC4gdGhlIG5vbi1saW5rZWQgdW5pZ25vcmVkIHBh
cmVudC4gKGkuZS4gaWdub3JlTGlua3MgPT0gdHJ1ZSkuCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IG9iamVjdCA9IG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChhY2Nlc3NpYmlsaXR5
T2JqZWN0LCBvZmZzZXQsIHRydWUpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBFbWl0IHJlbGF0ZWRzaWduYWxzLgotICAgIGVtaXRUZXh0U2VsZWN0aW9uQ2hh
bmdlKG9iamVjdC5nZXQoKSwgbV9zZWxlY3Rpb24sIG9mZnNldCk7Ci0gICAgbWF5YmVFbWl0VGV4
dEZvY3VzQ2hhbmdlKG9iamVjdC5yZWxlYXNlKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lv
biA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIE5TV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6
OmJhc2VXcml0aW5nRGkKIAogYm9vbCBFZGl0b3I6OmNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25l
SW1hZ2VzKCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi0+aXNSYW5nZSgpICYmICFzZWxlY3Rp
b24tPmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCShyZXZpc2lvbiA4NTgzNCkJKGZyb20g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTo4NTgz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgor
I2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIlJlbmRlclZpZXcuaCIKKyNpbXBvcnQgIldlYkNv
cmVWaWV3RmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBDR1JlY3Qg
YWNjZXNzaWJpbGl0eUNvbnZlcnRTY3JlZW5SZWN0KENHUmVjdCBib3VuZHMpCit7CisgICAgTlNB
cnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBzY3JlZW5zXTsKKyAgICBpZiAoW3NjcmVlbnMgY291
bnRdKSB7CisgICAgICAgIENHRmxvYXQgc2NyZWVuSGVpZ2h0ID0gTlNIZWlnaHQoWyhOU1NjcmVl
biAqKVtzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKTsKKyAgICAgICAgYm91bmRzLm9y
aWdpbi55ID0gKHNjcmVlbkhlaWdodCAtIChib3VuZHMub3JpZ2luLnkgKyBib3VuZHMuc2l6ZS5o
ZWlnaHQpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYm91bmRzID0gQ0dSZWN0WmVybzsgICAgCisg
ICAgCisgICAgcmV0dXJuIGJvdW5kczsKK30KKyAgICAKKyAgICAKK3ZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2VsZWN0aW9uLnN0YXJ0KCku
aXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpCisgICAgICAgIGRv
Y3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVj
dGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKKworICAgIC8vIGlmIHpvb20gZmVhdHVyZSBpcyBlbmFi
bGVkLCBpbnNlcnRpb24gcG9pbnQgY2hhbmdlcyBzaG91bGQgdXBkYXRlIHRoZSB6b29tCisgICAg
aWYgKCFVQVpvb21FbmFibGVkKCkgfHwgIW1fc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGRvY3VtZW50LT5yZW5kZXJW
aWV3KCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGFic29sdXRlQ2Fy
ZXRCb3VuZHMoKTsKKyAgICBJbnRSZWN0IHZpZXdSZWN0ID0gcmVuZGVyVmlldy0+dmlld1JlY3Qo
KTsKKworICAgIHNlbGVjdGlvblJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oc2Vs
ZWN0aW9uUmVjdCk7CisgICAgdmlld1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4o
dmlld1JlY3QpOworICAgIENHUmVjdCBjZ0NhcmV0UmVjdCA9IENHUmVjdE1ha2Uoc2VsZWN0aW9u
UmVjdC54KCksIHNlbGVjdGlvblJlY3QueSgpLCBzZWxlY3Rpb25SZWN0LndpZHRoKCksIHNlbGVj
dGlvblJlY3QuaGVpZ2h0KCkpOworICAgIENHUmVjdCBjZ1ZpZXdSZWN0ID0gQ0dSZWN0TWFrZSh2
aWV3UmVjdC54KCksIHZpZXdSZWN0LnkoKSwgdmlld1JlY3Qud2lkdGgoKSwgdmlld1JlY3QuaGVp
Z2h0KCkpOworICAgIGNnQ2FyZXRSZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnZlcnRTY3JlZW5SZWN0
KGNnQ2FyZXRSZWN0KTsKKyAgICBjZ1ZpZXdSZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnZlcnRTY3Jl
ZW5SZWN0KGNnVmlld1JlY3QpOworCisgICAgVUFab29tQ2hhbmdlRm9jdXMoJmNnVmlld1JlY3Qs
ICZjZ0NhcmV0UmVjdCwga1VBWm9vbUZvY3VzVHlwZUluc2VydGlvblBvaW50KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJh
bWVTZWxlY3Rpb25NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRnJhbWVTZWxlY3Rpb25NYWMubW0JKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDcgQEAKICAqLwogIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTZWxlY3Rp
b25Db250cm9sbGVyLmgiCisjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogCiAjaW1wb3J0ICJB
WE9iamVjdENhY2hlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgpAQCAtNDYsNyArNDYsNyBAQCBzdGF0
aWMgQ0dSZWN0IGFjY2Vzc2liaWxpdHlDb252ZXJ0U2NyZWVuCiB9CiAgICAgCiAgICAgCi12b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFu
Z2UoKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSgpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rp
b25Db250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
ODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLSAKLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2VsZWN0aW9uQ29udHJv
bGxlci5oIgotCi0jaW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgot
I2ltcG9ydCAiUmVuZGVyVmlldy5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIENHUmVjdCBhY2Nlc3NpYmlsaXR5Q29udmVy
dFNjcmVlblJlY3QoQ0dSZWN0IGJvdW5kcykKLXsKLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05T
U2NyZWVuIHNjcmVlbnNdOwotICAgIGlmIChbc2NyZWVucyBjb3VudF0pIHsKLSAgICAgICAgQ0dG
bG9hdCBzY3JlZW5IZWlnaHQgPSBOU0hlaWdodChbKE5TU2NyZWVuICopW3NjcmVlbnMgb2JqZWN0
QXRJbmRleDowXSBmcmFtZV0pOwotICAgICAgICBib3VuZHMub3JpZ2luLnkgPSAoc2NyZWVuSGVp
Z2h0IC0gKGJvdW5kcy5vcmlnaW4ueSArIGJvdW5kcy5zaXplLmhlaWdodCkpOwotICAgIH0gZWxz
ZQotICAgICAgICBib3VuZHMgPSBDR1JlY3RaZXJvOyAgICAKLSAgICAKLSAgICByZXR1cm4gYm91
bmRzOwotfQotICAgIAotICAgIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3Nl
bGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkKLSAgICAgICAgZG9jdW1lbnQtPmF4T2JqZWN0Q2Fj
aGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCwgZmFs
c2UpOwotCi0gICAgLy8gaWYgem9vbSBmZWF0dXJlIGlzIGVuYWJsZWQsIGluc2VydGlvbiBwb2lu
dCBjaGFuZ2VzIHNob3VsZCB1cGRhdGUgdGhlIHpvb20KLSAgICBpZiAoIVVBWm9vbUVuYWJsZWQo
KSB8fCAhbV9zZWxlY3Rpb24uaXNDYXJldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKLSAgICBpZiAoIXJl
bmRlclZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
ZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gYWJzb2x1dGVDYXJldEJvdW5kcygpOwotICAgIElu
dFJlY3Qgdmlld1JlY3QgPSByZW5kZXJWaWV3LT52aWV3UmVjdCgpOwotCi0gICAgc2VsZWN0aW9u
UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihzZWxlY3Rpb25SZWN0KTsKLSAgICB2
aWV3UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbih2aWV3UmVjdCk7Ci0gICAgQ0dS
ZWN0IGNnQ2FyZXRSZWN0ID0gQ0dSZWN0TWFrZShzZWxlY3Rpb25SZWN0LngoKSwgc2VsZWN0aW9u
UmVjdC55KCksIHNlbGVjdGlvblJlY3Qud2lkdGgoKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7
Ci0gICAgQ0dSZWN0IGNnVmlld1JlY3QgPSBDR1JlY3RNYWtlKHZpZXdSZWN0LngoKSwgdmlld1Jl
Y3QueSgpLCB2aWV3UmVjdC53aWR0aCgpLCB2aWV3UmVjdC5oZWlnaHQoKSk7Ci0gICAgY2dDYXJl
dFJlY3QgPSBhY2Nlc3NpYmlsaXR5Q29udmVydFNjcmVlblJlY3QoY2dDYXJldFJlY3QpOwotICAg
IGNnVmlld1JlY3QgPSBhY2Nlc3NpYmlsaXR5Q29udmVydFNjcmVlblJlY3QoY2dWaWV3UmVjdCk7
Ci0KLSAgICBVQVpvb21DaGFuZ2VGb2N1cygmY2dWaWV3UmVjdCwgJmNnQ2FyZXRSZWN0LCBrVUFa
b29tRm9jdXNUeXBlSW5zZXJ0aW9uUG9pbnQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTIgKzMwLDYgQEAKICNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3ku
aCIKICNpbmNsdWRlICJDbGlwYm9hcmRRdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNDQsNyArNDUs
NiBAQAogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJS
YW5nZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNjAsNyArNjEsNiBAQAogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCIKQEAgLTgwMyw3ICs4
MDMsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBlZGl0aW5nIGNvbnRleHQg
bWVudQotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CisgICAgICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7CiAgICAgICAgIGJvb2wgaW5QYXNzd29yZEZpZWxkID0gc2VsZWN0aW9uLT5pc0lu
UGFzc3dvcmRGaWVsZCgpOwogICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVkID0gZnJh
bWUtPmVkaXRvcigpLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG5vZGUpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAg
KzMyLDEwIEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiU2Vs
ZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAKQEAgLTE3OSw3ICsxNzksNyBAQCBTdHJpbmcgRE9NU2VsZWN0aW9u
Ojp0eXBlKCkgY29uc3QKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rp
b24oKTsKIAogICAgIC8vIFRoaXMgaXMgYSBXZWJLaXQgRE9NIGV4dGVuc2lvbiwgaW5jb21wYXRp
YmxlIHdpdGggYW4gSUUgZXh0ZW5zaW9uCiAgICAgLy8gSUUgaGFzIHRoaXMgc2FtZSBhdHRyaWJ1
dGUsIGJ1dCByZXR1cm5zICJub25lIiwgInRleHQiIGFuZCAiY29udHJvbCIKQEAgLTI5MywxMSAr
MjkzLDExIEBAIHZvaWQgRE9NU2VsZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiAKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVBbHRlcmF0aW9uIGFsdGVyOworICAgIEZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbiBhbHRl
cjsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWx0ZXJTdHJpbmcsICJleHRlbmQiKSkKLSAg
ICAgICAgYWx0ZXIgPSBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kOworICAg
ICAgICBhbHRlciA9IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kOwogICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGFsdGVyU3RyaW5nLCAibW92ZSIpKQotICAgICAgICBhbHRl
ciA9IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlOworICAgICAgICBhbHRlciA9
IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZTsKICAgICBlbHNlCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5n
ZSogcikKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNlbGVjdGlvbkNvbnRy
b2xsZXIqIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0
aW9uKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChzZWxlY3Rp
b24tPmlzTm9uZSgpKSB7CiAgICAgICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocikpOwpAQCAtNDM2LDEzICs0MzYsMTMgQEAgdm9pZCBET01TZWxlY3Rpb246OmRl
bGV0ZUZyb21Eb2N1bWVudCgpCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7
CiAKICAgICBpZiAoc2VsZWN0aW9uLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGlzQ29sbGFwc2VkKCkpCi0gICAgICAgIHNlbGVjdGlvbi0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CisgICAgICAgIHNlbGVjdGlvbi0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKQEAgLTQ2
MSw3ICs0NjEsNyBAQCBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKGNvbnN0IE5vCiAg
ICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxlY3Rpb25D
b250cm9sbGVyKiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBGcmFtZVNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAKICAgICBpZiAoIW4g
fHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSBuLT5kb2N1bWVudCgpIHx8IHNlbGVjdGlvbi0+aXNO
b25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCkBAIC02MSw3ICs2Miw2IEBACiAjaW5jbHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKQEAg
LTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRyYWdJc01vdmUoU2Vs
ZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERy
YWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24sIERyYWdE
YXRhKiBkcmFnRGF0YSkKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9k
cmFnSW5pdGlhdG9yICYmIHNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhaXNDb3B5
S2V5RG93bihkcmFnRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5oCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBEcmFnRGF0YTsKICAgICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEZy
YW1lOworICAgIGNsYXNzIEZyYW1lU2VsZWN0aW9uOwogICAgIGNsYXNzIEltYWdlOwogICAgIGNs
YXNzIEludFJlY3Q7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNz
IFBsYXRmb3JtTW91c2VFdmVudDsKICAgICBjbGFzcyBSYW5nZTsKLSAgICBjbGFzcyBTZWxlY3Rp
b25Db250cm9sbGVyOwogICAgIAogICAgIGNsYXNzIERyYWdDb250cm9sbGVyIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRHJhZ0NvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTk5LDcgKzk5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IHRyeURIVE1MRHJhZyhEcmFnRGF0YSosIERyYWdPcGVyYXRpb24mKTsKICAgICAgICAgRHJhZ09w
ZXJhdGlvbiBkcmFnT3BlcmF0aW9uKERyYWdEYXRhKik7CiAgICAgICAgIHZvaWQgY2FuY2VsRHJh
ZygpOwotICAgICAgICBib29sIGRyYWdJc01vdmUoU2VsZWN0aW9uQ29udHJvbGxlciosIERyYWdE
YXRhKik7CisgICAgICAgIGJvb2wgZHJhZ0lzTW92ZShGcmFtZVNlbGVjdGlvbiosIERyYWdEYXRh
Kik7CiAgICAgICAgIGJvb2wgaXNDb3B5S2V5RG93bihEcmFnRGF0YSopOwogCiAgICAgICAgIHZv
aWQgbW91c2VNb3ZlZEludG9Eb2N1bWVudChEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgpAQCAtNjgsNyArNjksNiBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgpAQCAtMjU2LDE0ICsy
NTYsMTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyKCkKICNlbmRpZgogfQogCi1zdGF0aWMg
dm9pZCBzZXRTZWxlY3Rpb25JZk5lZWRlZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKK3N0YXRpYyB2b2lkIHNldFNl
bGVjdGlvbklmTmVlZGVkKEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikKIHsKICAgICBBU1NFUlQoc2VsZWN0aW9uKTsKICAgICBp
ZiAoc2VsZWN0aW9uLT5zZWxlY3Rpb24oKSAhPSBuZXdTZWxlY3Rpb24gJiYgc2VsZWN0aW9uLT5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKICAgICAgICAgc2VsZWN0aW9uLT5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0
aW9uYWxTZWxlY3Rpb25JZk5lZWRlZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24sIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQorc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRlZChG
cmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBBU1NFUlQoc2VsZWN0
aW9uKTsKICAgICBpZiAoc2VsZWN0aW9uLT5zZWxlY3Rpb24oKSAhPSBuZXdTZWxlY3Rpb24gJiYg
c2VsZWN0aW9uLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKQEAgLTIyMjMs
MTIgKzIyMjMsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgIEludFBvaW50IGxvY2F0aW9uOwogCiAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBkb2MtPmZv
Y3VzZWROb2RlKCk7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxl
ciA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9u
Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2Vs
ZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxl
Y3Rpb24tPnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNl
bGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3Rpb24gPSBzZWxlY3Rpb25Db250cm9sbGVyLT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
ICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JS
YW5nZShzZWxlY3Rpb24uZ2V0KCkpOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYm
IChzZWxlY3Rpb24tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24tPmlzUmFuZ2Uo
KSkpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi0+
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1l
LT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOwogCiAg
ICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVj
dC54KCk7CiAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0Lm1heFkoKSk7
CkBAIC0yNTQzLDE2ICsyNTQzLDE2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2Fy
ZFNlbGVjdGkKICAgICBib29sIGlzQ29tbWFuZGVkID0gZXZlbnQtPmdldE1vZGlmaWVyU3RhdGUo
Ik1ldGEiKTsKICAgICAKICAgICBpZiAoa2V5ID09ICJVcCIpIHsKLSAgICAgICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFs
dGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGly
ZWN0aW9uQmFja3dhcmQsIChpc0NvbW1hbmRlZCkgPyBEb2N1bWVudEJvdW5kYXJ5IDogTGluZUdy
YW51bGFyaXR5LCB0cnVlKTsKKyAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgo
aXNTaGlmdGVkKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxl
Y3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgKGlzQ29tbWFuZGVkKSA/
IERvY3VtZW50Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwogICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsK
LSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50
Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOworICAgICAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25F
eHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQs
IChpc0NvbW1hbmRlZCkgPyBEb2N1bWVudEJvdW5kYXJ5IDogTGluZUdyYW51bGFyaXR5LCB0cnVl
KTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfSBlbHNlIGlmIChr
ZXkgPT0gIkxlZnQiKSB7Ci0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoKGlz
U2hpZnRlZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0
aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkxlZnQsIChpc0NvbW1hbmRl
ZCkgPyBMaW5lQm91bmRhcnkgOiAoaXNPcHRpb25lZCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFy
YWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoKGlzU2hpZnRlZCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwgKGlzQ29tbWFuZGVk
KSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJh
Y3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlJpZ2h0IikgewotICAgICAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/
IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IEZyYW1lU2VsZWN0aW9u
OjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/
IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfSAgICAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBmb2N1c0RvY3VtZW50VmlldygpOwogCi0gICAgdm9pZCBjYXBzTG9j
a1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsgLy8gT25seSBjYWxsZWQgYnkgU2VsZWN0aW9uQ29udHJv
bGxlcgorICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7IC8vIE9ubHkgY2Fs
bGVkIGJ5IEZyYW1lU2VsZWN0aW9uCiAgICAgCiAgICAgdm9pZCBzZW5kUmVzaXplRXZlbnQoKTsg
Ly8gT25seSBjYWxsZWQgaW4gRnJhbWVWaWV3CiAgICAgdm9pZCBzZW5kU2Nyb2xsRXZlbnQoKTsg
Ly8gRGl0dG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCkBAIC01MSw3ICs1Miw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlv
bi5oIgogI2luY2x1ZGUgIldpZGdldC5oIgpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lk
IGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAob2xkRm9jdXNlZEZyYW1lLT5k
b2N1bWVudCgpICE9IG5ld0ZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHMgPSBvbGRGb2N1c2VkRnJhbWUtPnNl
bGVjdGlvbigpOworICAgIEZyYW1lU2VsZWN0aW9uKiBzID0gb2xkRm9jdXNlZEZyYW1lLT5zZWxl
Y3Rpb24oKTsKICAgICBpZiAocy0+aXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBpbmxpbmUgRnJh
bWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtCiAgICAgLCBtX293bmVyRWxlbWVudChvd25l
ckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdCh0aGlzKQogICAgICwgbV9lZGl0b3IodGhpcykKLSAg
ICAsIG1fc2VsZWN0aW9uQ29udHJvbGxlcih0aGlzKQorICAgICwgbV9zZWxlY3Rpb24odGhpcykK
ICAgICAsIG1fZXZlbnRIYW5kbGVyKHRoaXMpCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIo
dGhpcykKICAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzLCAmRnJhbWU6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBA
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25TY2hlZHVsZXIuaCIKLSNpbmNsdWRl
ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlVzZXJTY3JpcHRUeXBlcy5oIgogCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIGNvbnN0
OwogICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyKCkgY29uc3Q7CiAgICAgICAgIE5hdmlnYXRp
b25TY2hlZHVsZXIqIG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKLSAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciogc2VsZWN0aW9uKCkgY29uc3Q7CisgICAgICAgIEZyYW1lU2VsZWN0aW9u
KiBzZWxlY3Rpb24oKSBjb25zdDsKICAgICAgICAgRnJhbWVUcmVlKiB0cmVlKCkgY29uc3Q7CiAg
ICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbigpIGNvbnN0OwogICAgICAgICBT
Y3JpcHRDb250cm9sbGVyKiBzY3JpcHQoKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFNjcmlwdENvbnRyb2xsZXIgbV9zY3JpcHQ7CiAKICAgICAgICAg
bXV0YWJsZSBFZGl0b3IgbV9lZGl0b3I7Ci0gICAgICAgIG11dGFibGUgU2VsZWN0aW9uQ29udHJv
bGxlciBtX3NlbGVjdGlvbkNvbnRyb2xsZXI7CisgICAgICAgIG11dGFibGUgRnJhbWVTZWxlY3Rp
b24gbV9zZWxlY3Rpb247CiAgICAgICAgIG11dGFibGUgRXZlbnRIYW5kbGVyIG1fZXZlbnRIYW5k
bGVyOwogICAgICAgICBtdXRhYmxlIEFuaW1hdGlvbkNvbnRyb2xsZXIgbV9hbmltYXRpb25Db250
cm9sbGVyOwogCkBAIC0zMDUsOSArMzA1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICByZXR1cm4gbV9kb2MuZ2V0KCk7CiAgICAgfQogCi0gICAgaW5saW5lIFNlbGVjdGlvbkNvbnRy
b2xsZXIqIEZyYW1lOjpzZWxlY3Rpb24oKSBjb25zdAorICAgIGlubGluZSBGcmFtZVNlbGVjdGlv
biogRnJhbWU6OnNlbGVjdGlvbigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gJm1fc2Vs
ZWN0aW9uQ29udHJvbGxlcjsKKyAgICAgICAgcmV0dXJuICZtX3NlbGVjdGlvbjsKICAgICB9CiAK
ICAgICBpbmxpbmUgRWRpdG9yKiBGcmFtZTo6ZWRpdG9yKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisj
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNjMsNyArNjQs
NiBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgIlNwZWVjaElucHV0LmgiCkBAIC0xMTUsNyArMTE1LDcgQEAgc3Rh
dGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAKIFBhZ2U6OlBhZ2UoY29uc3QgUGFnZUNs
aWVudHMmIHBhZ2VDbGllbnRzKQogICAgIDogbV9jaHJvbWUoYWRvcHRQdHIobmV3IENocm9tZSh0
aGlzLCBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQpKSkKLSAgICAsIG1fZHJhZ0NhcmV0Q29udHJv
bGxlcihhZG9wdFB0cihuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigwLCB0cnVlKSkpCisgICAgLCBt
X2RyYWdDYXJldENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEZyYW1lU2VsZWN0aW9uKDAsIHRydWUp
KSkKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgICwgbV9kcmFnQ29udHJvbGxlcihhZG9w
dFB0cihuZXcgRHJhZ0NvbnRyb2xsZXIodGhpcywgcGFnZUNsaWVudHMuZHJhZ0NsaWVudCkpKQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRWRpdG9yQ2xpZW50OwogICAgIGNsYXNzIEZvY3VzQ29u
dHJvbGxlcjsKICAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBGcmFtZVNlbGVjdGlvbjsKICAg
ICBjbGFzcyBHZW9sb2NhdGlvbkNsaWVudDsKICAgICBjbGFzcyBHZW9sb2NhdGlvbkNvbnRyb2xs
ZXI7CiAgICAgY2xhc3MgSGFsdGFibGVQbHVnaW47CkBAIC03Nyw3ICs3OCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZW5kZXJUaGVtZTsKICAgICBjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwogICAgIGNsYXNzIFNjcm9sbGFibGVBcmVhOwotICAgIGNsYXNzIFNlbGVjdGlvbkNv
bnRyb2xsZXI7CiAgICAgY2xhc3MgU2V0dGluZ3M7CiAgICAgY2xhc3MgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0Q7CiAgICAgY2xhc3MgU3BlZWNoSW5wdXQ7CkBAIC0xNjUsNyArMTY1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgZnJhbWVDb3VudCgpIGNvbnN0IHsgY2hlY2tG
cmFtZUNvdW50Q29uc2lzdGVuY3koKTsgcmV0dXJuIG1fZnJhbWVDb3VudDsgfQogCiAgICAgICAg
IENocm9tZSogY2hyb21lKCkgY29uc3QgeyByZXR1cm4gbV9jaHJvbWUuZ2V0KCk7IH0KLSAgICAg
ICAgU2VsZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhZ0NhcmV0Q29udHJvbGxlci5nZXQoKTsgfQorICAgICAgICBGcmFtZVNlbGVjdGlv
biogZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0NhcmV0Q29udHJv
bGxlci5nZXQoKTsgfQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgICAgIERyYWdDb250
cm9sbGVyKiBkcmFnQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0NvbnRyb2xsZXIu
Z2V0KCk7IH0KICNlbmRpZgpAQCAtMzE1LDcgKzMxNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKCkgY29uc3Q7CiAKICAgICAgICAg
T3duUHRyPENocm9tZT4gbV9jaHJvbWU7Ci0gICAgICAgIE93blB0cjxTZWxlY3Rpb25Db250cm9s
bGVyPiBtX2RyYWdDYXJldENvbnRyb2xsZXI7CisgICAgICAgIE93blB0cjxGcmFtZVNlbGVjdGlv
bj4gbV9kcmFnQ2FyZXRDb250cm9sbGVyOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKICAgICAgICAgUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBtX3NoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFn
Q29udHJvbGxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0RyYWdDb250cm9sbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NTgzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEcmFnQ29udHJvbGxl
ci5oIgogCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1
bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg1ODM0KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJh
Z0NvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2lu
L0RyYWdDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDgg
KzI3LDggQEAKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRHJhZ0Rh
dGEuaCIKLSNpbmNsdWRlICJ3aW5kb3dzLmgiIAotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIndpbmRvd3MuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcAkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMu
aCIKQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
LSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV0NEYXRhT2JqZWN0
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKQEAgLTM0LDcgKzM1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAg
LTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0
UnVuLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKQEAgLTE2OCw3ICsxNjgsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpkZXN0cm95KCkKICAgICAgICAgaWYgKGZpcnN0TGluZUJveCgpKSB7
CiAgICAgICAgICAgICAvLyBXZSBjYW4ndCB3YWl0IGZvciBSZW5kZXJCb3g6OmRlc3Ryb3kgdG8g
Y2xlYXIgdGhlIHNlbGVjdGlvbiwKICAgICAgICAgICAgIC8vIGJlY2F1c2UgYnkgdGhlbiB3ZSB3
aWxsIGhhdmUgbnVrZWQgdGhlIGxpbmUgYm94ZXMuCi0gICAgICAgICAgICAvLyBGSVhNRTogVGhl
IFNlbGVjdGlvbkNvbnRyb2xsZXIgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHdoZW4g
aXQKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgRnJhbWVTZWxlY3Rpb24gc2hvdWxkIGJlIHJl
c3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKICAgICAgICAgICAgIC8vIGlzIG5vdGlmaWVkIG9m
IERPTSBtdXRhdGlvbnMuCiAgICAgICAgICAgICBpZiAoaXNTZWxlY3Rpb25Cb3JkZXIoKSkKICAg
ICAgICAgICAgICAgICB2aWV3KCktPmNsZWFyU2VsZWN0aW9uKCk7CkBAIC0yNDE3LDE0ICsyNDE3
LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKIAogdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHksIENhcmV0VHlwZSB0eXBlKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlv
biA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQgPyBmcmFtZSgpLT5zZWxlY3Rpb24oKSA6IGZyYW1lKCkt
PnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSB0eXBlID09IEN1cnNvckNhcmV0ID8gZnJhbWUoKS0+c2VsZWN0aW9uKCkgOiBmcmFt
ZSgpLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKTsKIAotICAgIC8vIFBhaW50IHRoZSBj
YXJldCBpZiB0aGUgU2VsZWN0aW9uQ29udHJvbGxlciBzYXlzIHNvIG9yIGlmIGNhcmV0IGJyb3dz
aW5nIGlzIGVuYWJsZWQKKyAgICAvLyBQYWludCB0aGUgY2FyZXQgaWYgdGhlIEZyYW1lU2VsZWN0
aW9uIHNheXMgc28gb3IgaWYgY2FyZXQgYnJvd3NpbmcgaXMgZW5hYmxlZAogICAgIGJvb2wgY2Fy
ZXRCcm93c2luZyA9IGZyYW1lKCktPnNldHRpbmdzKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKS0+
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UGFpbnRlciA9
IHNlbGVjdGlvbi0+Y2FyZXRSZW5kZXJlcigpOwogICAgIGlmIChjYXJldFBhaW50ZXIgPT0gdGhp
cyAmJiAoc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpKSB7
CiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHBhaW50aW5nIG9mZnNldCBpbnRvIHRoZSBsb2NhbCBj
b29yZGluYXRlIHN5c3RlbSBvZiB0aGlzIHJlbmRlcmVyLAotICAgICAgICAvLyB0byBtYXRjaCB0
aGUgbG9jYWxDYXJldFJlY3QgY29tcHV0ZWQgYnkgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIKKyAg
ICAgICAgLy8gdG8gbWF0Y2ggdGhlIGxvY2FsQ2FyZXRSZWN0IGNvbXB1dGVkIGJ5IHRoZSBGcmFt
ZVNlbGVjdGlvbgogICAgICAgICBvZmZzZXRGb3JDb250ZW50cyh0eCwgdHkpOwogCiAgICAgICAg
IGlmICh0eXBlID09IEN1cnNvckNhcmV0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTM4
LDcgKzM5LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9u
IDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmRlc3Ryb3ko
KQogICAgICAgICBpZiAoZmlyc3RMaW5lQm94KCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNhbid0
IHdhaXQgZm9yIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95IHRvIGNsZWFyIHRoZSBzZWxl
Y3Rpb24sCiAgICAgICAgICAgICAvLyBiZWNhdXNlIGJ5IHRoZW4gd2Ugd2lsbCBoYXZlIG51a2Vk
IHRoZSBsaW5lIGJveGVzLgotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBTZWxlY3Rpb25Db250
cm9sbGVyIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcyB3aGVuIGl0CisgICAgICAgICAg
ICAvLyBGSVhNRTogVGhlIEZyYW1lU2VsZWN0aW9uIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3Ig
dGhpcyB3aGVuIGl0CiAgICAgICAgICAgICAvLyBpcyBub3RpZmllZCBvZiBET00gbXV0YXRpb25z
LgogICAgICAgICAgICAgaWYgKGlzU2VsZWN0aW9uQm9yZGVyKCkpCiAgICAgICAgICAgICAgICAg
dmlldygpLT5jbGVhclNlbGVjdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIK
QEAgLTgwLDcgKzgxLDYgQEAKICNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5j
bHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkV2ZW50UXVl
dWUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01Myw3
ICs1NCw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWUuaCIKICNpbmNsdWRlICJTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExp
c3QuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3RDaGlsZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAg
UmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OnJlbQogICAgIAogICAgIC8vIElm
IG9sZENoaWxkIGlzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgdGhlbiBjbGVh
ciB0aGUgc2VsZWN0aW9uIHRvCiAgICAgLy8gYXZvaWQgcHJvYmxlbXMgb2YgaW52YWxpZCBwb2lu
dGVycy4KLSAgICAvLyBGSVhNRTogVGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2hvdWxkIGJlIHJl
c3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKKyAgICAvLyBGSVhNRTogVGhlIEZyYW1lU2VsZWN0
aW9uIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcyB3aGVuIGl0CiAgICAgLy8gaXMgbm90
aWZpZWQgb2YgRE9NIG11dGF0aW9ucy4KICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVz
dHJveWVkKCkgJiYgb2xkQ2hpbGQtPmlzU2VsZWN0aW9uQm9yZGVyKCkpCiAgICAgICAgIG93bmVy
LT52aWV3KCktPmNsZWFyU2VsZWN0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNp
bmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKQEAgLTM2LDcgKzM3LDYgQEAKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRl
ICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24g
ODU4MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkV2
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00MCw3ICs0
MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxi
YXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0zNiw3ICszNyw2IEBACiAjaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJl
dmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpA
QCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKQEAgLTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJTVkdWaWV3
U3BlYy5oIgogI2luY2x1ZGUgIlNWR1pvb21FdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50
TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gODU4MzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lv
bnMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1RleHRRdWVyeS5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNjIsOCArMTYyLDggQEAgdm9pZCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogICAgIEFTU0VSVChkb2N1bWVudCgpKTsKICAgICBB
U1NFUlQoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBj
b250cm9sbGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFj
b250cm9sbGVyKQorICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBkb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRmluZCBzZWxlY3Rpb24gc3RhcnQKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lk
IFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG5jaGFyczsgKytpKQogICAgICAgICBlbmQgPSBlbmQubmV4dCgpOwogCi0gICAg
Y29udHJvbGxlci0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCkpOwor
ICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCkp
OwogfQogCiB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDg1ODQwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wNS0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVjdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMzQKKworICAgICAgICAq
IHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNl
bGVjdFdvcmRBcm91bmRDYXJldCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y2xlYXJGb2N1c2VkTm9kZSk6CisKIDIwMTEtMDUtMDQgIE1PUklUQSBI
YWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCB1bml0IHRl
c3Qgc2tpcCAoc3RhcnRQb3N0QW5kV2FpdE9uQ29uZGl0aW9uKQpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCkBAIC0xMjMsNyArMTI0LDYgQEAKICNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJT
dWJzdGl0dXRlRGF0YS5oIgpAQCAtMTM0NSwxMSArMTM0NSwxMSBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6c2VsZWN0V29yZEFyb3VuZFBvc2l0CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjpzZWxlY3RXb3Jk
QXJvdW5kQ2FyZXQoKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBm
cmFtZSgpLT5zZWxlY3Rpb24oKTsKLSAgICBBU1NFUlQoIWNvbnRyb2xsZXItPmlzTm9uZSgpKTsK
LSAgICBpZiAoY29udHJvbGxlci0+aXNOb25lKCkgfHwgY29udHJvbGxlci0+aXNSYW5nZSgpKQor
ICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAg
ICBBU1NFUlQoIXNlbGVjdGlvbi0+aXNOb25lKCkpOworICAgIGlmIChzZWxlY3Rpb24tPmlzTm9u
ZSgpIHx8IHNlbGVjdGlvbi0+aXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
c2VsZWN0V29yZEFyb3VuZFBvc2l0aW9uKGZyYW1lKCksIGNvbnRyb2xsZXItPnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpKTsKKyAgICBzZWxlY3RXb3JkQXJvdW5kUG9zaXRpb24oZnJhbWUoKSwg
c2VsZWN0aW9uLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xp
ZW50UHJveHkuaCIKQEAgLTg4LDcgKzg5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlNwZWVjaElucHV0Q2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgpAQCAtMTQzNiwxNyArMTQzNiwxNyBAQCBXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBs
Ojp0ZXh0SW5wdXRUCiAgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQogICAg
ICAgICByZXR1cm4gdHlwZTsKIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgRnJhbWVT
ZWxlY3Rpb24qIHNlbGVjdGlvbiA9IGZvY3VzZWQtPnNlbGVjdGlvbigpOworICAgIGlmICghc2Vs
ZWN0aW9uKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBj
b250cm9sbGVyLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgY29uc3QgTm9kZSogbm9k
ZSA9IHNlbGVjdGlvbi0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIHR5cGU7CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIHRleHQg
aW5wdXQgdHlwZXMgd2hlbiBuZWNlc3NhcnksIGVnLiBOdW1iZXIsCiAgICAgLy8gRGF0ZSwgRW1h
aWwsIFVSTCwgZXRjLgotICAgIGlmIChjb250cm9sbGVyLT5pc0luUGFzc3dvcmRGaWVsZCgpKQor
ICAgIGlmIChzZWxlY3Rpb24tPmlzSW5QYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHR5cGUgPSBX
ZWJUZXh0SW5wdXRUeXBlUGFzc3dvcmQ7CiAgICAgZWxzZSBpZiAobm9kZS0+c2hvdWxkVXNlSW5w
dXRNZXRob2QoKSkKICAgICAgICAgdHlwZSA9IFdlYlRleHRJbnB1dFR5cGVUZXh0OwpAQCAtMTQ2
MSwyMyArMTQ2MSwyMyBAQCBXZWJSZWN0IFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uQm91
CiAgICAgaWYgKCFmb2N1c2VkKQogICAgICAgICByZXR1cm4gcmVjdDsKIAotICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAo
IWNvbnRyb2xsZXIpCisgICAgRnJhbWVTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IGZvY3VzZWQtPnNl
bGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uKQogICAgICAgICByZXR1cm4gcmVjdDsKIAog
ICAgIGNvbnN0IEZyYW1lVmlldyogdmlldyA9IGZvY3VzZWQtPnZpZXcoKTsKICAgICBpZiAoIXZp
ZXcpCiAgICAgICAgIHJldHVybiByZWN0OwogCi0gICAgY29uc3QgTm9kZSogbm9kZSA9IGNvbnRy
b2xsZXItPmJhc2UoKS5jb250YWluZXJOb2RlKCk7CisgICAgY29uc3QgTm9kZSogbm9kZSA9IHNl
bGVjdGlvbi0+YmFzZSgpLmNvbnRhaW5lck5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZWN0OwogCi0gICAgaWYgKGNvbnRyb2xsZXIt
PmlzQ2FyZXQoKSkKLSAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJv
bGxlci0+YWJzb2x1dGVDYXJldEJvdW5kcygpKTsKLSAgICBlbHNlIGlmIChjb250cm9sbGVyLT5p
c1JhbmdlKCkpIHsKLSAgICAgICAgbm9kZSA9IGNvbnRyb2xsZXItPmV4dGVudCgpLmNvbnRhaW5l
ck5vZGUoKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgaWYgKHNlbGVjdGlvbi0+aXNDYXJldCgpKQorICAgICAgICBy
ZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhzZWxlY3Rpb24tPmFic29sdXRlQ2FyZXRCb3Vu
ZHMoKSk7CisgICAgZWxzZSBpZiAoc2VsZWN0aW9uLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgbm9k
ZSA9IHNlbGVjdGlvbi0+ZXh0ZW50KCkuY29udGFpbmVyTm9kZSgpOworICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIXJhbmdlKQogICAgICAgICAgICAgcmV0
dXJuIHJlY3Q7CiAgICAgICAgIHJlY3QgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGZvY3VzZWQt
PmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSkpOwpAQCAtMTUyMiwxMSAr
MTUyMiwxMSBAQCBib29sIFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uUmFuZ2UoCiAgICAg
aWYgKCFmb2N1c2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxlY3Rpb25Db250
cm9sbGVyKiBjb250cm9sbGVyID0gZm9jdXNlZC0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFjb250
cm9sbGVyKQorICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmb2N1c2VkLT5zZWxlY3Rp
b24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvbnRyb2xsZXItPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xNzEyLDkgKzE3MTIsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjbGVhckZvY3VzZWROb2Rl
KCkKICAgICBpZiAob2xkRm9jdXNlZE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJl
YVRhZykKICAgICAgICAgfHwgKG9sZEZvY3VzZWROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW5wdXRUYWcpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
b2xkRm9jdXNlZE5vZGUuZ2V0KCkpLT5pc1RleHRGaWVsZCgpKSkgewotICAgICAgICAvLyBDbGVh
ciB0aGUgc2VsZWN0aW9uLgotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIHNlbGVjdGlvbi0+Y2xlYXIoKTsKKyAgICAg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5jbGVhcigpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZwkocmV2aXNpb24gODU4NDApCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wNS0wNSAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVjdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMzQK
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KToK
KwogMjAxMS0wNS0wNCAgQ3JpcyBOZWNrYXIgIDxjZG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDg1ODM0KQor
KysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ2LDI1ICszNDYsMjUgQEAgYm9vbCBFZGl0b3JDbGllbnRFZmw6
OmhhbmRsZUVkaXRpbmdLZXlibwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7CiAgICAgICAgIHN3
aXRjaCAoa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CiAgICAgICAgIGNhc2Ug
VktfTEVGVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50
LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJhbWUtPnNl
bGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6
QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKICAgICAg
ICAgICAgICAgICAgICAgRGlyZWN0aW9uTGVmdCwKICAgICAgICAgICAgICAgICAgICAga2V5RXZl
bnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAog
ICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
RXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsCisgICAgICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLAogICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25SaWdodCwKICAgICAgICAgICAgICAg
ICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3Rlckdy
YW51bGFyaXR5LAogICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsCisg
ICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXko
KSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25Nb3ZlLAogICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25CYWNrd2FyZCwKICAg
ICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFy
aXR5IDogTGluZUdyYW51bGFyaXR5LAogICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgICAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRl
cmF0aW9uTW92ZSwKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2
ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCiAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlv
bkZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJh
Z3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwKICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTg1NykKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEx
LTA1LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9s
bGVyIHRvIEZyYW1lU2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDIzNAorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
OgorICAgICAgICAoZ2V0TG9jYXRpb25Gb3JLZXlib2FyZEdlbmVyYXRlZENvbnRleHRNZW51KToK
KwogMjAxMS0wNS0wNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBHVEsgYnVpbGQgZml4IGF0dGVtcHQgYWZ0ZXIgcjg1ODIzCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg0LDcgKzM4NCw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZm9yd2FyZF8K
IHN0YXRpYyBjb25zdCBpbnQgZ0NvbnRleHRNZW51TWFyZ2luID0gMTsKIHN0YXRpYyBJbnRQb2lu
dCBnZXRMb2NhdGlvbkZvcktleWJvYXJkR2VuZXJhdGVkQ29udGV4dE1lbnUoRnJhbWUqIGZyYW1l
KQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKTsKKyAgICBGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OwogICAgIGlmICghc2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJh
bmdlKCkKICAgICAgICAgIHx8IChzZWxlY3Rpb24tPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiAh
c2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSkgewogICAgICAgICBp
ZiAoTm9kZSogZm9jdXNlZE5vZGUgPSBnZXRGb2N1c2VkTm9kZShmcmFtZSkpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hh
aWt1L0NoYW5nZUxvZwkocmV2aXNpb24gODU4NDApCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA1LTA1ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1l
U2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MDIzNAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtleWJvYXJkRXZl
bnQpOgorCiAyMDExLTA1LTA0ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFpa3Uv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwCShyZXZp
c2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMjUgKzI2NywyNSBAQCB2b2lk
IEVkaXRvckNsaWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVktfTEVGVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFs
dGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwKKyAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtldmVudC0+c2hpZnRLZXkoKSA/
IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVy
YXRpb25Nb3ZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0
aW9uTGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+
Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlv
bigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8g
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJh
dGlvbk1vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3Rp
b25SaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+
Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJh
dGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAg
ICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25C
YWNrd2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+
Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9u
KCktPm1vZGlmeShrZXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRl
cmF0aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsCisgICAg
ICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXZlbnQtPnNoaWZ0S2V5KCkgPyBG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0
aW9uTW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlv
bkZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXZlbnQt
PmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA4NTg0MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA1LTA1ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25Db250cm9sbGVyIHRvIEZyYW1lU2VsZWN0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDIzNAor
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Jh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbjpn
cmFudWxhcml0eTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgor
CiAyMDExLTA1LTA0ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsMTIgKzY1MSwxMiBAQCAtIChCT09MKV9u
ZWVkc0xheW91dAogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCkgPyBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkgOiBmYWxzZTsKIH0KIAotLSAo
RE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooU2VsZWN0aW9uQ29u
dHJvbGxlcjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFNlbGVjdGlvbkRpcmVj
dGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFRleHRHcmFudWxhcml0eSlncmFudWxhcml0eQor
LSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooRnJhbWVTZWxl
Y3Rpb246OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihTZWxlY3Rpb25EaXJlY3Rp
b24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKIHsK
ICAgICBpZiAoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247Cisg
ICAgRnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogICAgIHJl
dHVybiBraXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHJldmlzaW9uIDg1
ODM0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJp
dmF0ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUG9zaXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0aW9u
Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiBAY2xhc3MgRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbjsKQEAgLTEzNiw3ICsxMzYsNyBAQCBAaW50ZXJmYWNlIFdlYkZy
YW1lIChXZWJJbnRlcm5hbCkKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJh
bmdlICopcmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2Ug
KilyYW5nZTsKIAotLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlv
bjooV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBk
aXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJp
dHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eTsKKy0gKERPTVJhbmdlICop
X3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
OjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uRGly
ZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KWdy
YW51bGFyaXR5OwogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2Uq
KXJhbmdlOwogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1Jhbmdl
KXJhbmdlOwogLSAoTlNSYW5nZSlfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAq
KXJhbmdlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShy
ZXZpc2lvbiA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRm9j
dXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVy
dGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgpAQCAtMTA3LDcgKzEwOCw2IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UZXh0Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gODU4
MzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJv
bGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIC0gKHZvaWQpZG9Db21w
bGV0aW9uCiAgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQgc3RlbQogICAgICAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3IF9mcmFtZV07CiAgICAgICAgIERPTVJhbmdlICpzZWxl
Y3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsKLSAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFs
dGVyaW5nQ3VycmVudFNlbGVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0
ZW5kCisgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmlu
Z0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAg
ICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rpb25CYWNrd2FyZCBncmFudWxhcml0eTpXb3JkR3JhbnVs
YXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdl
XTsKICAgICAgICAgW3ByZWZpeCBzZXRFbmQ6W3NlbGVjdGlvbiBzdGFydENvbnRhaW5lcl0gb2Zm
c2V0OltzZWxlY3Rpb24gc3RhcnRPZmZzZXRdXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2Vs
ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBAIC0xNTQs
NyArMTU1LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TY3JpcHRWYWx1ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bi5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSZXNvdXJjZURlY29kZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVGhyZWFkQ2hlY2suaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA4NTg0MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDUtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIFNlbGVjdGlvbkNvbnRyb2xsZXIgdG8gRnJhbWVTZWxlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjM0CisKKyAgICAgICAg
KiBBcGkvcXdlYmZyYW1lLmNwcDoKKwogMjAxMS0wNS0wNCAgQ3JpcyBOZWNrYXIgIDxjZG5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaWYgVVNFKEpT
QykKQEAgLTc0LDcgKzc1LDYgQEAKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAjaW5jbHVkZSAiU1ZH
U01JTEVsZW1lbnQuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgpJbmRleDogU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkocmV2aXNpb24gODU4NDApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0wNS0wNSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAy
MzQKKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorCiAyMDExLTA1LTA0ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4IGF0dGVtcHQg
YWZ0ZXIgcjg1ODIzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gODU4MzQpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVUcmVlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lV2luLmg+CkBAIC0xMjcsNyArMTI4LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGJhci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25D
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2ltcGxlRm9udERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N5c3RlbUluZm8uaD4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTg0MCkKKysrIFNvdXJjZS9XZWJL
aXQvd2luY2UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEt
MDUtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFNlbGVjdGlvbkNvbnRyb2xs
ZXIgdG8gRnJhbWVTZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwMjM0CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRXaW5DRS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudFdpbkNFOjpoYW5kbGVF
ZGl0aW5nS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDUtMDQgIENyaXMgTmVja2FyICA8Y2RuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogU291
cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRXaW5DRS5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktpdC93aW5jZS9XZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Niwy
NSArMzU2LDI1IEBAIGJvb2wgRWRpdG9yQ2xpZW50V2luQ0U6OmhhbmRsZUVkaXRpbmdLZXkKICAg
ICBpZiAoY2FyZXRCcm93c2luZykgewogICAgICAgICBzd2l0Y2ggKGtleUV2ZW50LT53aW5kb3dz
VmlydHVhbEtleUNvZGUoKSkgewogICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRl
cmF0aW9uTW92ZSwKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2
ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFt
ZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCiAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlv
bkxlZnQsCiAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3Jh
bnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKICAgICAgICAgICAgICAgICAgICAgdHJ1
ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgp
ID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4
dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKICAgICAgICAgICAgICAgICAg
ICAgRGlyZWN0aW9uUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5
KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKICAgICAgICAgICAg
ICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBW
S19VUDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5z
aGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLAorICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwKICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aW9uQmFja3dhcmQsCiAgICAgICAgICAgICAgICAgICAgIGtleUV2
ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwK
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgY2FzZSBWS19ET1dOOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
RXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsCisgICAgICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25N
b3ZlLAogICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25Gb3J3YXJkLAogICAgICAgICAgICAg
ICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5l
R3JhbnVsYXJpdHksCiAgICAgICAgICAgICAgICAgICAgIHRydWUpOwpJbmRleDogU291cmNlL1dl
YktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93eC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDg1ODQwKQorKysgU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNS0wNSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW5hbWUgU2VsZWN0aW9uQ29udHJvbGxlciB0byBGcmFtZVNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMzQKKworICAg
ICAgICAqIFdlYkRPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgICogV2ViRE9NU2VsZWN0aW9uLmg6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRXeC5jcHA6CisgICAgICAgICog
V2ViVmlldy5jcHA6CisKIDIwMTEtMDUtMDQgIENyaXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogU291cmNlL1dlYktp
dC93eC9XZWJET01TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gv
V2ViRE9NU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODU4MzQpCisrKyBTb3VyY2UvV2ViS2l0L3d4
L1dlYkRPTVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlICJXZWJET01TZWxlY3Rpb24uaCIKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIK
ICNpbmNsdWRlICJXZWJET01FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRE9NUmFuZ2UuaCIKIApJ
bmRleDogU291cmNlL1dlYktpdC93eC9XZWJET01TZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3d4L1dlYkRPTVNlbGVjdGlvbi5oCShyZXZpc2lvbiA4NTgzNCkKKysrIFNv
dXJjZS9XZWJLaXQvd3gvV2ViRE9NU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgV2ViRE9NUmFuZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uOwogCiB9CiAKQEAg
LTUxLDcgKzUxLDcgQEAgREVDTEFSRV9EWU5BTUlDX0NMQVNTKHd4V2ViS2l0RE9NU2VsZWN0aQog
CiBwdWJsaWM6CiAgICAgd3hXZWJLaXRTZWxlY3Rpb24oKSB7fQotICAgIHd4V2ViS2l0U2VsZWN0
aW9uKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbikKKyAgICB3eFdlYktp
dFNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uKQogICAgICAgICA6
IG1fc2VsZWN0aW9uKHNlbGVjdGlvbikgCiAgICAgICAgIHsgfQogICAgICAgICAKQEAgLTYyLDcg
KzYyLDcgQEAgcHVibGljOgogICAgIFdlYkRPTVJhbmdlKiBHZXRBc1JhbmdlKCk7CiAKIHByaXZh
dGU6Ci0gICAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciogbV9zZWxlY3Rpb247CisgICAg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIG1fc2VsZWN0aW9uOwogCiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gv
V2ViVmlldy5jcHAJKHJldmlzaW9uIDg1ODM0KQorKysgU291cmNlL1dlYktpdC93eC9XZWJWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgpA
QCAtNTMsNyArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZU1hbmFnZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
dWJzdGl0dXRlRGF0YS5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgpJbmRleDogU291cmNlL1dl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3BwCShyZXZpc2lv
biA4NTgzNCkKKysrIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFZGl0b3Iu
aCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTM4LDcgKzM5
LDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCg==
</data>
<flag name="review"
          id="85400"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>